infra/nix/hosts/loki/modules/promtail/promtail.nix
2026-01-05 23:09:19 +01:00

87 lines
2.3 KiB
Nix

{
config,
pkgs,
...
}: let
svc = "promtail.service";
in {
systemd = {
services = {
promtail = {
description = "Promtail service for Loki";
wantedBy = ["multi-user.target"];
serviceConfig = {
ExecStart = ''
${pkgs.grafana-loki}/bin/promtail --config.file ${./promtail.yaml}
'';
TimeoutStopSec = 5;
RestartSec = 90;
# Restart = "always";
Restart = "on-failure";
};
};
promtail-watcher = {
description = "Promtail watcher";
wantedBy = ["multi-user.target"];
serviceConfig = {
Type = "oneshot";
ExecStart = "systemctl restart ${svc}";
};
};
};
paths.promtail-watcher = {
pathConfig = {
# PathChanged = config.sops.templates.promtail.path;
PathChanged = ./promtail.yaml;
};
wantedBy = ["paths.target"];
};
};
sops.templates = {
#promtail.content = ''
# server:
# http_listen_port: 28183
# grpc_listen_port: 0
# positions:
# filename: /var/tmp/positions.yaml
# clients:
# # - url: https://logs.${config.sops.placeholder.domainName}/loki/api/v1/push
# - url: http://127.0.0.1:3100/loki/api/v1/push
# tenant_id:
# backoff_config:
# min_period: 1000ms
# max_period: 10s
# max_retries: 10000
# scrape_configs:
# - job_name: journal
# journal:
# #max_age: 168h
# # max_age: 968h
# max_age: 14400h
# labels:
# job: systemd-journal
# relabel_configs:
# - source_labels: ["__journal__systemd_unit"]
# target_label: "unit"
# - source_labels: ['__journal__hostname']
# target_label: nodename
# - source_labels: ['__journal_syslog_identifier']
# target_label: syslog_identifier
# - action: drop
# # drop this because of excessive logging
# regex: '.*tailscale.*'
# source_labels: ['__journal__systemd_unit', 'unit']
# - action: drop
# # drop this because of excessive logging
# regex: '.*zfs-zed.*'
# source_labels: ['__journal__systemd_unit', 'unit', 'syslog_identifier']
#'';
};
}