暂无图片
暂无图片
暂无图片
暂无图片
1
暂无图片

ELK告警插件-elastalert2 实践,支持elk8.0版本,企微机器人告警实现

大侠之运维 2022-06-25
3874

最近刚把生产的ELK搭建完成,前面文章也有介绍,然后就在思考把日志监控告警也做起来,因为人力问题,既要处理生产问题,又要做一些日常运维工作,所以日志监控的调研和完成就放在周末来做了。


简单说下,目前的运维现状,运维部门是新建立的,之前都是研发自管的,各自玩各自的,所以有蛮多的问题,有很多非标的建设,其实这种是很痛苦,最近在做的话,就是梳理不同的系统。


基本就是从0到1的建设吧,之前在建设elk的时候,其实也有考虑过,后续的日志监控要怎么做,本来最初的想法是自己去写,但是时间来不及,也没有那么多的精力去做这些事。


在很早之前的话,是有用过一些插件的,elasticalert,sentinl,前者的话,很早之前就不更新了,后者的话,目前也是只支持到7版本,所以就看到了elastalert2,看了下最新的更新是在近期,而且文档也很完善,虽然都是英文。


elastalert2参考资料

    文档:https://elastalert2.readthedocs.io/en/latest/index.html
    github地址:https://github.com/jertel/elastalert2
    复制

    这个插件的话,是支持docker部署及k8上部署的,相关的docker file及helm文件都有提供,基本是开箱即用了。


    我这里是直接用本地python起的,有docker或者k8需求的,可以自己去看下。


    所需软件及版本

      python 3.10
      opensll 1.1.1 (python 3.10需要)
      复制

      安装python的话,这里就不细讲了


      安装步骤:

        pip install elastalert2 (可能会有setuptools版本低的情况,自行更新)
        git clone https://github.com/jertel/elastalert2.git
        python setup.py install
        复制

        两个配置文件:

        一个是基础配置,在examples下面有基础配置

          #必须配置项
          #告警规则目录
          rules_folder: examples/rules
          run_every:
          minutes: 1
          buffer_time:
          minutes: 15
          es_host: es ip
          es_port: 9200


          #非必须配置
          #因为我是开启了鉴权的,所有需要开启ssl认证
          use_ssl: True
          es_username: user
          es_password: passwd
          ca_certs: ./http_ca.crt
          #会建立一个对应d的索引,后面可以直接去建立
          writeback_index: elastalert_status
          #retry window for failed alerts.
          alert_time_limit:
          days: 2


          复制

          然后就是告警规则的配置了

          默认是在examples下面的rules文件夹下,已经有蛮多的基础配置了,可以根据需要去配置,我这里配置了一个frequency类型的作为测试。


          frequency这种类型的话,更符合日常的一个告警措施,可以根据时间范围内,出现的次数进行预警。


          支持蛮多的告警途径,可以看下官方的介绍,我这里用到的是post途径,然后对数据进行处理,通过企微机器人进行告警,之前的prometheus也是通过这个告警的,数据格式不同,做了下处理。


          支持的告警途径:


          关于rule的配置可以看下:

            #可以针对字段做一些添加,这个策略的话,就是30分钟内出现50次404就告警
            #query 也可以根据一些实际的需求进行调整
            #而且支持多个rule配置文件
            name: "Exemple webhook alert"
            type: frequency
            index: ng*
            use_strftime_index: true
            filter:
            - query:
            query_string:
            query: "status: 404"
            num_events: 50
            timeframe:
            hours: 0.5
            realert:
            minutes: 0
            include: ["time_local","fields.host_ip"]
            alert_text: "Alerts at {0} on the host {1}.\n```"
            alert_text_args: ["timestamp","status"]
            alert: post
            http_post_url: "http://192.168.200.9:5001"


            复制

            在启动之前,需要做一个index的初始化,直接执行:

            如果开了鉴权的,也可以做个测试,是否可以连通elasticsearch

              $elastalert-create-index
              New index name (Default elastalert_status)
              Name of existing index to copy (Default None)
              New index elastalert_status created
              Done!
              复制

              rule配置文件准备好的,也可以做个测试,检测配置文件是否正常

              通过如下命令可以完成:

                #这个命令也可以通过 -h 然后帮助
                #这条命令只是检测配置文件是否正常
                #如果要确认是告警是否能触发的话,需要加 --alert
                elastalert-test-rule ./examples/rules/exemple_discord_any.yaml --config=./examples/config.yaml
                复制

                其实在最开始我测试的时候,一直报0hit,其实是索引配置的有点问题,可以自己去多测试几次。

                就是这个问题,不过这个回答,也只是建议

                当你加了--alert去测试的时候,如果有匹配到的,那么就可以触发告警了,类似这样

                企微机器人上实际的效果是这样的:

                当然了,告警里面的一些字段的话,可以自己去定义,这个只是一个初版,整个路走通了。

                后面的话,可能就是具体的一些日志关键字,增加告警恢复的策略等,后面有时间的话,再来更新下。


                文章转载自大侠之运维,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                评论

                子不语
                暂无图片
                1年前
                评论
                暂无图片 0
                大佬,我是在k8s理配置的,和你配置差不多。手动执行命令可以发送匹配到内容的邮件告警,但是不执行命令的话就永远不会被触发发送告警邮件。大佬知道怎么回事么?
                1年前
                暂无图片 点赞
                评论