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

如何在Promtail配置中为正则匹配设置默认环境标签值

解决方案

别用static_labels了,直接在relabel_configs里加两步规则就能搞定默认值:

  1. 先从容器名里提取dev/stg的环境标签
  2. 给没匹配到的prd容器补上默认的prd标签

具体配置写出来是这样:

relabel_configs:
    # 提取dev/stg:匹配容器名里的_dev_或_stg_,把捕获到的环境值赋值给env
    - source_labels: ['__meta_docker_container_name']
      regex: '/.*_(dev|stg)_.*'
      target_label: 'env'
      replacement: '$1'
    # 给空env补prd:如果env标签是空的(也就是prd容器),直接设为prd
    - source_labels: ['env']
      regex: '^$'
      target_label: 'env'
      replacement: 'prd'

为什么这么管用

  • 第一条规则只对带_dev_/_stg_的容器生效,不会碰prd的实例
  • 第二条规则专门处理env标签为空的情况,也就是第一条没匹配到的prd容器,补上默认值
  • 因为relabel_configs是按顺序执行的,已经设好的dev/stg标签不会被覆盖

要是你用的是Promtail的pipeline_stages(不是Prometheus的relabel),可以加个匹配条件避免覆盖:

pipeline_stages:
    - static_labels:
        env: prd
      # 只有当env标签不存在时才执行这一步
      match:
        - selector: '{env!=""}'
          action: drop

这样只有没env标签的容器才会被设为prd,不会冲掉已经提取好的dev/stg标签。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 13:45:24