diff --git a/morph/grid/local/grid.nix b/morph/grid/local/grid.nix index da8a83812ceba910280bfc61210487b2f217113f..15fbb01061a664c1fbd2b03fe25be2fe1d14cbe0 100644 --- a/morph/grid/local/grid.nix +++ b/morph/grid/local/grid.nix @@ -121,7 +121,7 @@ let grid.monitoringvpnIPv4 = "172.23.23.1"; grid.publicIPv4 = "192.168.56.24"; grid.monitoring = { - inherit paymentExporterTargets blackboxExporterHttpsTargets; + inherit blackboxExporterHttpsTargets; inherit (grid-config) monitoringDomains; googleOAuthClientID = grid-config.monitoringGoogleOAuthClientID; enableSlackAlert = false; @@ -131,7 +131,6 @@ let }; # TBD: derive these automatically: - paymentExporterTargets = [ "payments" ]; blackboxExporterHttpsTargets = [ # "https://private.storage/" # "https://payments.private.storage/" diff --git a/morph/grid/production/grid.nix b/morph/grid/production/grid.nix index ab45d4ba7f67e71383d28120bd925ac3a05f04ef..3a309dc8a0a3fe480def44e178769e390f5c6dd9 100644 --- a/morph/grid/production/grid.nix +++ b/morph/grid/production/grid.nix @@ -53,7 +53,7 @@ let config = { grid.monitoringvpnIPv4 = "172.23.23.1"; grid.monitoring = { - inherit paymentExporterTargets blackboxExporterHttpsTargets; + inherit blackboxExporterHttpsTargets; inherit (grid-config) monitoringDomains; googleOAuthClientID = grid-config.monitoringGoogleOAuthClientID; enableSlackAlert = true; @@ -114,7 +114,6 @@ let storage005 = { vpnIP = "172.23.23.25"; stateVersion = "19.03"; }; }; - paymentExporterTargets = [ "payments" ]; blackboxExporterHttpsTargets = [ "https://private.storage/" "https://www.private.storage/" diff --git a/morph/grid/testing/grid.nix b/morph/grid/testing/grid.nix index 19839ae83fa16c31adf0fcd9e3727a8304f8dd6c..01ba9f02fe06c272a5e2ed310d96b6c80eac8f5d 100644 --- a/morph/grid/testing/grid.nix +++ b/morph/grid/testing/grid.nix @@ -69,7 +69,7 @@ let config = { grid.monitoringvpnIPv4 = "172.23.23.1"; grid.monitoring = { - inherit paymentExporterTargets blackboxExporterHttpsTargets; + inherit blackboxExporterHttpsTargets; inherit (grid-config) monitoringDomains; googleOAuthClientID = grid-config.monitoringGoogleOAuthClientID; enableSlackAlert = true; @@ -79,7 +79,6 @@ let }; # TBD: derive these automatically: - paymentExporterTargets = [ "payments" ]; blackboxExporterHttpsTargets = [ "https://privatestorage-staging.com/" "https://www.privatestorage-staging.com/" diff --git a/morph/lib/issuer.nix b/morph/lib/issuer.nix index 1f715171625d75175d9c962160e4773d9c6765d2..428a23bfda05e2f100df0d6afea40592de8c4cbf 100644 --- a/morph/lib/issuer.nix +++ b/morph/lib/issuer.nix @@ -48,6 +48,7 @@ in { }; }; }; + grid.monitoring.httpsScrapePorts = [ 443 ]; services.private-storage-issuer = { enable = true; tls = true; diff --git a/morph/lib/monitored-node.nix b/morph/lib/monitored-node.nix index b4e1f47ea1cf192f9470e6ffc2316cfcf8ec8b0a..8739dced771de09ca98662582a9be9380b699457 100644 --- a/morph/lib/monitored-node.nix +++ b/morph/lib/monitored-node.nix @@ -2,6 +2,12 @@ let inherit (config.grid) publicKeyPath privateKeyPath monitoringvpnEndpoint monitoringvpnIPv4; in { + options.grid.monitoring = { + httpsScrapePorts = lib.mkOption { + default = []; + # TODO + }; + }; config = { deployment = { secrets = { diff --git a/morph/lib/monitoring.nix b/morph/lib/monitoring.nix index 7115efbaa71606ecc5bc03bf22ccfc568c564448..3c98a80ad1afc52287c7a5f4971aea80d2708357 100644 --- a/morph/lib/monitoring.nix +++ b/morph/lib/monitoring.nix @@ -10,6 +10,7 @@ let inherit name; vpnIPv4 = node.config.grid.monitoringvpnIPv4; vpnHostName = "${name}.monitoringvpn"; + httpsScrapeTargets = map (port: "${vpnHostName}:${toString port}") node.config.grid.monitoring.httpsScrapePorts or []; hostNames = [name vpnHostName]; }) nodes; @@ -25,6 +26,7 @@ let # A list of VPN clients (IP addresses or hostnames) as strings indicating # which nodes to scrape "nodeExporter" metrics from. nodeExporterTargets = map (node: node.name) monitoringHosts; + httpsExporterTargets = lib.concatMap (node: node.httpsScrapeTargets) monitoringHosts; in { imports = [ ../../nixos/modules/monitoring/vpn/server.nix @@ -36,14 +38,6 @@ in { ]; options.grid.monitoring = { - paymentExporterTargets = lib.mkOption { - type = lib.types.listOf lib.types.str; - description = '' - A list of VPN clients (IP addresses or hostnames) as strings indicating - which nodes to scrape PaymentServer metrics from. - ''; - }; - blackboxExporterHttpsTargets = lib.mkOption { type = lib.types.listOf lib.types.str; description = '' @@ -151,9 +145,8 @@ in { }; services.private-storage.monitoring.prometheus = { - inherit nodeExporterTargets; - inherit (cfg) paymentExporterTargets blackboxExporterHttpsTargets; - nginxExporterTargets = []; + inherit nodeExporterTargets httpsExporterTargets; + inherit (cfg) blackboxExporterHttpsTargets; }; services.private-storage.monitoring.grafana = { diff --git a/nixos/modules/monitoring/server/prometheus.nix b/nixos/modules/monitoring/server/prometheus.nix index 3bb00a5b95855859e455b5df8fb065b3d70bc855..799a12ccc0d3177c31aa42f112b1b084b3467828 100644 --- a/nixos/modules/monitoring/server/prometheus.nix +++ b/nixos/modules/monitoring/server/prometheus.nix @@ -21,15 +21,10 @@ in { example = [ "node1" "node2" ]; description = "List of nodes (hostnames or IPs) to scrape."; }; - nginxExporterTargets = lib.mkOption { + httpsExporterTargets = lib.mkOption { type = with lib.types; listOf str; - example = [ "node1" "node2" ]; - description = "List of nodes (hostnames or IPs) to scrape."; - }; - paymentExporterTargets = lib.mkOption { - type = with lib.types; listOf str; - example = [ "node1" "node2" ]; - description = "List of nodes (hostnames or IPs) to scrape."; + example = [ "node1:443" "node2:9090" ]; + description = "List of nodes (hostnames or IPs) and ports to scrape."; }; blackboxExporterHttpsTargets = lib.mkOption { type = with lib.types; listOf str; @@ -53,20 +48,13 @@ in { relabel_configs = [ dropPortNumber ]; } { - job_name = "nginx-exporters"; - static_configs = [{ - targets = map (x: x + ":" + (toString exportersCfg.nginx.port)) cfg.nginxExporterTargets; - }]; - relabel_configs = [ dropPortNumber ]; - } - { - job_name = "payment-exporters"; + job_name = "https-exporters"; scheme = "https"; tls_config.insecure_skip_verify = true; static_configs = [{ # Explicitly setting the port number so the relabel_config can filter it out again. # Leaving it out makes the port number show in Grafana. - targets = map (x: x + ":443") cfg.paymentExporterTargets; + targets = cfg.httpsExporterTargets; }]; relabel_configs = [ dropPortNumber ]; }