You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Loki中实现仅重启时归零的非递减日志计数器?

基于Loki实现非递减错误日志计数器(仅Loki重启时归零)

完全可行,你可以通过Loki和Prometheus的记录规则组合,实现符合需求的非递减计数器(仅Loki重启时归零),具体方案如下:

核心逻辑

count_over_time确实会生成gauge类型的指标,但它返回的是指定时间窗口内的日志行数增量。我们可以将这个增量通过Prometheus的记录规则持续累加,得到一个行为完全等同于counter的指标——仅在Loki重启时,因为日志数据从新起点开始统计,累加值才会归零。

具体实现步骤

1. Loki侧:定义间隔计数规则

在Loki的记录规则中,按标签分组统计每个时间窗口内"bad foo"日志的数量,自动保留所有原始标签:

groups:
- name: bad_foo_increment
  rules:
  - record: loki_bad_foo:increment_per_interval
    expr: count_over_time({job="your-job"} |= "bad foo"[1m])

这里的1m是统计间隔,建议和Loki记录规则的评估间隔保持一致。

2. Prometheus侧:累加增量为总计数器

在Prometheus的记录规则中,将Loki传来的间隔增量累加,得到从Loki启动以来的"bad foo"日志总数:

groups:
- name: bad_foo_total_counter
  rules:
  - record: loki_bad_foo:total
    expr: sum_over_time(loki_bad_foo:increment_per_interval[1d])
  • 这里的1d是一个足够大的时间范围,确保覆盖Loki重启后的所有统计周期(如果你的Loki重启间隔更长,可以调整为7d等更大的值)。
  • 该指标的值会持续递增,只有当Loki重启后,之前的日志数据不再被纳入查询范围,累加值才会从0开始重新计数,完全符合你的需求。

关键说明

  • 虽然loki_bad_foo:total在Prometheus中是gauge类型,但它的行为和counter完全一致:非递减、仅Loki重启时归零。你可以像使用普通counter一样,对它使用rate()或increase()函数计算速率。
  • 所有原始日志的附加标签都会被保留到最终的计数器指标中,满足你按标签维度统计的需求。

内容的提问来源于stack exchange,提问作者George Shuklin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 19:52:25