Eva*_*n P 0 monitoring prometheus promql prometheus-pushgateway
我正在尝试计算每天的事件数(在我的示例部署中)。我目前正在做的是基于pushgateway的HTTP API发送以下计数器事件
# TYPE deployments_count counter
# HELP deployments_count Deployments Counter
deployments_count{label1="${label1}",label2="${label2}"} 1
Run Code Online (Sandbox Code Playgroud)
我想在仪表板上计算的是某一天发生了多少个不同的事件(即部署)。
根据经验,我知道每小时应该有超过 10 个事件(部署),但是当我执行以下查询时,我不断收到 0
rate(deployments_count[24h])
Run Code Online (Sandbox Code Playgroud)
请注意,我的计数器始终报告给1定事件(部署)发生的时间。
首先,该rate()函数计算计数器每秒的增长率。也就是说,即使您的计数器值准确,您也会获得每秒(过去 24 小时内)而不是每天发生的部署数量。
如果你想计算过去24小时内的部署数量,可以使用以下函数increase():increase(deployments_count[24h])。
但当前表达式产生 0 的原因是计数器值始终为 1。计数器必须在每次发生事件时递增(请参阅Prometheus 文档)。
也就是说,您必须以某种方式跟踪计数器的当前值,并在将其推送到 Pushgateway 之前在每次部署时递增该值,而不是仅在每个事件上推送 1。后一种方法不起作用,在 Prometheus 看来,该值似乎永远不会改变。
有两种可能的方法可以解决这个问题:
1. 不使用 Pushgateway
您确定需要 Pushgateway 还是可以 在代码中合并Prometheus 客户端库?检查何时使用 Pushgateway,特别是 Pushgateway 不是分布式计数器。从本质上讲,Pushgateway 的用例适用于需要在终止之前将其指标存储在某处的临时作业。
另一方面,如果您的代码永久运行,Prometheus 客户端库将负责计数器增量逻辑并公开指标,以便 Prometheus 可以直接抓取它。
2. 跟踪计数器值
如果必须使用 Pushgateway,则需要跟踪当前计数器值,以便可以递增它。您可以在代码中执行此操作,也可以从 Pushgateway 本身查询当前值,递增该值,然后将其推回。当有多个进程参与计数器时(即并发更新、竞争条件),这两种方法都会遇到问题。
| 归档时间: |
|
| 查看次数: |
2522 次 |
| 最近记录: |