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

如何编写适配两类日志的GROK表达式并捕获context字段?

解决GROK表达式匹配两类日志的问题

问题原因

你原来的GROK表达式中,末尾的[\s]?{%{GREEDYDATA:context}}是强制匹配规则,但第二行日志没有大括号包裹的context内容,导致匹配失败。同时,%{GREEDYDATA:message}会匹配到行尾,即便第一行也会把context部分包含进message字段,不符合需求。

调整后的GROK表达式

\[%{TIMESTAMP_ISO8601:log_timestamp}\] %{WORD:app_environment}.%{LOGLEVEL:log_level}: %{DATA:message}(?:\s+{%{GREEDYDATA:context}})?

关键调整说明

  • 将%{GREEDYDATA:message}替换为%{DATA:message}:DATA会匹配除换行外的任意字符,但不会一直占用到行尾,给后续可选的context部分留出匹配空间。
  • 用(?:\s+{%{GREEDYDATA:context}})?定义可选匹配组:
    • (?:...)是非捕获组,避免额外生成无用字段;
    • \s+匹配message与context之间的一个或多个空格;
    • ?标记整个组为可选,既适配带context的日志行,也适配不带context的日志行。

匹配效果

  • 第一行日志:message字段捕获Creating fake logs for testing purposes,context字段捕获"hostname":"my-host-6f5blah599-9p9kb","ip":"190.168.19.251","performance":29.680236
  • 第二行日志:message字段捕获Creating simple fake logs for testing purposes,context字段无值(或为null)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 23:51:01