如何在Promtail配置中为正则匹配设置默认环境标签值
解决方案
别用static_labels了,直接在relabel_configs里加两步规则就能搞定默认值:
- 先从容器名里提取dev/stg的环境标签
- 给没匹配到的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
相关产品推荐
相关产品推荐

