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

如何在Filebeat.inputs中按条件配置多行日志解析?

基于条件判断配置多行日志解析的Filebeat方案

要给集群中特定应用配置指定的多行日志解析规则,你可以通过两种清晰的方式实现,以下是具体配置方案:

方式一:拆分多容器输入(推荐,逻辑更清晰)

针对需要多行解析的应用单独配置一个输入项,通过镜像名或Kubernetes标签精准匹配,其他应用使用默认输入:

filebeatConfig:
filebeat.yml: |
      filebeat.inputs:
      # 针对需要多行解析的应用配置
      - type: container
        paths:
          - /var/log/containers/*.log
        # 匹配目标应用,替换为你实际的镜像标识
        include_lines: ['^.*your-multiline-app.*$']
        exclude_files: ['^.*kibana.*$']
        # 启用指定的多行解析规则
        multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
        multiline.negate: true
        multiline.match: after
        processors:
        - add_kubernetes_metadata:
            host: ${NODE_NAME}
            matchers:
            - logs_path:
                logs_path: "/var/log/containers/"

      # 其他无需多行解析的应用配置
      - type: container
        paths:
          - /var/log/containers/*.log
        processors:
        - add_kubernetes_metadata:
            host: ${NODE_NAME}
            matchers:
            - logs_path:
                logs_path: "/var/log/containers/"
        - drop_event:
            when:
              contains:
                container.image.name: "kibana"

      output.logstash:
        hosts: ["logstash-listener:5044"]

方式二:单输入内通过条件处理器启用多行规则

如果不想拆分输入,可以在单个容器输入中,通过if条件判断针对特定应用触发多行解析:

filebeatConfig:
filebeat.yml: |
      filebeat.inputs:
      - type: container
        paths:
          - /var/log/containers/*.log
        processors:
        - add_kubernetes_metadata:
            host: ${NODE_NAME}
            matchers:
            - logs_path:
                logs_path: "/var/log/containers/"
        # 针对目标应用启用多行解析
        - if:
            contains:
              container.image.name: "your-multiline-app"
          then:
            # 先解析容器日志的JSON格式(必填,因为容器日志默认是JSON结构)
            - decode_json_fields:
                fields: ["message"]
                target: ""
            # 应用指定的多行规则
            - multiline:
                pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
                negate: true
                match: after
        - drop_event:
            when:
              contains:
                container.image.name: "kibana"

      output.logstash:
        hosts: ["logstash-listener:5044"]

关键注意点

  • 替换your-multiline-app为你实际需要多行解析的应用镜像名,也可以用kubernetes.labels.app这类标签做更精准的匹配
  • 容器日志默认是JSON格式,方式二中必须先通过decode_json_fields解析message字段,才能对日志内容应用多行规则
  • 方式一的优势是规则分离,不同应用的日志处理逻辑互不干扰,后续排查问题更便捷

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 00:05:23