如何通过正则从Docker容器名提取项目标签配置Promtail?
解决方案
方法一:通过Relabel配置提取项目标签
直接在现有relabel_configs中新增规则,从容器名称里提取project1/project2这类前缀:
relabel_configs: - source_labels: ['__meta_docker_container_name'] regex: '/(.*)' target_label: 'container' # 新增规则提取project标签 - source_labels: ['container'] regex: '([^-]+)-.*' target_label: 'project'
这条规则会匹配容器名中-符号之前的内容,自动赋值给project标签。比如project1-api会提取出project1,project2-crons提取出project2。
方法二:通过Pipeline Stage解析添加标签
如果想用Pipeline Stage实现,在现有配置中新增regex阶段即可:
pipeline_stages: - json: expressions: level: level # 新增regex阶段提取project标签 - regex: expression: '^(?P<project>[^-]+)-.*$' source: 'container'
这里利用命名捕获组(?P<project>),从已提取的container字段中截取项目前缀,Promtail会自动将捕获内容转为project标签。
两种方案任选其一,配置完成后就能在Loki中用{project="project1"}这类语法精准过滤对应项目的日志了。
内容的提问来源于stack exchange,提问作者Kanstantsin
相关产品推荐
相关产品推荐

