151 lines
4.1 KiB
Nix
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";
|
|
### ##};
|
|
### };
|
|
### };
|
|
###};
|
|
|
|
}
|