forked from mirrors/nixpkgs
nixos/prometheus: Port prometheus test to python
This commit is contained in:
parent
1ced1425aa
commit
e20e12442e
|
@ -31,7 +31,7 @@ let
|
|||
};
|
||||
};
|
||||
|
||||
in import ./make-test.nix {
|
||||
in import ./make-test-python.nix {
|
||||
name = "prometheus";
|
||||
|
||||
nodes = {
|
||||
|
@ -173,67 +173,73 @@ in import ./make-test.nix {
|
|||
testScript = { nodes, ... } : ''
|
||||
# Before starting the other machines we first make sure that our S3 service is online
|
||||
# and has a bucket added for thanos:
|
||||
$s3->start;
|
||||
$s3->waitForUnit("minio.service");
|
||||
$s3->waitForOpenPort(${toString minioPort});
|
||||
$s3->succeed(
|
||||
"mc config host add minio " .
|
||||
"http://localhost:${toString minioPort} ${s3.accessKey} ${s3.secretKey} S3v4");
|
||||
$s3->succeed("mc mb minio/thanos-bucket");
|
||||
s3.start()
|
||||
s3.wait_for_unit("minio.service")
|
||||
s3.wait_for_open_port(${toString minioPort})
|
||||
s3.succeed(
|
||||
"mc config host add minio "
|
||||
+ "http://localhost:${toString minioPort} "
|
||||
+ "${s3.accessKey} ${s3.secretKey} S3v4",
|
||||
"mc mb minio/thanos-bucket",
|
||||
)
|
||||
|
||||
# Now that s3 has started we can start the other machines:
|
||||
$prometheus->start;
|
||||
$query->start;
|
||||
$store->start;
|
||||
for machine in prometheus, query, store:
|
||||
machine.start()
|
||||
|
||||
# Check if prometheus responds to requests:
|
||||
$prometheus->waitForUnit("prometheus.service");
|
||||
$prometheus->waitForOpenPort(${toString queryPort});
|
||||
$prometheus->succeed("curl -s http://127.0.0.1:${toString queryPort}/metrics");
|
||||
prometheus.wait_for_unit("prometheus.service")
|
||||
prometheus.wait_for_open_port(${toString queryPort})
|
||||
prometheus.succeed("curl -s http://127.0.0.1:${toString queryPort}/metrics")
|
||||
|
||||
# Let's test if pushing a metric to the pushgateway succeeds:
|
||||
$prometheus->waitForUnit("pushgateway.service");
|
||||
$prometheus->succeed(
|
||||
"echo 'some_metric 3.14' | " .
|
||||
"curl --data-binary \@- http://127.0.0.1:${toString pushgwPort}/metrics/job/some_job");
|
||||
prometheus.wait_for_unit("pushgateway.service")
|
||||
prometheus.succeed(
|
||||
"echo 'some_metric 3.14' | "
|
||||
+ "curl --data-binary \@- "
|
||||
+ "http://127.0.0.1:${toString pushgwPort}/metrics/job/some_job"
|
||||
)
|
||||
|
||||
# Now check whether that metric gets ingested by prometheus.
|
||||
# Since we'll check for the metric several times on different machines
|
||||
# we abstract the test using the following function:
|
||||
|
||||
# Function to check if the metric "some_metric" has been received and returns the correct value.
|
||||
local *Machine::waitForMetric = sub {
|
||||
my ($self) = @_;
|
||||
$self->waitUntilSucceeds(
|
||||
"curl -sf 'http://127.0.0.1:${toString queryPort}/api/v1/query?query=some_metric' " .
|
||||
"| jq '.data.result[0].value[1]' | grep '\"3.14\"'");
|
||||
};
|
||||
def wait_for_metric(machine):
|
||||
return machine.wait_until_succeeds(
|
||||
"curl -sf 'http://127.0.0.1:${toString queryPort}/api/v1/query?query=some_metric' | "
|
||||
+ "jq '.data.result[0].value[1]' | grep '\"3.14\"'"
|
||||
)
|
||||
|
||||
$prometheus->waitForMetric;
|
||||
|
||||
wait_for_metric(prometheus)
|
||||
|
||||
# Let's test if the pushgateway persists metrics to the configured location.
|
||||
$prometheus->waitUntilSucceeds("test -e /var/lib/prometheus-pushgateway/metrics");
|
||||
prometheus.wait_until_succeeds("test -e /var/lib/prometheus-pushgateway/metrics")
|
||||
|
||||
# Test thanos
|
||||
$prometheus->waitForUnit("thanos-sidecar.service");
|
||||
prometheus.wait_for_unit("thanos-sidecar.service")
|
||||
|
||||
# Test if the Thanos query service can correctly retrieve the metric that was send above.
|
||||
$query->waitForUnit("thanos-query.service");
|
||||
$query->waitForMetric;
|
||||
query.wait_for_unit("thanos-query.service")
|
||||
wait_for_metric(query)
|
||||
|
||||
# Test if the Thanos sidecar has correctly uploaded its TSDB to S3, if the
|
||||
# Thanos storage service has correctly downloaded it from S3 and if the Thanos
|
||||
# query service running on $store can correctly retrieve the metric:
|
||||
$store->waitForUnit("thanos-store.service");
|
||||
$store->waitForMetric;
|
||||
store.wait_for_unit("thanos-store.service")
|
||||
wait_for_metric(store)
|
||||
|
||||
$store->waitForUnit("thanos-compact.service");
|
||||
store.wait_for_unit("thanos-compact.service")
|
||||
|
||||
# Test if the Thanos bucket command is able to retrieve blocks from the S3 bucket
|
||||
# and check if the blocks have the correct labels:
|
||||
$store->succeed(
|
||||
"thanos bucket ls" .
|
||||
" --objstore.config-file=${nodes.store.config.services.thanos.store.objstore.config-file}" .
|
||||
" --output=json | jq .thanos.labels.some_label | grep 'required by thanos'");
|
||||
store.succeed(
|
||||
"thanos bucket ls "
|
||||
+ "--objstore.config-file=${nodes.store.config.services.thanos.store.objstore.config-file} "
|
||||
+ "--output=json | "
|
||||
+ "jq .thanos.labels.some_label | "
|
||||
+ "grep 'required by thanos'"
|
||||
)
|
||||
'';
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue