5

我正在使用logstash,elasticsearchkibana分析我的日志。email当特定字符串通过logstash中的输出进入日志时,我会通过电子邮件发出警报:

email {
        match => [ "Session Detected", "logline,*Session closed*" ]
...........................
}

这工作正常。

现在,我想提醒一个字段的计数(当超过阈值时):

例如,如果user是字段,我想在唯一用户数超过 5 时发出警报。

这可以通过emaillogstash中的输出来完成吗?
请帮忙。

编辑: 正如@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"
            }   

        }

所以根据上面,server2abclog有一个 grok 模式来解析我的文件,并且在usergrok 解析的字段上,我希望应用度量标准

我在上面的配置文件中这样做了,但是当我使用-vv.

因此,如果文件中有 9 条日志行,它首先解析 9 条,然后开始公制部分,但该message字段不是日志文件中的日志行,而是我的 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"
    }

任何帮助表示赞赏。

4

2 回答 2

7

我相信您需要的是http://logstash.net/docs/1.4.1/filters/metrics

您可能希望使用metrics标签来计算事件发生率,然后在电子邮件输出周围的语句中使用thing.rate_1mor 。thing.rate_5mif

例如:

filter {
  if [message] =~ /whatever_message_you_want/ {
    metrics {
        meter =>  "user"
        add_tag =>  "metric"
    }
  }
}

output {
  if "metric" in [tags] and [user.rate_1m] > 1 {
   email { ... }
  }
}
于 2014-06-16T14:22:27.043 回答
0

在 logstash 端的聚合是相当有限的。它还增加了状态大小,因此内存消耗可能会增加。在 Elasticsearch 层上运行的警报提供了更多的自由度和可能性。

以下博客中提供了基于 ELK 的 Logz.io 警报:http: //logz.io/blog/introducing-alerts-for-elk/

于 2015-05-17T10:20:46.473 回答