如何用Promtail仅保留指定Docker容器的日志消息
Promtail配置:仅抓取指定前缀的容器日志
可直接复制的有效配置
scrape_configs: - job_name: flog_scrape docker_sd_configs: - host: unix:///var/run/docker.sock refresh_interval: 5s relabel_configs: # 过滤保留名称以interesting_开头的容器 - source_labels: ['__meta_docker_container_name'] regex: '/interesting_.*' action: keep # 提取容器名称到container标签(去除前缀/) - source_labels: ['__meta_docker_container_name'] regex: '/(.*)' target_label: 'container'
配置说明
- 核心过滤逻辑:新增的
relabel_configs规则使用action: keep,仅保留元数据中容器名(格式为/容器名)匹配/interesting_.*的目标,直接丢弃不符合条件的容器,从根源避免无效日志抓取。 - 标签提取:原有的标签提取规则放在过滤之后,仅对符合条件的容器处理,将容器名(去除前缀
/)赋值给container标签。
"pipeline stage must contain only one key"错误解决
这个错误几乎都是YAML缩进或格式错误导致的,常见场景和正确格式:
- 错误示例:同一个stage块中混合多个stage类型
# 错误写法 pipeline_stages: - match: '{container=~"interesting_.*"}' regex: 'some pattern'
- 正确格式:每个stage是独立的列表项,每个项仅包含一种stage类型
# 正确写法 pipeline_stages: - match: selector: '{container=~"interesting_.*"}' stages: - regex: expression: 'some pattern' - labels: log_level: level
确保每个stage块只有一个顶级key(如match、regex、labels),缩进严格对齐。
内容的提问来源于stack exchange,提问作者alamar
相关产品推荐
相关产品推荐

