用于日志级别的Logstash指标筛选器

时间:2017-03-28 14:29:04

标签: logstash logstash-grok logstash-configuration

有人可以帮助我使用我的指标过滤器。我想设置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
      }
    }
  }
}

1 个答案:

答案 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 {}过滤器在刷新时会创建一个新事件,而不是修改现有事件。您需要使用过滤器捕获新事件。