logstash grok 从主机名和 igone ip 中删除 fqdn
logstash grok remove fqdn from hostname and igone ip
我的 logstash 输入收到 json 看起来像这样的:
{"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 过滤器中完成所有这些技巧吗?
您的问题是 WORD 的正则表达式与数字匹配。最简单的做法是保护 grok,这样它们就不会 运行 获取 IP 地址:
if [src] !~ /\d+\.\d+\.\d+\.\d+/ {
grok {
match => {
"src" => "%{WORD:src}"
}
overwrite => ["src"]
}
}
并对其他字段重复此操作。
我的 logstash 输入收到 json 看起来像这样的:
{"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 过滤器中完成所有这些技巧吗?
您的问题是 WORD 的正则表达式与数字匹配。最简单的做法是保护 grok,这样它们就不会 运行 获取 IP 地址:
if [src] !~ /\d+\.\d+\.\d+\.\d+/ {
grok {
match => {
"src" => "%{WORD:src}"
}
overwrite => ["src"]
}
}
并对其他字段重复此操作。