本文共 5020 字,大约阅读时间需要 16 分钟。
Elastalert是Yelp公司用python2.6写的一个报警框架,github地址为
Ubuntu16.04
Elasticsearch 2.4.1 Logstash 2.4.0 Kibana 4.6.1Elastalert的安装相对比较简单,只需要按照步骤走就没有问题
git clone
进入elastalert的目录,执行
Pip install -r requirements.txt
Python setup.py install
OK 安装完事
安装之后会自带三个命令
至于每种是干什么的,参考官网资料吧,不过多解释
这里我们还是测试rrsyslog发送日志的这个例子,就是启动ELK服务,rsyslog通过logstash把日志发送给elasticsearch,然后传送给kibana,logstash编写rsyslog_test.conf文件,内容为
input { tcp{ port => 5000 type => syslog } udp{ port => 5000 type => syslog }}output { stdout { codec=> rubydebug } elasticsearch { hosts => ["192.168.1.198:9200"] }}
然后启动ELK服务和rsyslog_test.conf文件
编辑elastalert下的configure.yaml文件rules_folder: example_rulesrun_every: minutes: 1buffer_time: minutes: 15es_host: localhostes_port: 9200writeback_index: elastalert_statusalert_time_limit: days: 2
编辑example_rules/example_frequency.yaml 文件内容如下:
es_host: localhostes_port: 9200name: Example ruleuse_strftine_index: truetype: frequencyindex: logstash-* num_events: 5 timeframe: hours: 1 filter: - term: _type: "syslog" alert: - "email" email: - "elastalert@example.com"
上边我们设置的事件次数是5,也就是说elaticseach记录的事件条件超过即发送email文件,这里的email文件我并没有配置,原因是测试没有成功,需要提供密码验证,没有解决,以后解决的话会在评论中给出,不过这里用debug替换下列verbose即可将邮件内容打印在窗口
启动elastalert服务,监听elasticsearchpython -m elastalert.elastalert –debug –rule example_rules/example_frequency.yaml
这个时候我们的ELK已经启动了,再次启动终端,执行ssh localhost进行测试,只要在一分钟内连续输入几次的错误密码,这个时候就会在elastalert的终端看到类似下面这样的提示:
INFO:elastalert:Queried rule Example rule from 2016-10-24 08:20 PDT to 2016-10-24 08:35 PDT: 34 / 34 hitsINFO:elastalert:Skipping writing to ES: { 'rule_name': 'Example rule', '@timestamp': '2016-10-24T15:35:00.120937Z', 'exponent': 0, 'until': '2016-10-24T15:36:00.120924Z'}INFO:elastalert:Alert for Example rule at 2016-10-24T15:34:24.422Z:INFO:elastalert:Example ruleAt least 5 events occurred between 2016-10-24 07:34 PDT and 2016-10-24 08:34 PDT@timestamp: 2016-10-24T15:34:24.422Z@version: 1_id: AVf3VBTs1Cgl8RD3WDw9_index: logstash-2016.10.24_type: sysloghost: 127.0.0.1message: <38>Oct 24 08:34:24 ubuntu sshd[3097]: Connection closed by 127.0.0.1 port 52434 [preauth]type: syslogINFO:elastalert:Skipping writing to ES: { 'hits': 34, 'matches': 1, '@timestamp': '2016-10-24T15:35:00.123939Z', 'rule_name': 'Example rule', 'starttime': '2016-10-24T15:20:00.031300Z', 'endtime': '2016-10-24T15:35:00.031300Z', 'time_taken': 0.09257292747497559}
说明整个告警体系已经OK了
上次在配置邮件告警时并没有取得成功,后来又尝试了几次,ok了
以下进行得操作基于上边得demo步骤首先添加发送方:
在elastalert目录下编辑smtp_auth_file.yaml文件,加入你要使用发送邮件的账号和密码 这里我使用的是网易的163邮箱,这里的密码是你开启邮箱的POP3的客户端登陆密码,不是网页登陆邮箱的密码user: "thinkgamer@163.com"password: "xxxxxxxx"
然后编辑你的配置文件,我这里使用 example_rules/example_frequency.yaml
别的配置正常配置,在alert之前加入#SMTP协议的邮件服务器相关配置(我这里是腾讯企业邮箱)#smtp.163.com是网易163邮箱的smtp服务器smtp_host: smtp.163.comsmtp_port: 25#用户认证文件,需要user和password两个属性# smtp_auth_file.yaml,为刚才编辑的配置文件smtp_auth_file: smtp_auth_file.yamlemail_reply_to: thinkgamer@163.comfrom_addr: thinkgamer@163.com
修改email为你要接受邮件的邮箱
然后启动配置文件
python -m elastalert.elastalert --verbose --rule example_rules/example_frequency.yaml
测试:
查看邮件:
Over!