首页 > 解决方案 > Elastalert 在一个文件中简化了多个规则

问题描述

我正在Elastalart为心跳编写规则,即如果服务或机器停机,我应该得到通知。现在我可以为每个文件创建一个服务规则,如下所示。

name: My Alert
type: frequency
index: heartbeat-*
num_events: 5
timeframe:
    minutes: 2

filter:
- query:
    query_string:
      query: "url.domain: MY_LOCALHOST01.local AND monitor.status: down"

alert:
- "email"

email:
- "user@example.in"

有什么办法,我可以指定多个规则吗??...我可以指定多个过滤器,如下所示

...
filter:
- query: # Filter 1
    query_string:
      query: "url.domain: MY_LOCALHOST01.local AND monitor.status: down"

- query: # Filter 2
    query_string:
      query: "url.domain: MY_LOCALHOST02.local AND monitor.status: down"
...

但 Elatalert 考虑num_events所有过滤器。例如,我不想对获得Filter 13 次点击和Filter 22 次点击的情况发出警报,即 3+2=5 等于num_events.

那么,有什么方法num_events可以检查每个过滤器吗?就像如果Filter 1获得 5 次点击并Filter 2获得 3 次点击,那么我可以确认MY_LOCALHOST01真的是 DOWN 并发送警报。

我不想要多个文件。很难管理/修改。

标签: elasticsearchelastalertelastic-beats

解决方案


我建议你在这样做之前考虑一下。

为了达到预期的效果:

  1. 改成零钱rule_type_ _frequency

  2. 保持相同的时间范围。

  3. 根据您的需要进行监控status以检查它是否down

  4. monitor在字段上设置过滤器。

  5. 设置alertPOST

  6. 您可以拥有自己的后端 API,您可以将其重定向到 - 您可以发送已更改的整个文档 - 通过它您可以确定哪个domain已关闭。后端 API 可以写入域已关闭的索引。键名是domain_name. 你可以保留一个计数器类的东西来增加。我不确定我们是否可以直接发布太 ES。但是文档说任何接受 JSON 的端点。

  7. 现在您已经frequency在新索引上设置了规则。将您的过滤器设置为OR- domain1_down : 5 OR domain2_down:5。你可以有同样的email警报。但是您需要从中派生出哪个域,key或者您可以在索引中再添加一个字段以供警报使用。

这里最棘手的一点是your config says you want to find 5 downtimes of a domain in 2 minutes of timeframe

通过上述步骤,您可以查看它是否下降了 5 次。但不是在 2 分钟的时间范围内。我想你可以通过previous_down_time在额外索引中保留一个字段来实现这一点。

这是实现所需目标的更难的方法。我认为没有比维护单独的文件更好的方法了。这并不比这更难。


推荐阅读