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

如何为Filebeat自定义解析规则?特殊表格型日志解析求助

Filebeat解析表格型日志实现方案

针对你这种竖线分隔的表格日志,可通过Filebeat内置处理器组合实现解析,具体步骤如下:

1. 过滤无效行

先过滤掉表头、分隔线、汇总行这类非数据内容,使用drop_event处理器:

processors:
  - drop_event:
      when:
        or:
          - contains:
              message: "==============="
          - contains:
              message: "--------------------------------------------------------------------"
          - contains:
              message: "ALL"
          - contains:
              message: "TOTAL|"

2. 解析数据字段

根据日志的竖线分隔结构,推荐两种解析方式:

方式一:使用dissect处理器(适合固定格式)

利用竖线作为分隔符定义匹配模板,同时去除字段前后空格:

processors:
  # ... 前置drop_event处理器
  - dissect:
      tokenizer: "%{name}|%{TOTAL}|%{FAIL}|%{FailNor}|%{FailErr}|%{SUMVAL}|%{AVG_ms}|%{MAX_ms}|%{MIN_ms}|%{gt_2ms}|%{gt_10ms}|%{gt_50ms}|%{gt_100ms}|%{MAX_RECORD}|"
      field: "message"
      target_prefix: ""
  - trim:
      fields: ["name", "TOTAL", "FAIL", "FailNor", "FailErr", "SUMVAL", "AVG_ms", "MAX_ms", "MIN_ms", "gt_2ms", "gt_10ms", "gt_50ms", "gt_100ms", "MAX_RECORD"]

注:将原字段名AVG(ms)改为AVG_ms,避免特殊字符引发配置问题。

方式二:使用grok处理器(适合格式略有波动的情况)

通过正则表达式匹配字段,兼容性更强,且可直接指定字段类型:

processors:
  # ... 前置drop_event处理器
  - grok:
      match:
        message: "^%{DATA:name}\\s+\\|\\s+%{NUMBER:TOTAL:int}\\s+\\|\\s+%{NUMBER:FAIL:int}\\s+\\|\\s+%{NUMBER:FailNor:int}\\s+\\|\\s+%{NUMBER:FailErr:int}\\s+\\|\\s+%{NUMBER:SUMVAL:int}\\s+\\|\\s+%{NUMBER:AVG_ms:float}\\s+\\|\\s+%{NUMBER:MAX_ms:float}\\s+\\|\\s+%{NUMBER:MIN_ms:float}\\s+\\|\\s+%{NUMBER:gt_2ms:int}\\s+\\|\\s+%{NUMBER:gt_10ms:int}\\s+\\|\\s+%{NUMBER:gt_50ms:int}\\s+\\|\\s+%{NUMBER:gt_100ms:int}\\s+\\|\\s+%{DATA:MAX_RECORD}\\s+\\|"

3. 字段类型转换(仅dissect方式需要)

若使用dissect解析,需将字符串类型的数值转换为对应类型:

processors:
  # ... 前置drop_event、dissect、trim处理器
  - convert:
      fields:
        - {from: "TOTAL", to: "integer"}
        - {from: "FAIL", to: "integer"}
        - {from: "FailNor", to: "integer"}
        - {from: "FailErr", to: "integer"}
        - {from: "SUMVAL", to: "integer"}
        - {from: "AVG_ms", to: "float"}
        - {from: "MAX_ms", to: "float"}
        - {from: "MIN_ms", to: "float"}
        - {from: "gt_2ms", to: "integer"}
        - {from: "gt_10ms", to: "integer"}
        - {from: "gt_50ms", to: "integer"}
        - {from: "gt_100ms", to: "integer"}

完整配置示例

整合以上步骤的Filebeat配置片段:

filebeat.inputs:
  - type: log
    paths:
      - /path/to/your/log/file.log

processors:
  - drop_event:
      when:
        or:
          - contains:
              message: "==============="
          - contains:
              message: "--------------------------------------------------------------------"
          - contains:
              message: "ALL"
          - contains:
              message: "TOTAL|"
  - grok:
      match:
        message: "^%{DATA:name}\\s+\\|\\s+%{NUMBER:TOTAL:int}\\s+\\|\\s+%{NUMBER:FAIL:int}\\s+\\|\\s+%{NUMBER:FailNor:int}\\s+\\|\\s+%{NUMBER:FailErr:int}\\s+\\|\\s+%{NUMBER:SUMVAL:int}\\s+\\|\\s+%{NUMBER:AVG_ms:float}\\s+\\|\\s+%{NUMBER:MAX_ms:float}\\s+\\|\\s+%{NUMBER:MIN_ms:float}\\s+\\|\\s+%{NUMBER:gt_2ms:int}\\s+\\|\\s+%{NUMBER:gt_10ms:int}\\s+\\|\\s+%{NUMBER:gt_50ms:int}\\s+\\|\\s+%{NUMBER:gt_100ms:int}\\s+\\|\\s+%{DATA:MAX_RECORD}\\s+\\|"

output.elasticsearch:
  hosts: ["localhost:9200"]
  index: "table-logs-%{+yyyy.MM.dd}"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 16:34:56