at master 1.8 kB view raw
1{ lib, pkgs, ... }: 2let 3 nodeExporterPort = 9100; 4 promscrapeConfig = { 5 global = { 6 scrape_interval = "2s"; 7 }; 8 scrape_configs = [ 9 { 10 job_name = "node"; 11 static_configs = [ 12 { 13 targets = [ 14 "node:${toString nodeExporterPort}" 15 ]; 16 } 17 ]; 18 } 19 ]; 20 }; 21 settingsFormat = pkgs.formats.yaml { }; 22 promscrapeConfigYaml = settingsFormat.generate "prometheusConfig.yaml" promscrapeConfig; 23in 24{ 25 name = "victoriametrics-external-promscrape-config"; 26 meta = with lib.maintainers; { 27 maintainers = [ 28 ryan4yin 29 ]; 30 }; 31 32 nodes = { 33 victoriametrics = 34 { pkgs, ... }: 35 { 36 environment.systemPackages = [ pkgs.jq ]; 37 networking.firewall.allowedTCPPorts = [ 8428 ]; 38 services.victoriametrics = { 39 enable = true; 40 extraOptions = [ 41 "-promscrape.config=${toString promscrapeConfigYaml}" 42 ]; 43 }; 44 }; 45 46 node = { 47 services.prometheus.exporters.node = { 48 enable = true; 49 openFirewall = true; 50 }; 51 }; 52 }; 53 54 testScript = '' 55 node.wait_for_unit("prometheus-node-exporter") 56 node.wait_for_open_port(${toString nodeExporterPort}) 57 58 victoriametrics.wait_for_unit("victoriametrics") 59 victoriametrics.wait_for_open_port(8428) 60 61 62 promscrape_config = victoriametrics.succeed("journalctl -u victoriametrics -o cat | grep 'promscrape.config'") 63 assert '${toString promscrapeConfigYaml}' in promscrape_config 64 65 victoriametrics.wait_until_succeeds( 66 "curl -sf 'http://localhost:8428/api/v1/query?query=node_exporter_build_info\{instance=\"node:9100\"\}' | " 67 + "jq '.data.result[0].value[1]' | grep '\"1\"'" 68 ) 69 ''; 70}