83 lines
2 KiB
Nix
83 lines
2 KiB
Nix
import ../make-test-python.nix (
|
|||
{
|
|||
lib,
|
|||
pkgs,
|
|||
...
|
|||
}:
|
|||
let
|
|||
nodeExporterPort = 9100;
|
|||
promscrapeConfig = {
|
|||
global = {
|
|||
scrape_interval = "2s";
|
|||
};
|
|||
scrape_configs = [
|
|||
{
|
|||
job_name = "node";
|
|||
static_configs = [
|
|||
{
|
|||
targets = [
|
|||
"node:${toString nodeExporterPort}"
|
|||
];
|
|||
}
|
|||
];
|
|||
}
|
|||
];
|
|||
};
|
|||
settingsFormat = pkgs.formats.yaml { };
|
|||
promscrapeConfigYaml = settingsFormat.generate "prometheusConfig.yaml" promscrapeConfig;
|
|||
in
|
|||
{
|
|||
name = "victoriametrics-external-promscrape-config";
|
|||
meta = with pkgs.lib.maintainers; {
|
|||
maintainers = [
|
|||
ryan4yin
|
|||
];
|
|||
};
|
|||
|
|||
nodes = {
|
|||
victoriametrics =
|
|||
{
|
|||
config,
|
|||
pkgs,
|
|||
...
|
|||
}:
|
|||
{
|
|||
environment.systemPackages = [ pkgs.jq ];
|
|||
networking.firewall.allowedTCPPorts = [ 8428 ];
|
|||
services.victoriametrics = {
|
|||
enable = true;
|
|||
extraOptions = [
|
|||
"-promscrape.config=${toString promscrapeConfigYaml}"
|
|||
];
|
|||
};
|
|||
};
|
|||
|
|||
node =
|
|||
{ ... }:
|
|||
{
|
|||
services.prometheus.exporters.node = {
|
|||
enable = true;
|
|||
openFirewall = true;
|
|||
};
|
|||
};
|
|||
};
|
|||
|
|||
testScript = ''
|
|||
node.wait_for_unit("prometheus-node-exporter")
|
|||
node.wait_for_open_port(${toString nodeExporterPort})
|
|||
|
|||
victoriametrics.wait_for_unit("victoriametrics")
|
|||
victoriametrics.wait_for_open_port(8428)
|
|||
|
|||
|
|||
promscrape_config = victoriametrics.succeed("journalctl -u victoriametrics -o cat | grep 'promscrape.config'")
|
|||
assert '${toString promscrapeConfigYaml}' in promscrape_config
|
|||
|
|||
victoriametrics.wait_until_succeeds(
|
|||
"curl -sf 'http://localhost:8428/api/v1/query?query=node_exporter_build_info\{instance=\"node:9100\"\}' | "
|
|||
+ "jq '.data.result[0].value[1]' | grep '\"1\"'"
|
|||
)
|
|||
'';
|
|||
}
|
|||
)
|