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}