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

151 lines
4.1 KiB
Nix

{
config,
lib,
pkgs,
...
}:
let
svc = "promtail.service";
in {
sops = {
templates = {
promtail.content = ''
server:
# http_listen_port: 28183
http_listen_port: 0
grpc_listen_port: 0
disable: false
# disable: true
positions:
filename: /var/tmp/positions.yaml
clients:
- url: https://logs.${config.sops.placeholder.domainName}/loki/api/v1/push
tenant_id: ""
backoff_config:
min_period: 1000ms
max_period: 5m
max_retries: 10000
scrape_configs:
- job_name: journal
journal:
#max_age: 168h
#max_age: 968h
#max_age: 1440h
max_age: 2440h
# max_age: 14400h
labels:
job: systemd-journal
host: ${config.networking.hostName}
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
# drop these because of excessive logging
- action: drop
regex: '.*tailscale.*'
source_labels: ['__journal__systemd_unit', 'unit']
- action: drop
regex: '.*zfs-zed.*'
source_labels: ['__journal__systemd_unit', 'unit', 'syslog_identifier']
- action: drop
regex: '.*zed.*'
source_labels: ['__journal__systemd_unit', 'unit', 'syslog_identifier']
- job_name: caddy
static_configs:
- targets:
- localhost
labels:
job: caddy
host: ${config.networking.hostName}
__path__: /var/log/caddy/*log
agent: caddy-promtail
pipeline_stages:
- json:
expressions:
duration: duration
status: status
- labels:
duration:
status:
'';
};
};
systemd = {
services = {
promtail = {
description = "Promtail service for Loki";
wantedBy = ["multi-user.target"];
serviceConfig = {
ExecStart = ''
${pkgs.grafana-loki}/bin/promtail --config.file ${config.sops.templates.promtail.path}
'';
TimeoutStopSec = "5s";
RestartSec = 90;
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;
};
wantedBy = ["paths.target"];
};
};
# users.users.promtail.extraGroups = ["systemd-journald"];
###services.vector = {
### enable = true;
### journaldAccess = true;
### settings = {
### sources = {
### journald.type = "journald";
### vector_metrics.type = "internal_metrics";
### };
### sinks = {
### loki = {
### type = "loki";
### inputs = [ "journald" ];
### endpoint = "https://${domain}";
### encoding = { codec = "json"; };
### labels = {
### source = "journald";
### job = "systemd-journald";
### host= config.networking.hostName;
### };
### # https://vector.dev/docs/reference/configuration/sinks/loki/#request.concurrency
### request.concurrency = "adaptive";
### };
### ##prometheus_exporter = {
### ## type = "prometheus_exporter";
### ## inputs = [ "vector_metrics" ];
### ## address = "[::]:9598";
### ##};
### };
### };
###};
}