ELK Stack Filter 和 Output 部分的 If 语句
If Statement in ELK Stack Filter and Output Part
我有很多主机要通过 ELK 堆栈可视化进行记录。(~1000 台机器)所以我需要做这部分 apprx。 1000次如下图
filter {
if [host] =~ /10\.1\.1\.5/ {
grok {
add_tag => [ "firewall" ]
match => [ "message", "<(?<evtid>.*)>(?<datetime>(?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\s+(?:(?:0[1-9])|(?:[12][0-9])|(?:3[01])|[1-9]) (?:2[0123]|[01]?[0-9]):(?:[0-5][0-9]):(?:[0-5][0-9])) (?<prog>.*?): (?<msg>.*)" ]
}
mutate {
gsub => ["datetime"," "," "]
}
date {
match => [ "datetime", "MMM dd HH:mm:ss" ]
timezone => "Europe/Istanbul"
}
mutate {
replace => [ "message", "%{msg}" ]
}
mutate {
remove_field => [ "msg", "datetime" ]
}
}
}
这个输出部分再次~1000次
output {
if [host] =~ /10\.1\.1\.5/ {
elasticsearch { host => localhost }
}
}
我想在这样的 if 语句中做我该如何做,AND,OR 等?
if [host] =~ /10\.1\.1\.5/ && /10\.1\.1\.6/ && /10\.1\.1\.7/ && /10\.1\.1\.8/ ... {}
或者有其他方法可以做到这一点吗?
As documented Logstash 支持例如and
和 or
在条件表达式中,所以你 可以 说
if [host] =~ /^10\.1\.1\.5$/ or [host] =~ /^10\.1\.1\.6$/ {
...
}
但这不会很高效。相反,尝试找到匹配多个主机(可能一次全部 1000 个)的正则表达式。例如,如果您想包括整个 10.1.1.0/24 子网,请执行以下操作:
if [host] =~ /^10\.1\.1\./ {
...
}
如果那不可能,另一种选择是枚举所有 IP 地址并使用 in
运算符:
if [host] in ["10.1.1.5", "10.1.1.6", "10.1.1.7"] {
...
}
最后一个选项是以某种方式标记来自这些主机的邮件,这样您就不必在 IP 地址上设置条件。这似乎是最好的选择,但其可行性取决于日志的收集和运输方式。
我有很多主机要通过 ELK 堆栈可视化进行记录。(~1000 台机器)所以我需要做这部分 apprx。 1000次如下图
filter {
if [host] =~ /10\.1\.1\.5/ {
grok {
add_tag => [ "firewall" ]
match => [ "message", "<(?<evtid>.*)>(?<datetime>(?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\s+(?:(?:0[1-9])|(?:[12][0-9])|(?:3[01])|[1-9]) (?:2[0123]|[01]?[0-9]):(?:[0-5][0-9]):(?:[0-5][0-9])) (?<prog>.*?): (?<msg>.*)" ]
}
mutate {
gsub => ["datetime"," "," "]
}
date {
match => [ "datetime", "MMM dd HH:mm:ss" ]
timezone => "Europe/Istanbul"
}
mutate {
replace => [ "message", "%{msg}" ]
}
mutate {
remove_field => [ "msg", "datetime" ]
}
}
}
这个输出部分再次~1000次
output {
if [host] =~ /10\.1\.1\.5/ {
elasticsearch { host => localhost }
}
}
我想在这样的 if 语句中做我该如何做,AND,OR 等?
if [host] =~ /10\.1\.1\.5/ && /10\.1\.1\.6/ && /10\.1\.1\.7/ && /10\.1\.1\.8/ ... {}
或者有其他方法可以做到这一点吗?
As documented Logstash 支持例如and
和 or
在条件表达式中,所以你 可以 说
if [host] =~ /^10\.1\.1\.5$/ or [host] =~ /^10\.1\.1\.6$/ {
...
}
但这不会很高效。相反,尝试找到匹配多个主机(可能一次全部 1000 个)的正则表达式。例如,如果您想包括整个 10.1.1.0/24 子网,请执行以下操作:
if [host] =~ /^10\.1\.1\./ {
...
}
如果那不可能,另一种选择是枚举所有 IP 地址并使用 in
运算符:
if [host] in ["10.1.1.5", "10.1.1.6", "10.1.1.7"] {
...
}
最后一个选项是以某种方式标记来自这些主机的邮件,这样您就不必在 IP 地址上设置条件。这似乎是最好的选择,但其可行性取决于日志的收集和运输方式。