我的logstash输入接收看起来像这样的jsons:
{"src":"comp1.google.com","dst":"comp2.yehoo.com","next_hope":"router4.ccc.com"}
并且json看起来像这样(某些键可以保存ip而不是主机名:
{"src":"comp1.google.com","dst":"192.168.1.20","next_hope":"router4.ccc.com"}
我想删除fqdn,如果它包含ip(忽略它),请将其保留为ip
我尝试了这个,但它不起作用
filter {
grok {
match => {
"src" => "%{IP:src}"
"src" => "%{WORD:src}"
}
overwrite => ["src"]
break_on_match => true
}
grok {
match => {
"dst" => "%{IP:dst}"
"dst" => "%{WORD:dst}"
}
overwrite => ["dst"]
break_on_match => true
}
grok {
match => {
"next_hope" => "%{IP:next_hope}"
"next_hope" => "%{WORD:next_hope}"
}
overwrite => ["next_hope"]
break_on_match => true
}
}
这个过滤器在第一个json上运行良好。 但这不适用于第二个json(dst键) 我得到了这个结果:
{
"src" => "comp1",
"dst" => "192",
"next_hope" => "router4"
}
我希望dst字段保留原始值,因为他有ip地址而不是主机名。
我期望的结果是:
{
"src" => "comp1",
"dst" => "192.168.1.20",
"next_hope" => "router4"
}
任何想法? 也有可能在1 grok过滤器中完成所有这些技巧吗?
答案 0 :(得分:0)
你的问题是WORD的正则表达式匹配一个数字。最简单的方法是保护grok,使它们不运行IP地址:
if [src] !~ /\d+\.\d+\.\d+\.\d+/ {
grok {
match => {
"src" => "%{WORD:src}"
}
overwrite => ["src"]
}
}
对其他领域重复一遍。