Elastalert 在一个文件中简化了多个规则
Posted
技术标签:
【中文标题】Elastalert 在一个文件中简化了多个规则【英文标题】:Elastalert simplified multiple rules in one file 【发布时间】:2020-10-07 10:32:46 【问题描述】:我正在编写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 1
获得 3 次点击和 Filter 2
获得 2 次点击,即 3+2=5 等于 num_events
。
那么,num_events
有什么方法可以检查每个过滤器吗?就像如果Filter 1
获得 5 次点击,Filter 2
获得 3 次点击,那么我可以确认 MY_LOCALHOST01
真的 DOWN 并发送警报。
我不想要多个文件。很难管理/修改。
【问题讨论】:
您可以在单独索引的帮助下处理这个问题吗?如果没问题,我怀疑有一种方法。 我没听懂。独立索引是什么意思? 处理规则逻辑并检查是否发生足够的事件以触发警报的索引。 是的,当然。请建议:-) 您的filters
是否基于同一组字段? domain and status
?
【参考方案1】:
我建议你在这样做之前考虑一下。
要达到预期的效果:
将rule_type
改为change,而不是frequency
保持相同的时间范围。
在status
上监控你想检查它是否是down
在monitor
字段上设置过滤器。
将alert
设置为POST
您可以拥有自己的后端 API,您可以将其重定向到 - 您可以发送已更改的整个文档 - 通过它您可以确定哪个 domain
已关闭。后端 API 可以写入域已关闭的索引。键名是domain_name
。你可以保留一个计数器类的东西来增加。我不确定我们是否可以直接发布太 ES。但文档说明了任何接受 JSON 的端点。
现在您在新索引上设置了 frequency
rule。将您的过滤器设置为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
来实现。
实现所需目标的难度更大。我认为没有比维护单独的文件更好的方法了。这并不比这更难。
【讨论】:
在我测试之前我无法接受答案。但是我为您的解决方法提供了赏金 请尝试让我知道。 我认为,github issue 中有类似的问题。 github.com/Yelp/elastalert/issues/2849你觉得,和这个有关系吗 我觉得和这个有关——elastalert.readthedocs.io/en/latest/ruletypes.html#query-key以上是关于Elastalert 在一个文件中简化了多个规则的主要内容,如果未能解决你的问题,请参考以下文章