最近刚把生产的ELK搭建完成,前面文章也有介绍,然后就在思考把日志监控告警也做起来,因为人力问题,既要处理生产问题,又要做一些日常运维工作,所以日志监控的调研和完成就放在周末来做了。
简单说下,目前的运维现状,运维部门是新建立的,之前都是研发自管的,各自玩各自的,所以有蛮多的问题,有很多非标的建设,其实这种是很痛苦,最近在做的话,就是梳理不同的系统。
基本就是从0到1的建设吧,之前在建设elk的时候,其实也有考虑过,后续的日志监控要怎么做,本来最初的想法是自己去写,但是时间来不及,也没有那么多的精力去做这些事。
在很早之前的话,是有用过一些插件的,elasticalert,sentinl,前者的话,很早之前就不更新了,后者的话,目前也是只支持到7版本,所以就看到了elastalert2,看了下最新的更新是在近期,而且文档也很完善,虽然都是英文。
elastalert2参考资料:
文档:https://elastalert2.readthedocs.io/en/latest/index.htmlgithub地址:https://github.com/jertel/elastalert2
这个插件的话,是支持docker部署及k8上部署的,相关的docker file及helm文件都有提供,基本是开箱即用了。
我这里是直接用本地python起的,有docker或者k8需求的,可以自己去看下。
所需软件及版本:
python 3.10opensll 1.1.1 (python 3.10需要)
安装python的话,这里就不细讲了
安装步骤:
pip install elastalert2 (可能会有setuptools版本低的情况,自行更新)git clone https://github.com/jertel/elastalert2.gitpython setup.py install
两个配置文件:
一个是基础配置,在examples下面有基础配置
#必须配置项#告警规则目录rules_folder: examples/rulesrun_every:minutes: 1buffer_time:minutes: 15es_host: es ipes_port: 9200#非必须配置#因为我是开启了鉴权的,所有需要开启ssl认证use_ssl: Truees_username: useres_password: passwdca_certs: ./http_ca.crt#会建立一个对应d的索引,后面可以直接去建立writeback_index: elastalert_status#retry window for failed alerts.alert_time_limit:days: 2
然后就是告警规则的配置了
默认是在examples下面的rules文件夹下,已经有蛮多的基础配置了,可以根据需要去配置,我这里配置了一个frequency类型的作为测试。
frequency这种类型的话,更符合日常的一个告警措施,可以根据时间范围内,出现的次数进行预警。
支持蛮多的告警途径,可以看下官方的介绍,我这里用到的是post途径,然后对数据进行处理,通过企微机器人进行告警,之前的prometheus也是通过这个告警的,数据格式不同,做了下处理。
支持的告警途径:

关于rule的配置可以看下:
#可以针对字段做一些添加,这个策略的话,就是30分钟内出现50次404就告警#query 也可以根据一些实际的需求进行调整#而且支持多个rule配置文件name: "Exemple webhook alert"type: frequencyindex: ng*use_strftime_index: truefilter:- query:query_string:query: "status: 404"num_events: 50timeframe:hours: 0.5realert:minutes: 0include: ["time_local","fields.host_ip"]alert_text: "Alerts at {0} on the host {1}.\n```"alert_text_args: ["timestamp","status"]alert: posthttp_post_url: "http://192.168.200.9:5001"
在启动之前,需要做一个index的初始化,直接执行:
如果开了鉴权的,也可以做个测试,是否可以连通elasticsearch
$elastalert-create-indexNew index name (Default elastalert_status)Name of existing index to copy (Default None)New index elastalert_status createdDone!
rule配置文件准备好的,也可以做个测试,检测配置文件是否正常
通过如下命令可以完成:
#这个命令也可以通过 -h 然后帮助#这条命令只是检测配置文件是否正常#如果要确认是告警是否能触发的话,需要加 --alertelastalert-test-rule ./examples/rules/exemple_discord_any.yaml --config=./examples/config.yaml
其实在最开始我测试的时候,一直报0hit,其实是索引配置的有点问题,可以自己去多测试几次。
就是这个问题,不过这个回答,也只是建议

当你加了--alert去测试的时候,如果有匹配到的,那么就可以触发告警了,类似这样

企微机器人上实际的效果是这样的:

当然了,告警里面的一些字段的话,可以自己去定义,这个只是一个初版,整个路走通了。
后面的话,可能就是具体的一些日志关键字,增加告警恢复的策略等,后面有时间的话,再来更新下。




