68 lines
1.9 KiB
Nix
68 lines
1.9 KiB
Nix
import ./make-test.nix {
|
|
name = "prometheus-2";
|
|
|
|
nodes = {
|
|
one = { pkgs, ... }: {
|
|
environment.systemPackages = [ pkgs.jq ];
|
|
services.prometheus2 = {
|
|
enable = true;
|
|
scrapeConfigs = [
|
|
{
|
|
job_name = "prometheus";
|
|
static_configs = [
|
|
{
|
|
targets = [ "127.0.0.1:9090" ];
|
|
labels = { instance = "localhost"; };
|
|
}
|
|
];
|
|
}
|
|
{
|
|
job_name = "pushgateway";
|
|
scrape_interval = "1s";
|
|
static_configs = [
|
|
{
|
|
targets = [ "127.0.0.1:9091" ];
|
|
}
|
|
];
|
|
}
|
|
];
|
|
rules = [
|
|
''
|
|
groups:
|
|
- name: test
|
|
rules:
|
|
- record: testrule
|
|
expr: count(up{job="prometheus"})
|
|
''
|
|
];
|
|
};
|
|
services.prometheus.pushgateway = {
|
|
enable = true;
|
|
persistMetrics = true;
|
|
persistence.interval = "1s";
|
|
stateDir = "prometheus-pushgateway";
|
|
};
|
|
};
|
|
};
|
|
|
|
testScript = ''
|
|
startAll;
|
|
$one->waitForUnit("prometheus2.service");
|
|
$one->waitForOpenPort(9090);
|
|
$one->succeed("curl -s http://127.0.0.1:9090/metrics");
|
|
|
|
# Let's test if pushing a metric to the pushgateway succeeds
|
|
# and whether that metric gets ingested by prometheus.
|
|
$one->waitForUnit("pushgateway.service");
|
|
$one->succeed(
|
|
"echo 'some_metric 3.14' | " .
|
|
"curl --data-binary \@- http://127.0.0.1:9091/metrics/job/some_job");
|
|
$one->waitUntilSucceeds(
|
|
"curl -sf 'http://127.0.0.1:9090/api/v1/query?query=some_metric' " .
|
|
"| jq '.data.result[0].value[1]' | grep '\"3.14\"'");
|
|
|
|
# Let's test if the pushgateway persists metrics to the configured location.
|
|
$one->waitUntilSucceeds("test -e /var/lib/prometheus-pushgateway/metrics");
|
|
'';
|
|
}
|