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

多模式日志场景下如何用grok提取status值并配置ingest pipeline

解决方案

你不需要编写匹配全量日志结构的grok pattern,只需要定位到status:片段做局部提取即可,grok支持只捕获目标内容,忽略日志其他部分的格式差异。

1. 核心grok pattern

直接使用如下pattern即可适配绝大多数结构不统一的日志,只要日志中包含status:数字的格式就能精准提取:

%{DATA}status:%{INT:status}%{DATA}
  • %{DATA}会匹配任意非换行的字符,自动忽略status前后的所有其他字段内容,不需要关注日志其他部分的结构差异
  • %{INT:status}会将status:后的整数提取为名为status的字段,类型为整数

2. 完整ingest pipeline配置示例

{
  "processors": [
    {
      "grok": {
        "field": "message",
        "patterns": [
          "%{DATA}status:%{INT:status}%{DATA}"
        ],
        "ignore_failure": true
      }
    },
    {
      "set": {
        "field": "status_code",
        "value": "successful",
        "if": "ctx?.status == 200"
      }
    },
    {
      "set": {
        "field": "status_code",
        "value": "failed",
        "if": "ctx?.status in [502, 404, 402]"
      }
    }
  ]
}

3. 特殊场景适配

如果部分日志里的status字段带引号,比如"status":"200"的格式,只需要在patterns数组里多补一个兼容规则即可,grok会按顺序匹配,命中第一个规则就会停止:

"patterns": [
  "%{DATA}\"status\":\"%{INT:status}\"%{DATA}",
  "%{DATA}status:%{INT:status}%{DATA}"
]

如果担心误匹配类似xx_status:的字段,可以调整pattern为%{DATA}[^a-zA-Z0-9_]status:%{INT:status}%{DATA},确保status前面没有其他字段名前缀。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 16:15:03