前言
公司采用ELK架構搜集業(yè)務系統(tǒng)的運行日志,以前開發(fā)人員只有在業(yè)務出現(xiàn)問題的時候,才會去kibana上進行日志搜索操作,每次都是被用戶告知系統(tǒng)出問題了,這簡直是被啪啪打臉~
于是痛定思痛,決定主動出擊,查閱了許多資料,發(fā)現(xiàn)ElastAlert這個服務能夠對elasticsearch的索引按條件進行監(jiān)控,并在匹配設置的條件時自動觸發(fā)告警,于是決定采用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 builder
LABEL description="ElastAlert 2 Official Image"
LABEL maintainer="Jason Ertel"
COPY . /tmp/elastalert
RUN mkdir -p /opt/elastalert && \
cd /tmp/elastalert && \
pip install setuptools wheel && \
python setup.py sdist bdist_wheel
FROM python:3-slim-buster
ARG GID=1000
ARG UID=1000
ARG USERNAME=elastalert
COPY --from=builder /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/Shanghai""
WORKDIR /opt/elastalert
ENTRYPOINT ["/opt/elastalert/run.sh"]
構建鏡像
docker build -t elastalertfs:1.0 .
我們在物理機上創(chuàng)建/data/elastalertfs目錄,存放配置文件和報警規(guī)則目錄及文件
在/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上的索引,用于元數(shù)據(jù)存儲。這可以是一個未映射的索引,但建議你運行。設置一個映射
writeback_index: elastalert_status
#如果一個警報因某種原因而失敗,ElastAlert將重試,直到這個時間段過后
alert_time_limit:
days: 2
在/data/elastalertfs下創(chuàng)建rules目錄,在目錄內(nèi)創(chuàng)建報警規(guī)則文件xxx-xxx_error.yaml,可以在該目錄下創(chuàng)建多個報警規(guī)則文件,注意修改index名稱、過濾條件、飛書機器人botid等;
name: "niu_cloud_rule"
type: "any" // 有多種類型,不同的類型配置項有不同
index: "niu-cloud-logs-*"
is_enabled: true
#時間觸發(fā)的次數(shù)
#num_events: 1
#和num_events參數(shù)關聯(lián),1分鐘內(nèi)出現(xiàn)1次會報警
#timeframe:
# minutes: 1
#同一規(guī)則的兩次警報之間的最短時間。在此時間內(nèi)發(fā)生的任何警報都將被丟棄。默認值為一分鐘。
#realert:
# minutes: 0
#terms_size: 50
use_strftime_index: true
filter:
- query:
query_string:
query: "level.keyword : ERROR AND msg : java*Exception" //錯誤級別是ERROR并且msg字段包含java開頭Exception結尾的內(nèi)容就匹配成功,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業(yè)務ERROR異常"
# 這個時間段內(nèi)的匹配將不告警,適用于某些時間段請求低谷避免誤報警
#feishualert_skip:
# start: "01:00:00"
# end: "08:00:00"
# 告警內(nèi)容,使用{}可匹配matches
feishualert_body:
"
【告警主題】: {feishualert_title}\n
【告警時間】: {feishualert_time}\n
【告警模塊】: {module}\n
【業(yè)務索引】: {_index}\n
【時間戳】: {@timestamp}\n
【日志級別】: {level}\n
【錯誤日志】: {msg}
"
docker方式運行并掛載配置目錄文章來源:http://www.zghlxwxcb.cn/news/detail-728790.html
docker run -d --restart=always --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監(jiān)控es匹配到規(guī)則中配置的規(guī)則是就會自動向飛書推送報警消息文章來源地址http://www.zghlxwxcb.cn/news/detail-728790.html
到了這里,關于ElastAlert通過飛書機器人發(fā)送報警通知的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!