kibana java邮件报警_ELK借助ElastAlert 实现邮件报警(八)

1 简介

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

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

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

此时收到邮件

7507da419230

7507da419230

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值