国外公共空间设计网站,高定网站,企业微信开发者工具,新零售分销系统开发前言
公司采用ELK架构搜集业务系统的运行日志#xff0c;以前开发人员只有在业务出现问题的时候#xff0c;才会去kibana上进行日志搜索操作#xff0c;每次都是被用户告知系统出问题了#xff0c;这简直是被啪啪打脸~
于是痛定思痛#xff0c;决定主动出击#xff0c;…前言
公司采用ELK架构搜集业务系统的运行日志以前开发人员只有在业务出现问题的时候才会去kibana上进行日志搜索操作每次都是被用户告知系统出问题了这简直是被啪啪打脸~
于是痛定思痛决定主动出击查阅了许多资料发现ElastAlert这个服务能够对elasticsearch的索引按条件进行监控并在匹配设置的条件时自动触发告警于是决定采用ElastAlert。
重新build ElastAlert2镜像
由于官方的镜像中不包含飞书通知方式因此我们需要重新打包镜像 分别下载ElastAlert2和elastalert-feishu-plugin源码
源码下载地址
https://github.com/jertel/elastalert2
https://github.com/gpYang/elastalert-feishu-plugin拷贝elastalert-feishu-plugin中的elastalert_modules目录到ElastAlert2的根目录下目录结构如图 切换到ElastAlert2目录下编写Dockerfile文件
FROM python:3-slim-buster as builderLABEL descriptionElastAlert 2 Official Image
LABEL maintainerJason ErtelCOPY . /tmp/elastalertRUN mkdir -p /opt/elastalert \
cd /tmp/elastalert \
pip install setuptools wheel \
python setup.py sdist bdist_wheelFROM python:3-slim-buster
ARG GID1000
ARG UID1000
ARG USERNAMEelastalert
COPY --frombuilder /tmp/elastalert/dist/*.tar.gz /tmp/RUN apt update apt -y upgrade \apt -y install jq curl gcc libffi-dev \rm -rf /var/lib/apt/lists/* \pip install /tmp/*.tar.gz \rm -rf /tmp/* \apt -y remove gcc libffi-dev \apt -y autoremove \mkdir -p /opt/elastalert \mkdir -p /usr/local/lib/python3.10/site-packages/elastalert/elastalert_modules \echo #!/bin/sh /opt/elastalert/run.sh \echo set -e /opt/elastalert/run.sh \echo elastalert-create-index --config /opt/elastalert/config.yaml \ /opt/elastalert/run.sh \echo elastalert --config /opt/elastalert/config.yaml \\$\ \ /opt/elastalert/run.sh \chmod x /opt/elastalert/run.sh \groupadd -g ${GID} ${USERNAME} \useradd -u ${UID} -g ${GID} -M -b /opt -s /sbin/nologin \-c ElastAlert 2 User ${USERNAME}COPY ./elastalert_modules/feishu_alert.py /usr/local/lib/python3.10/site-packages/elastalert/elastalert_modules/COPY ./elastalert_modules/__init__.py /usr/local/lib/python3.10/site-packages/elastalert/elastalert_modules/USER ${USERNAME}ENV TZ Asia/ShanghaiWORKDIR /opt/elastalert
ENTRYPOINT [/opt/elastalert/run.sh]构建镜像
docker build -t elastalertfs:1.0 . 我们在物理机上创建/data/elastalertfs目录存放配置文件和报警规则目录及文件 在/data/elastalertfs下编写elastalert的配置文件config.yaml
#指定告警文件存放目录
rules_folder: /opt/elastalert/rules#ElastAlert查询Elasticsearch的频率这个单位可以是几周到几秒不等
run_every:minutes: 1#ElastAlert将缓冲最近的一段时间的结果以防某些日志源不是实时的
buffer_time:minutes: 30#Elasticsearch主机
es_host: 192.168.105.147#Elasticsearch端口
es_port: 9200#es_host上的索引用于元数据存储。这可以是一个未映射的索引但建议你运行。设置一个映射
writeback_index: elastalert_status#如果一个警报因某种原因而失败ElastAlert将重试直到这个时间段过后
alert_time_limit:days: 2在/data/elastalertfs下创建rules目录在目录内创建报警规则文件xxx-xxx_error.yaml可以在该目录下创建多个报警规则文件注意修改index名称、过滤条件、飞书机器人botid等
name: niu_cloud_rule
type: any // 有多种类型不同的类型配置项有不同
index: niu-cloud-logs-*
is_enabled: true#时间触发的次数
#num_events: 1#和num_events参数关联1分钟内出现1次会报警
#timeframe:
# minutes: 1#同一规则的两次警报之间的最短时间。在此时间内发生的任何警报都将被丢弃。默认值为一分钟。
#realert:
# minutes: 0#terms_size: 50use_strftime_index: truefilter:
- query:query_string:query: level.keyword : ERROR AND msg : java*Exception //错误级别是ERROR并且msg字段包含java开头Exception结尾的内容就匹配成功elastalert就会推送报警include: [timestamp,_index, module, level, msg] // 这里是es索引中的字段下边报警模板会使用alert:
- elastalert_modules.feishu_alert.FeishuAlert# 飞书机器人接口地址
feishualert_url: https://open.feishu.cn/open-apis/bot/v2/hook/# 飞书机器人id
feishualert_botid: xxxxxx-xxx-xxxx-xxxx-xxxxxxxxxxx# 告警标题
feishualert_title: niu-cloud业务ERROR异常# 这个时间段内的匹配将不告警适用于某些时间段请求低谷避免误报警
#feishualert_skip:
# start: 01:00:00
# end: 08:00:00# 告警内容使用{}可匹配matches
feishualert_body:【告警主题】: {feishualert_title}\n
【告警时间】: {feishualert_time}\n
【告警模块】: {module}\n
【业务索引】: {_index}\n
【时间戳】: {timestamp}\n
【日志级别】: {level}\n
【错误日志】: {msg}docker方式运行并挂载配置目录
docker run -d --restartalways --name elastalertfs -v /data/elastalertfs/config.yaml:/opt/elastalert/config.yaml -v /data/elastalertfs/rules:/opt/elastalert/rules -v /etc/localtime:/etc/localtime elastalertfs:v1.0当elastalert监控es匹配到规则中配置的规则是就会自动向飞书推送报警消息