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

Mtail基数优化:如何停止报告已删除Key的指标?

解决Mtail带键计数器指标无法自动过期的问题

问题分析

你当前的Mtail代码中,虽然添加了del foo_fail_state[$nb] after 1h试图为每个nb对应的计数器设置1小时过期时间,但未达到预期效果——停止生成对应日志后,指标仍持续暴露。这通常是因为:

  • 部分旧版本Mtail对带键计数器的TTL(过期时间)支持存在缺陷;
  • 若日志匹配逻辑未确保del语句在每次指标更新时都被执行,TTL无法被正确重置和触发。

解决方案

方案1:升级Mtail并验证基础逻辑

  1. 升级到最新稳定版:确保使用v3.0.0及以上版本的Mtail,该版本修复了多个带键指标过期的相关bug。
  2. 确认语句执行逻辑:检查日志匹配规则是否能正确命中目标日志行,确保每次计数器递增时,del foo_fail_state[$nb] after 1h都被执行——这会为该nb对应的计数器重置1小时过期倒计时,一旦超过1小时无更新,指标将被自动删除并停止暴露。

方案2:结合活动标记+Prometheus过滤(兼容旧版本)

如果升级Mtail不可行,可以通过新增活动标记指标,配合Prometheus的过滤规则实现过期效果:

步骤1:修改Mtail代码

添加一个gauge类型的指标跟踪每个nb的活动状态,每次匹配日志时标记为活跃,并设置相同的过期时间:

counter foo_fail_state by nb
gauge foo_fail_state_active by nb

/.* bal (?P<nb>\d+).*fail_state/{
  foo_fail_state[$nb]++
  foo_fail_state_active[$nb] = 1
  del foo_fail_state_active[$nb] after 1h
}

步骤2:配置Prometheus过滤规则

在Prometheus的采集配置中,添加metric_relabel_configs,仅保留有对应活跃标记的foo_fail_state指标:

scrape_configs:
  - job_name: 'mtail'
    # 其他采集配置...
    metric_relabel_configs:
      # 仅保留有对应foo_fail_state_active的foo_fail_state指标
      - source_labels: [__name__, nb]
        action: keep
        regex: foo_fail_state;(.+)
        target_label: _temp_nb
      - source_labels: [__name__, _temp_nb]
        action: keep
        regex: foo_fail_state_active;(.+)
      - action: labeldrop
        regex: _temp_nb

当某个nb超过1小时无日志更新时,foo_fail_state_active[$nb]会被Mtail删除,Prometheus采集时就会自动丢弃对应的foo_fail_state[$nb]指标。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 19:55:12