import ../make-test-python.nix ({ lib, pkgs, ... }: { name = "prometheus-remote-write"; nodes = { receiver = { config, pkgs, ... }: { environment.systemPackages = [ pkgs.jq ]; networking.firewall.allowedTCPPorts = [ config.services.prometheus.port ]; services.prometheus = { enable = true; globalConfig.scrape_interval = "2s"; extraFlags = [ "--web.enable-remote-write-receiver" ]; }; }; prometheus = { config, pkgs, ... }: { environment.systemPackages = [ pkgs.jq ]; networking.firewall.allowedTCPPorts = [ config.services.prometheus.port ]; services.prometheus = { enable = true; globalConfig.scrape_interval = "2s"; remoteWrite = [ { url = "http://receiver:9090/api/v1/write"; } ]; scrapeConfigs = [ { job_name = "node"; static_configs = [ { targets = [ "node:${toString config.services.prometheus.exporters.node.port}" ]; } ]; } ]; }; }; node = { config, pkgs, ... }: { services.prometheus.exporters.node = { enable = true; openFirewall = true; }; }; }; testScript = '' node.wait_for_unit("prometheus-node-exporter") node.wait_for_open_port(9100) for machine in prometheus, receiver: machine.wait_for_unit("prometheus") machine.wait_for_open_port(9090) # Verify both servers got the same data from the exporter for machine in prometheus, receiver: machine.wait_until_succeeds( "curl -sf 'http://127.0.0.1:9090/api/v1/query?query=node_exporter_build_info\{instance=\"node:9100\"\}' | " + "jq '.data.result[0].value[1]' | grep '\"1\"'" ) ''; })