编写grok模式来分割键值对

Ric*_*hie 5 logstash logstash-grok

这是我第一次使用 grok 和 elasticsearch。我正在尝试编写一个 grok 文件来解析以下行。

2017-07-25 10:48:23,477 [[api-my-app-v1-20.0.0].apiHttpListenerConfig.worker.58] INFO  esb.api-my-app-v1.get-blah.http.response - transactionID=f61b8053-70d2-11e7-b274-3639cc5335d0 creationTime=2017-07-25T10:48:23.254+10:00 txnState=END timeTaken=11
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经写了这个 grok...

%{TIMESTAMP_ISO8601:timestamp}\s+%{DATA:thread}\s+%{LOGLEVEL:loglevel}\s+%{JAVACLASS:category}\s+-\s+%{GREEDYDATA:msgbody}
Run Code Online (Sandbox Code Playgroud)

它给了我这个......

{
  "timestamp": [
    [
      "2017-07-25 10:48:23,477"
    ]
  ],
  "YEAR": [
    [
      "2017"
    ]
  ],
  "MONTHNUM": [
    [
      "07"
    ]
  ],
  "MONTHDAY": [
    [
      "25"
    ]
  ],
  "HOUR": [
    [
      "10",
      null
    ]
  ],
  "MINUTE": [
    [
      "48",
      null
    ]
  ],
  "SECOND": [
    [
      "23,477"
    ]
  ],
  "ISO8601_TIMEZONE": [
    [
      null
    ]
  ],
  "thread": [
    [
      "[[api-my-app-v1-20.0.0].apiHttpListenerConfig.worker.58]"
    ]
  ],
  "loglevel": [
    [
      "INFO"
    ]
  ],
  "category": [
    [
      "esb.api-my-app-v1.get-blah.http.response"
    ]
  ],
  "msgbody": [
    [
      "transactionID=f61b8053-70d2-11e7-b274-3639cc5335d0 creationTime=2017-07-25T10:48:23.254+10:00 txnState=END timeTaken=11"
    ]
  ]
}
Run Code Online (Sandbox Code Playgroud)

这几乎就是我想要的。如何将当前结果中的 msgbody 拆分为键值对?

谢谢

bau*_*dsp 5

使用 kv 滤波器:

kv { 
   source => "msgbody" 
}
Run Code Online (Sandbox Code Playgroud)

msgbody您将获得结果中字段中的键对值。如果琴键发生变化,您也不必更改您的 grok 模式。