at master 1.8 kB view raw
1{ 2 name = "prometheus-remote-write"; 3 4 nodes = { 5 receiver = 6 { config, pkgs, ... }: 7 { 8 environment.systemPackages = [ pkgs.jq ]; 9 10 networking.firewall.allowedTCPPorts = [ config.services.prometheus.port ]; 11 12 services.prometheus = { 13 enable = true; 14 globalConfig.scrape_interval = "2s"; 15 16 extraFlags = [ "--web.enable-remote-write-receiver" ]; 17 }; 18 }; 19 20 prometheus = 21 { config, pkgs, ... }: 22 { 23 environment.systemPackages = [ pkgs.jq ]; 24 25 networking.firewall.allowedTCPPorts = [ config.services.prometheus.port ]; 26 27 services.prometheus = { 28 enable = true; 29 globalConfig.scrape_interval = "2s"; 30 31 remoteWrite = [ { url = "http://receiver:9090/api/v1/write"; } ]; 32 33 scrapeConfigs = [ 34 { 35 job_name = "node"; 36 static_configs = [ 37 { targets = [ "node:${toString config.services.prometheus.exporters.node.port}" ]; } 38 ]; 39 } 40 ]; 41 }; 42 }; 43 44 node = 45 { config, pkgs, ... }: 46 { 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(9100) 57 58 for machine in prometheus, receiver: 59 machine.wait_for_unit("prometheus") 60 machine.wait_for_open_port(9090) 61 62 # Verify both servers got the same data from the exporter 63 for machine in prometheus, receiver: 64 machine.wait_until_succeeds( 65 "curl -sf 'http://127.0.0.1:9090/api/v1/query?query=node_exporter_build_info\{instance=\"node:9100\"\}' | " 66 + "jq '.data.result[0].value[1]' | grep '\"1\"'" 67 ) 68 ''; 69}