【Elastic (ELK) Stack 实战教程】11、使用 ElastAlert 实现 ES 钉钉群日志告警

这篇具有很好参考价值的文章主要介绍了【Elastic (ELK) Stack 实战教程】11、使用 ElastAlert 实现 ES 钉钉群日志告警。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、ElastAlert 概述

二、安装 ElastAlert

2.1 安装依赖

2.2 安装 Python 环境

2.3 安装 ElastAlert

2.4 ElastAlert 配置文件

2.5 创建 ElastAlert 索引

2.6 测试告警配置是否正常

三、ElastAlert 集成钉钉

3.1 下载 ElastAlert 钉钉报警插件

3.2 创建钉钉机器人

3.3 请求 nginx 频繁出现 401 场景

3.3.1 配置 ElastAlert 规则

3.3.2 执行告警规则

3.3.3 测试告警规则

3.4 请求 nginx 频繁出现 5xx 场景

3.4.1 配置 ElastAlert 规则

3.4.2 执行告警规则

3.4.3 测试告警规则

3.5 请求 url 超过 3s 场景

3.5.1 配置 ElastAlert 规则

3.5.2 执行告警规则 

3.5.3 测试告警规则


 

一、ElastAlert 概述

        ElastAlert 是一个开源的警报框架,由 Yelp 开发,它可以从 Elasticsearch 中提取数据并根据预定义的规则生成警报。ElastAlert 可用于监控您的日志和时间序列数据,以便在发生异常、错误或其他有趣的模式时立即采取行动。ElastAlert 能够与许多通知服务(如电子邮件、Slack、PagerDuty、钉钉等)集成,这样在触发警报时可以发送通知。

以下是 ElastAlert 的一些主要特点:

  1. 灵活的规则类型:ElastAlert 提供了多种规则类型,例如 frequency(在给定时间范围内的事件数超过阈值)、spike(事件数突然增加或减少)、flatline(在给定时间范围内的事件数低于阈值)等。这些规则类型可以覆盖许多不同的用例,并可通过编写自定义规则类型进一步扩展。

  2. 过滤器:ElastAlert 支持 Elasticsearch 查询 DSL,您可以编写过滤器来精确选择要监控的事件。这使得 ElastAlert 可以根据您的需求高度定制。

  3. 告警:ElastAlert 支持多种告警通知方式,包括电子邮件、Slack、PagerDuty、JIRA 等。您可以根据需求将警报发送到多个通知目标。

  4. 扩展性:ElastAlert 可以轻松处理大量的数据,并且可以通过运行多个 ElastAlert 实例并行处理多个 Elasticsearch 索引来扩展。

  5. 易于集成:ElastAlert 可以与现有的 Elasticsearch 集群无缝集成,因此您无需进行任何额外的设置即可开始使用它。

        要开始使用 ElastAlert,您需要编写配置文件以指定 Elasticsearch 集群的详细信息,然后编写规则文件以定义要监控的事件和生成警报的条件。ElastAlert 会定期查询 Elasticsearch,检查是否满足任何规则条件,并在满足条件时触发相应的警报。这使得 ElastAlert 成为实时监控和警报的强大工具。

二、安装 ElastAlert

ElastAlert 官方安装文档:Running ElastAlert for the First Time — ElastAlert 0.0.1 documentation

2.1 安装依赖

[root@es-node2 ~]# yum install -y git wget python-pip python3-devel gcc gcc-c++ libffi-devel openssl openssl-devel

2.2 安装 Python 环境

[root@es-node2 ~]# yum install -y python36 python36-devel python36-pip python36-cffi

[root@es-node2 ~]# mkdir -p /root/.pip

# 更换阿里源
[root@es-node2 ~]# vim /root/.pip/pip.conf
[global]
index-url = https://mirrors.aliyun.com/pypi/simple/

[install]
trusted-host=mirrors.aliyun.com

# 将 Python3 的 pip 包管理器升级到最新版本
[root@es-node2 ~]# python3 -m pip install --upgrade pip

2.3 安装 ElastAlert

#1. 从 GitHub 上克隆 ElastAlert 仓库
[root@es-node2 ~]# git clone https://github.com/Yelp/elastalert.git
[root@es-node2 ~]# cd elastalert
# 如果克隆不下来,则去改网址克隆到本地再上传

#2. 使用 pip 安装 ElastAlert 及其依赖项
[root@es-node2 ~/elastalert-master]# pip install "setuptools>=11.3"
[root@es-node2 ~/elastalert-master]# pip install "setuptools_rust"
# 根据 es 版本选择,我们是 7.8 版本,所以是大于 6 小于 7 版本
[root@es-node2 ~/elastalert-master]# pip3 install "elasticsearch>=7.0.0,<8.0.0"
[root@es-node2 ~/elastalert-master]# pip3 install -r requirements.txt
[root@es-node2 ~/elastalert-master]# python3 setup.py install

2.4 ElastAlert 配置文件

[root@es-node2 ~/elastalert-master]# cp config.yaml.example example_rules/config.yaml
[root@es-node2 ~/elastalert-master]# vim example_rules/config.yaml 

rules_folder: example_rules

run_every:
  minutes: 1

buffer_time:
  minutes: 15

es_host: 192.168.170.132
es_port: 9200

writeback_index: elastalert_status
writeback_alias: elastalert_alerts

alert_time_limit:
  days: 2

        这是一个 ElastAlert 的配置文件,它包含了运行 ElastAlert 时所需的一些基本参数。下面是各个参数的解释:

  1. rules_folder: 用于指定 ElastAlert 规则文件的存放目录。在这个例子中,规则文件位于 example_rules 目录下。

  2. run_every: ElastAlert 查询 Elasticsearch 数据的频率。在这个例子中,每隔 1 分钟查询一次。

  3. buffer_time: 指定查询 Elasticsearch 时所需的时间窗口。在这个例子中,查询过去 15 分钟内的数据。

  4. es_host: Elasticsearch 节点的地址。

  5. es_port: Elasticsearch 服务器的端口。在这个例子中,Elasticsearch 服务器的端口为 9200

  6. writeback_index: ElastAlert 用于存储元数据(如警报历史、错误、静默等)的 Elasticsearch 索引。在这个例子中,元数据存储在名为 elastalert_status 的索引中。

  7. writeback_alias: ElastAlert 用于存储实际警报的 Elasticsearch 索引别名。在这个例子中,警报存储在名为 elastalert_alerts 的别名下。

  8. alert_time_limit 是 ElastAlert 配置文件中的一个参数,用于设置警报的有效时间。在这个例子中,警报的有效期限为 2 天。如果在这个时间段内(2 天内)没有解决警报,ElastAlert 将不再重复发送该警报。

        通过这个配置文件,ElastAlert 可以定期查询 Elasticsearch,检查是否满足预先定义的规则,并在满足条件时触发相应的警报。

2.5 创建 ElastAlert 索引

[root@es-node2 ~/elastalert-master]# elastalert-create-index --config example_rules/config.yaml 

2.6 测试告警配置是否正常

[root@es-node2 ~/elastalert-master]# python3 -m elastalert.elastalert --verbose --config example_rules/config.yaml --rule example_rules/example_frequency.yaml

无报错信息则正常。 

三、ElastAlert 集成钉钉

3.1 下载 ElastAlert 钉钉报警插件

ElastAlert 钉钉报警插件 github 地址:GitHub - xuyaoqiang/elastalert-dingtalk-plugin: elastalert 的钉钉报警插件

[root@es-node2 ~]# unzip elastalert-dingtalk-plugin-master.zip 
[root@es-node2 ~]# cd elastalert-dingtalk-plugin-master/
[root@es-node2 ~/elastalert-dingtalk-plugin-master]# cp -rp elastalert_modules /root/elastalert-master/

3.2 创建钉钉机器人

        首先,我们需要在钉钉中创建一个自定义机器人。进入相应的群组,点击群设置,在群助手中选择添加机器人,然后选择 "自定义" 机器人。按照提示设置机器人的名称和头像,并设置安全设置(例如 IP 地址白名单)。创建成功后,你将获得一个 Webhook URL,我们将在 ElastAlert 规则文件中使用这个 URL。 

【Elastic (ELK) Stack 实战教程】11、使用 ElastAlert 实现 ES 钉钉群日志告警

【Elastic (ELK) Stack 实战教程】11、使用 ElastAlert 实现 ES 钉钉群日志告警  

3.3 请求 nginx 频繁出现 401 场景

3.3.1 配置 ElastAlert 规则

[root@es-node2 ~/elastalert-master]# vim example_rules/nginx_404.yaml
# 告警名称
name: nginx_access_404

# 告警类型
type: frequency

# 告警匹配的 es 索引名称
index: kafka-logstash-nginx-access*

#告警的条件,查询最近1分钟的日志,当10s内发生3次404错误则触发告警
num_events: 3
timeframe:
  seconds: 10
  #minutes: 1

filter:
- query:
    query_string:
      query: "response: 404"


# 告警方式:钉钉
alert_text_type: alert_text_only
alert:
- "elastalert_modules.dingtalk_alert.DingTalkAlerter"
dingtalk_webhook: "https://oapi.dingtalk.com/robot/send?access_token=266e1c37a419c558960110cd636630b47cb5208ced71936d37833b98182a40c5"
dingtalk_msgtype: "text"

alert_text: |
  告警程序: ElasticSearch_Alert
  告警节点: {}
  域    名: {}
  调用方式: {}
  请求链接: {}
  触发条件: 10s 内 {} 状态码 超过 {} 次

# 需要匹配的字段名称,与上面按顺序一一对应
alert_text_args:
  - host.name
  - hostname
  - method
  - request
  - response
  - num_hits

3.3.2 执行告警规则

# 前台运行并输出(测试用)
[root@es-node2 ~/elastalert-master]# python3 -m elastalert.elastalert --verbose --config example_rules/config.yaml --rule example_rules/nginx_404.yaml 

# 后台执行,查看 nginx_404.log 输出日志(生产用)
[root@es-node2 ~/elastalert-master]# nohup python3 -m elastalert.elastalert --verbose --config example_rules/config.yaml --rule example_rules/nginx_404.yaml >> nginx_404.log &

[root@es-node2 ~/elastalert-master]# tail -f nginx_404.log 

3.3.3 测试告警规则

测试钉钉告警: 模拟产生 404 日志,通过追加对应时间点的日志即可完成测试(注意把下面时间你当前时间即可)。

[root@es-node3 ~]# echo '218.58.205.220 - - [12/Apr/2023:13:54:02 +0800] "HEAD /favicon.ico HTTP/1.1" 404 0 "chat.sky.com" "-" - "Go-http-client/1.1" "-" 10.100.15.239:80 404 0.009 0.009' >> /var/log/nginx/access.log

【Elastic (ELK) Stack 实战教程】11、使用 ElastAlert 实现 ES 钉钉群日志告警

3.4 请求 nginx 频繁出现 5xx 场景

3.4.1 配置 ElastAlert 规则

[root@es-node2 ~/elastalert-master]# vi example_rules/nginx_5xx.yaml
# 告警名称
name: nginx_access_5xx

# 告警类型
type: frequency

# 告警匹配的索引名称
index: kafka-logstash-nginx-access*

# 告警的条件,查询最近1分钟的日志,当10s内发生3次500-509错误则触发告警
num_events: 3
timeframe:
  seconds: 10
  #minutes: 1

filter:
- query:
    query_string:
      query: "response: [500 TO 509]"


# 告警方式:钉钉
alert_text_type: alert_text_only
alert:
- "elastalert_modules.dingtalk_alert.DingTalkAlerter"
dingtalk_webhook: "https://oapi.dingtalk.com/robot/send?access_token=266e1c37a419c558960110cd636630b47cb5208ced71936d37833b98182a40c5"
dingtalk_msgtype: "text"

alert_text: |
  告警程序: ElasticSearch_Alert
  告警节点: {}
  域    名: {}
  调用方式: {}
  请求链接: {}
  触发条件: 10s 内 {} 状态码 超过 {} 次

alert_text_args:
  - host.name
  - hostname
  - method
  - request
  - response
  - num_hits

3.4.2 执行告警规则

[root@es-node2 ~/elastalert-master]# nohup python3 -m elastalert.elastalert --verbose --config example_rules/config.yaml --rule example_rules/nginx_5xx.yaml >> nginx_5xx.log &

3.4.3 测试告警规则

测试钉钉告警: 模拟产生 500 日志,通过追加对应时间点的日志即可完成测试。

[root@es-node3 ~]# echo '218.58.205.220 - - [12/Apr/2023:14:22:02 +0800] "HEAD /favicon.ico HTTP/1.1" 502 0 "chat.sky.com" "-" - "Go-http-client/1.1" "-" 10.100.15.239:80 404 0.009 0.009' >> /var/log/nginx/access.log
[root@es-node3 ~]# echo '218.58.205.220 - - [12/Apr/2023:14:22:22 +0800] "HEAD /favicon.ico HTTP/1.1" 504 0 "chat.sky.com" "-" - "Go-http-client/1.1" "-" 10.100.15.239:80 404 0.009 0.009' >> /var/log/nginx/access.log

【Elastic (ELK) Stack 实战教程】11、使用 ElastAlert 实现 ES 钉钉群日志告警

3.5 请求 url 超过 3s 场景

3.5.1 配置 ElastAlert 规则

[root@es-node2 ~/elastalert-master]# vi example_rules/nginx_response.yaml
# 告警名称
name: nginx_response_time

# 告警类型
type: frequency

# 告警匹配的索引名称
index: kafka-logstash-nginx-access*

#告警的条件,查询最近1分钟的日志,当10s内发生3次响应超过3s
num_events: 3
timeframe:
  seconds: 10
  #minutes: 1

filter:
filter:
- query_string:
   query: "response_time: >3"


# 告警方式:钉钉
alert_text_type: alert_text_only
alert:
- "elastalert_modules.dingtalk_alert.DingTalkAlerter"
dingtalk_webhook: "https://oapi.dingtalk.com/robot/send?access_token=266e1c37a419c558960110cd636630b47cb5208ced71936d37833b98182a40c5"
dingtalk_msgtype: "text"

alert_text: |
  告警程序: ElasticSearch_Alert
  告警节点: {}
  域    名: {}
  调用方式: {}
  请求链接: {}
  触发条件: 10s 内有 {} 条 Resp 超过 {} 秒

alert_text_args:
  - host.name
  - hostname
  - method
  - request
  - num_hits
  - response_time

3.5.2 执行告警规则 

[root@es-node2 ~/elastalert-master]# nohup python3 -m elastalert.elastalert --verbose --config example_rules/config.yaml --rule example_rules/nginx_response.yaml >> nginx_response.log &

3.5.3 测试告警规则

测试钉钉告警: 模拟 response 大于 3s 的日志,通过追加对应时间点的日志即可完成测试。

[root@es-node3 ~]# echo '218.58.205.220 - - [12/Apr/2023:14:31:12 +0800] "HEAD /favicon.ico HTTP/1.1" 504 0 "chat.sky.com" "-" - "Go-http-client/1.1" "-" 10.100.15.239:80 404 0.009 31' >> /var/log/nginx/access.log

【Elastic (ELK) Stack 实战教程】11、使用 ElastAlert 实现 ES 钉钉群日志告警

上一篇文章:【Elastic (ELK) Stack 实战教程】10、ELK 架构升级-引入消息队列 Redis、Kafka_Stars.Sky的博客-CSDN博客文章来源地址https://www.toymoban.com/news/detail-422038.html

到了这里,关于【Elastic (ELK) Stack 实战教程】11、使用 ElastAlert 实现 ES 钉钉群日志告警的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Elastic Stack 8.11:引入一种新的强大查询语言 ES|QL

    作者:Tyler Perkins, Ninoslav Miskovic, Gilad Gal, Teresa Soler, Shani Sagiv, Jason Burns Elastic® Stack 8.11 引入了数据流生命周期、一种配置数据流保留和降采样(downsampling) 的简单方法(技术预览版),以及有关 Kibana® Inspector 中跨集群搜索响应的详细信息以及重新路由摄取处理器(reroute i

    2024年02月03日
    浏览(52)
  • Elastic:使用 Docker 安装 Elastic Stack 8.x 并开始使用

    Elastic Stack 8.0 终于于最近发布了。在我之前的文章 “Elastic Stack 8.0 安装 - 保护你的 Elastic Stack 现在比以往任何时候都简单” 我已经详细地描述了如何在本地部署 Elasticsearch 及 Kibana。设置 Elasticsearch 的最简单方法是使用 Elastic Cloud 上的 Elasticsearch Service 创建托管部署。 如果你

    2024年02月16日
    浏览(35)
  • Elasticsearch:如何使用自定义的证书安装 Elastic Stack 8.x

    在我之前的文章 “如何在 Linux,MacOS 及 Windows 上进行安装 Elasticsearch”,我详细描述了如何在各个平台中安装 Elastic Stack 8.x。在其中的文章中,我们大多采用默认的证书来安装 Elasticsearch。在今天的文章中,我们用自己创建的证书一步一步地来安装 Elastic Stack 8.x。我们可以参

    2024年02月08日
    浏览(33)
  • Elasticsearch:使用 Docker-Compose 启动单节点 Elastic Stack

    首先必须指出的是,在我之前的文章 “Elasticsearch:使用 Docker compose 来一键部署 Elastic Stack 8.x”,我有详述根据官方文档如何创建一个带有三个节点的安全 Elasticsearch 集群。本文基于著名的 Deviatony 存储库和 Elastic 的官方说明。 建议先通读这些说明,如果你已经可以根据这些

    2024年02月05日
    浏览(61)
  • 十、ELK安装ElastAlert 2插件飞书机器人告警(docker)

    可任意位置,挂载对上就行,方便直接在宿主机修改配置。 /data/feishu-alert/config.yaml /data/feishu-alert/rules

    2024年02月12日
    浏览(50)
  • Elastic Stack(1):Elastic Stack简介

    1 简介 ELK是一个免费开源的日志分析架构技术栈总称,官网https://www.elastic.co/cn。包含三大基础组件,分别是Elasticsearch、Logstash、Kibana。但实际上ELK不仅仅适用于日志分析,它还可以支持其它任何数据搜索、分析和收集的场景,日志分析和收集只是更具有代表性。并非唯一性。

    2024年01月19日
    浏览(48)
  • 【图文详解】Docker搭建 ELK Stack (elk) [使用es-logstash-filebeat-kibana]

            如果您对 elk 还不了解,那么可以先直戳下方官方链接,官方通过图形化界面很形象地介绍了elk stack(Elastic  Stack)。  ELK Stack:Elasticsearch 的开发者倾心打造 | Elastic 本文使用软件(centos7,moba) | 拉取es镜像 || 拉取kibana镜像  ||| 拉取logstash镜像 |||| 拉取filebeat镜

    2023年04月08日
    浏览(46)
  • Elastic Stack 8.0 安装 - 保护你的 Elastic Stack 现在比以往任何时候都简单

    在 8.0 中,我们很高兴为所有用户带来简化的安全功能。 从 7.1 开始,我们向所有人免费提供了确保 Elastic Stack 安全所需的所有功能。 然而,我们知道设置安全性并不好玩,你需要专注于你的项目目标。 好消息给你! 从 8.0 开始,自管理集群默认启用 Elastic Stack 安全性,配置

    2023年04月08日
    浏览(41)
  • Elastic Stack 环境配置与框架简介

    目录 简介 什么是Elastic Stack Elasticasearch Logstash Kibana Beats 框架图 下载 配置 一、安装java环境 启动 Elasticsearch Kibana FileBeat Logstash 测验 Elastic Stack 缩写为elk,它由三个软件组成: Elasticsearch 、 Logstash 、 Kibana ,因此缩写为elk,随着版本的变化,添加了一个新软件 Beats ,因此其全

    2024年02月12日
    浏览(45)
  • 运用 Elastic Stack 收集 docker 容器日志

    Elastic Stack 在收集日志方面有很多的方面的应用。在今天的文章中,我将使用 docker 来安装 Elastic Stack。我将演示如何使用 docker 安装 Filebeat 并收集容器的日志。 在我之前的文章 “Beats:为 Filebeat 配置 inputs”,我展示了如何使用 Filebeat 来收集 container 里的日志数据。在那篇文

    2023年04月08日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包