ELK借助ElastAlert 实现邮件报警(八)

1 简介

Elk日志系统可以很明了的观察出日志个指标的走向,x-pack可以用来报警,但是x-pack是需要收费的。所以使用ElastAlert进行报警。

ElastAlert是通过Elasticsearch集群匹配报警规则的。它的工作原理是将Elasticsearch与两种类型的组件,规则类型和警报相结合。定期查询Elasticsearch并将数据传递给规则类型,该规则类型确定何时找到匹配项。当匹配发生时,它将被赋予一个或多个警报,这些警报根据匹配采取行动。

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

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

1.1 系统环境

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、 通过pip 安装setuptools的指定版本

这个是elastalert 要求的最低版本,pip 如果没有的话通过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 安装完成之后系统里边会有多出如下三个命令

elastalert-create-index 命令用来创建ES索引的,默认为elastalert_status
elastalert-test-rule 测试自定义配置中的rule设置
elastalert-rule-from-kibana 从Kibana3中直接导出Filters

2、执行如下命令在elasticsearch中创建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 #索引名默认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

执行之后会在es里出项一个ela(正常默认就可以索引名为elastalert_status)命名的索引,这个索引就是elastalert创建的默认索引。

3.2 配置文件配置

1、创建配置文件,在elastalert 目录里边有一个config.yaml.example 文件,我们通过copy 一份之后修改成自己需要的配置

# cd /data/elastalert/
# cp config.yaml.example config.yaml
# vi config.yaml
rules_folder: /data/elastalert/example_rules #规则目录位置
run_every:
 minutes: 1
#Elastalert 多久去查询一下根据定义的规则去elasticsearch 查询是否有符合规则的字段,如果有就会触发报警,如果没有就等待下一次时间再检查,时间定义的单位从周到秒都可以。
buffer_time:
 minutes: 15 #当查询开始一直到结束,最大的缓存时间。
es_host: 10.10.4.12 #es地址
es_port: 9200 #es端口
es_username: elastic #如果es有密码需要写。Es的用户名
es_password: changeme #es的密码
writeback_index: elastalert_status #es里的索引
alert_time_limit:
 days: 2 #如果alert当时没有发出去重试多久之后放弃发送

3.3 rules 的定义

在此只配置_frequency模板,其他的请参考官网进行配置。

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

#此模板为频率报警模板,就是当规定时间,规定字段达到一定数量就会触发报警。此配置我配置为email报警

# vi my_rule.yaml
es_host: 10.10.4.11 #es的IP地址
es_port: 9200 #es的端口
es_username: elastic #es的用户名(如果es没有设置可以不用填写)
es_password: changeme #es的密码
name: Example test               
# rule name 必须是独一的,不然会报错,这个定义完成之后,会成为报警邮件的标题
type: frequency #类型:频率
index: nginx_access* #监控的索引。多个使用(,)逗号隔开
num_events: 4 #时间内触发的次数
timeframe:
 minutes: 1
#时间。和上边的参数关联。1分钟内有4次会报警
filter:
 - term:
 status: "404"
#截取的字段status为404   1分钟出现4次报警。
alert_text: "Ref Log [http://10.10.4.11](http://10.10.4.11)" #会在报警内容中显示
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
#发送邮件的邮箱
from_addr: c******@b******ech.com
alert:
- "email" #报警类型
email:
- "er****@b*****ech.com"    
#收件人地址

接下来配置/data/elastalert/example_rules/smtp_auth_file.yaml文件

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

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

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

4 测试规则的正确性

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

5 运行

5.1 启动,日志直接打印在前端

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

之后模拟错误,访问nginx造成404错误。

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

此时收到邮件


5.2 编写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

开机自启动:systemctl enable elastalertd
启动:systemctl start elastalertd.service
关闭: systemctl stop elastalertd.service
查看状态: systemctl status elastalertd.service

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,734评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,931评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,133评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,532评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,585评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,462评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,262评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,153评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,587评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,792评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,919评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,635评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,237评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,855评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,983评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,048评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,864评论 2 354

推荐阅读更多精彩内容