有人能帮我弄一下米制过滤器吗。我想设置日志存储以检查日志级别=每5s的错误,如果日志级别=错误超过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
}
}
}
}发布于 2017-03-29 14:15:55
社论:
我不是metrics {}过滤器的粉丝,因为它打破了假设。Logstash是多线程的,度量是只在线程中保持状态的过滤器之一。如果使用它,则需要注意,如果运行4个管道工作程序,则有4个独立的线程保持自己的状态。这打破了“进入logstash”的所有事件都将“由度量过滤器”计算的假设。
对于您的用例,我建议不要使用Logstash发出这封电子邮件,而是依赖于访问备份存储的外部轮询机制。
因为这是度量筛选器,我强烈建议您将筛选器的数量设置为1,这是logstash启动时的-w命令行选项。您将失去并行性,但您将获得单个筛选器查看所有事件的能力。如果你不这样做,你可以得到的情况下,所有,比方说,6个线程看到一个错误事件;你将收到六封电子邮件。
您的配置可以使用一些更新。建议向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 {}过滤器在刷新时创建一个新事件,而不是修改现有事件。您需要使用筛选器捕获新事件。
https://stackoverflow.com/questions/43072292
复制相似问题