在最新的Prometheus PromQL开源一致性认证中,阿里云Prometheus监控的通过率为97.99%(比较基准为开源Prometheus v2.32.1版本),这意味着阿里云Prometheus监控在PromQL的使用体验上,与开源版本几乎完全保持一致,最大程度方便用户迁移上云。

背景信息

Prometheus开源一致性认证,是由PromLabs发起,此项认证目前已被纳入开源Prometheus官方的Git项目库

开源一致性认证会从多个维度比对各个服务提供商提供的服务,与开源版本保持一致的程度。其中包括PromQL、alert_generator、openmetrics、remote_write_receiver和remote_write_sender。其中,PromQL一致性认证项目,涉及采样数据的写入和读取全流程,以最终查询结果与开源实现完全一致作为通过标准,是流程最长的一项测试,也是最能体现最终用户感受的认证项目。

认证结果说明

阿里云Prometheus监控产品功能在不断丰富和演进,对于其一致性的评测也是有一定时效性的,对于此项认证,您需要了解以下事项:

  • 作为云服务提供商,在跟进Prometheus开源版本的新功能时可能会有一些迟滞,所以在进行PromLabs的开源一致性认证时,会使用当前开源Prometheus最新版本的N-2版本作为认证测试的基准。比如截止2022年02月09日,开源Prometheus的最新版本为v2.33.1,上一个版本为v2.33.0,上上一个版本为v2.32.1,那么就使用v2.32.1版本作为PromLabs的开源一致性认证基准版本。
  • 认证配置文件中允许服务提供商配置query_tweaks,即对查询做一些微调,比如增加一些条件或者丢弃一些Label等,虽然这样做是允许的,但如果不使用query_tweaks更好一些。阿里云Prometheus监控未使用任何query_tweaks。
  • 认证结果的有效期时长为Prometheus的两个小版本(即minor版本)更新时长,或者是12周的时长,这两者之间选择时长较长的那一个为准。
  • 阿里云Prometheus监控未通过的测试用例(case)主要与last_over_time和 clamp这两个近期新增的PromQL函数相关,目前阿里云Prometheus监控团队正在对此进行相关开发。

测试结果明细

阿里云Prometheus监控PromLabs开源一致性认证的测试用例总数为548,通过数为537,即通过率为97.99%,具体信息如下:
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