在最新的Prometheus PromQL开源一致性认证中,可观测监控 Prometheus 版的通过率为100%(比较基准为开源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 版PromLabs开源一致性认证的测试用例总数为548,通过数为548,即通过率为100%,具体信息如下:
QueryOutcome
42PASS
1.234PASS
.123PASS
1.23e-3PASS
0x3dPASS
InfPASS
+InfPASS
-InfPASS
NaNPASS
demo_memory_usage_bytesPASS
{__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_namePASS
demo_memory_usage_bytes offset 1mPASS
demo_memory_usage_bytes offset 5mPASS
demo_memory_usage_bytes offset 10mPASS
demo_memory_usage_bytes offset -1mPASS
demo_memory_usage_bytes offset -5mPASS
demo_memory_usage_bytes offset -10mPASS
demo_intermittent_metricPASS
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 ^ 2PASS
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.2345PASS
demo_memory_usage_bytes - 1.2345PASS
demo_memory_usage_bytes * 1.2345PASS
demo_memory_usage_bytes / 1.2345PASS
demo_memory_usage_bytes % 1.2345PASS
demo_memory_usage_bytes ^ 1.2345PASS
demo_memory_usage_bytes == 1.2345PASS
demo_memory_usage_bytes != 1.2345PASS
demo_memory_usage_bytes < 1.2345PASS
demo_memory_usage_bytes > 1.2345PASS
demo_memory_usage_bytes <= 1.2345PASS
demo_memory_usage_bytes >= 1.2345PASS
demo_memory_usage_bytes == bool 1.2345PASS
demo_memory_usage_bytes != bool 1.2345PASS
demo_memory_usage_bytes < bool 1.2345PASS
demo_memory_usage_bytes > bool 1.2345PASS
demo_memory_usage_bytes <= bool 1.2345PASS
demo_memory_usage_bytes >= bool 1.2345PASS
1.2345 == bool demo_memory_usage_bytesPASS
1.2345 != bool demo_memory_usage_bytesPASS
1.2345 < bool demo_memory_usage_bytesPASS
1.2345 > bool demo_memory_usage_bytesPASS
1.2345 <= bool demo_memory_usage_bytesPASS
1.2345 >= bool demo_memory_usage_bytesPASS
0.12345 + demo_memory_usage_bytesPASS
0.12345 - demo_memory_usage_bytesPASS
0.12345 * demo_memory_usage_bytesPASS
0.12345 / demo_memory_usage_bytesPASS
0.12345 % demo_memory_usage_bytesPASS
0.12345 ^ demo_memory_usage_bytesPASS
0.12345 == demo_memory_usage_bytesPASS
0.12345 != demo_memory_usage_bytesPASS
0.12345 < demo_memory_usage_bytesPASS
0.12345 > demo_memory_usage_bytesPASS
0.12345 <= demo_memory_usage_bytesPASS
0.12345 >= demo_memory_usage_bytesPASS
(1 * 2 + 4 / 6 - (10%7)^2) + demo_memory_usage_bytesPASS
(1 * 2 + 4 / 6 - (10%7)^2) - demo_memory_usage_bytesPASS
(1 * 2 + 4 / 6 - (10%7)^2) * demo_memory_usage_bytesPASS
(1 * 2 + 4 / 6 - (10%7)^2) / demo_memory_usage_bytesPASS
(1 * 2 + 4 / 6 - (10%7)^2) % demo_memory_usage_bytesPASS
(1 * 2 + 4 / 6 - (10%7)^2) ^ demo_memory_usage_bytesPASS
(1 * 2 + 4 / 6 - (10%7)^2) == demo_memory_usage_bytesPASS
(1 * 2 + 4 / 6 - (10%7)^2) != demo_memory_usage_bytesPASS
(1 * 2 + 4 / 6 - (10%7)^2) < demo_memory_usage_bytesPASS
(1 * 2 + 4 / 6 - (10%7)^2) > demo_memory_usage_bytesPASS
(1 * 2 + 4 / 6 - (10%7)^2) <= demo_memory_usage_bytesPASS
(1 * 2 + 4 / 6 - (10%7)^2) >= demo_memory_usage_bytesPASS
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_bytesPASS
demo_memory_usage_bytes - on(instance, job, type) demo_memory_usage_bytesPASS
demo_memory_usage_bytes * on(instance, job, type) demo_memory_usage_bytesPASS
demo_memory_usage_bytes / on(instance, job, type) demo_memory_usage_bytesPASS
demo_memory_usage_bytes % on(instance, job, type) demo_memory_usage_bytesPASS
demo_memory_usage_bytes ^ on(instance, job, type) demo_memory_usage_bytesPASS
demo_memory_usage_bytes == on(instance, job, type) demo_memory_usage_bytesPASS
demo_memory_usage_bytes != on(instance, job, type) demo_memory_usage_bytesPASS
demo_memory_usage_bytes < on(instance, job, type) demo_memory_usage_bytesPASS
demo_memory_usage_bytes > on(instance, job, type) demo_memory_usage_bytesPASS
demo_memory_usage_bytes <= on(instance, job, type) demo_memory_usage_bytesPASS
demo_memory_usage_bytes >= on(instance, job, type) demo_memory_usage_bytesPASS
sum by(instance, type) (demo_memory_usage_bytes) + on(instance, type) group_left(job) demo_memory_usage_bytesPASS
sum by(instance, type) (demo_memory_usage_bytes) - on(instance, type) group_left(job) demo_memory_usage_bytesPASS
sum by(instance, type) (demo_memory_usage_bytes) * on(instance, type) group_left(job) demo_memory_usage_bytesPASS
sum by(instance, type) (demo_memory_usage_bytes) / on(instance, type) group_left(job) demo_memory_usage_bytesPASS
sum by(instance, type) (demo_memory_usage_bytes) % on(instance, type) group_left(job) demo_memory_usage_bytesPASS
sum by(instance, type) (demo_memory_usage_bytes) ^ on(instance, type) group_left(job) demo_memory_usage_bytesPASS
sum by(instance, type) (demo_memory_usage_bytes) == on(instance, type) group_left(job) demo_memory_usage_bytesPASS
sum by(instance, type) (demo_memory_usage_bytes) != on(instance, type) group_left(job) demo_memory_usage_bytesPASS
sum by(instance, type) (demo_memory_usage_bytes) < on(instance, type) group_left(job) demo_memory_usage_bytesPASS
sum by(instance, type) (demo_memory_usage_bytes) > on(instance, type) group_left(job) demo_memory_usage_bytesPASS
sum by(instance, type) (demo_memory_usage_bytes) <= on(instance, type) group_left(job) demo_memory_usage_bytesPASS
sum by(instance, type) (demo_memory_usage_bytes) >= on(instance, type) group_left(job) demo_memory_usage_bytesPASS
demo_memory_usage_bytes == bool on(instance, job, type) demo_memory_usage_bytesPASS
demo_memory_usage_bytes != bool on(instance, job, type) demo_memory_usage_bytesPASS
demo_memory_usage_bytes < bool on(instance, job, type) demo_memory_usage_bytesPASS
demo_memory_usage_bytes > bool on(instance, job, type) demo_memory_usage_bytesPASS
demo_memory_usage_bytes <= bool on(instance, job, type) demo_memory_usage_bytesPASS
demo_memory_usage_bytes >= bool on(instance, job, type) demo_memory_usage_bytesPASS
demo_memory_usage_bytes / on(instance, job, type, __name__) demo_memory_usage_bytesPASS
sum without(job) (demo_memory_usage_bytes) / on(instance, type) demo_memory_usage_bytesPASS
sum without(job) (demo_memory_usage_bytes) / on(instance, type) group_left demo_memory_usage_bytesPASS
sum without(job) (demo_memory_usage_bytes) / on(instance, type) group_left(job) demo_memory_usage_bytesPASS
demo_memory_usage_bytes / on(instance, job) group_left demo_num_cpusPASS
demo_memory_usage_bytes / on(instance, type, job, non_existent) demo_memory_usage_bytesPASS
demo_num_cpus * InfPASS
demo_num_cpus * -InfPASS
demo_num_cpus * NaNPASS
demo_memory_usage_bytes + -(1)PASS
-demo_memory_usage_bytesPASS
-1 ^ 2PASS
1 + time()PASS
1 - time()PASS
1 * time()PASS
1 / time()PASS
1 % time()PASS
1 ^ time()PASS
time() + 1PASS
time() - 1PASS
time() * 1PASS
time() / 1PASS
time() % 1PASS
time() ^ 1PASS
time() == bool 1PASS
time() != bool 1PASS
time() < bool 1PASS
time() > bool 1PASS
time() <= bool 1PASS
time() >= bool 1PASS
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_bytesPASS
time() - demo_memory_usage_bytesPASS
time() * demo_memory_usage_bytesPASS
time() / demo_memory_usage_bytesPASS
time() % demo_memory_usage_bytesPASS
time() ^ demo_memory_usage_bytesPASS
time() == demo_memory_usage_bytesPASS
time() != demo_memory_usage_bytesPASS
time() < demo_memory_usage_bytesPASS
time() > demo_memory_usage_bytesPASS
time() <= demo_memory_usage_bytesPASS
time() >= demo_memory_usage_bytesPASS
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])PASS
last_over_time(demo_memory_usage_bytes[15s])PASS
last_over_time(demo_memory_usage_bytes[1m])PASS
last_over_time(demo_memory_usage_bytes[5m])PASS
last_over_time(demo_memory_usage_bytes[15m])PASS
last_over_time(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.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)PASS
clamp(demo_memory_usage_bytes, 0, 1000000000000)PASS
clamp(demo_memory_usage_bytes, 1000000000000, 0)PASS
clamp(demo_memory_usage_bytes, 1000000000000, 1000000000000)PASS
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