In the latest Prometheus PromQL conformance certification, the pass rate of Alibaba Cloud Prometheus Service is 97.99% (the benchmark is open source Prometheus v2.32.1). Alibaba Cloud Prometheus Service provides almost the same use experience of PromQL as open source Prometheus. You can migrate your business to the cloud with minimal code changes.

Background information

Prometheus conformance certification is initiated by PromLabs. The sample code is provided on the official GitHub of open source Prometheus.

You can use the sample code to compare the extent to which the services provided by each service provider conform to open source Prometheus. The following dimensions can be tested: PromQL, alert_generator, openmetrics, remote_write_receiver, and remote_write_sender. A PromQL compliance test involves the whole process of writing and reading sampled data. The criterion for conformance is that the final query result of the tested service is the same as that of open source Prometheus. A PromQL compliance test requires the longest process compared with other types of compliance tests. It can best reflect the experience of end users.

Results of conformance certification

The features of Alibaba Cloud Prometheus Service are constantly updated. The results of conformance certification are valid for a specific period of time. Take note of the following information:

  • As a cloud service provider, Alibaba Cloud may lag behind the latest features of open source Prometheus. Therefore, when Alibaba Cloud performs conformance certification of PromLabs, the N - 2 version (N stands for the latest version) of open source Prometheus is used as the benchmark. For example, as of February 9, 2022, the most recent versions of open source Prometheus are v2.33.1, v2.33.0, and v2.32.1. In this case, v2.32.1 is used as the benchmark for conformance certification of PromLabs.
  • Service providers are allowed to configure query_tweaks in configuration files, for example, adding some conditions or discarding some labels. Although query_tweaks configurations are allowed, they are not recommended. Alibaba Cloud Prometheus Service does not use any query_tweaks configurations.
  • The results of conformance certification are valid for 12 weeks or two minor Prometheus releases. The longer duration between the two shall prevail.
  • The failed test cases of Alibaba Cloud Prometheus Service are related to the two recently added PromQL functions: last_over_time and clamp. The Alibaba Cloud Prometheus Service team is developing these functions.

Test results of Alibaba Cloud Prometheus Service

In the latest Prometheus conformance certification, the total number of test cases for Alibaba Cloud Prometheus Service is 548, and the number of passes is 537. The pass rate is 97.99%. The following table lists the details of the test results.
Query Outcome
42 PASS
1.234 PASS
.123 PASS
1.23e-3 PASS
0x3d PASS
Inf PASS
+Inf PASS
-Inf PASS
NaN PASS
demo_memory_usage_bytes PASS
{__name__="demo_memory_usage_bytes"} PASS
demo_memory_usage_bytes{type="free"} PASS
demo_memory_usage_bytes{type!="free"} PASS
demo_memory_usage_bytes{instance=~"demo.promlabs.com:.*"} PASS
demo_memory_usage_bytes{instance=~"host"} PASS
demo_memory_usage_bytes{instance!~".*:10000"} PASS
demo_memory_usage_bytes{type="free", instance!="demo.promlabs.com:10000"} PASS
{type="free", instance!="demo.promlabs.com:10000"} PASS
{__name__=~".*"} PASS
nonexistent_metric_name PASS
demo_memory_usage_bytes offset 1m PASS
demo_memory_usage_bytes offset 5m PASS
demo_memory_usage_bytes offset 10m PASS
demo_memory_usage_bytes offset -1m PASS
demo_memory_usage_bytes offset -5m PASS
demo_memory_usage_bytes offset -10m PASS
demo_intermittent_metric FAIL
sum(demo_memory_usage_bytes) PASS
avg(demo_memory_usage_bytes) PASS
max(demo_memory_usage_bytes) PASS
min(demo_memory_usage_bytes) PASS
count(demo_memory_usage_bytes) PASS
stddev(demo_memory_usage_bytes) PASS
stdvar(demo_memory_usage_bytes) PASS
sum(nonexistent_metric_name) PASS
avg(nonexistent_metric_name) PASS
max(nonexistent_metric_name) PASS
min(nonexistent_metric_name) PASS
count(nonexistent_metric_name) PASS
stddev(nonexistent_metric_name) PASS
stdvar(nonexistent_metric_name) PASS
sum by() (demo_memory_usage_bytes) PASS
avg by() (demo_memory_usage_bytes) PASS
max by() (demo_memory_usage_bytes) PASS
min by() (demo_memory_usage_bytes) PASS
count by() (demo_memory_usage_bytes) PASS
stddev by() (demo_memory_usage_bytes) PASS
stdvar by() (demo_memory_usage_bytes) PASS
sum by(instance) (demo_memory_usage_bytes) PASS
avg by(instance) (demo_memory_usage_bytes) PASS
max by(instance) (demo_memory_usage_bytes) PASS
min by(instance) (demo_memory_usage_bytes) PASS
count by(instance) (demo_memory_usage_bytes) PASS
stddev by(instance) (demo_memory_usage_bytes) PASS
stdvar by(instance) (demo_memory_usage_bytes) PASS
sum by(instance, type) (demo_memory_usage_bytes) PASS
avg by(instance, type) (demo_memory_usage_bytes) PASS
max by(instance, type) (demo_memory_usage_bytes) PASS
min by(instance, type) (demo_memory_usage_bytes) PASS
count by(instance, type) (demo_memory_usage_bytes) PASS
stddev by(instance, type) (demo_memory_usage_bytes) PASS
stdvar by(instance, type) (demo_memory_usage_bytes) PASS
sum by(nonexistent) (demo_memory_usage_bytes) PASS
avg by(nonexistent) (demo_memory_usage_bytes) PASS
max by(nonexistent) (demo_memory_usage_bytes) PASS
min by(nonexistent) (demo_memory_usage_bytes) PASS
count by(nonexistent) (demo_memory_usage_bytes) PASS
stddev by(nonexistent) (demo_memory_usage_bytes) PASS
stdvar by(nonexistent) (demo_memory_usage_bytes) PASS
sum without() (demo_memory_usage_bytes) PASS
avg without() (demo_memory_usage_bytes) PASS
max without() (demo_memory_usage_bytes) PASS
min without() (demo_memory_usage_bytes) PASS
count without() (demo_memory_usage_bytes) PASS
stddev without() (demo_memory_usage_bytes) PASS
stdvar without() (demo_memory_usage_bytes) PASS
sum without(instance) (demo_memory_usage_bytes) PASS
avg without(instance) (demo_memory_usage_bytes) PASS
max without(instance) (demo_memory_usage_bytes) PASS
min without(instance) (demo_memory_usage_bytes) PASS
count without(instance) (demo_memory_usage_bytes) PASS
stddev without(instance) (demo_memory_usage_bytes) PASS
stdvar without(instance) (demo_memory_usage_bytes) PASS
sum without(instance, type) (demo_memory_usage_bytes) PASS
avg without(instance, type) (demo_memory_usage_bytes) PASS
max without(instance, type) (demo_memory_usage_bytes) PASS
min without(instance, type) (demo_memory_usage_bytes) PASS
count without(instance, type) (demo_memory_usage_bytes) PASS
stddev without(instance, type) (demo_memory_usage_bytes) PASS
stdvar without(instance, type) (demo_memory_usage_bytes) PASS
sum without(nonexistent) (demo_memory_usage_bytes) PASS
avg without(nonexistent) (demo_memory_usage_bytes) PASS
max without(nonexistent) (demo_memory_usage_bytes) PASS
min without(nonexistent) (demo_memory_usage_bytes) PASS
count without(nonexistent) (demo_memory_usage_bytes) PASS
stddev without(nonexistent) (demo_memory_usage_bytes) PASS
stdvar without(nonexistent) (demo_memory_usage_bytes) PASS
topk (3, demo_memory_usage_bytes) PASS
bottomk (3, demo_memory_usage_bytes) PASS
topk by(instance) (2, demo_memory_usage_bytes) PASS
bottomk by(instance) (2, demo_memory_usage_bytes) PASS
topk without(instance) (2, demo_memory_usage_bytes) PASS
bottomk without(instance) (2, demo_memory_usage_bytes) PASS
topk without() (2, demo_memory_usage_bytes) PASS
bottomk without() (2, demo_memory_usage_bytes) PASS
quantile(-0.5, demo_memory_usage_bytes) PASS
quantile(0.1, demo_memory_usage_bytes) PASS
quantile(0.5, demo_memory_usage_bytes) PASS
quantile(0.75, demo_memory_usage_bytes) PASS
quantile(0.95, demo_memory_usage_bytes) PASS
quantile(0.90, demo_memory_usage_bytes) PASS
quantile(0.99, demo_memory_usage_bytes) PASS
quantile(1, demo_memory_usage_bytes) PASS
quantile(1.5, demo_memory_usage_bytes) PASS
avg(max by(type) (demo_memory_usage_bytes)) PASS
1 * 2 + 4 / 6 - 10 % 2 ^ 2 PASS
demo_num_cpus + (1 == bool 2) PASS
demo_num_cpus + (1 != bool 2) PASS
demo_num_cpus + (1 < bool 2) PASS
demo_num_cpus + (1 > bool 2) PASS
demo_num_cpus + (1 <= bool 2) PASS
demo_num_cpus + (1 >= bool 2) PASS
demo_memory_usage_bytes + 1.2345 PASS
demo_memory_usage_bytes - 1.2345 PASS
demo_memory_usage_bytes * 1.2345 PASS
demo_memory_usage_bytes / 1.2345 PASS
demo_memory_usage_bytes % 1.2345 PASS
demo_memory_usage_bytes ^ 1.2345 PASS
demo_memory_usage_bytes == 1.2345 PASS
demo_memory_usage_bytes != 1.2345 PASS
demo_memory_usage_bytes < 1.2345 PASS
demo_memory_usage_bytes > 1.2345 PASS
demo_memory_usage_bytes <= 1.2345 PASS
demo_memory_usage_bytes >= 1.2345 PASS
demo_memory_usage_bytes == bool 1.2345 PASS
demo_memory_usage_bytes != bool 1.2345 PASS
demo_memory_usage_bytes < bool 1.2345 PASS
demo_memory_usage_bytes > bool 1.2345 PASS
demo_memory_usage_bytes <= bool 1.2345 PASS
demo_memory_usage_bytes >= bool 1.2345 PASS
1.2345 == bool demo_memory_usage_bytes PASS
1.2345 != bool demo_memory_usage_bytes PASS
1.2345 < bool demo_memory_usage_bytes PASS
1.2345 > bool demo_memory_usage_bytes PASS
1.2345 <= bool demo_memory_usage_bytes PASS
1.2345 >= bool demo_memory_usage_bytes PASS
0.12345 + demo_memory_usage_bytes PASS
0.12345 - demo_memory_usage_bytes PASS
0.12345 * demo_memory_usage_bytes PASS
0.12345 / demo_memory_usage_bytes PASS
0.12345 % demo_memory_usage_bytes PASS
0.12345 ^ demo_memory_usage_bytes PASS
0.12345 == demo_memory_usage_bytes PASS
0.12345 != demo_memory_usage_bytes PASS
0.12345 < demo_memory_usage_bytes PASS
0.12345 > demo_memory_usage_bytes PASS
0.12345 <= demo_memory_usage_bytes PASS
0.12345 >= demo_memory_usage_bytes PASS
(1 * 2 + 4 / 6 - (10%7)^2) + demo_memory_usage_bytes PASS
(1 * 2 + 4 / 6 - (10%7)^2) - demo_memory_usage_bytes PASS
(1 * 2 + 4 / 6 - (10%7)^2) * demo_memory_usage_bytes PASS
(1 * 2 + 4 / 6 - (10%7)^2) / demo_memory_usage_bytes PASS
(1 * 2 + 4 / 6 - (10%7)^2) % demo_memory_usage_bytes PASS
(1 * 2 + 4 / 6 - (10%7)^2) ^ demo_memory_usage_bytes PASS
(1 * 2 + 4 / 6 - (10%7)^2) == demo_memory_usage_bytes PASS
(1 * 2 + 4 / 6 - (10%7)^2) != demo_memory_usage_bytes PASS
(1 * 2 + 4 / 6 - (10%7)^2) < demo_memory_usage_bytes PASS
(1 * 2 + 4 / 6 - (10%7)^2) > demo_memory_usage_bytes PASS
(1 * 2 + 4 / 6 - (10%7)^2) <= demo_memory_usage_bytes PASS
(1 * 2 + 4 / 6 - (10%7)^2) >= demo_memory_usage_bytes PASS
demo_memory_usage_bytes + (1 * 2 + 4 / 6 - 10) PASS
demo_memory_usage_bytes - (1 * 2 + 4 / 6 - 10) PASS
demo_memory_usage_bytes * (1 * 2 + 4 / 6 - 10) PASS
demo_memory_usage_bytes / (1 * 2 + 4 / 6 - 10) PASS
demo_memory_usage_bytes % (1 * 2 + 4 / 6 - 10) PASS
demo_memory_usage_bytes ^ (1 * 2 + 4 / 6 - 10) PASS
demo_memory_usage_bytes == (1 * 2 + 4 / 6 - 10) PASS
demo_memory_usage_bytes != (1 * 2 + 4 / 6 - 10) PASS
demo_memory_usage_bytes < (1 * 2 + 4 / 6 - 10) PASS
demo_memory_usage_bytes > (1 * 2 + 4 / 6 - 10) PASS
demo_memory_usage_bytes <= (1 * 2 + 4 / 6 - 10) PASS
demo_memory_usage_bytes >= (1 * 2 + 4 / 6 - 10) PASS
timestamp(demo_memory_usage_bytes * 1) PASS
timestamp(-demo_memory_usage_bytes) PASS
demo_memory_usage_bytes + on(instance, job, type) demo_memory_usage_bytes PASS
demo_memory_usage_bytes - on(instance, job, type) demo_memory_usage_bytes PASS
demo_memory_usage_bytes * on(instance, job, type) demo_memory_usage_bytes PASS
demo_memory_usage_bytes / on(instance, job, type) demo_memory_usage_bytes PASS
demo_memory_usage_bytes % on(instance, job, type) demo_memory_usage_bytes PASS
demo_memory_usage_bytes ^ on(instance, job, type) demo_memory_usage_bytes PASS
demo_memory_usage_bytes == on(instance, job, type) demo_memory_usage_bytes PASS
demo_memory_usage_bytes != on(instance, job, type) demo_memory_usage_bytes PASS
demo_memory_usage_bytes < on(instance, job, type) demo_memory_usage_bytes PASS
demo_memory_usage_bytes > on(instance, job, type) demo_memory_usage_bytes PASS
demo_memory_usage_bytes <= on(instance, job, type) demo_memory_usage_bytes PASS
demo_memory_usage_bytes >= on(instance, job, type) demo_memory_usage_bytes PASS
sum by(instance, type) (demo_memory_usage_bytes) + on(instance, type) group_left(job) demo_memory_usage_bytes PASS
sum by(instance, type) (demo_memory_usage_bytes) - on(instance, type) group_left(job) demo_memory_usage_bytes PASS
sum by(instance, type) (demo_memory_usage_bytes) * on(instance, type) group_left(job) demo_memory_usage_bytes PASS
sum by(instance, type) (demo_memory_usage_bytes) / on(instance, type) group_left(job) demo_memory_usage_bytes PASS
sum by(instance, type) (demo_memory_usage_bytes) % on(instance, type) group_left(job) demo_memory_usage_bytes PASS
sum by(instance, type) (demo_memory_usage_bytes) ^ on(instance, type) group_left(job) demo_memory_usage_bytes PASS
sum by(instance, type) (demo_memory_usage_bytes) == on(instance, type) group_left(job) demo_memory_usage_bytes PASS
sum by(instance, type) (demo_memory_usage_bytes) != on(instance, type) group_left(job) demo_memory_usage_bytes PASS
sum by(instance, type) (demo_memory_usage_bytes) < on(instance, type) group_left(job) demo_memory_usage_bytes PASS
sum by(instance, type) (demo_memory_usage_bytes) > on(instance, type) group_left(job) demo_memory_usage_bytes PASS
sum by(instance, type) (demo_memory_usage_bytes) <= on(instance, type) group_left(job) demo_memory_usage_bytes PASS
sum by(instance, type) (demo_memory_usage_bytes) >= on(instance, type) group_left(job) demo_memory_usage_bytes PASS
demo_memory_usage_bytes == bool on(instance, job, type) demo_memory_usage_bytes PASS
demo_memory_usage_bytes != bool on(instance, job, type) demo_memory_usage_bytes PASS
demo_memory_usage_bytes < bool on(instance, job, type) demo_memory_usage_bytes PASS
demo_memory_usage_bytes > bool on(instance, job, type) demo_memory_usage_bytes PASS
demo_memory_usage_bytes <= bool on(instance, job, type) demo_memory_usage_bytes PASS
demo_memory_usage_bytes >= bool on(instance, job, type) demo_memory_usage_bytes PASS
demo_memory_usage_bytes / on(instance, job, type, __name__) demo_memory_usage_bytes PASS
sum without(job) (demo_memory_usage_bytes) / on(instance, type) demo_memory_usage_bytes PASS
sum without(job) (demo_memory_usage_bytes) / on(instance, type) group_left demo_memory_usage_bytes PASS
sum without(job) (demo_memory_usage_bytes) / on(instance, type) group_left(job) demo_memory_usage_bytes PASS
demo_memory_usage_bytes / on(instance, job) group_left demo_num_cpus PASS
demo_memory_usage_bytes / on(instance, type, job, non_existent) demo_memory_usage_bytes PASS
demo_num_cpus * Inf PASS
demo_num_cpus * -Inf PASS
demo_num_cpus * NaN PASS
demo_memory_usage_bytes + -(1) PASS
-demo_memory_usage_bytes PASS
-1 ^ 2 PASS
1 + time() PASS
1 - time() PASS
1 * time() PASS
1 / time() PASS
1 % time() PASS
1 ^ time() PASS
time() + 1 PASS
time() - 1 PASS
time() * 1 PASS
time() / 1 PASS
time() % 1 PASS
time() ^ 1 PASS
time() == bool 1 PASS
time() != bool 1 PASS
time() < bool 1 PASS
time() > bool 1 PASS
time() <= bool 1 PASS
time() >= bool 1 PASS
1 == bool time() PASS
1 != bool time() PASS
1 < bool time() PASS
1 > bool time() PASS
1 <= bool time() PASS
1 >= bool time() PASS
time() + time() PASS
time() - time() PASS
time() * time() PASS
time() / time() PASS
time() % time() PASS
time() ^ time() PASS
time() == bool time() PASS
time() != bool time() PASS
time() < bool time() PASS
time() > bool time() PASS
time() <= bool time() PASS
time() >= bool time() PASS
time() + demo_memory_usage_bytes PASS
time() - demo_memory_usage_bytes PASS
time() * demo_memory_usage_bytes PASS
time() / demo_memory_usage_bytes PASS
time() % demo_memory_usage_bytes PASS
time() ^ demo_memory_usage_bytes PASS
time() == demo_memory_usage_bytes PASS
time() != demo_memory_usage_bytes PASS
time() < demo_memory_usage_bytes PASS
time() > demo_memory_usage_bytes PASS
time() <= demo_memory_usage_bytes PASS
time() >= demo_memory_usage_bytes PASS
demo_memory_usage_bytes + time() PASS
demo_memory_usage_bytes - time() PASS
demo_memory_usage_bytes * time() PASS
demo_memory_usage_bytes / time() PASS
demo_memory_usage_bytes % time() PASS
demo_memory_usage_bytes ^ time() PASS
demo_memory_usage_bytes == time() PASS
demo_memory_usage_bytes != time() PASS
demo_memory_usage_bytes < time() PASS
demo_memory_usage_bytes > time() PASS
demo_memory_usage_bytes <= time() PASS
demo_memory_usage_bytes >= time() PASS
sum_over_time(demo_memory_usage_bytes[1s]) PASS
sum_over_time(demo_memory_usage_bytes[15s]) PASS
sum_over_time(demo_memory_usage_bytes[1m]) PASS
sum_over_time(demo_memory_usage_bytes[5m]) PASS
sum_over_time(demo_memory_usage_bytes[15m]) PASS
sum_over_time(demo_memory_usage_bytes[1h]) PASS
avg_over_time(demo_memory_usage_bytes[1s]) PASS
avg_over_time(demo_memory_usage_bytes[15s]) PASS
avg_over_time(demo_memory_usage_bytes[1m]) PASS
avg_over_time(demo_memory_usage_bytes[5m]) PASS
avg_over_time(demo_memory_usage_bytes[15m]) PASS
avg_over_time(demo_memory_usage_bytes[1h]) PASS
max_over_time(demo_memory_usage_bytes[1s]) PASS
max_over_time(demo_memory_usage_bytes[15s]) PASS
max_over_time(demo_memory_usage_bytes[1m]) PASS
max_over_time(demo_memory_usage_bytes[5m]) PASS
max_over_time(demo_memory_usage_bytes[15m]) PASS
max_over_time(demo_memory_usage_bytes[1h]) PASS
min_over_time(demo_memory_usage_bytes[1s]) PASS
min_over_time(demo_memory_usage_bytes[15s]) PASS
min_over_time(demo_memory_usage_bytes[1m]) PASS
min_over_time(demo_memory_usage_bytes[5m]) PASS
min_over_time(demo_memory_usage_bytes[15m]) PASS
min_over_time(demo_memory_usage_bytes[1h]) PASS
count_over_time(demo_memory_usage_bytes[1s]) PASS
count_over_time(demo_memory_usage_bytes[15s]) PASS
count_over_time(demo_memory_usage_bytes[1m]) PASS
count_over_time(demo_memory_usage_bytes[5m]) PASS
count_over_time(demo_memory_usage_bytes[15m]) PASS
count_over_time(demo_memory_usage_bytes[1h]) PASS
stddev_over_time(demo_memory_usage_bytes[1s]) PASS
stddev_over_time(demo_memory_usage_bytes[15s]) PASS
stddev_over_time(demo_memory_usage_bytes[1m]) PASS
stddev_over_time(demo_memory_usage_bytes[5m]) PASS
stddev_over_time(demo_memory_usage_bytes[15m]) PASS
stddev_over_time(demo_memory_usage_bytes[1h]) PASS
stdvar_over_time(demo_memory_usage_bytes[1s]) PASS
stdvar_over_time(demo_memory_usage_bytes[15s]) PASS
stdvar_over_time(demo_memory_usage_bytes[1m]) PASS
stdvar_over_time(demo_memory_usage_bytes[5m]) PASS
stdvar_over_time(demo_memory_usage_bytes[15m]) PASS
stdvar_over_time(demo_memory_usage_bytes[1h]) PASS
absent_over_time(demo_memory_usage_bytes[1s]) PASS
absent_over_time(demo_memory_usage_bytes[15s]) PASS
absent_over_time(demo_memory_usage_bytes[1m]) PASS
absent_over_time(demo_memory_usage_bytes[5m]) PASS
absent_over_time(demo_memory_usage_bytes[15m]) PASS
absent_over_time(demo_memory_usage_bytes[1h]) PASS
last_over_time(demo_memory_usage_bytes[1s]) FAIL
last_over_time(demo_memory_usage_bytes[15s]) FAIL
last_over_time(demo_memory_usage_bytes[1m]) FAIL
last_over_time(demo_memory_usage_bytes[5m]) FAIL
last_over_time(demo_memory_usage_bytes[15m]) FAIL
last_over_time(demo_memory_usage_bytes[1h]) FAIL
quantile_over_time(-0.5, demo_memory_usage_bytes[1s]) PASS
quantile_over_time(-0.5, demo_memory_usage_bytes[15s]) PASS
quantile_over_time(-0.5, demo_memory_usage_bytes[1m]) PASS
quantile_over_time(-0.5, demo_memory_usage_bytes[5m]) PASS
quantile_over_time(-0.5, demo_memory_usage_bytes[15m]) PASS
quantile_over_time(-0.5, demo_memory_usage_bytes[1h]) PASS
quantile_over_time(0.1, demo_memory_usage_bytes[1s]) PASS
quantile_over_time(0.1, demo_memory_usage_bytes[15s]) PASS
quantile_over_time(0.1, demo_memory_usage_bytes[1m]) PASS
quantile_over_time(0.1, demo_memory_usage_bytes[5m]) PASS
quantile_over_time(0.1, demo_memory_usage_bytes[15m]) PASS
quantile_over_time(0.1, demo_memory_usage_bytes[1h]) PASS
quantile_over_time(0.5, demo_memory_usage_bytes[1s]) PASS
quantile_over_time(0.5, demo_memory_usage_bytes[15s]) PASS
quantile_over_time(0.5, demo_memory_usage_bytes[1m]) PASS
quantile_over_time(0.5, demo_memory_usage_bytes[5m]) PASS
quantile_over_time(0.5, demo_memory_usage_bytes[15m]) PASS
quantile_over_time(0.5, demo_memory_usage_bytes[1h]) PASS
quantile_over_time(0.75, demo_memory_usage_bytes[1s]) PASS
quantile_over_time(0.75, demo_memory_usage_bytes[15s]) PASS
quantile_over_time(0.75, demo_memory_usage_bytes[1m]) PASS
quantile_over_time(0.75, demo_memory_usage_bytes[5m]) PASS
quantile_over_time(0.75, demo_memory_usage_bytes[15m]) PASS
quantile_over_time(0.75, demo_memory_usage_bytes[1h]) PASS
quantile_over_time(0.95, demo_memory_usage_bytes[1s]) PASS
quantile_over_time(0.95, demo_memory_usage_bytes[15s]) PASS
quantile_over_time(0.95, demo_memory_usage_bytes[1m]) PASS
quantile_over_time(0.95, demo_memory_usage_bytes[5m]) PASS
quantile_over_time(0.95, demo_memory_usage_bytes[15m]) PASS
quantile_over_time(0.95, demo_memory_usage_bytes[1h]) PASS
quantile_over_time(0.90, demo_memory_usage_bytes[1s]) PASS
quantile_over_time(0.90, demo_memory_usage_bytes[15s]) PASS
quantile_over_time(0.90, demo_memory_usage_bytes[1m]) PASS
quantile_over_time(0.90, demo_memory_usage_bytes[5m]) PASS
quantile_over_time(0.90, demo_memory_usage_bytes[15m]) PASS
quantile_over_time(0.90, demo_memory_usage_bytes[1h]) PASS
quantile_over_time(0.99, demo_memory_usage_bytes[1s]) PASS
quantile_over_time(0.99, demo_memory_usage_bytes[15s]) PASS
quantile_over_time(0.99, demo_memory_usage_bytes[1m]) PASS
quantile_over_time(0.99, demo_memory_usage_bytes[5m]) PASS
quantile_over_time(0.99, demo_memory_usage_bytes[15m]) PASS
quantile_over_time(0.99, demo_memory_usage_bytes[1h]) PASS
quantile_over_time(1, demo_memory_usage_bytes[1s]) PASS
quantile_over_time(1, demo_memory_usage_bytes[15s]) PASS
quantile_over_time(1, demo_memory_usage_bytes[1m]) PASS
quantile_over_time(1, demo_memory_usage_bytes[5m]) PASS
quantile_over_time(1, demo_memory_usage_bytes[15m]) PASS
quantile_over_time(1, demo_memory_usage_bytes[1h]) PASS
quantile_over_time(1.5, demo_memory_usage_bytes[1s]) PASS
quantile_over_time(1.5, demo_memory_usage_bytes[15s]) PASS
quantile_over_time(1.5, demo_memory_usage_bytes[1m]) PASS
quantile_over_time(1.5, demo_memory_usage_bytes[5m]) PASS
quantile_over_time(1.5, demo_memory_usage_bytes[15m]) PASS
quantile_over_time(1.5, demo_memory_usage_bytes[1h]) PASS
timestamp(demo_num_cpus) PASS
timestamp(timestamp(demo_num_cpus)) PASS
abs(demo_memory_usage_bytes) PASS
ceil(demo_memory_usage_bytes) PASS
floor(demo_memory_usage_bytes) PASS
exp(demo_memory_usage_bytes) PASS
sqrt(demo_memory_usage_bytes) PASS
ln(demo_memory_usage_bytes) PASS
log2(demo_memory_usage_bytes) PASS
log10(demo_memory_usage_bytes) PASS
round(demo_memory_usage_bytes) PASS
abs(-demo_memory_usage_bytes) PASS
ceil(-demo_memory_usage_bytes) PASS
floor(-demo_memory_usage_bytes) PASS
exp(-demo_memory_usage_bytes) PASS
sqrt(-demo_memory_usage_bytes) PASS
ln(-demo_memory_usage_bytes) PASS
log2(-demo_memory_usage_bytes) PASS
log10(-demo_memory_usage_bytes) PASS
round(-demo_memory_usage_bytes) PASS
delta(nonexistent_metric[5m]) PASS
rate(nonexistent_metric[5m]) PASS
increase(nonexistent_metric[5m]) PASS
delta(demo_cpu_usage_seconds_total[1s]) PASS
delta(demo_cpu_usage_seconds_total[15s]) PASS
delta(demo_cpu_usage_seconds_total[1m]) PASS
delta(demo_cpu_usage_seconds_total[5m]) PASS
delta(demo_cpu_usage_seconds_total[15m]) PASS
delta(demo_cpu_usage_seconds_total[1h]) PASS
rate(demo_cpu_usage_seconds_total[1s]) PASS
rate(demo_cpu_usage_seconds_total[15s]) PASS
rate(demo_cpu_usage_seconds_total[1m]) PASS
rate(demo_cpu_usage_seconds_total[5m]) PASS
rate(demo_cpu_usage_seconds_total[15m]) PASS
rate(demo_cpu_usage_seconds_total[1h]) PASS
increase(demo_cpu_usage_seconds_total[1s]) PASS
increase(demo_cpu_usage_seconds_total[15s]) PASS
increase(demo_cpu_usage_seconds_total[1m]) PASS
increase(demo_cpu_usage_seconds_total[5m]) PASS
increase(demo_cpu_usage_seconds_total[15m]) PASS
increase(demo_cpu_usage_seconds_total[1h]) PASS
deriv(demo_disk_usage_bytes[1s]) PASS
deriv(demo_disk_usage_bytes[15s]) PASS
deriv(demo_disk_usage_bytes[1m]) PASS
deriv(demo_disk_usage_bytes[5m]) PASS
deriv(demo_disk_usage_bytes[15m]) PASS
deriv(demo_disk_usage_bytes[1h]) PASS
predict_linear(demo_disk_usage_bytes[1s], 600) PASS
predict_linear(demo_disk_usage_bytes[15s], 600) PASS
predict_linear(demo_disk_usage_bytes[1m], 600) PASS
predict_linear(demo_disk_usage_bytes[5m], 600) PASS
predict_linear(demo_disk_usage_bytes[15m], 600) PASS
predict_linear(demo_disk_usage_bytes[1h], 600) PASS
time() PASS
label_replace(demo_num_cpus, "job", "destination-value-$1", "instance", "demo.promlabs.com:(.*)") PASS
label_replace(demo_num_cpus, "job", "destination-value-$1", "instance", "host:(.*)") PASS
label_replace(demo_num_cpus, "job", "$1-$2", "instance", "local(.*):(.*)") PASS
label_replace(demo_num_cpus, "job", "value-$1", "nonexistent-src", "source-value-(.*)") PASS
label_replace(demo_num_cpus, "job", "value-$1", "nonexistent-src", "(.*)") PASS
label_replace(demo_num_cpus, "job", "value-$1", "instance", "non-matching-regex") PASS
label_replace(demo_num_cpus, "job", "", "dst", ".*") PASS
label_replace(demo_num_cpus, "job", "value-$1", "src", "(.*") PASS
label_replace(demo_num_cpus, "~invalid", "", "src", "(.*)") PASS
label_replace(demo_num_cpus, "instance", "", "", "") PASS
label_join(demo_num_cpus, "new_label", "-", "instance", "job") PASS
label_join(demo_num_cpus, "job", "-", "instance", "job") PASS
label_join(demo_num_cpus, "job", "-", "instance") PASS
label_join(demo_num_cpus, "~invalid", "-", "instance") PASS
day_of_month() PASS
day_of_week() PASS
days_in_month() PASS
hour() PASS
minute() PASS
month() PASS
year() PASS
day_of_month(demo_batch_last_success_timestamp_seconds offset 1m) PASS
day_of_month(demo_batch_last_success_timestamp_seconds offset 5m) PASS
day_of_month(demo_batch_last_success_timestamp_seconds offset 10m) PASS
day_of_week(demo_batch_last_success_timestamp_seconds offset 1m) PASS
day_of_week(demo_batch_last_success_timestamp_seconds offset 5m) PASS
day_of_week(demo_batch_last_success_timestamp_seconds offset 10m) PASS
days_in_month(demo_batch_last_success_timestamp_seconds offset 1m) PASS
days_in_month(demo_batch_last_success_timestamp_seconds offset 5m) PASS
days_in_month(demo_batch_last_success_timestamp_seconds offset 10m) PASS
hour(demo_batch_last_success_timestamp_seconds offset 1m) PASS
hour(demo_batch_last_success_timestamp_seconds offset 5m) PASS
hour(demo_batch_last_success_timestamp_seconds offset 10m) PASS
minute(demo_batch_last_success_timestamp_seconds offset 1m) PASS
minute(demo_batch_last_success_timestamp_seconds offset 5m) PASS
minute(demo_batch_last_success_timestamp_seconds offset 10m) PASS
month(demo_batch_last_success_timestamp_seconds offset 1m) PASS
month(demo_batch_last_success_timestamp_seconds offset 5m) PASS
month(demo_batch_last_success_timestamp_seconds offset 10m) PASS
year(demo_batch_last_success_timestamp_seconds offset 1m) PASS
year(demo_batch_last_success_timestamp_seconds offset 5m) PASS
year(demo_batch_last_success_timestamp_seconds offset 10m) PASS
idelta(demo_cpu_usage_seconds_total[1s]) PASS
idelta(demo_cpu_usage_seconds_total[15s]) PASS
idelta(demo_cpu_usage_seconds_total[1m]) PASS
idelta(demo_cpu_usage_seconds_total[5m]) PASS
idelta(demo_cpu_usage_seconds_total[15m]) PASS
idelta(demo_cpu_usage_seconds_total[1h]) PASS
irate(demo_cpu_usage_seconds_total[1s]) PASS
irate(demo_cpu_usage_seconds_total[15s]) PASS
irate(demo_cpu_usage_seconds_total[1m]) PASS
irate(demo_cpu_usage_seconds_total[5m]) PASS
irate(demo_cpu_usage_seconds_total[15m]) PASS
irate(demo_cpu_usage_seconds_total[1h]) PASS
clamp_min(demo_memory_usage_bytes, 2) PASS
clamp_max(demo_memory_usage_bytes, 2) PASS
clamp(demo_memory_usage_bytes, 0, 1) FAIL
clamp(demo_memory_usage_bytes, 0, 1000000000000) FAIL
clamp(demo_memory_usage_bytes, 1000000000000, 0) FAIL
clamp(demo_memory_usage_bytes, 1000000000000, 1000000000000) FAIL
resets(demo_cpu_usage_seconds_total[1s]) PASS
resets(demo_cpu_usage_seconds_total[15s]) PASS
resets(demo_cpu_usage_seconds_total[1m]) PASS
resets(demo_cpu_usage_seconds_total[5m]) PASS
resets(demo_cpu_usage_seconds_total[15m]) PASS
resets(demo_cpu_usage_seconds_total[1h]) PASS
changes(demo_batch_last_success_timestamp_seconds[1s]) PASS
changes(demo_batch_last_success_timestamp_seconds[15s]) PASS
changes(demo_batch_last_success_timestamp_seconds[1m]) PASS
changes(demo_batch_last_success_timestamp_seconds[5m]) PASS
changes(demo_batch_last_success_timestamp_seconds[15m]) PASS
changes(demo_batch_last_success_timestamp_seconds[1h]) PASS
vector(1.23) PASS
vector(time()) PASS
histogram_quantile(-0.5, rate(demo_api_request_duration_seconds_bucket[1m])) PASS
histogram_quantile(0.1, rate(demo_api_request_duration_seconds_bucket[1m])) PASS
histogram_quantile(0.5, rate(demo_api_request_duration_seconds_bucket[1m])) PASS
histogram_quantile(0.75, rate(demo_api_request_duration_seconds_bucket[1m])) PASS
histogram_quantile(0.95, rate(demo_api_request_duration_seconds_bucket[1m])) PASS
histogram_quantile(0.90, rate(demo_api_request_duration_seconds_bucket[1m])) PASS
histogram_quantile(0.99, rate(demo_api_request_duration_seconds_bucket[1m])) PASS
histogram_quantile(1, rate(demo_api_request_duration_seconds_bucket[1m])) PASS
histogram_quantile(1.5, rate(demo_api_request_duration_seconds_bucket[1m])) PASS
histogram_quantile(0.9, nonexistent_metric) PASS
histogram_quantile(0.9, demo_memory_usage_bytes) PASS
histogram_quantile(0.9, {__name__=~"demo_api_request_duration_seconds_.+"}) PASS
holt_winters(demo_disk_usage_bytes[10m], 0.1, 0.1) PASS
holt_winters(demo_disk_usage_bytes[10m], 0.1, 0.5) PASS
holt_winters(demo_disk_usage_bytes[10m], 0.1, 0.8) PASS
holt_winters(demo_disk_usage_bytes[10m], 0.5, 0.1) PASS
holt_winters(demo_disk_usage_bytes[10m], 0.5, 0.5) PASS
holt_winters(demo_disk_usage_bytes[10m], 0.5, 0.8) PASS
holt_winters(demo_disk_usage_bytes[10m], 0.8, 0.1) PASS
holt_winters(demo_disk_usage_bytes[10m], 0.8, 0.5) PASS
holt_winters(demo_disk_usage_bytes[10m], 0.8, 0.8) PASS
count_values("value", demo_api_request_duration_seconds_bucket) PASS
absent(demo_memory_usage_bytes) PASS
absent(nonexistent_metric_name) PASS
max_over_time((time() - max(demo_batch_last_success_timestamp_seconds) < 1000)[5m:10s] offset 5m) PASS
avg_over_time(rate(demo_cpu_usage_seconds_total[1m])[2m:10s]) PASS