diff --git a/lib/monitoring.nix b/lib/monitoring.nix index b10703b..4a96eb6 100644 --- a/lib/monitoring.nix +++ b/lib/monitoring.nix @@ -94,7 +94,15 @@ let }) (externalTargets.nodeExporter or [ ]); - allEntries = flakeEntries ++ externalEntries; + # Node-exporter-only external targets (no systemd-exporter) + externalOnlyEntries = map + (target: { + inherit target; + labels = { hostname = extractHostnameFromTarget target; }; + }) + (externalTargets.nodeExporterOnly or [ ]); + + allEntries = flakeEntries ++ externalEntries ++ externalOnlyEntries; # Group entries by their label set for efficient static_configs # Convert labels attrset to a string key for grouping @@ -203,7 +211,18 @@ let in flakeScrapeConfigs ++ externalScrapeConfigs; + # Generate systemd-exporter targets (excludes nodeExporterOnly hosts) + generateSystemdExporterTargets = self: externalTargets: + let + nodeTargets = generateNodeExporterTargets self (externalTargets // { nodeExporterOnly = [ ]; }); + in + map + (cfg: cfg // { + targets = map (t: builtins.replaceStrings [ ":9100" ] [ ":9558" ] t) cfg.targets; + }) + nodeTargets; + in { - inherit extractHostMonitoring generateNodeExporterTargets generateScrapeConfigs; + inherit extractHostMonitoring generateNodeExporterTargets generateScrapeConfigs generateSystemdExporterTargets; } diff --git a/services/monitoring/external-targets.nix b/services/monitoring/external-targets.nix index 2db115d..82eff29 100644 --- a/services/monitoring/external-targets.nix +++ b/services/monitoring/external-targets.nix @@ -3,6 +3,9 @@ { nodeExporter = [ "gunter.home.2rjus.net:9100" + ]; + # Hosts with node-exporter but no systemd-exporter + nodeExporterOnly = [ "pve1.home.2rjus.net:9100" ]; scrapeConfigs = [ diff --git a/services/victoriametrics/default.nix b/services/victoriametrics/default.nix index 6275edc..256f269 100644 --- a/services/victoriametrics/default.nix +++ b/services/victoriametrics/default.nix @@ -4,6 +4,7 @@ let externalTargets = import ../monitoring/external-targets.nix; nodeExporterTargets = monLib.generateNodeExporterTargets self externalTargets; + systemdExporterTargets = monLib.generateSystemdExporterTargets self externalTargets; autoScrapeConfigs = monLib.generateScrapeConfigs self externalTargets; # TLS endpoints to monitor for certificate expiration via blackbox exporter @@ -70,14 +71,10 @@ let job_name = "node-exporter"; static_configs = nodeExporterTargets; } - # Systemd exporter on all hosts (same targets, different port) + # Systemd exporter on hosts that have it (excludes nodeExporterOnly hosts) { job_name = "systemd-exporter"; - static_configs = map - (cfg: cfg // { - targets = map (t: builtins.replaceStrings [ ":9100" ] [ ":9558" ] t) cfg.targets; - }) - nodeExporterTargets; + static_configs = systemdExporterTargets; } # Local monitoring services {