ES告警之ElastAlert入门教程(容器部署)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ES告警之ElastAlert入门教程(容器部署)相关的知识,希望对你有一定的参考价值。

参考技术A         我们部署的版本是此篇文章发布时ElastAlert(V0.2.1)、ElastAlert server(3.0.0-beta.0) 、elastalert-kibana-plugin(1.1.0)的最新版本。es和kibana的版本是7.2.0。ES和kibana部署不是本篇的重点,这里不做介绍。
        入正题之前得先说下ES,Elasticsearch 是一个分布式、可扩展、实时的搜索与数据分析引擎。 它能从项目一开始就赋予你的数据以搜索、分析和探索的能力。我们容器服务的日志现在大多数都入到了qbus,然后可以用es消费,通过kibana方便的查看日志。但是负责es的同事和我们都没有支持日志告警,目前是一个短板。X-Pack提供了报警组件Alert,但是这个功能是需要付费,ElastAlert能够完美替代Alert提供的所有功能。ElastAlert目前有6k+star,维护较好很受欢迎,使用python编写,V0.2.0以后使用python3,python2不再维护,以致在虚机物理机部署的坑很多,最终也是以容器的方式成功搭建。因为公司es之后要升级到7.2版本,ElastAlertV0.2.1(最新版本)才对es7支持的很好,elastalert-kibana-plugin最新版本才支持kibana7。

elastalert-kibana-plugin对ES6.3开始提供支持,公司目前使用的是ES6.2,之后要升级到ES7,所以ElastAlert用V0.2.1,ElastAlert server 3.0.0-beta.0,elastalert-kibana-plugin 1.1.0。

        ElastAlert V0.2.1需要python3,目前我们使用linux内核都会默认装python2,安装python3后,使用混合环境安装ElastAlert 很多依赖装不成功,亦或装成功后模块有找不到,所以最终打算使用docker multi stage build方式构建ElastAlert server镜像,以容器的方式启动。
        官网上提供了ElastAlert server镜像构建方式,但很久不维护,还是使用python2构建的老的版本。我们需要重新构建。

通过docker logs elastalert -f 查看日之日,如果报错,指定告警级别为dubug查看错误信息

kibana插件如下:

custom_frequency是启服务之前创建的配置文件,test和test2是通过kibana dashboard创建。用户可以通过“创建”-“测试”-“保存”这一流程新建alert rules 和我们的hulk容器上的自定义告警流程差不多

https://github.com/bitsensor/elastalert

https://github.com/bitsensor/elastalert-kibana-plugin

https://github.com/Yelp/elastalert

https://elastalert.readthedocs.io/en/latest/

基于日志报警插件 elastalert 实现告警

1.官方http://elastalert.readthedocs.io/en/latest/

2.报警规则示例

http://elastalert.readthedocs.io/en/latest/elastalert.html#rule-types

admin_asdsa.yaml: |
    name: admin_asdsa
    type: frequency
    owner: admin
    description: "2018-06-13 17:54:55"
    index: logstash-*
    num_events: 1
    is_enabled: false
    timeframe:
      minutes: 60
    filter:
    - query:
        query_string:
          query: ‘kubernetes.labels.name: test‘
    - query:
        query_string:
          query: ‘kubernetes.namespace_name: admin‘
    - query:
        wildcard:
          log: ‘*Listening*‘
    regex: ‘*Listening*‘
    alert:
    - email
    smtp_host: smtp.exmail.qq.com
    smtp_port: 465
    smtp_ssl: true
    from_addr: [email protected]
    smtp_auth_file: /opt/config/email_config.yaml
    email:
    - [email protected]
    alert_subject: ‘[xxx]告警提醒‘
    alert_text_type: alert_text_only
    alert_text: "亲爱的++用户:       根据您在【管理与日志】- [告警设置] 设置的 {} 策略,您的服务 {} 日志告警已触发,日志正则
      {} 已出现 {} 次! 以上问题请请尽快处理,谢谢!"
    alert_text_args:
    - name
    - kubernetes.labels.name
    - regex
    - num_hits

3.配置文件

http://elastalert.readthedocs.io/en/latest/elastalert.html#configuration

  elastalert_config: |-
    ---
    rules_folder: /opt/rules
    scan_subdirectories: false
    run_every:
      minutes: 1
    buffer_time:
      minutes: 15
    es_host: elasticsearch-logging
    es_port: 9200
    writeback_index: elastalert_status
    use_ssl: false
    alert_time_limit:
      days: 2
  email_config: |-
    ---
    user: [email protected]
    password: xxxx

4.具体规则类型,以及告警的方式查看官方文档

 

以上是关于ES告警之ElastAlert入门教程(容器部署)的主要内容,如果未能解决你的问题,请参考以下文章

Elastaticsearch日志告警(elastalert)

Zabbix监控Elastalert

ElastAlert规则

基于日志报警插件 elastalert 实现告警

elasticsearch5之Elastalert 安装使用 配置邮件报警和微信报警

【教程】在Docker中部署ES(elasticsearch)