1 { config, pkgs, name, ... }:
3 # CREATE INDEX ON LOGS (tag);
4 # CREATE INDEX ON LOGS (time);
5 # CREATE INDEX ON LOGS (((data->>'PRIORITY')::int));
6 # CREATE INDEX ON LOGS ((data->>'_SYSTEMD_UNIT'));
7 # CREATE INDEX ON LOGS ((data->>'SYSLOG_IDENTIFIER'));
14 tag = "${name}.systemd";
15 DB = "/var/lib/fluentbit/fluent-bit.db";
21 match = "${name}.systemd";
23 labels = "job=fluentbit, server=${name}, priority=$PRIORITY, syslog_identifier=$SYSLOG_IDENTIFIER, systemd_unit=$_SYSTEMD_UNIT";
28 host = "/run/postgresql";
31 database = "fluentbit";
32 timestamp_key = "event_timestamp";
37 yamlFormat = pkgs.formats.yaml {};
38 psqlVersion = pkgs.postgresql_13.psqlSchema;
41 disko.devices.zpool.zfast.datasets."root/persist/var/lib/loki" =
42 { type = "zfs_fs"; mountpoint = "/persist/zfast/var/lib/loki"; options.mountpoint = "legacy"; };
43 disko.devices.zpool.zfast.datasets."root/persist/var/lib/fluentbit" =
44 { type = "zfs_fs"; mountpoint = "/persist/zfast/var/lib/fluentbit"; options.mountpoint = "legacy"; };
45 disko.devices.zpool.zfast.datasets."root/persist/var/lib/postgresql" =
46 { type = "zfs_fs"; mountpoint = "/persist/zfast/var/lib/postgresql"; options.mountpoint = "legacy"; };
47 disko.devices.zpool.zfast.datasets."root/persist/var/lib/postgresql/${psqlVersion}" =
48 { type = "zfs_fs"; mountpoint = "/persist/zfast/var/lib/postgresql/${psqlVersion}"; options.mountpoint = "legacy"; };
49 environment.persistence."/persist/zfast".directories = [
51 directory = "/var/lib/postgresql";
52 user = config.users.users.postgres.name;
53 group = config.users.users.postgres.group;
57 directory = "/var/lib/fluentbit";
58 user = config.users.users.fluentbit.name;
59 group = config.users.users.fluentbit.group;
63 directory = "/var/lib/loki";
64 user = config.users.users.loki.name;
65 group = config.users.users.loki.group;
70 ids.uids.fluentbit = 500;
71 ids.gids.fluentbit = 500;
72 users.users.fluentbit = {
74 home = "/var/lib/fluentbit";
75 uid = config.ids.uids.fluentbit;
78 extraGroups = [ "systemd-journal" ];
80 users.groups.fluentbit.gid = config.ids.gids.fluentbit;
87 ring.kvstore.store = "inmemory";
88 ring.instance_addr = "127.0.0.1";
89 replication_factor = 1;
90 path_prefix = "/var/lib/loki";
92 server.log_level = "warn";
94 reject_old_samples = false;
95 ingestion_rate_mb = 100;
96 ingestion_burst_size_mb = 200;
97 per_stream_rate_limit = "100MB";
98 per_stream_rate_limit_burst = "200MB";
101 schema_config.configs = [
104 store = "boltdb-shipper";
105 object_store = "filesystem";
107 index.prefix = "index_";
108 index.period = "24h";
113 services.postgresql = {
115 package = pkgs.postgresql_13;
116 ensureDatabases = [ "fluentbit" ];
120 ensurePermissions."DATABASE \"fluentbit\"" = "ALL PRIVILEGES";
125 environment.systemPackages = [
128 systemd.services.fluent-bit = {
129 description = "Fluent-bit daemon";
130 wantedBy = [ "multi-user.target" ];
132 ExecStart = "${pkgs.fluent-bit}/bin/fluent-bit -c ${yamlFormat.generate "fluent.yaml" fluent-bit-config}";
135 SupplementaryGroups = [ "systemd-journal" ];