美文网首页
ELK借助ElastAlert 实现邮件报警(八)

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

作者: 橡皮24 | 来源:发表于2018-11-09 16:08 被阅读318次

    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为4041分钟出现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](mailto: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

    相关文章

      网友评论

          本文标题:ELK借助ElastAlert 实现邮件报警(八)

          本文链接:https://www.haomeiwen.com/subject/gseoxqtx.html