ELK借助ElastAlert 實(shí)現(xiàn)郵件報(bào)警(八)

1 簡(jiǎn)介

Elk日志系統(tǒng)可以很明了的觀察出日志個(gè)指標(biāo)的走向,x-pack可以用來(lái)報(bào)警,但是x-pack是需要收費(fèi)的。所以使用ElastAlert進(jìn)行報(bào)警。

ElastAlert是通過(guò)Elasticsearch集群匹配報(bào)警規(guī)則的。它的工作原理是將Elasticsearch與兩種類型的組件,規(guī)則類型和警報(bào)相結(jié)合。定期查詢Elasticsearch并將數(shù)據(jù)傳遞給規(guī)則類型,該規(guī)則類型確定何時(shí)找到匹配項(xiàng)。當(dāng)匹配發(fā)生時(shí),它將被賦予一個(gè)或多個(gè)警報(bào),這些警報(bào)根據(jù)匹配采取行動(dòng)。

1、 github 官方地址:https://github.com/Yelp/elastalert

2、 官方文檔地址:https://elastalert.readthedocs.io/en/latest/

1.1 系統(tǒng)環(huán)境

1、 centos7

2、 elk版本5.6.11

2 安裝ElastAlert

1、依賴包

# yum -y install gcc libffi-devel python-devel openssl-devel4

2、下載elastalert

# cd /data/
# git clone https://github.com/Yelp/elastalert.git

3、 通過(guò)pip 安裝setuptools的指定版本

這個(gè)是elastalert 要求的最低版本,pip 如果沒(méi)有的話通過(guò)east_install install pip 安裝一下就行

# pip install setuptools==1.1.6
# cd /data/elastalert
# pip install -r requirements.txt
# pip install elastalert

3 配置ElastAlert

3.1 前期配置

1、elastalert 安裝完成之后系統(tǒng)里邊會(huì)有多出如下三個(gè)命令

elastalert-create-index 命令用來(lái)創(chuàng)建ES索引的,默認(rèn)為elastalert_status
elastalert-test-rule 測(cè)試自定義配置中的rule設(shè)置
elastalert-rule-from-kibana 從Kibana3中直接導(dǎo)出Filters

2、執(zhí)行如下命令在elasticsearch中創(chuàng)建elastalert的日志索引

#elastalert-create-index

Enter Elasticsearch host: 10.10.4.11

Enter Elasticsearch port: 9200

Use SSL? t/f: 

Enter optional basic-auth username (or leave blank): elastic 用戶名

Enter optional basic-auth password (or leave blank):  ****** 密碼

Enter optional Elasticsearch URL prefix (prepends a string to the URL of every request):

New index name? (Default elastalert_status) ela #索引名默認(rèn)elastalert_status

Name of existing index to copy? (Default None)

Elastic Version:5

Mapping used for string:{'index': 'not_analyzed', 'type': 'string'}

New index ela created

執(zhí)行之后會(huì)在es里出項(xiàng)一個(gè)ela(正常默認(rèn)就可以索引名為elastalert_status)命名的索引,這個(gè)索引就是elastalert創(chuàng)建的默認(rèn)索引。

3.2 配置文件配置

1、創(chuàng)建配置文件,在elastalert 目錄里邊有一個(gè)config.yaml.example 文件,我們通過(guò)copy 一份之后修改成自己需要的配置

# cd /data/elastalert/
# cp config.yaml.example config.yaml
# vi config.yaml
rules_folder: /data/elastalert/example_rules #規(guī)則目錄位置
run_every:
 minutes: 1
#Elastalert 多久去查詢一下根據(jù)定義的規(guī)則去elasticsearch 查詢是否有符合規(guī)則的字段,如果有就會(huì)觸發(fā)報(bào)警,如果沒(méi)有就等待下一次時(shí)間再檢查,時(shí)間定義的單位從周到秒都可以。
buffer_time:
 minutes: 15 #當(dāng)查詢開(kāi)始一直到結(jié)束,最大的緩存時(shí)間。
es_host: 10.10.4.12 #es地址
es_port: 9200 #es端口
es_username: elastic #如果es有密碼需要寫(xiě)。Es的用戶名
es_password: changeme #es的密碼
writeback_index: elastalert_status #es里的索引
alert_time_limit:
 days: 2 #如果alert當(dāng)時(shí)沒(méi)有發(fā)出去重試多久之后放棄發(fā)送

3.3 rules 的定義

在此只配置_frequency模板,其他的請(qǐng)參考官網(wǎng)進(jìn)行配置。

# cd /data/elastalert/example_rules/
# cp example_frequency.yaml my_rule.yaml                

#此模板為頻率報(bào)警模板,就是當(dāng)規(guī)定時(shí)間,規(guī)定字段達(dá)到一定數(shù)量就會(huì)觸發(fā)報(bào)警。此配置我配置為email報(bào)警

# vi my_rule.yaml
es_host: 10.10.4.11 #es的IP地址
es_port: 9200 #es的端口
es_username: elastic #es的用戶名(如果es沒(méi)有設(shè)置可以不用填寫(xiě))
es_password: changeme #es的密碼
name: Example test               
# rule name 必須是獨(dú)一的,不然會(huì)報(bào)錯(cuò),這個(gè)定義完成之后,會(huì)成為報(bào)警郵件的標(biāo)題
type: frequency #類型:頻率
index: nginx_access* #監(jiān)控的索引。多個(gè)使用(,)逗號(hào)隔開(kāi)
num_events: 4 #時(shí)間內(nèi)觸發(fā)的次數(shù)
timeframe:
 minutes: 1
#時(shí)間。和上邊的參數(shù)關(guān)聯(lián)。1分鐘內(nèi)有4次會(huì)報(bào)警
filter:
 - term:
 status: "404"
#截取的字段status為404   1分鐘出現(xiàn)4次報(bào)警。
alert_text: "Ref Log [http://10.10.4.11](http://10.10.4.11)" #會(huì)在報(bào)警內(nèi)容中顯示
smtp_host: mail.bytuetech.com #smtp的地址
smtp_port: 25 #端口
smtp_auth_file: /data/elastalert/example_rules/smtp_auth_file.yaml
#用戶密碼的文件
email_reply_to: cx******@b******ech.com
#發(fā)送郵件的郵箱
from_addr: c******@b******ech.com
alert:
- "email" #報(bào)警類型
email:
- "er****@b*****ech.com"    
#收件人地址

接下來(lái)配置/data/elastalert/example_rules/smtp_auth_file.yaml文件

#vi /data/elastalert/example_rules/smtp_auth_file.yaml

user: "c*****@b*******h.com"

password: "**********"

4 測(cè)試規(guī)則的正確性

# elastalert-test-rule my_rule.yaml
Successfully loaded Example test # Successfully顯示成功。
·······················

5 運(yùn)行

5.1 啟動(dòng),日志直接打印在前端

# cd /data/elastalert
# python -m elastalert.elastalert --verbose --rule my_rule.yaml

之后模擬錯(cuò)誤,訪問(wèn)nginx造成404錯(cuò)誤。

INFO:elastalert:Queried rule Example test from 2018-11-09 13:52 CST to 2018-11-09 14:06 CST: 71 / 71 hits
INFO:elastalert:Sent email to ['eraser@bytuetech.com']
…………………………………………
INFO:elastalert:Ignoring match for silenced rule Example test
INFO:elastalert:Ran Example test from 2018-11-09 13:52 CST to 2018-11-09 14:06 CST: 71 query hits (0 already seen), 71 matches, 1 alerts sent
INFO:elastalert:Sleeping for 59.420713 seconds

此時(shí)收到郵件


5.2 編寫(xiě)systemctl腳本

# /usr/lib/systemd/system
# vi elastalertd.service
[Unit]
Description=elastalertd
After=elasticsearch.service
[Service]
Type=simple
User=root
Group=root
Restart=on-failure
WorkingDirectory=/data/elastalert
ExecStart=/usr/bin/elastalert --config /data/elastalert/config.yaml --rule /data/elastalert/example_rules/my_rule.yaml
[Install]
WantedBy=multi-user.target

開(kāi)機(jī)自啟動(dòng):systemctl enable elastalertd
啟動(dòng):systemctl start elastalertd.service
關(guān)閉: systemctl stop elastalertd.service
查看狀態(tài): systemctl status elastalertd.service

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 簡(jiǎn)介 Elastalert是用python2寫(xiě)的一個(gè)報(bào)警框架(目前支持python2.6和2.7,不支持3.x),...
    洮生閱讀 18,760評(píng)論 9 8
  • 官網(wǎng)地址:https://www.elastic.co/cn/ 官網(wǎng)權(quán)威指南:https://www.elasti...
    Anwar_ec28閱讀 6,911評(píng)論 0 11
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,695評(píng)論 19 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,288評(píng)論 6 342
  • 概述 監(jiān)控預(yù)警平臺(tái), eagle + eye (鷹眼)的合體詞, 寓意可以快速發(fā)現(xiàn)問(wèn)題, 并及時(shí)作出響應(yīng),Eagl...
    Kungfu貓熊閱讀 7,675評(píng)論 0 52

友情鏈接更多精彩內(nèi)容