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

如何在Promtail YAML配置中过滤仅含error的日志行推送到Loki

Promtail 仅推送含error关键词日志的正确配置

两次配置失败的核心原因

  • 第一次配置错误:match块的selector字段仅支持标签匹配语法,不支持LogQL的行过滤规则(即|=、|~这类行过滤运算符),在selector中写入行过滤逻辑会直接导致Promtail配置解析失败,服务无法启动。
  • 第二次配置错误:存在两个问题,一是YAML缩进不合法,expression字段需比所属的regex字段多缩进一级,同级写法会触发解析报错;二是regex阶段仅用于从日志行提取内容,本身不具备日志保留/丢弃能力,即使正则写对也不会产生过滤效果,所有日志仍会正常推送。

可直接运行的正确配置

以下配置实现仅采集host=host-name标签下、包含error关键词的日志行推送到Loki:

server:
  http_listen_port: <port #>
  grpc_listen_port: <port #>

positions:
  filename: /tmp/positions.yaml

clients:
  - url: 'http://10.128.15.231:3100/loki/api/v1/push'

scrape_configs:
  - job_name: system
    static_configs:
      - targets:
          - localhost
        labels:
          job: log_export
          __path__: /path/to/log/file.log
          host: host-name
    pipeline_stages:
      - match:
          selector: '{host="host-name"}'
          stages:
            - drop:
                # 正则匹配所有不含error的行,直接丢弃
                expression: "^(?!.*error).*$"

配置注意事项

  • YAML缩进必须严格对齐,下级字段比上级字段多缩进2个空格,禁止同级书写。
  • match.selector字段仅允许书写{标签名="标签值"}格式的标签匹配规则,禁止添加任何LogQL行过滤运算符。
  • 如果需要忽略大小写匹配(即同时匹配error/Error/ERROR等形式),将drop阶段的正则修改为(?i)^(?!.*error).*$即可。
  • 如果需要多关键词过滤,直接修改正则即可,比如要同时保留含error或warn的行,正则写为^(?!.*(error|warn)).*$。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 22:18:43