我想检查某个指标是否在普罗米修斯中不可用 5 分钟。
我正在使用absent(K_KA_GCPP)并给出 5 分钟阈值。但似乎我无法将缺少的功能分组到某些标签(例如站点 ID)上。
如果指标不适用于所有 4 个站点 ID,则缺席有效。我想查明所有 4 个站点 ID 中的 1 个站点 ID 的指标是否不可用或不存在,并且我不想在查询中对站点 ID 标签进行硬编码,它应该是通用的。我有什么办法可以做到这一点吗?
我目前有以下 Promql 查询,它允许我查询每个 K8S pod 使用的内存:
sum(container_memory_working_set_bytes{image!="",name=~"^k8s_.*"}) by (pod_name)
Pod 的名称后跟由 K8S 定义的哈希:
weave-net-kxpxc
weave-net-jjkki
weave-net-asdkk
Run Code Online (Sandbox Code Playgroud)
哪些都属于同一个应用程序: weave-net
我想要的是聚合属于同一个应用程序的所有 pod 的内存。
因此,查询会将所有weave-netPod的内存相加,并将结果放在名为weave. 比如结果是:
{pod_name="weave-net"} 10
Run Code Online (Sandbox Code Playgroud)
代替
{pod_name="weave-net-kxpxc"} 5
{pod_name="weave-net-jjkki"} 3
{pod_name="weave-net-asdkk"} 2
Run Code Online (Sandbox Code Playgroud)
甚至有可能这样做,如果是,如何?
我想根据一个标签获取指标的最小值,但保留其他标签,以便稍后提取它们。
假设我有这些指标:
Metric{label1="1",label2="2"} 0
Metric{label1="1",label2="3"} 1
Metric{label1="2",label2="2"} 10
Metric{label1="2",label2="3"} 100
Run Code Online (Sandbox Code Playgroud)
如果我做
min(Metric)by(label1)
Run Code Online (Sandbox Code Playgroud)
我得到正确的结果:
{label1="1"} 0
{label1="2"} 10
Run Code Online (Sandbox Code Playgroud)
但我丢失了 label2,我想稍后提取它。
有没有办法通过 label1 进行最小化,同时仍然在结果中保留 label2 ?
我希望聚合的输出是:
Metric{label1="1",label2="2"} 0
Metric{label1="2",label2="2"} 10
Run Code Online (Sandbox Code Playgroud) 我有几个带有“服务”标签的指标。我想获取以“abc”开头并以“xyz”结尾的所有“服务”级别的列表。这些将是 grafana 模板变量的值。
这是我尝试过的:
label_values(service) =~ "abc.*xyz"
但是这会产生错误 Template variables could not be initialized: parse error at char 13: could not parse remaining input "(service_name) "...
关于如何过滤标签值的任何想法?
我对普罗米修斯很陌生,所以这可能是一个愚蠢的问题 - 但就这样吧。
当我请求 node_memory_Active_bytes 和 node_memory_MemTotal_bytes 时,我得到:
node_memory_Active_bytes{instance="10.1.4.9:9100",job="node-exporter"} 3257815040
(..and..)
node_memory_MemTotal_bytes{instance="10.1.4.9:9100",job="node-exporter"} 16509550592
Run Code Online (Sandbox Code Playgroud)
但是,在盒子上,如果我运行free -b,我会得到以下信息:
$ free -b
total used free shared buff/cache available
Mem: 16509550592 2264915968 6787731456 59121664 7456903168 14140530688
Swap: 0 0 0
Run Code Online (Sandbox Code Playgroud)
我正在努力将普罗米修斯的内存视图与实际机器的视图进行映射。我确信我一定做错了什么,但我不知道是什么。总体匹配,但免费
我有一个关于 PromQL 及其查询函数rate() 以及如何正确使用它的问题。在我的应用程序中,我有一个线程正在运行,我使用 Micrometer 的计时器来监视线程的运行时间。使用 Timer 可以为您提供一个带有后缀 _count 的计数器和另一个带有后缀 _sum 所花费的秒数总和的计数器。例如 my_metric_sum 和 my_metric_count。
我的原始数据如下所示(抓取间隔 30 s,范围向量 5m):
现在根据文档,https://prometheus.io/docs/prometheus/latest/querying/functions/#rate 计算范围向量中时间序列的每秒平均增长率(此处为 5m)。
现在我的问题是:我为什么想要那个?我的执行运行时间的相对变化对我来说似乎毫无用处。事实上,仅使用 sum/count 看起来更有用,因为它为我提供了每个时刻的平均绝对持续时间。同时,这就是让我困惑的地方,在我找到的文档中
要根据名为 http_request_duration_seconds 的直方图或摘要计算过去 5 分钟内的平均请求持续时间,请使用以下表达式:
速率(http_request_duration_seconds_sum[5m]) / 速率(http_request_duration_seconds_count[5m])
来源: https: //prometheus.io/docs/practices/histograms/
但据我了解文档,这个表达式似乎会计算请求持续时间的每秒平均增长率,即不是请求平均花费多长时间,而是请求持续时间平均改变了多少最后5分钟。
我试图根据仪表板变量值在图形面板上显示/隐藏查询。
\n动机。
\n在同一个图形面板(用于显示多个主机)上,我有两个查询:
\nrate(ClickHouseProfileEvents_Query{instance=~"$instance"}[$__rate_interval])\nRun Code Online (Sandbox Code Playgroud)\n和:
\nmax_over_time( (irate(ClickHouseProfileEvents_Query{instance=~"$instance"}[2m]))[$__rate_interval:15s] )\nRun Code Online (Sandbox Code Playgroud)\n哪里ClickHouseProfileEvents_Query有柜台。
第一个是通常的汇率,更适合显示趋势,另一个是稍微复杂一点但显示所有选择。当然,我想为图表制作一个面板,但也有一些开关,例如趋势/选择来分析两者。我引入了带有自定义值的 grafana 仪表板变量,但我无法理解如何使用它来隐藏或显示特定查询。
\nor另外,我尝试使用诸如or 之类的东西进行单个查询,unless但没有成功。
环境:Grafana v7.5.2、Prometheus v2.26.0
\n更新:
\n感谢Marcelo \xc3\x81vila de Oliveira的回答。我当前的解决方案有点不同,但基于他的想法。
\n首先,我添加Custom带有值的类型变量1和null.
其次,我在查询中使用乘法而不是除法。
\n\n最后,例如,当我关闭趋势显示时,我也没有在图表和图例中看到它们。
\n\n在 Prometheus 中,有时我们需要同时绘制多个指标(例如,具有名称、拟合相同的正则表达式),就像 PromQL 查询一样:
{name=~"camel_proxy.*count"}
Run Code Online (Sandbox Code Playgroud)
它工作正常,相同的标签集线用不同的名称绘制。
当我们想要绘制它们的rate()时,我们面临标题中的错误:
rate({name=~"camel_proxy.*count"}[5m])
Run Code Online (Sandbox Code Playgroud)
因此,这里的方法是使标签集不相同,并将 移动__name__到某个标签,使每个标签集都是唯一的:
rate(label_replace({name=~"camel_proxy.*count"},"name_label","$1","name", "(.+)")[5m])
Run Code Online (Sandbox Code Playgroud)
但我们仍然收到这样的错误
1:90: parse error: ranges only allowed for vector selectors"
Run Code Online (Sandbox Code Playgroud)
如何避免它并正确绘制比率?
给定一个这样的计数器在给定时间范围内增加,计算和http_requests_total有何区别?delta(http_requests_total[5m])increase(http_requests_total[5m])
据我理解的文档,delta计算时间范围的开始值和结束值之间的差。increase计算rate,然后将其与时间范围相乘。
但实际的区别是什么?这两个值不是总是相同吗?
就像,假设我有以下值,每个值都在下一秒:
t0: 5
t1: 11
t2: 18
t3: 30
Run Code Online (Sandbox Code Playgroud)
那么delta就会是30 - 5 = 25。这rate将是各个增量的平均值,即8.333。如果我将其乘以时间范围3,那么我会25再次得到。那么两者实际上有什么区别呢?
我正在尝试在 Prometheus 的alert.rules 文件中设置一个警报,该警报仅在特定时间段内触发。我已经在 expr 标签内测试了下面的代码块,没有时间限制,并且它工作得非常好。
正如PromQL 文档:hour()所述,hour()根据当前 UTC 返回 0 到 23 之间的值。
- alert: test_down
expr: absent(container_memory_usage_bytes{name="test_ap"}) and hour() > 5 and hour() < 22
for: 30s
labels:
severity: critical
annotations:
summary: "test_ap down"
description: "test_ap is down for more than 30 seconds."
Run Code Online (Sandbox Code Playgroud)
但在这里,不会触发任何警报通知。有谁知道为什么没有任何东西被解雇以及我该如何解决这个问题?
编辑:我已经解决了。我不明白为什么我必须像我这样做的方式那样做,但以下方法有效:
替换and hour() > 5 and hour() < 22为and ON() hour() > 5 < 22