最近刚把生产的ELK搭建完成,前面文章也有介绍,然后就在思考把日志监控告警也做起来,因为人力问题,既要处理生产问题,又要做一些日常运维工作,所以日志监控的调研和完成就放在周末来做了。

简单说下,目前的运维现状,运维部门是新建立的,之前都是研发自管的,各自玩各自的,所以有蛮多的问题,有很多非标的建设,其实这种是很痛苦,最近在做的话,就是梳理不同的系统。

基本就是从0到1的建设吧,之前在建设elk的时候,其实也有考虑过,后续的日志监控要怎么做,本来最初的想法是自己去写,但是时间来不及,也没有那么多的精力去做这些事。

在很早之前的话,是有用过一些插件的,elasticalert,sentinl,前者的话,很早之前就不更新了,后者的话,目前也是只支持到7版本,所以就看到了elastalert2,看了下最新的更新是在近期,而且文档也很完善,虽然都是英文。

elastalert2参考资料:

文档:https://elastalert2.readthedocs.io/en/latest/index.html
github地址:https://github.com/jertel/elastalert2

这个插件的话,是支持docker部署及k8上部署的,相关的docker file及helm文件都有提供,基本是开箱即用了。

我这里是直接用本地python起的,有docker或者k8需求的,可以自己去看下。

所需软件及版本:

python 3.10
opensll 1.1.1 (python 3.10需要)

安装python的话,这里就不细讲了

安装步骤:

pip install elastalert2 (可能会有setuptools版本低的情况,自行更新)
git clone https://github.com/jertel/elastalert2.git
python setup.py install

两个配置文件:

一个是基础配置,在examples下面有基础配置

#必须配置项
#告警规则目录
rules_folder: examples/rules
run_every:
  minutes: 1
buffer_time:
  minutes: 15
es_host: es ip
es_port: 9200
#非必须配置
#因为我是开启了鉴权的,所有需要开启ssl认证
use_ssl: True
es_username: user
es_password: passwd
ca_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也是通过这个告警的,数据格式不同,做了下处理。

支持的告警途径:

elk登录出现503 elk 告警_linux

关于rule的配置可以看下:

#可以针对字段做一些添加,这个策略的话,就是30分钟内出现50次404就告警
#query 也可以根据一些实际的需求进行调整
#而且支持多个rule配置文件
name: "Exemple  webhook alert"
type: frequency
index: ng*
use_strftime_index: true
filter:
- query:
    query_string:
      query: "status: 404"
num_events: 50
timeframe:
  hours: 0.5
realert:
  minutes: 0
include: ["time_local","fields.host_ip"]
alert_text: "Alerts at {0} on the host {1}.\n```"
alert_text_args: ["timestamp","status"]
alert: post
http_post_url: "http://192.168.200.9:5001"

在启动之前,需要做一个index的初始化,直接执行:

如果开了鉴权的,也可以做个测试,是否可以连通elasticsearch

$elastalert-create-index
New index name (Default elastalert_status)
Name of existing index to copy (Default None)
New index elastalert_status created
Done!

rule配置文件准备好的,也可以做个测试,检测配置文件是否正常

通过如下命令可以完成:

#这个命令也可以通过 -h 然后帮助
#这条命令只是检测配置文件是否正常
#如果要确认是告警是否能触发的话,需要加 --alert
elastalert-test-rule ./examples/rules/exemple_discord_any.yaml --config=./examples/config.yaml

其实在最开始我测试的时候,一直报0hit,其实是索引配置的有点问题,可以自己去多测试几次。

就是这个问题,不过这个回答,也只是建议

elk登录出现503 elk 告警_linux_02

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

elk登录出现503 elk 告警_运维_03

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

elk登录出现503 elk 告警_elasticsearch_04

当然了,告警里面的一些字段的话,可以自己去定义,这个只是一个初版,整个路走通了。

后面的话,可能就是具体的一些日志关键字,增加告警恢复的策略等,后面有时间的话,再来更新下。