有人可以帮助我使用我的指标过滤器。我想设置logstash以检查每5秒的log-level = Error,如果log-level = ERROR超过1,则应发送电子邮件。我正在使用logstash 2.2.4
input {
file {
path => "/var/log/logstash/example"
start_position => beginning
}
}
filter {
grok{
match => { "message" => "\[%{TIMESTAMP_ISO8601:timestamp}\]\[%{LOGLEVEL:log-level}\s*\]" }
}
if [log-level] == "ERROR" {
metrics {
meter => [ "log-level" ]
flush_interval => 5
clear_interval => 5
}
}
}
output {
if [log-level] == "ERROR" {
if [log-level][count] < 1 {
email {
port => 25
address => "mail.abc.com"
authentication => "login"
use_tls => true
from => "alerts@logstash.com"
subject => "logstash alert"
to => "siya@abc.com"
via => "smtp"
body => "here is the event line %{message}"
debug => true
}
}
}
}
答案 0 :(得分:0)
编辑:
我不是metrics {}
过滤器的粉丝,因为它打破了假设。 Logstash是多线程的,而metrics是仅在其线程中保持状态的过滤器之一。如果您使用它,您需要注意,如果您运行4个管道工作程序,则有4个独立线程保持其自己的状态。这打破了所有“进入logstash”的事件将被“通过指标过滤器”计算的假设。
对于您的用例,我建议不使用Logstash发布此电子邮件,而是依赖于打击后备存储的外部轮询机制。
因为这是指标过滤器,所以我强烈建议您将filter-workers数设置为1.这是logstash启动时的-w
命令行选项。您将失去并行性,但您将获得单个过滤器查看所有事件的功能。如果不这样做,您可以获得所有例如6个线程都看到ERROR事件的情况;你会收到六封电子邮件。
您的配置可能会使用一些更新。建议在metrics {}
过滤器中添加标签或其他内容。
metrics {
meter => [ "log-level" ]
flush_interval => 5
clear_interval => 5
add_tag => "error_metric"
}
}
这样,您就可以更好地过滤电子邮件细分。
output {
if [tags] include "error_metric" and [log-level][count] > 1 {
email {
}
}
}
这是因为metrics {}
过滤器在刷新时会创建一个新事件,而不是修改现有事件。您需要使用过滤器捕获新事件。