目錄
一、ElastAlert 概述
二、安裝 ElastAlert
2.1?安裝依賴
2.2?安裝 Python 環(huán)境
2.3?安裝 ElastAlert
2.4?ElastAlert 配置文件
2.5?創(chuàng)建 ElastAlert 索引
2.6 測試告警配置是否正常
三、ElastAlert 集成釘釘
3.1 下載 ElastAlert 釘釘報(bào)警插件
3.2 創(chuàng)建釘釘機(jī)器人
3.3 請求 nginx 頻繁出現(xiàn) 401 場景
3.3.1 配置 ElastAlert 規(guī)則
3.3.2 執(zhí)行告警規(guī)則
3.3.3?測試告警規(guī)則
3.4 請求 nginx 頻繁出現(xiàn) 5xx 場景
3.4.1 配置 ElastAlert 規(guī)則
3.4.2 執(zhí)行告警規(guī)則
3.4.3?測試告警規(guī)則
3.5 請求 url 超過 3s 場景
3.5.1 配置 ElastAlert 規(guī)則
3.5.2 執(zhí)行告警規(guī)則?
3.5.3 測試告警規(guī)則
?
一、ElastAlert 概述
????????ElastAlert 是一個(gè)開源的警報(bào)框架,由 Yelp 開發(fā),它可以從 Elasticsearch 中提取數(shù)據(jù)并根據(jù)預(yù)定義的規(guī)則生成警報(bào)。ElastAlert 可用于監(jiān)控您的日志和時(shí)間序列數(shù)據(jù),以便在發(fā)生異常、錯(cuò)誤或其他有趣的模式時(shí)立即采取行動(dòng)。ElastAlert 能夠與許多通知服務(wù)(如電子郵件、Slack、PagerDuty、釘釘?shù)龋┘?,這樣在觸發(fā)警報(bào)時(shí)可以發(fā)送通知。
以下是 ElastAlert 的一些主要特點(diǎn):
-
靈活的規(guī)則類型:ElastAlert 提供了多種規(guī)則類型,例如 frequency(在給定時(shí)間范圍內(nèi)的事件數(shù)超過閾值)、spike(事件數(shù)突然增加或減少)、flatline(在給定時(shí)間范圍內(nèi)的事件數(shù)低于閾值)等。這些規(guī)則類型可以覆蓋許多不同的用例,并可通過編寫自定義規(guī)則類型進(jìn)一步擴(kuò)展。
-
過濾器:ElastAlert 支持 Elasticsearch 查詢 DSL,您可以編寫過濾器來精確選擇要監(jiān)控的事件。這使得 ElastAlert 可以根據(jù)您的需求高度定制。
-
告警:ElastAlert 支持多種告警通知方式,包括電子郵件、Slack、PagerDuty、JIRA 等。您可以根據(jù)需求將警報(bào)發(fā)送到多個(gè)通知目標(biāo)。
-
擴(kuò)展性:ElastAlert 可以輕松處理大量的數(shù)據(jù),并且可以通過運(yùn)行多個(gè) ElastAlert 實(shí)例并行處理多個(gè) Elasticsearch 索引來擴(kuò)展。
-
易于集成:ElastAlert 可以與現(xiàn)有的 Elasticsearch 集群無縫集成,因此您無需進(jìn)行任何額外的設(shè)置即可開始使用它。
????????要開始使用 ElastAlert,您需要編寫配置文件以指定 Elasticsearch 集群的詳細(xì)信息,然后編寫規(guī)則文件以定義要監(jiān)控的事件和生成警報(bào)的條件。ElastAlert 會(huì)定期查詢 Elasticsearch,檢查是否滿足任何規(guī)則條件,并在滿足條件時(shí)觸發(fā)相應(yīng)的警報(bào)。這使得 ElastAlert 成為實(shí)時(shí)監(jiān)控和警報(bào)的強(qiáng)大工具。
二、安裝 ElastAlert
ElastAlert 官方安裝文檔:Running ElastAlert for the First Time — ElastAlert 0.0.1 documentation
2.1?安裝依賴
[root@es-node2 ~]# yum install -y git wget python-pip python3-devel gcc gcc-c++ libffi-devel openssl openssl-devel
2.2?安裝 Python 環(huán)境
[root@es-node2 ~]# yum install -y python36 python36-devel python36-pip python36-cffi
[root@es-node2 ~]# mkdir -p /root/.pip
# 更換阿里源
[root@es-node2 ~]# vim /root/.pip/pip.conf
[global]
index-url = https://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
# 將 Python3 的 pip 包管理器升級(jí)到最新版本
[root@es-node2 ~]# python3 -m pip install --upgrade pip
2.3?安裝 ElastAlert
#1. 從 GitHub 上克隆 ElastAlert 倉庫
[root@es-node2 ~]# git clone https://github.com/Yelp/elastalert.git
[root@es-node2 ~]# cd elastalert
# 如果克隆不下來,則去改網(wǎng)址克隆到本地再上傳
#2. 使用 pip 安裝 ElastAlert 及其依賴項(xiàng)
[root@es-node2 ~/elastalert-master]# pip install "setuptools>=11.3"
[root@es-node2 ~/elastalert-master]# pip install "setuptools_rust"
# 根據(jù) es 版本選擇,我們是 7.8 版本,所以是大于 6 小于 7 版本
[root@es-node2 ~/elastalert-master]# pip3 install "elasticsearch>=7.0.0,<8.0.0"
[root@es-node2 ~/elastalert-master]# pip3 install -r requirements.txt
[root@es-node2 ~/elastalert-master]# python3 setup.py install
2.4?ElastAlert 配置文件
[root@es-node2 ~/elastalert-master]# cp config.yaml.example example_rules/config.yaml
[root@es-node2 ~/elastalert-master]# vim example_rules/config.yaml
rules_folder: example_rules
run_every:
minutes: 1
buffer_time:
minutes: 15
es_host: 192.168.170.132
es_port: 9200
writeback_index: elastalert_status
writeback_alias: elastalert_alerts
alert_time_limit:
days: 2
????????這是一個(gè) ElastAlert 的配置文件,它包含了運(yùn)行 ElastAlert 時(shí)所需的一些基本參數(shù)。下面是各個(gè)參數(shù)的解釋:
-
rules_folder
: 用于指定 ElastAlert 規(guī)則文件的存放目錄。在這個(gè)例子中,規(guī)則文件位于example_rules
目錄下。 -
run_every
: ElastAlert 查詢 Elasticsearch 數(shù)據(jù)的頻率。在這個(gè)例子中,每隔 1 分鐘查詢一次。 -
buffer_time
: 指定查詢 Elasticsearch 時(shí)所需的時(shí)間窗口。在這個(gè)例子中,查詢過去 15 分鐘內(nèi)的數(shù)據(jù)。 -
es_host
: Elasticsearch 節(jié)點(diǎn)的地址。 -
es_port
: Elasticsearch 服務(wù)器的端口。在這個(gè)例子中,Elasticsearch 服務(wù)器的端口為9200
。 -
writeback_index
: ElastAlert 用于存儲(chǔ)元數(shù)據(jù)(如警報(bào)歷史、錯(cuò)誤、靜默等)的 Elasticsearch 索引。在這個(gè)例子中,元數(shù)據(jù)存儲(chǔ)在名為elastalert_status
的索引中。 -
writeback_alias
: ElastAlert 用于存儲(chǔ)實(shí)際警報(bào)的 Elasticsearch 索引別名。在這個(gè)例子中,警報(bào)存儲(chǔ)在名為elastalert_alerts
的別名下。 -
alert_time_limit
是 ElastAlert 配置文件中的一個(gè)參數(shù),用于設(shè)置警報(bào)的有效時(shí)間。在這個(gè)例子中,警報(bào)的有效期限為 2 天。如果在這個(gè)時(shí)間段內(nèi)(2 天內(nèi))沒有解決警報(bào),ElastAlert 將不再重復(fù)發(fā)送該警報(bào)。
????????通過這個(gè)配置文件,ElastAlert 可以定期查詢 Elasticsearch,檢查是否滿足預(yù)先定義的規(guī)則,并在滿足條件時(shí)觸發(fā)相應(yīng)的警報(bào)。
2.5?創(chuàng)建 ElastAlert 索引
[root@es-node2 ~/elastalert-master]# elastalert-create-index --config example_rules/config.yaml
2.6 測試告警配置是否正常
[root@es-node2 ~/elastalert-master]# python3 -m elastalert.elastalert --verbose --config example_rules/config.yaml --rule example_rules/example_frequency.yaml
無報(bào)錯(cuò)信息則正常。?
三、ElastAlert 集成釘釘
3.1 下載 ElastAlert 釘釘報(bào)警插件
ElastAlert 釘釘報(bào)警插件 github 地址:GitHub - xuyaoqiang/elastalert-dingtalk-plugin: elastalert 的釘釘報(bào)警插件
[root@es-node2 ~]# unzip elastalert-dingtalk-plugin-master.zip
[root@es-node2 ~]# cd elastalert-dingtalk-plugin-master/
[root@es-node2 ~/elastalert-dingtalk-plugin-master]# cp -rp elastalert_modules /root/elastalert-master/
3.2 創(chuàng)建釘釘機(jī)器人
????????首先,我們需要在釘釘中創(chuàng)建一個(gè)自定義機(jī)器人。進(jìn)入相應(yīng)的群組,點(diǎn)擊群設(shè)置,在群助手中選擇添加機(jī)器人,然后選擇 "自定義" 機(jī)器人。按照提示設(shè)置機(jī)器人的名稱和頭像,并設(shè)置安全設(shè)置(例如 IP 地址白名單)。創(chuàng)建成功后,你將獲得一個(gè) Webhook URL,我們將在 ElastAlert 規(guī)則文件中使用這個(gè) URL。?
??
3.3 請求 nginx 頻繁出現(xiàn) 401 場景
3.3.1 配置 ElastAlert 規(guī)則
[root@es-node2 ~/elastalert-master]# vim example_rules/nginx_404.yaml
# 告警名稱
name: nginx_access_404
# 告警類型
type: frequency
# 告警匹配的 es 索引名稱
index: kafka-logstash-nginx-access*
#告警的條件,查詢最近1分鐘的日志,當(dāng)10s內(nèi)發(fā)生3次404錯(cuò)誤則觸發(fā)告警
num_events: 3
timeframe:
seconds: 10
#minutes: 1
filter:
- query:
query_string:
query: "response: 404"
# 告警方式:釘釘
alert_text_type: alert_text_only
alert:
- "elastalert_modules.dingtalk_alert.DingTalkAlerter"
dingtalk_webhook: "https://oapi.dingtalk.com/robot/send?access_token=266e1c37a419c558960110cd636630b47cb5208ced71936d37833b98182a40c5"
dingtalk_msgtype: "text"
alert_text: |
告警程序: ElasticSearch_Alert
告警節(jié)點(diǎn): {}
域 名: {}
調(diào)用方式: {}
請求鏈接: {}
觸發(fā)條件: 10s 內(nèi) {} 狀態(tài)碼 超過 {} 次
# 需要匹配的字段名稱,與上面按順序一一對(duì)應(yīng)
alert_text_args:
- host.name
- hostname
- method
- request
- response
- num_hits
3.3.2 執(zhí)行告警規(guī)則
# 前臺(tái)運(yùn)行并輸出(測試用)
[root@es-node2 ~/elastalert-master]# python3 -m elastalert.elastalert --verbose --config example_rules/config.yaml --rule example_rules/nginx_404.yaml
# 后臺(tái)執(zhí)行,查看 nginx_404.log 輸出日志(生產(chǎn)用)
[root@es-node2 ~/elastalert-master]# nohup python3 -m elastalert.elastalert --verbose --config example_rules/config.yaml --rule example_rules/nginx_404.yaml >> nginx_404.log &
[root@es-node2 ~/elastalert-master]# tail -f nginx_404.log
3.3.3?測試告警規(guī)則
測試釘釘告警: 模擬產(chǎn)生 404 日志,通過追加對(duì)應(yīng)時(shí)間點(diǎn)的日志即可完成測試(注意把下面時(shí)間你當(dāng)前時(shí)間即可)。
[root@es-node3 ~]# echo '218.58.205.220 - - [12/Apr/2023:13:54:02 +0800] "HEAD /favicon.ico HTTP/1.1" 404 0 "chat.sky.com" "-" - "Go-http-client/1.1" "-" 10.100.15.239:80 404 0.009 0.009' >> /var/log/nginx/access.log
3.4 請求 nginx 頻繁出現(xiàn) 5xx 場景
3.4.1 配置 ElastAlert 規(guī)則
[root@es-node2 ~/elastalert-master]# vi example_rules/nginx_5xx.yaml
# 告警名稱
name: nginx_access_5xx
# 告警類型
type: frequency
# 告警匹配的索引名稱
index: kafka-logstash-nginx-access*
# 告警的條件,查詢最近1分鐘的日志,當(dāng)10s內(nèi)發(fā)生3次500-509錯(cuò)誤則觸發(fā)告警
num_events: 3
timeframe:
seconds: 10
#minutes: 1
filter:
- query:
query_string:
query: "response: [500 TO 509]"
# 告警方式:釘釘
alert_text_type: alert_text_only
alert:
- "elastalert_modules.dingtalk_alert.DingTalkAlerter"
dingtalk_webhook: "https://oapi.dingtalk.com/robot/send?access_token=266e1c37a419c558960110cd636630b47cb5208ced71936d37833b98182a40c5"
dingtalk_msgtype: "text"
alert_text: |
告警程序: ElasticSearch_Alert
告警節(jié)點(diǎn): {}
域 名: {}
調(diào)用方式: {}
請求鏈接: {}
觸發(fā)條件: 10s 內(nèi) {} 狀態(tài)碼 超過 {} 次
alert_text_args:
- host.name
- hostname
- method
- request
- response
- num_hits
3.4.2 執(zhí)行告警規(guī)則
[root@es-node2 ~/elastalert-master]# nohup python3 -m elastalert.elastalert --verbose --config example_rules/config.yaml --rule example_rules/nginx_5xx.yaml >> nginx_5xx.log &
3.4.3?測試告警規(guī)則
測試釘釘告警: 模擬產(chǎn)生 500 日志,通過追加對(duì)應(yīng)時(shí)間點(diǎn)的日志即可完成測試。
[root@es-node3 ~]# echo '218.58.205.220 - - [12/Apr/2023:14:22:02 +0800] "HEAD /favicon.ico HTTP/1.1" 502 0 "chat.sky.com" "-" - "Go-http-client/1.1" "-" 10.100.15.239:80 404 0.009 0.009' >> /var/log/nginx/access.log
[root@es-node3 ~]# echo '218.58.205.220 - - [12/Apr/2023:14:22:22 +0800] "HEAD /favicon.ico HTTP/1.1" 504 0 "chat.sky.com" "-" - "Go-http-client/1.1" "-" 10.100.15.239:80 404 0.009 0.009' >> /var/log/nginx/access.log
3.5 請求 url 超過 3s 場景
3.5.1 配置 ElastAlert 規(guī)則
[root@es-node2 ~/elastalert-master]# vi example_rules/nginx_response.yaml
# 告警名稱
name: nginx_response_time
# 告警類型
type: frequency
# 告警匹配的索引名稱
index: kafka-logstash-nginx-access*
#告警的條件,查詢最近1分鐘的日志,當(dāng)10s內(nèi)發(fā)生3次響應(yīng)超過3s
num_events: 3
timeframe:
seconds: 10
#minutes: 1
filter:
filter:
- query_string:
query: "response_time: >3"
# 告警方式:釘釘
alert_text_type: alert_text_only
alert:
- "elastalert_modules.dingtalk_alert.DingTalkAlerter"
dingtalk_webhook: "https://oapi.dingtalk.com/robot/send?access_token=266e1c37a419c558960110cd636630b47cb5208ced71936d37833b98182a40c5"
dingtalk_msgtype: "text"
alert_text: |
告警程序: ElasticSearch_Alert
告警節(jié)點(diǎn): {}
域 名: {}
調(diào)用方式: {}
請求鏈接: {}
觸發(fā)條件: 10s 內(nèi)有 {} 條 Resp 超過 {} 秒
alert_text_args:
- host.name
- hostname
- method
- request
- num_hits
- response_time
3.5.2 執(zhí)行告警規(guī)則?
[root@es-node2 ~/elastalert-master]# nohup python3 -m elastalert.elastalert --verbose --config example_rules/config.yaml --rule example_rules/nginx_response.yaml >> nginx_response.log &
3.5.3 測試告警規(guī)則
測試釘釘告警: 模擬 response 大于 3s 的日志,通過追加對(duì)應(yīng)時(shí)間點(diǎn)的日志即可完成測試。
[root@es-node3 ~]# echo '218.58.205.220 - - [12/Apr/2023:14:31:12 +0800] "HEAD /favicon.ico HTTP/1.1" 504 0 "chat.sky.com" "-" - "Go-http-client/1.1" "-" 10.100.15.239:80 404 0.009 31' >> /var/log/nginx/access.log
文章來源:http://www.zghlxwxcb.cn/news/detail-422038.html
上一篇文章:【Elastic (ELK) Stack 實(shí)戰(zhàn)教程】10、ELK 架構(gòu)升級(jí)-引入消息隊(duì)列 Redis、Kafka_Stars.Sky的博客-CSDN博客文章來源地址http://www.zghlxwxcb.cn/news/detail-422038.html
到了這里,關(guān)于【Elastic (ELK) Stack 實(shí)戰(zhàn)教程】11、使用 ElastAlert 實(shí)現(xiàn) ES 釘釘群日志告警的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!