nixosTests.victoriametrics: handleTest -> runTest

+1 -1
nixos/tests/all-tests.nix
···
velocity = runTest ./velocity.nix;
vengi-tools = runTest ./vengi-tools.nix;
victorialogs = runTest ./victorialogs.nix;
-
victoriametrics = handleTest ./victoriametrics { };
vikunja = runTest ./vikunja.nix;
virtualbox = handleTestOn [ "x86_64-linux" ] ./virtualbox.nix { };
vm-variant = handleTest ./vm-variant.nix { };
···
velocity = runTest ./velocity.nix;
vengi-tools = runTest ./vengi-tools.nix;
victorialogs = runTest ./victorialogs.nix;
+
victoriametrics = import ./victoriametrics { inherit runTest; };
vikunja = runTest ./vikunja.nix;
virtualbox = handleTestOn [ "x86_64-linux" ] ./virtualbox.nix { };
vm-variant = handleTest ./vm-variant.nix { };
+4 -9
nixos/tests/victoriametrics/default.nix
···
{
-
system ? builtins.currentSystem,
-
config ? { },
-
pkgs ? import ../../.. { inherit system config; },
-
}:
-
-
{
-
remote-write = import ./remote-write.nix { inherit system pkgs; };
-
vmalert = import ./vmalert.nix { inherit system pkgs; };
-
external-promscrape-config = import ./external-promscrape-config.nix { inherit system pkgs; };
}
···
+
{ runTest }:
{
+
remote-write = runTest ./remote-write.nix;
+
vmalert = runTest ./vmalert.nix;
+
external-promscrape-config = runTest ./external-promscrape-config.nix;
}
+60 -72
nixos/tests/victoriametrics/external-promscrape-config.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\"'"
-
)
-
'';
-
}
-
)
···
+
{ 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 lib.maintainers; {
+
maintainers = [
+
ryan4yin
+
];
+
};
+
nodes = {
+
victoriametrics =
+
{ 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\"'"
+
)
+
'';
+
}
+73 -89
nixos/tests/victoriametrics/remote-write.nix
···
# Primarily reference the implementation of <nixos/tests/prometheus/remote-write.nix>
-
import ../make-test-python.nix (
-
{
-
lib,
-
pkgs,
-
...
-
}:
-
let
-
username = "vmtest";
-
password = "fsddfy8233rb"; # random string
-
passwordFile = pkgs.writeText "password-file" password;
-
in
-
{
-
name = "victoriametrics-remote-write";
-
meta = with pkgs.lib.maintainers; {
-
maintainers = [
-
yorickvp
-
ryan4yin
-
];
-
};
-
nodes = {
-
victoriametrics =
-
{
-
config,
-
pkgs,
-
...
-
}:
-
{
-
environment.systemPackages = [ pkgs.jq ];
-
networking.firewall.allowedTCPPorts = [ 8428 ];
-
services.victoriametrics = {
-
enable = true;
-
extraOptions = [
-
"-httpAuth.username=${username}"
-
"-httpAuth.password=file://${toString passwordFile}"
-
];
-
};
};
-
vmagent =
-
{
-
config,
-
pkgs,
-
...
-
}:
-
{
-
environment.systemPackages = [ pkgs.jq ];
-
services.vmagent = {
-
enable = true;
-
remoteWrite = {
-
url = "http://victoriametrics:8428/api/v1/write";
-
basicAuthUsername = username;
-
basicAuthPasswordFile = toString passwordFile;
-
};
-
prometheusConfig = {
-
global = {
-
scrape_interval = "2s";
-
};
-
scrape_configs = [
-
{
-
job_name = "node";
-
static_configs = [
-
{
-
targets = [
-
"node:${toString config.services.prometheus.exporters.node.port}"
-
];
-
}
-
];
-
}
-
];
};
};
};
-
node =
-
{ ... }:
-
{
-
services.prometheus.exporters.node = {
-
enable = true;
-
openFirewall = true;
-
};
-
};
};
-
testScript = ''
-
node.wait_for_unit("prometheus-node-exporter")
-
node.wait_for_open_port(9100)
-
victoriametrics.wait_for_unit("victoriametrics")
-
victoriametrics.wait_for_open_port(8428)
-
vmagent.wait_for_unit("vmagent")
-
# check remote write
-
victoriametrics.wait_until_succeeds(
-
"curl --user '${username}:${password}' -sf 'http://localhost:8428/api/v1/query?query=node_exporter_build_info\{instance=\"node:9100\"\}' | "
-
+ "jq '.data.result[0].value[1]' | grep '\"1\"'"
-
)
-
'';
-
}
-
)
···
# Primarily reference the implementation of <nixos/tests/prometheus/remote-write.nix>
+
{ lib, pkgs, ... }:
+
let
+
username = "vmtest";
+
password = "fsddfy8233rb"; # random string
+
passwordFile = pkgs.writeText "password-file" password;
+
in
+
{
+
name = "victoriametrics-remote-write";
+
meta = with lib.maintainers; {
+
maintainers = [
+
yorickvp
+
ryan4yin
+
];
+
};
+
nodes = {
+
victoriametrics =
+
{ pkgs, ... }:
+
{
+
environment.systemPackages = [ pkgs.jq ];
+
networking.firewall.allowedTCPPorts = [ 8428 ];
+
services.victoriametrics = {
+
enable = true;
+
extraOptions = [
+
"-httpAuth.username=${username}"
+
"-httpAuth.password=file://${toString passwordFile}"
+
];
};
+
};
+
vmagent =
+
{ config, pkgs, ... }:
+
{
+
environment.systemPackages = [ pkgs.jq ];
+
services.vmagent = {
+
enable = true;
+
remoteWrite = {
+
url = "http://victoriametrics:8428/api/v1/write";
+
basicAuthUsername = username;
+
basicAuthPasswordFile = toString passwordFile;
+
};
+
prometheusConfig = {
+
global = {
+
scrape_interval = "2s";
};
+
scrape_configs = [
+
{
+
job_name = "node";
+
static_configs = [
+
{
+
targets = [
+
"node:${toString config.services.prometheus.exporters.node.port}"
+
];
+
}
+
];
+
}
+
];
};
};
+
};
+
node = {
+
services.prometheus.exporters.node = {
+
enable = true;
+
openFirewall = true;
+
};
};
+
};
+
testScript = ''
+
node.wait_for_unit("prometheus-node-exporter")
+
node.wait_for_open_port(9100)
+
victoriametrics.wait_for_unit("victoriametrics")
+
victoriametrics.wait_for_open_port(8428)
+
vmagent.wait_for_unit("vmagent")
+
# check remote write
+
victoriametrics.wait_until_succeeds(
+
"curl --user '${username}:${password}' -sf 'http://localhost:8428/api/v1/query?query=node_exporter_build_info\{instance=\"node:9100\"\}' | "
+
+ "jq '.data.result[0].value[1]' | grep '\"1\"'"
+
)
+
'';
+
}
+129 -151
nixos/tests/victoriametrics/vmalert.nix
···
# Primarily reference the implementation of <nixos/tests/prometheus/alertmanager.nix>
-
import ../make-test-python.nix (
-
{
-
lib,
-
pkgs,
-
...
-
}:
-
{
-
name = "victoriametrics-vmalert";
-
meta = with pkgs.lib.maintainers; {
-
maintainers = [
-
yorickvp
-
ryan4yin
-
];
-
};
-
nodes = {
-
victoriametrics =
-
{
-
config,
-
pkgs,
-
...
-
}:
-
{
-
environment.systemPackages = [ pkgs.jq ];
-
networking.firewall.allowedTCPPorts = [ 8428 ];
-
services.victoriametrics = {
-
enable = true;
-
prometheusConfig = {
-
global = {
-
scrape_interval = "2s";
-
};
-
scrape_configs = [
-
{
-
job_name = "alertmanager";
-
static_configs = [
-
{
-
targets = [
-
"alertmanager:${toString config.services.prometheus.alertmanager.port}"
-
];
-
}
-
];
-
}
-
{
-
job_name = "node";
-
static_configs = [
-
{
-
targets = [
-
"node:${toString config.services.prometheus.exporters.node.port}"
-
];
-
}
-
];
-
}
-
];
};
};
-
services.vmalert.instances."" = {
-
enable = true;
-
settings = {
-
"datasource.url" = "http://localhost:8428"; # victoriametrics' api
-
"notifier.url" = [
-
"http://alertmanager:${toString config.services.prometheus.alertmanager.port}"
-
]; # alertmanager's api
-
rule = [
-
(pkgs.writeText "instance-down.yml" ''
-
groups:
-
- name: test
-
rules:
-
- alert: InstanceDown
-
expr: up == 0
-
for: 5s
-
labels:
-
severity: page
-
annotations:
-
summary: "Instance {{ $labels.instance }} down"
-
'')
-
];
-
};
};
};
-
alertmanager =
-
{
-
config,
-
pkgs,
-
...
-
}:
-
{
-
services.prometheus.alertmanager = {
-
enable = true;
-
openFirewall = true;
-
configuration = {
-
global = {
-
resolve_timeout = "1m";
-
};
-
route = {
-
# Root route node
-
receiver = "test";
-
group_by = [ "..." ];
-
continue = false;
-
group_wait = "1s";
-
group_interval = "15s";
-
repeat_interval = "24h";
-
};
-
receivers = [
{
-
name = "test";
-
webhook_configs = [
-
{
-
url = "http://logger:6725";
-
send_resolved = true;
-
max_alerts = 0;
-
}
-
];
}
];
-
};
-
};
};
-
logger =
-
{
-
config,
-
pkgs,
-
...
-
}:
-
{
-
networking.firewall.allowedTCPPorts = [ 6725 ];
-
services.prometheus.alertmanagerWebhookLogger.enable = true;
-
};
};
-
testScript = ''
-
alertmanager.wait_for_unit("alertmanager")
-
alertmanager.wait_for_open_port(9093)
-
alertmanager.wait_until_succeeds("curl -s http://127.0.0.1:9093/-/ready")
-
logger.wait_for_unit("alertmanager-webhook-logger")
-
logger.wait_for_open_port(6725)
-
victoriametrics.wait_for_unit("victoriametrics")
-
victoriametrics.wait_for_unit("vmalert")
-
victoriametrics.wait_for_open_port(8428)
-
victoriametrics.wait_until_succeeds(
-
"curl -sf 'http://127.0.0.1:8428/api/v1/query?query=count(up\{job=\"alertmanager\"\}==1)' | "
-
+ "jq '.data.result[0].value[1]' | grep '\"1\"'"
-
)
-
victoriametrics.wait_until_succeeds(
-
"curl -sf 'http://127.0.0.1:8428/api/v1/query?query=sum(alertmanager_build_info)%20by%20(version)' | "
-
+ "jq '.data.result[0].metric.version' | grep '\"${pkgs.prometheus-alertmanager.version}\"'"
-
)
-
victoriametrics.wait_until_succeeds(
-
"curl -sf 'http://127.0.0.1:8428/api/v1/query?query=count(up\{job=\"node\"\}!=1)' | "
-
+ "jq '.data.result[0].value[1]' | grep '\"1\"'"
-
)
-
victoriametrics.wait_until_succeeds(
-
"curl -sf 'http://127.0.0.1:8428/api/v1/query?query=alertmanager_notifications_total\{integration=\"webhook\"\}' | "
-
+ "jq '.data.result[0].value[1]' | grep -v '\"0\"'"
-
)
-
logger.wait_until_succeeds(
-
"journalctl -o cat -u alertmanager-webhook-logger.service | grep '\"alertname\":\"InstanceDown\"'"
-
)
-
logger.log(logger.succeed("systemd-analyze security alertmanager-webhook-logger.service | grep -v '✓'"))
-
alertmanager.log(alertmanager.succeed("systemd-analyze security alertmanager.service | grep -v '✓'"))
-
'';
-
}
-
)
···
# Primarily reference the implementation of <nixos/tests/prometheus/alertmanager.nix>
+
{ lib, pkgs, ... }:
+
{
+
name = "victoriametrics-vmalert";
+
meta = with lib.maintainers; {
+
maintainers = [
+
yorickvp
+
ryan4yin
+
];
+
};
+
nodes = {
+
victoriametrics =
+
{ config, pkgs, ... }:
+
{
+
environment.systemPackages = [ pkgs.jq ];
+
networking.firewall.allowedTCPPorts = [ 8428 ];
+
services.victoriametrics = {
+
enable = true;
+
prometheusConfig = {
+
global = {
+
scrape_interval = "2s";
};
+
scrape_configs = [
+
{
+
job_name = "alertmanager";
+
static_configs = [
+
{
+
targets = [
+
"alertmanager:${toString config.services.prometheus.alertmanager.port}"
+
];
+
}
+
];
+
}
+
{
+
job_name = "node";
+
static_configs = [
+
{
+
targets = [
+
"node:${toString config.services.prometheus.exporters.node.port}"
+
];
+
}
+
];
+
}
+
];
};
+
};
+
services.vmalert.instances."" = {
+
enable = true;
+
settings = {
+
"datasource.url" = "http://localhost:8428"; # victoriametrics' api
+
"notifier.url" = [
+
"http://alertmanager:${toString config.services.prometheus.alertmanager.port}"
+
]; # alertmanager's api
+
rule = [
+
(pkgs.writeText "instance-down.yml" ''
+
groups:
+
- name: test
+
rules:
+
- alert: InstanceDown
+
expr: up == 0
+
for: 5s
+
labels:
+
severity: page
+
annotations:
+
summary: "Instance {{ $labels.instance }} down"
+
'')
+
];
};
};
+
};
+
alertmanager = {
+
services.prometheus.alertmanager = {
+
enable = true;
+
openFirewall = true;
+
configuration = {
+
global = {
+
resolve_timeout = "1m";
+
};
+
route = {
+
# Root route node
+
receiver = "test";
+
group_by = [ "..." ];
+
continue = false;
+
group_wait = "1s";
+
group_interval = "15s";
+
repeat_interval = "24h";
+
};
+
receivers = [
+
{
+
name = "test";
+
webhook_configs = [
{
+
url = "http://logger:6725";
+
send_resolved = true;
+
max_alerts = 0;
}
];
+
}
+
];
};
+
};
+
};
+
logger = {
+
networking.firewall.allowedTCPPorts = [ 6725 ];
+
services.prometheus.alertmanagerWebhookLogger.enable = true;
};
+
};
+
testScript = ''
+
alertmanager.wait_for_unit("alertmanager")
+
alertmanager.wait_for_open_port(9093)
+
alertmanager.wait_until_succeeds("curl -s http://127.0.0.1:9093/-/ready")
+
logger.wait_for_unit("alertmanager-webhook-logger")
+
logger.wait_for_open_port(6725)
+
victoriametrics.wait_for_unit("victoriametrics")
+
victoriametrics.wait_for_unit("vmalert")
+
victoriametrics.wait_for_open_port(8428)
+
victoriametrics.wait_until_succeeds(
+
"curl -sf 'http://127.0.0.1:8428/api/v1/query?query=count(up\{job=\"alertmanager\"\}==1)' | "
+
+ "jq '.data.result[0].value[1]' | grep '\"1\"'"
+
)
+
victoriametrics.wait_until_succeeds(
+
"curl -sf 'http://127.0.0.1:8428/api/v1/query?query=sum(alertmanager_build_info)%20by%20(version)' | "
+
+ "jq '.data.result[0].metric.version' | grep '\"${pkgs.prometheus-alertmanager.version}\"'"
+
)
+
victoriametrics.wait_until_succeeds(
+
"curl -sf 'http://127.0.0.1:8428/api/v1/query?query=count(up\{job=\"node\"\}!=1)' | "
+
+ "jq '.data.result[0].value[1]' | grep '\"1\"'"
+
)
+
victoriametrics.wait_until_succeeds(
+
"curl -sf 'http://127.0.0.1:8428/api/v1/query?query=alertmanager_notifications_total\{integration=\"webhook\"\}' | "
+
+ "jq '.data.result[0].value[1]' | grep -v '\"0\"'"
+
)
+
logger.wait_until_succeeds(
+
"journalctl -o cat -u alertmanager-webhook-logger.service | grep '\"alertname\":\"InstanceDown\"'"
+
)
+
logger.log(logger.succeed("systemd-analyze security alertmanager-webhook-logger.service | grep -v '✓'"))
+
alertmanager.log(alertmanager.succeed("systemd-analyze security alertmanager.service | grep -v '✓'"))
+
'';
+
}