{ config, pkgs, ... }: let lokiHost = "192.168.1.174:3100"; in { systemd.services.promtail.serviceConfig = { SupplementaryGroups = [ "docker" ]; }; environment.systemPackages = with pkgs; [ (pkgs.writeShellScriptBin "promtail-check" "systemctl status promtail.service") (pkgs.writeShellScriptBin "promtail-watch" "journalctl -u promtail.service -b -n 25 -f") ]; services.promtail = { enable = true; configuration = { server = { http_listen_port = 3031; grpc_listen_port = 0; }; positions = { filename = "/tmp/positions.yaml"; }; clients = [{url = "http://${lokiHost}/loki/api/v1/push";}]; scrape_configs = [ { job_name = "journal"; journal = { max_age = "24h"; path = "/var/log/journal"; json = true; # matches: _TRANSPORT=kernel; labels = { job = "systemd-journal"; host = config.networking.hostName; # Dynamically fetch the hostname }; }; relabel_configs = [ { source_labels = [ "__journal__systemd_unit" ]; target_label = "unit"; } ]; } { job_name = "flog_scrape"; docker_sd_configs = [ { host = "unix:///var/run/docker.sock"; refresh_interval = "5s"; } ]; relabel_configs = [ { source_labels = [ "__meta_docker_container_name" ]; regex = "/(.*)"; target_label = "container"; } { source_labels = [ "__meta_docker_container_label_com_docker_compose_oneoff" ]; target_label = "oneoff"; } { source_labels = [ "__meta_docker_container_label_com_docker_compose_project_config_files" ]; target_label = "compose_file"; } { source_labels = [ "__meta_docker_container_label_com_docker_compose_project" ]; target_label = "project_name"; } { source_labels = [ "__meta_docker_container_label_com_docker_compose_service" ]; target_label = "service"; } { target_label = "host"; replacement = "${config.networking.hostName}"; } ]; } ]; }; # extraFlags }; }