首页 > 其他分享 >ElastAlert 安装调试

ElastAlert 安装调试

时间:2024-01-17 18:46:04浏览次数:32  
标签:ElastAlert 安装 elastalert 调试 告警 node2 root es

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

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

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

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

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

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

易于集成: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 时所需的一些基本参数。下面是各个参数的解释:

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

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

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

es_host: Elasticsearch 节点的地址。

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

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

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

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

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

 

****** 我的是因为 python  python3   pip  pip3 存在问题 
pip3 install --upgrade elastalert

python3 -m elastalert.create_index

 

File "/usr/local/python3/lib/python3.7/site-packages/jira/client.py", line 225

 

pip3 install --upgrade jira

 

******

 

 

 

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。

 

 

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


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


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

 

标签:ElastAlert,安装,elastalert,调试,告警,node2,root,es
From: https://www.cnblogs.com/JIKes/p/17970726

相关文章

  • Docker初级:Docker安装部署Nginx、Tomcat
    Docker初级:Docker安装部署Nginx、Tomcat:https://blog.csdn.net/Zp_insist/article/details/127636875?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170548607116800188590783%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=170548......
  • linux系统安装dpdk
    预安装编译dpdk所需软件dpdk20.11与之前版本相比,使用了meson和ninjia的编译方式#aptinstallpython3.8python3-pyelftools由于meson依赖python3.7及以上版本,这里选择安装python3.8如果选择pip安装meson和ninja#pip3installmesonninja--user(pip3安装meson默认安装在/......
  • 解决Python虚拟环境安装模块失败的问题
    Python虚拟环境的出现为我们创建和管理项目提供了很大的方便。通过虚拟环境,我们可以隔离不同项目的依赖包,避免版本冲突和混乱。然而,有时候在虚拟环境中安装模块时会遇到各种问题,例如找不到模块、安装超时等。下面将介绍几种常见的情况和相应的解决方法,以帮助您顺利安装模块。1.网络......
  • 记录eletron客户端win7打包及安装使用问题
    win7nodeV14环境配置不能使用msi包安装nodeV14.x,需要下载zip包,手动解压安装文件。下载,nodeV14.15.3下载地址下载完成后解压,并配置环境变量系统变量新增 NODE_PATH 为 C:\nodepath-xx\node_modules系统变量新增 NODE_SKIP_PLATFORM_CHECK 为 1系统变量 path 追加 ;C:\node......
  • 【云原生】Docker入门 -- 阿里云服务器环境下安装Docker
    【云原生】Docker入门--阿里云服务器环境下安装Docker:https://wanghuichen.blog.csdn.net/article/details/125139901?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-125139901-blog-132249920.235%5Ev40%5Ep......
  • 安装jdk
    下载地址:https://www.oracle.com/java/technologies/downloads/archive/下载之后解压tar-zxvf[.tar.gz压缩文件]-C[解压路径]查看版本信息[jdk路径]/bin/java-version配置环境变量#打开环境配置文件#注:~/.bashrc当前用户配置,打开shell时执行#/etc/bashrc全局用户......
  • 安装git
    下载sudoaptinstallgit设置账号gitconfig--globaluser.name<用户名>gitconfig--globaluser.email<邮箱>配置SSH创建验证用的公钥,因为git是通过ssh的方式访问资源库的,所以需要在本地创建验证用的文件ssh-keygen-C<邮箱>-trsa一路回车完事进入.ssh文件......
  • jmeter安装成功后打不开,提示:Cause: CannotResolveClassException: com.blazemeter.jme
    下载安装Jmeter,环境变量也配置完成了,打开Jmeter脚本报错,提示:Cause:CannotResolveClassException:com.blazemeter.jmeter.threads.concurrency.ConcurrencyThreadGroup解决办法:1.可以试着下载安装Jmeter插件管理器,https://jmeter-plugins.org/install/Install/ 2.把步骤1中......
  • 安装MySql(rpm方式安装)
    下载rpm包地址:https://dev.mysql.com/downloads/mysql/下载这个:mysql-8.0.35-1.el7.x86_64.rpm-bundle.tar解压tar-vxfmysql-8.0.35-1.el7.x86_64.rpm-bundle.tar-C<指定解压路径>进入解压路径执行安装以下程序/依赖,必须依次安装rpm-ivhmysql-community-common-8.0.3......
  • 解决U盘安装OSSIM系统引导失败的问题
    在OSSIM安装的最后阶段,系统会进行GRUB引导程序安装,一旦GRUB安装失败,会导致系统无法引导。最近一些学员采用U盘在物理服务器部署OSSIM就遇到了这种问题,下面我们看个实例。一、背景用户将OSSIM的镜像写入到U盘(8GB)之后,采用U盘在服务器上安装系统,结果导致系统无法引导。下图为正常情况......