es告警功能——elastalert
ElasticSearch可以使用X-Pack进行报警功能,由于其是收费使用,而当下也仅是使用告警功能。
所以这里寻求的是开源解决方案,elastalert,在GitHub中star数量5K+,已经算是很受欢迎的项目了,可以配合kibana
进行使用,适用于所有版本的Elasticsearch,而且官方使用教程还挺详细,可以参考进行使用。
使用elastalert需要预先配置rule.yaml,根据软件介绍,选择适合自身规则的软件告警规则,根据告警规则填充详细的文档。
我们可以定义多个yaml,同时进行多种告警。对于每个rule.yaml,其包含一种告警发生规则,即阈值;包含一些告警方式,即email、jira等。
安装Elastalert
安装之前需要准备好Python的环境,这里已经提前安装完成,Python2.7
。
拉取最新的elastalert仓库
1 | pip install elastalert |
安装模块:
1 | pip install "setuptools>=11.3" |
安装成功后:
1 | ~$ ls /usr/local/bin/elastalert* |
- elastalert-create-index ElastAlert将有关其查询及其警报的信息和元数据保存回Elasticsearch。这对于审计,调试很有用,它允许ElastAlert重新启动并从中断的位置恢复。并不实际影响ElastAlert运行,但强烈推荐这么做。
- elastalert-rule-from-kibana 从 Kibana 已保存的仪表盘中读取 Filtering 设置,帮助生成
config.yaml
里的配置。不过注意,它只会读取 filtering,不包括 queries。 - elastalert-test-rule 测试自定义配置中的 rule 设置。
- elastalert运行elastalert。
设置Elasticsearch
ElastAlert将有关其查询及其警报的信息和元数据保存回Elasticsearch。这对于审计,调试很有用,它允许ElastAlert重新启动并从中断的位置恢复。并不实际影响ElastAlert运行,但强烈推荐这么做。
会需要输入es host port等参数,其他默认即可。
1 | $ elastalert-create-index |
设置配置文件config.yaml和规则Rule
配置文件
1 | `$ cp ~/elastalert/config.yaml.example ~/elastalert/config.yaml$ vi ~/elastalert/config.yaml` |
调试时,我仅配置:
1 | # This is the folder that contains the rule yaml files |
配置文件上的参数意义官方都已经注释。
官方文档中同样也有注解。
配置规则
特别重要:监控的index中都必须存在@timestamp
字段;go语言中使用time格式进行存储。
1 | "@timestamp" : { |
基于example_rules/example_percentage_match.yaml
更改。
1 | name: Example Percentage Match |
文件作为演示,数据都已被更改
使用elastalert-test-rule
对规则进行测试。
1 | `elastalert-test-rule ~/elastalert/example_rules/example_frequency.yaml` |
正常出现Successfully loaded Example Percentage Match
,然后实际输出也并没报错,那到这里就规则至少文件是没问题的了。
参考:Rule Types and Configuration Options
若是想要监控特定订单下的bin错误,那就需要增加查询条件:
1 | match_bucket_filter: |
使用HTTP POST报警
根据官方文档,查看配置参数的含义:
1 | alert: post |
alert: post
:指定警报方式;
http_post_url: "http://example.com/api"
:post地址,route方法同样也为post
;
http_post_payload
:这个参数表示是否需要重定义ElastAlert的键值,例如设置了ip: clientip
,那么原来数据中的clientip
键,将被替换成ip
,也可以填入没有的键值,只不过value是null
。可以不需要此参数,表示直接返回ES的数据。
http_post_static_payload
:这个表示每次警报发送固定的信息,也就是每次警报都会带上apikey: abc123
。
例如在上面基础上去掉了http_post_payload
,返回的json数据是:
1 | {"num_hits": 1, "@timestamp": "2019-03-28T06:54:51.043483Z", "denominator": 1, "bin.keyword": "2142134038", "num_matches": 1, "percentage": 100.0, "order": "TDRAM19012"} |
运行
最后,运行命令:
1 | python -m elastalert.elastalert --config ./config.yaml |
或者单独执行 rules_folder
里的某个 rule:
1 | python -m elastalert.elastalert --config ./config.yaml --rule ./examele_rules/example_percentage_match.yaml |
调试时使用
1 | python -m elastalert.elastalert --verbose --rule example_rules/example_percentage_match.yaml --config config.yaml --debug |
启动后无error错误打印,代表程序运行成功。
测试
向ES index pro_record
插入一些数据,因为制定的规则是在一分钟之内,只要有符合匹配规则的数据插入,其百分比超过100%,就将会报错。
若打印出现类似于:
1 | ... |
表示规则已正常运行,且能成功进行匹配。
参考
介绍命令 ElastAlert
官方文档 Writing Filters For Rules
对各项报警进行分析,其是使用post方式告警 基于Elastalert的安全告警剖析
本文标题:es告警功能——elastalert
文章作者:小师
发布时间:2019-03-27
最后更新:2022-05-04
原始链接:chunlife.top/2019/03/27/es告警功能——elastalert/
版权声明:本站所有文章均采用知识共享署名4.0国际许可协议进行许可