日志级别的 Logstash 指标过滤器
Logstash metric filter for log-level
有人可以帮助我使用指标过滤器吗?我想设置 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
}
}
}
}
社论:
我不喜欢 metrics {}
过滤器,因为它打破了假设。 Logstash 是多线程的,指标是仅在其线程内保持状态的过滤器之一。如果你使用它,你需要知道如果你是 运行 4 个管道工作者,你有 4 个 independent 线程保持它们自己的状态。这打破了所有即将到来的事件 "into logstash" 都将被计算为 "by the metrics filter".
的假设
对于您的用例,我建议不要使用 Logstash 来发送此电子邮件,而是依赖于访问您的后备存储的外部轮询机制。
因为这是指标过滤器,我强烈建议您将过滤器工作人员的数量设置为 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 {}
过滤器在刷新时会创建一个新事件,而不是修改现有事件。您需要使用过滤器捕捉新事件。
有人可以帮助我使用指标过滤器吗?我想设置 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
}
}
}
}
社论:
我不喜欢 metrics {}
过滤器,因为它打破了假设。 Logstash 是多线程的,指标是仅在其线程内保持状态的过滤器之一。如果你使用它,你需要知道如果你是 运行 4 个管道工作者,你有 4 个 independent 线程保持它们自己的状态。这打破了所有即将到来的事件 "into logstash" 都将被计算为 "by the metrics filter".
对于您的用例,我建议不要使用 Logstash 来发送此电子邮件,而是依赖于访问您的后备存储的外部轮询机制。
因为这是指标过滤器,我强烈建议您将过滤器工作人员的数量设置为 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 {}
过滤器在刷新时会创建一个新事件,而不是修改现有事件。您需要使用过滤器捕捉新事件。