76 lines
2.7 KiB
Nix
76 lines
2.7 KiB
Nix
{ config, pkgs, modulesPath, lib, ... }:
|
|
|
|
let
|
|
monitor_ip = "monitor.lab";
|
|
traefik_ip = "traefik.lab";
|
|
sandbox_ip = "sandbox.lab";
|
|
forgejo_ip = "forgejo.lab";
|
|
dnsmasq_ip = "dns.lab";
|
|
|
|
prometheus_exporter_port = 9100;
|
|
postgres_exporter_port = 9187;
|
|
prometheus_port = 9090;
|
|
alertmanager_port = 9093;
|
|
grafana_port = 3000;
|
|
promtail_port = 9080;
|
|
traefik_monitor_port = 8082;
|
|
forgejo_monitor_port = 3000;
|
|
dnsmasq_exporter_port = 9153;
|
|
|
|
exporters = {
|
|
node = [
|
|
"${monitor_ip}:${toString prometheus_exporter_port}"
|
|
"${traefik_ip}:${toString prometheus_exporter_port}"
|
|
"${sandbox_ip}:${toString prometheus_exporter_port}"
|
|
"${forgejo_ip}:${toString prometheus_exporter_port}"
|
|
];
|
|
promtail = [
|
|
"${monitor_ip}:${toString promtail_port}"
|
|
"${traefik_ip}:${toString promtail_port}"
|
|
"${sandbox_ip}:${toString promtail_port}"
|
|
"${forgejo_ip}:${toString promtail_port}"
|
|
];
|
|
grafana = [ "${monitor_ip}:${toString grafana_port}" ];
|
|
prometheus = [ "${monitor_ip}:${toString prometheus_port}" ];
|
|
alertmanager = [ "${monitor_ip}:${toString alertmanager_port}" ];
|
|
traefik = [ "${traefik_ip}:${toString traefik_monitor_port}" ];
|
|
gitea = [ "${forgejo_ip}:${toString forgejo_monitor_port}" ];
|
|
postgres = [ "${forgejo_ip}:${toString postgres_exporter_port}" ];
|
|
|
|
dnsmasq = [ "${dnsmasq_ip}:${toString dnsmasq_exporter_port}" ];
|
|
};
|
|
|
|
|
|
in {
|
|
networking.firewall.allowedTCPPorts = [ 9090 ];
|
|
|
|
services.prometheus = {
|
|
enable = true;
|
|
retentionTime = "7d";
|
|
globalConfig = {
|
|
scrape_timeout = "10s";
|
|
scrape_interval = "30s";
|
|
# A short evaluation_interval will check alerting rules very often.
|
|
# It can be costly if you run Prometheus with 100+ alerts.
|
|
evaluation_interval = "20s";
|
|
};
|
|
extraFlags = [
|
|
"--web.enable-admin-api"
|
|
];
|
|
|
|
scrapeConfigs = lib.mapAttrsToList (job_name: targets: {
|
|
inherit job_name;
|
|
static_configs = [ { inherit targets; } ];
|
|
}) exporters;
|
|
|
|
# 🔔 Alerts provisioning
|
|
ruleFiles = [
|
|
(pkgs.writeText "prometheus-alerts.yml" (builtins.readFile ./provisioning/alerts/prometheus-alerts.yml))
|
|
(pkgs.writeText "loki-alerts.yml" (builtins.readFile ./provisioning/alerts/loki-alerts.yml))
|
|
(pkgs.writeText "promtail-alerts.yml" (builtins.readFile ./provisioning/alerts/promtail-alerts.yml))
|
|
(pkgs.writeText "postgres-alerts.yml" (builtins.readFile ./provisioning/alerts/postgres-alerts.yml))
|
|
(pkgs.writeText "traefik-alerts.yml" (builtins.readFile ./provisioning/alerts/traefik-alerts.yml))
|
|
(pkgs.writeText "node-exporter-alerts.yml" (builtins.readFile ./provisioning/alerts/node-exporter-alerts.yml))
|
|
];
|
|
};
|
|
}
|