{ config, pkgs, lib, ... }: with lib; let hostname = config.networking.hostName; cfg = config.services.blackbox-exporter; nginxVHosts = config.services.nginx.virtualHosts or {}; allDomains = (lib.attrNames nginxVHosts) ++ [ "foundry-vtt.cloonar.com" ]; filteredDomains = builtins.filter (d: !builtins.elem d cfg.blacklistDomains) allDomains; httpsDomains = lib.map (d: "https://${d}") filteredDomains; domainsString = builtins.concatStringsSep "\n " (map (d: "\"${d}\",") httpsDomains); in { options.services.blackbox-exporter.blacklistDomains = mkOption { type = types.listOf types.str; default = []; description = "List of domains to monitor with Blackbox Exporter"; }; config = { services.blackbox-exporter = { blacklistDomains = [ "autoconfig.cloonar.com" "cloonar.dev" "loki.cloonar.com" "stage.korean-skin.care" "victoria-server.cloonar.com" "updns.cloonar.com" "feeds.jordanrannells.com" ]; }; # Systemd service for Blackbox Exporter systemd.services.blackbox-exporter = { description = "Blackbox Exporter"; after = [ "network-online.target" ]; wantedBy = [ "multi-user.target" ]; serviceConfig.ExecStart = '' ${pkgs.prometheus-blackbox-exporter}/bin/blackbox_exporter \ --config.file=/etc/blackbox_exporter/blackbox.yml ''; }; # Configuration file for Blackbox Exporter environment.etc."blackbox_exporter/blackbox.yml".text = '' modules: http_200_final: prober: http http: method: GET follow_redirects: true preferred_ip_protocol: "ip4" # <-- important: avoid blanket IPv6 failures # optional: if you want to prefer v6 but fall back to v4, add: # ip_protocol_fallback: true valid_http_versions: ["HTTP/1.1", "HTTP/2.0"] # tidy, not required but nice valid_status_codes: [200] ''; # Add scrape config for VictoriaMetrics agent services.victoriametrics.extraScrapeConfigs = [ '' - job_name: "blackbox_http_all_domains" metrics_path: "/probe" params: module: ["http_200_final"] static_configs: - targets: [ ${domainsString} ] relabel_configs: - source_labels: ["__address__"] target_label: "__param_target" regex: '(.*)' replacement: "$1" - source_labels: ["__param_target"] target_label: "instance" - target_label: "__address__" replacement: "127.0.0.1:9115" - source_labels: ["__address__"] regex: "127\\.0\\.0\\.1:9115" target_label: "__scheme__" replacement: "http" '' ]; }; }