我对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过滤器来匹配子字符串。如果你能帮我解决这个问题,那就太好了。
非常感谢你提前..
发布于 2019-09-12 17:34:30
请尝试以下代码:
filter {
json {
source => "message"
}
}ansible_result json将被视为一条消息。
发布于 2019-09-12 18:00:28
这在一开始并不困难,但最终成功地破解了这个难题。
\"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。因此,我使用()?将其标记为可选字段
如果没有下面在线解析器的帮助,这是不可能的。
https://stackoverflow.com/questions/57886180
复制相似问题