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

如何自定义GROK规则提取日志中的纯消息内容?

提取日志纯消息部分的Logstash Grok配置方案

日志格式示例

30-10-22 20:35:36       [DEBUG] [Default]       [Worker]         Sleeping for 10 seconds...

需求

仅提取日志末尾的纯消息内容:Sleeping for 10 seconds...,替换原message字段或生成新字段存储该内容。

原配置问题

原配置中使用%{GREEDYDATA:message_pvt}会匹配整个日志内容,因为它默认从日志开头匹配到结尾,没有排除时间、日志级别等前缀部分。

解决方案

自定义Grok规则

针对该日志格式,编写Grok模式跳过所有前缀内容,仅提取最后部分的纯消息:

# 若需要保留前缀字段(如日志级别),可命名字段
%{DATE} %{TIME}\s+\[%{LOGLEVEL:log-level_pvt}\]\s+\[%{DATA}\]\s+\[%{DATA}\]\s+%{GREEDYDATA:message}

# 若不需要前缀字段,可简化为
%{DATE} %{TIME}\s+\[%{LOGLEVEL}\]\s+\[%{DATA}\]\s+\[%{DATA}\]\s+%{GREEDYDATA:message}

其中:

  • \s+匹配任意数量的空白字符(适配日志中多个空格的分隔)
  • 前面的模式用于匹配并跳过时间、日志级别、模块、组件等前缀内容
  • %{GREEDYDATA:message}提取剩余的纯消息部分

修改后的Filter配置

方案1:覆盖原message字段

filter {
    grok {
        match => { "message" => "%{DATE} %{TIME}\s+\[%{LOGLEVEL:log-level_pvt}\]\s+\[%{DATA}\]\s+\[%{DATA}\]\s+%{GREEDYDATA:message}" }
        overwrite => ["message"] # 用纯消息覆盖原完整日志内容
    }
}

方案2:生成新字段存储纯消息

如果不想覆盖原message字段,可将纯消息存入message_pvt:

filter {
    grok {
        match => { "message" => "%{DATE} %{TIME}\s+\[%{LOGLEVEL:log-level_pvt}\]\s+\[%{DATA}\]\s+\[%{DATA}\]\s+%{GREEDYDATA:message_pvt}" }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 05:55:24