共享Timescale库场景下Alertmanager如何按指定标签过滤告警
Prometheus仅筛选特定标签告警的配置方案
你可以通过三层过滤机制实现需求,从上游到下游逐层过滤,兼顾效率和可靠性:
1. 远程读取阶段过滤(最高效,推荐优先配置)
在remote_read配置中新增required_matchers参数,直接从共享的Timescale数据库中仅拉取符合指定标签的指标,避免无用数据同步到本地Prometheus占用资源。
示例配置(以筛选标签team=mybiz为例):
remote_read: - url: https://promscale.host:9201/read read_recent: true # 新增匹配规则,仅拉取带指定标签的指标 required_matchers: team: mybiz
2. 告警规则层面过滤
在告警规则的查询表达式中强制添加标签匹配条件,作为第二层过滤,也支持不同告警规则适配不同的标签筛选逻辑。
示例告警规则配置:
groups: - name: business-alerts rules: - alert: HighCpuUsage # 查询语句中添加指定标签匹配 expr: 100 - (avg by(instance) (irate(node_cpu_seconds_total{team="mybiz", env="prod", mode="idle"}[5m])) * 100) > 90 for: 3m labels: severity: warning annotations: summary: "实例 {{ $labels.instance }} CPU使用率过高"
3. 告警推送前最终过滤(alert_relabel_configs用法说明)
alert_relabel_configs作用于告警触发后、推送给Alertmanager之前的阶段,作为最后一道防线,丢弃所有不符合标签要求的告警,避免误发。
示例配置:
alerting: alertmanagers: - static_configs: - targets: ['localhost:9093'] # 新增告警重标签规则 alert_relabel_configs: # 仅保留带有team=mybiz标签的告警 - source_labels: [team] regex: mybiz action: keep # 如需同时匹配多个标签,可追加规则,例:仅保留env=prod的告警 - source_labels: [env] regex: prod action: keep
如果需要匹配多个标签值,可使用正则语法,比如筛选team为mybiz或infra的告警,将regex改为mybiz|infra即可。
内容的提问来源于stack exchange,提问作者nbari
相关产品推荐
相关产品推荐

