{ config, pkgs, ... }: let cfg = config.services.loki; saveDirectory = "/tank/services/metrics/loki"; in { services.loki = { enable = true; dataDir = saveDirectory; configuration = { auth_enabled = false; server = { http_listen_port = 3100; http_listen_address = "0.0.0.0"; grpc_listen_port = 9096; }; ingester = { wal = { enabled = true; dir = "${saveDirectory}/wal"; }; lifecycler = { address = "127.0.0.1"; ring = { kvstore = { store = "inmemory"; }; replication_factor = 1; }; final_sleep = "0s"; }; chunk_idle_period = "1h"; }; schema_config = { configs = [ { from = "2022-12-01"; store = "boltdb-shipper"; object_store = "filesystem"; schema = "v11"; index = { prefix = "index_"; period = "24h"; }; } ]; }; storage_config = { boltdb_shipper = { active_index_directory = "${saveDirectory}/boltdb-shipper-index"; cache_location = "${saveDirectory}/boltdb-shipper-cache"; shared_store = "filesystem"; cache_ttl = "24h"; }; filesystem = { directory = "${saveDirectory}/chunks"; }; }; limits_config = { enforce_metric_name = false; reject_old_samples = true; reject_old_samples_max_age = "72h"; }; compactor = { working_directory = "${saveDirectory}/compactor"; shared_store = "filesystem"; }; }; }; networking.firewall.allowedTCPPorts = [ cfg.configuration.server.http_listen_port ]; }