我正在使用logstash
,elasticsearch
和kibana
来分析我的日志。
当特定字符串通过logstash中的email
输出进入日志时,我通过电子邮件发出警报:
email {
match => [ "Session Detected", "logline,*Session closed*" ]
...........................
}
这很好用。
现在,我想提醒一个字段的计数(超过阈值时):
例如,如果user
是字段,我想在唯一身份用户数超过5时发出警告。
这可以通过logstash中的email
输出完成吗?
请帮忙。
修改 正如@Alcanzar告诉我做的那样:
配置文件:
if [server] == "Server2" and [logtype] == "ABClog" {
grok{
match => ["message", "%{TIMESTAMP_ISO8601:timestamp} %{HOSTNAME:server-name} abc\[%{INT:id}\]:
\(%{USERNAME:user}\) CMD \(%{GREEDYDATA:command}\)"]
}
metrics {
meter => ["%{user}"]
add_tag => "metric"
}
}
所以根据上面的内容,对于server2
和abclog
我有一个用于解析我的文件的grok模式,并且在grok解析的user
字段上我想要指标应用。
我在上面的配置文件中做了这个,但是当我用-vv
检查logstash控制台时,我的行为很奇怪。
因此,如果文件中有9个日志行,则首先解析9个日志行,之后它会启动度量标准部分,但message
字段不是日志文件中的 logline 但是它是我的PC的用户名,因此它提供_grokparsefailure
。像这样:
output received {
:event=>{"@version"=>"1", "@timestamp"=>"2014-06-17T10:21:06.980Z", "message"=>"my-pc-name",
"root.count"=>2, "root.rate_1m"=>0.0, "root.rate_5m"=>0.0, "root.rate_15m"=>0.0,
"abc.count"=>2, "abc.rate_1m"=>0.0, "abc.rate_5m"=>0.0, "abc.rate_15m"=>0.0, "tags"=>["metric",
"_grokparsefailure"]}, :level=>:debug, :file=>"(eval)", :line=>"137"
}
感谢任何帮助。
答案 0 :(得分:7)
我相信你需要的是http://logstash.net/docs/1.4.1/filters/metrics。
您希望使用metrics
代码计算活动费率,然后在电子邮件的thing.rate_1m
声明中使用thing.rate_5m
或if
输出
例如:
filter {
if [message] =~ /whatever_message_you_want/ {
metrics {
meter => "user"
add_tag => "metric"
}
}
}
output {
if "metric" in [tags] and [user.rate_1m] > 1 {
email { ... }
}
}
答案 1 :(得分:0)
在logstash方面的聚合相当有限。它还会增加状态大小,因此内存消耗可能会增长。在Elasticsearch层上运行的警报提供了更多的自由和可能性。
以下博客提供了ELK之上的Logz.io警报:http://logz.io/blog/introducing-alerts-for-elk/