import ./make-test-python.nix ({ lib, pkgs, ... }: { name = "loki"; meta = with lib.maintainers; { maintainers = [ willibutz ]; }; nodes.machine = { ... }: { services.loki = { enable = true; configFile = "${pkgs.grafana-loki.src}/cmd/loki/loki-local-config.yaml"; }; services.promtail = { enable = true; configuration = { server = { http_listen_port = 9080; grpc_listen_port = 0; }; clients = [ { url = "http://localhost:3100/loki/api/v1/push"; } ]; scrape_configs = [ { job_name = "system"; static_configs = [ { targets = [ "localhost" ]; labels = { job = "varlogs"; __path__ = "/var/log/*log"; }; } ]; } ]; }; }; }; testScript = '' machine.start machine.wait_for_unit("loki.service") machine.wait_for_unit("promtail.service") machine.wait_for_open_port(3100) machine.wait_for_open_port(9080) machine.succeed("echo 'Loki Ingestion Test' > /var/log/testlog") # should not have access to journal unless specified machine.fail( "systemctl show --property=SupplementaryGroups promtail | grep -q systemd-journal" ) machine.wait_until_succeeds( "${pkgs.grafana-loki}/bin/logcli --addr='http://localhost:3100' query --no-labels '{job=\"varlogs\",filename=\"/var/log/testlog\"}' | grep -q 'Loki Ingestion Test'" ) ''; })