diff --git a/machines/dolomite/common.nix b/machines/dolomite/common.nix index 3840592..65b10c7 100644 --- a/machines/dolomite/common.nix +++ b/machines/dolomite/common.nix @@ -26,6 +26,7 @@ enable = true; node.enable = true; blackbox.enable = true; + v2ray.enable = true; }; custom.monitoring = { diff --git a/machines/thorite/monitoring.nix b/machines/thorite/monitoring.nix index dd3b693..981fd14 100644 --- a/machines/thorite/monitoring.nix +++ b/machines/thorite/monitoring.nix @@ -165,6 +165,11 @@ in hostAddress = "fra-00.coho-tet.ts.net"; targetAddresses = chinaTargets; } + ]) + ++ (mkV2rayScrapes [ + { address = "la-00.coho-tet.ts.net"; } + { address = "hk-00.coho-tet.ts.net"; } + { address = "fra-00.coho-tet.ts.net"; } ]); }; diff --git a/modules/nixos/common-settings/proxy-server.nix b/modules/nixos/common-settings/proxy-server.nix index f82f91f..2384900 100644 --- a/modules/nixos/common-settings/proxy-server.nix +++ b/modules/nixos/common-settings/proxy-server.nix @@ -1,5 +1,6 @@ { config, + pkgs, lib, ... }: @@ -114,7 +115,24 @@ let } ]); }; + experimental = { + v2ray_api = { + listen = "127.0.0.1:15175"; + stats = { + users = map (u: u.name) users; + enabled = true; + inbounds = map (p: "sg" + toString p) (lib.range 0 4); + }; + }; + }; }; + sing-box = pkgs.sing-box.overrideAttrs ( + finalAttrs: previousAttrs: { + tags = previousAttrs.tags ++ [ + "with_v2ray_api" + ]; + } + ); in { options.commonSettings.proxyServer = { @@ -166,6 +184,7 @@ in services.sing-box = { enable = true; + package = sing-box; settings = ( mkSingConfig ( map (n: { diff --git a/modules/nixos/monitor/default.nix b/modules/nixos/monitor/default.nix index ae366d1..71ec05e 100644 --- a/modules/nixos/monitor/default.nix +++ b/modules/nixos/monitor/default.nix @@ -57,6 +57,13 @@ in default = "${config.networking.hostName}.coho-tet.ts.net"; }; }; + v2ray = { + enable = mkEnableOption "blackbox exporter"; + listenAddress = mkOption { + type = types.str; + default = "${config.networking.hostName}.coho-tet.ts.net"; + }; + }; }; }; }; diff --git a/modules/nixos/monitor/exporters.nix b/modules/nixos/monitor/exporters.nix index e3aa561..56750ef 100644 --- a/modules/nixos/monitor/exporters.nix +++ b/modules/nixos/monitor/exporters.nix @@ -47,6 +47,13 @@ in ); }; + services.prometheus.exporters.v2ray = mkIf cfg.v2ray.enable { + enable = true; + listenAddress = cfg.v2ray.listenAddress; + port = 9516; + v2rayEndpoint = config.services.sing-box.settings.experimental.v2ray_api.listen; + }; + # gotosocial sops.templates."gotosocial_metrics.env" = { content = '' diff --git a/overlays/my-lib/prometheus.nix b/overlays/my-lib/prometheus.nix index 3642d55..c79f131 100644 --- a/overlays/my-lib/prometheus.nix +++ b/overlays/my-lib/prometheus.nix @@ -28,6 +28,36 @@ in ) ); + mkV2rayScrapes = targets: [ + { + job_name = "v2ray-exporter"; + scheme = "http"; + static_configs = map ( + { + address, + port ? 9516, + }: + { + targets = [ "${address}${mkPort port}" ]; + } + ) targets; + } + { + job_name = "singbox_stat"; + scheme = "http"; + metrics_path = "/scrape"; + static_configs = map ( + { + address, + port ? 9516, + }: + { + targets = [ "${address}${mkPort port}" ]; + } + ) targets; + } + ]; + mkCaddyScrapes = targets: [ { job_name = "caddy";