prometheus - 如何测量 Prometheus 中计数器事件的每日发生率?
问题描述
我正在尝试计算每天的事件数量(在我的示例部署中)。我目前正在做的是基于 pushgateway 的 HTTP API 发送以下计数器事件
# TYPE deployments_count counter
# HELP deployments_count Deployments Counter
deployments_count{label1="${label1}",label2="${label2}"} 1
我想在我的仪表板上计算的是在给定的一天发生了多少不同的事件(即部署)。
根据经验,我知道我每小时应该有超过 10 个事件(部署),但是当我执行以下查询时,我一直收到 0
rate(deployments_count[24h])
请注意,我的计数器总是1
在给定事件(部署)发生时报告。
解决方案
首先,该rate()
函数计算一个计数器每秒的增长率。也就是说,即使您的计数器值是准确的,您也会得到每秒(过去 24 小时内)发生的部署次数,而不是每天发生的部署次数。
如果要计算过去 24 小时内的部署次数,可以使用以下increase()
函数:increase(deployments_count[24h])
.
但是您当前的表达式产生 0 的原因是计数器值始终为 1。每次发生事件时都必须递增计数器(请参阅Prometheus 文档)。
也就是说,在将计数器推送到 Pushgateway 之前,您必须以某种方式跟踪计数器的当前值并在每次部署时将其递增,而不是在每个事件上推送 1。后一种方法行不通,在 Prometheus 看来,这个值好像永远不会改变。
有两种可能的方法来解决这个问题:
1.不使用推送网关
您确定需要 Pushgateway 还是可以在代码中合并 Prometheus 客户端库?检查何时使用 Pushgateway,特别是 Pushgateway不是分布式计数器。从本质上讲,Pushgateway 的用例是用于需要在终止之前将其指标存放在某处的临时作业。
另一方面,如果您的代码永久运行,Prometheus 客户端库会负责计数器递增逻辑并公开指标,以便 Prometheus 可以直接抓取它。
2.跟踪计数器值
如果您必须使用 Pushgateway,则需要跟踪当前计数器值,以便您可以递增它。您可以在代码中执行此操作,也可以从 Pushgateway 本身查询当前值,将其递增,然后将其推回。当有多个进程对计数器有贡献时(即并发更新、竞争条件),这两种方法都会遇到问题。
推荐阅读
- c++ - 创建映射到外部定义名称的结构行
- markdown - 如何防止 R Markdown 中长标题的断字?
- xml - 无法从 XML 文件推断 XSD。XML 包含多个命名空间
- ios - 父类和子类的领域过滤器
- hybris - 使用 Impex 从 Hybris CMS 组件中删除操作
- node.js - 如何获取 API 请求的会话数据?
- node.js - 对于使用 docker 容器的 mongodb 的节点应用程序,什么最适合?
- c - C - 双类型变量:相同的公式,不同的值
- android - 在 Android 中使用 kotlin 语言进行西班牙语本地化
- html - Bootstrap 4 - 使用 2 个元素实现 flex + justify-content-center