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

使用Grok处理器提取含嵌套结构的JS对象问题

解决Stripe错误日志JS对象的Grok提取问题

问题说明

要从Stripe错误日志里,用Grok处理器把无引号键、含单引号的JS对象提取到stripeError字段,但三次尝试都没达标:

  • 第一次用JSON解析规则,因为JS对象键没加引号、用单引号包裹字符串,直接解析失败;
  • 第二次用keyvalue模式,搞不定嵌套JS对象,还把部分键转成了数组;
  • 第三次专门针对嵌套结构写规则,虽然提取出内容,但生成了数组,还漏掉了myCustomKeyToTest字段。

可行解决方案

方法一:转合法JSON后解析(推荐)

Grok处理不规则JS对象容易踩坑,先把JS对象转成标准JSON再解析,更稳定:

  1. 先用Grok把整个JS对象内容提取到临时字段:
    stripeError: %{DATA:stripeError_raw}
    
  2. 用mutate插件替换字符,把JS对象转成合法JSON:
    mutate {
      gsub => [
        # 给无引号的JS键加上双引号
        "stripeError_raw", "([a-zA-Z_][a-zA-Z0-9_]*):", '"\1":',
        # 把单引号换成双引号
        "stripeError_raw", "'", '"'
      ]
    }
    
  3. 最后用json插件解析到stripeError字段:
    json {
      source => "stripeError_raw"
      target => "stripeError"
    }
    

方法二:纯Grok模式(适配特定结构)

如果必须用纯Grok,针对你的日志结构编写精准规则(注意:字段顺序或结构变化时会失效):
假设日志里的JS对象格式为:

stripeError: {id: 'err_123', message: 'Payment failed', metadata: {user_id: 456, myCustomKeyToTest: 'test_val'}, code: 'card_declined'}

对应的Grok规则:

stripeError: {id:%{SPACE}'%{DATA:stripeError.id}'%{DATA},message:%{SPACE}'%{DATA:stripeError.message}'%{DATA},metadata:%{SPACE}{user_id:%{SPACE}%{NUMBER:stripeError.metadata.user_id},%{SPACE}myCustomKeyToTest:%{SPACE}'%{DATA:stripeError.metadata.myCustomKeyToTest}'}%{DATA},code:%{SPACE}'%{DATA:stripeError.code}'}

这个规则会精准匹配每个字段,包括嵌套的myCustomKeyToTest,避免生成数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 07:57:08