从json子字符串中提取字段-Logstash

时间:2019-09-11 09:35:20

标签: logstash elastic-stack logstash-grok

我对Logstash过滤功能还很陌生。我在json字符串下

{
    "changed": false, 
    "msg": "Foo Facts: oma_phase: prd, oma_app: fsd, oma_apptype: obe, oma_componenttype: oltp, oma_componentname: -, oma_peak: pk99, oma_phaselevel: prd"
}

我想提取字段oma_phase, oma_app, oma_apptype, oma_componenttype, oma_componentname, oma_peak & oma_phaselevel

我已经尝试在本机json过滤器下面

filter {
  if [type] == "ansible" {
    json {
      source => "ansible_result"
    }
  }
}

ansible_result是保存上述json值的键。但是,有许多键具有不同的值,但具有相同的ansible_result键。这会创建很多索引键,但我不希望这样。

在提取Foo Facts字段之后,我想要一种可以匹配子字符串oma_*的过滤器。

我某种程度上无法通过grok过滤器来匹配子字符串。如果您能帮助我,那将是非常不错的。

非常感谢。

2 个答案:

答案 0 :(得分:1)

请尝试以下代码:

filter {
    json {
    source => "message"
    }
   }

ansible_result json将被视为一条消息。

答案 1 :(得分:0)

开始时并不困难,但最终设法解决了这一难题。

\"msg\": \"Foo Facts: oma_phase: %{DATA:oma_phase}, oma_app: %{DATA:oma_app}, oma_apptype: %{DATA:oma_apptype},( oma_componenttype: %{DATA:oma_componenenttype},)? oma_componentname: %{DATA:oma_componenentname}, oma_peak: %{DATA:oma_peak}, oma_phaselevel: %{DATA:oma_phaselevel}\"

从日志中,我知道某些日志缺少oma_componenttype。所以我用()?

将其标记为可选字段

没有下面的在线解析器的帮助,这是不可能的。

  1. grokdebug
  2. Grok Constructor