ElastAlert 错误日志告警
文章目录
- 前言
- 一、ElastAlert 概览
- 1.1 简介
- 1.2 ElastAlert 特性
- 二、ElastAlert 下载部署
- 2.1 安装 Python3 环境
- 2.2 下载 ElastAlert
- 2.3 部署 ElastAlert
- 三、接入平台
- 3.1 对外接口层
- 3.2 服务层
前言
ElastAlert 是 Yelp 公司基于 python 开发的 ELK 日志告警插件,Elastalert 通过查询 Elasticsearch 中的记录与定于的告警规则进行对比,判断是否满足告警条件。发生匹配时将为该告警触发一个或多个告警动作。告警规则由 ElastAlert 的 rules 定义,每个规则定义一个查询。
一、ElastAlert 概览
1.1 简介
ElastAlert 程序的设计是可靠的、高度可定制的、安装方面也是简单的并且可配置的。
它通过将 Elasticsearch 与两个组件,规则类型(rule types)以及警报(alerts)相结合进行实现。Elasticsearch 会定期的被程序查询,得出的数据经由规则类型(rule type)确定何时找到了匹配项。当找到匹配项后,会根据匹配的数据结果给出一个或多个警报。
配置方面是由一组规则(rules)进行管控,每个规则(rules)里面定义了一个查询,一个规则类型以及一组警报。
目前支持以下的报警类型:
- Command
- JIRA
- OpsGenie
- SNS
- HipChat
- Slack
- Telegram
- Debug
- Stomp
1.2 ElastAlert 特性
- 架构简单,定制灵活
- 支持多种匹配规则(频率、阈值、数据变化、黑白名单、变化率等)
- 支持多种警报类型(邮件、HTTP POST、自定义脚本等)
- 匹配项汇总报警,重复警报抑制,报警失败重试和过期
- 可用性强,状态信息保存到Elasticsearch的索引中
二、ElastAlert 下载部署
2.1 安装 Python3 环境
切换到 /data 目录下
cd /data
安装 openssl
yum -y install wget openssl openssl-devel gcc gcc-c++
下载 Python 安装包
wget https://www.python.org/ftp/python/3.6.9/Python-3.6.9.tgz
解压缩
tar -zxvf Python-3.6.9.tgz
cd Python-3.6.9 目录
cd Python-3.6.9
安装配置
./configure
编译
make && make install
建立软连接去除系统自带的 Python2
mv /usr/bin/python /usr/bin/python_old
ln -s /usr/local/python/bin/python3 /usr/bin/python
ln -s /usr/local/python/bin/pip3 /usr/bin/pip
pip install --upgrade pip
查看版本
[root@boe-dc-38 bin]# python -V
Python 3.6.9
[root@boe-dc-38 bin]# pip -V
pip 21.3.1 from /usr/local/python/lib/python3.6/site-packages/pip (python 3.6)
2.2 下载 ElastAlert
1.克隆 ElastAlert 项目
git clone https://github.com/Yelp/elastalert.git
2.安装
cd elastalert
pip install elasticsearch>=7.0.0
pip install -r requirements.txt
python setup.py install
3.安装成功后可以看到四个命令
[root@boe-dc-38 bin]# ll /usr/local/python/bin/elastalert*
-rwxr-xr-x 1 root root 396 Nov 17 13:40 /usr/local/python/bin/elastalert
-rwxr-xr-x 1 root root 422 Nov 17 13:40 /usr/local/python/bin/elastalert-create-index
-rwxr-xr-x 1 root root 430 Nov 17 13:40 /usr/local/python/bin/elastalert-rule-from-kibana
-rwxr-xr-x 1 root root 416 Nov 17 13:40 /usr/local/python/bin/elastalert-test-rule
4.软连接到 /usr/bin 下,方便使用
ln -s /usr/local/python/bin/elastalert* /usr/bin
- elastalert 报警执行的命令,会根据报警规则执行相应操作。
- elastalert-create-index 会创建一个索引,ElastAlert 会把执行记录存放到这个索引中,默认情况下,索引名叫 elastalert_status。其中有 4 个 _type,都有自己的 @timestamp 字段,所以同样也可以用 Kibana 来查看这个索引的日志记录情况。
- elastalert-rule-from-kibana 从 Kibana3 已保存的仪表盘中读取 Filtering 设置,帮助生成config.yaml 里的配置。不过注意它只会读取 filtering,不包括 queries。
- elastalert-test-rule 测试自定义配置中的 rule 设置。
5.创建 elastalert 索引
elastalert-create-index

2.3 部署 ElastAlert
1.主配置文件config.yaml
#加载rule的目录,默认是example_rules
rules_folder: /data/elastalter/example_rules#设置定时向elasticsearch发送请求,也就是告警频率
run_every:minutes: 1#用来设置请求里时间字段的范围
buffer_time:minutes: 15#elasticsearch的ip地址和端口
es_host: 192.168.136.123
es_port: 9200#elastalert产生的日志在elasticsearch中的创建的索引
writeback_index: elastalert_status
writeback_alias: elastalert_alerts
:1
#失败重试的时间限制
alert_time_limit:days: 2
2.邮件告警配置
python -m elastalert.elastalert --verbose --config /data/elastalter/config.yaml --rule /data/elastalter/example_rules/visual-chart.yaml
三、接入平台
3.1 对外接口层
@Slf4j
@RestController
@RequestMapping("/webhook")
public class WebhookController {@AutowiredWebhookService webhookService;/*** 接收elastalert告警消息** @param request* @return*/@RequestMapping("/elastalert")public Result elastalert(HttpServletRequest request) throws IOException {//设置流的编码request.setCharacterEncoding("UTF-8");StringBuffer data = new StringBuffer();String line = null;BufferedReader reader = null;reader = request.getReader();while (null != (line = reader.readLine())) {data.append(line);}String result = data.toString().replace("@timestamp","timestamp");ElastalertAlarmMessageDTOS elastalertAlarmMessageDTOS = JSON.parseObject(result, ElastalertAlarmMessageDTOS.class);String jsonFlatten = JsonFlatten.jsonFlatten(elastalertAlarmMessageDTOS.getLog());elastalertAlarmMessageDTOS.setLog(jsonFlatten);log.info("请求数据===================>" + elastalertAlarmMessageDTOS);webhookService.handleElastalert(elastalertAlarmMessageDTOS);return Result.success();}
}
3.2 服务层
/*** 处理Elastalert消息** @param alarmMessages 告警消息*/
public void handleElastalert(ElastalertAlarmMessageDTOS alarmMessages) {String subject = String.format(MailConstants.ELASTALERT_SUBJECT_TEMPLATE, alarmMessages.get_index());String content = String.format(MailConstants.ELASTALERT_CONTENT_TEMPLATE_LARD, alarmMessages.get_index(),alarmMessages.get_index(), alarmMessages.getTimestamp(), alarmMessages.getLog(),alarmMessages.getMessage(), alarmMessages.get_id());try {msgService.sendLark(subject, content);} catch (Exception e) {log.error("发送错误日志告警通知异常, 主题:{}, 内容:{}", subject, content);}String indexName = serviceService.serviceName(alarmMessages.get_index());// 获取服务名称String serviceName = getServiceName(indexName);// 根据服务名获取服务信息TService service = serviceService.findByName(serviceName);if (service == null) {log.warn("处理Elastalert告警信息失败, 原因:未找到对应服务信息, 服务名称:{}", serviceName);}TElastalertAlarmRecord alarmRecord = new TElastalertAlarmRecord();alarmRecord.setAlarmTime(alarmMessages.getTimestamp().toString());alarmRecord.setBuId(service.getBuId());alarmRecord.setPath(alarmMessages.getLog());alarmRecord.setServiceName(serviceName);alarmRecord.setAlarmMessage(alarmMessages.getMessage());alarmRecordService.save(alarmRecord);// 查找该BU关联的用户List<TUser> users = userService.findByBuId(service.getBuId());users.removeIf(user -> MailConstants.WARN_SKIP_USERS.contains(user.getEmpNo()));if (CollectionUtils.isEmpty(users)) {log.warn("发送Elastalert告警通知邮件失败, 原因:未找到对应的负责人, 服务名称:{}", serviceName);}String[] to = users.stream().map(TUser::getEmail).collect(Collectors.toList()).toArray(new String[0]);String contentMail = String.format(MailConstants.ELASTALERT_CONTENT_TEMPLATE_LARD_MAIL, alarmMessages.get_index(),alarmMessages.get_index(), alarmMessages.getTimestamp(), alarmMessages.getLog(),alarmMessages.getMessage(), alarmMessages.get_id());try {msgService.sendHTMLMail(to, null, subject, contentMail);} catch (Exception e) {log.error("发送Elastalert告警通知邮件异常, 收件人:{}, 主题:{}, 内容:{}", to, subject, content);}
}
相关文章:
ElastAlert 错误日志告警
文章目录 前言一、ElastAlert 概览1.1 简介1.2 ElastAlert 特性 二、ElastAlert 下载部署2.1 安装 Python3 环境2.2 下载 ElastAlert2.3 部署 ElastAlert 三、接入平台3.1 对外接口层3.2 服务层 前言 ElastAlert 是 Yelp 公司基于 python 开发的 ELK 日志告警插件,…...
假设检验的过程
假设检验的核心思想是小概率事件在一次实验中不可能发生,假设检验就是利用小概率事件的发生进行反正。学习假设检验,有几个概念不能跳过,原假设、p值 1.原假设 假设检验的基本过程如下: 1)做出一个假设H0,…...
vue项目打包部署到flask等后端服务里面,实现前后端不分离部署,解决空白页面和刷新页面not fount问题
1. 编译模式一定要设置为esnext,否则会报错: Strict MIME type checking is enforced for module scripts per HTML spec.Expected a JavaScript module script but the server responded with a MIME type of "text/plain". 具体解释可以看vi…...
labelimg 在pycharm下载使用
labelimg 使用数据标注工具 labelimg 制作数据集 在pycharm中搜索labelimg 选择版本安装 labelimg install 使用数据标注工具制作数据集 启动 带参数启动 1、cmd cd到指定目录 2、带参数启动标注工具 左侧可以选择切换为需要的数据格式 一些快捷键 和自动保存,…...
STM32/C51开发环境搭建(KeilV5安装)
Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、链接器、库管理和一个功能强大的仿真调试器等…...
前端开发 :(二)HTML基础
1. 介绍HTML 1.1 HTML的定义和作用 HTML(HyperText Markup Language)是一种标记语言,用于创建和设计网页的结构和内容。它通过使用标签来描述文档的结构,使得浏览器能够正确地解释和显示页面。 1.2 HTML的发展历史 HTML的发展…...
小米平板6获取root权限教程
1. 绑定账号 1> 打开"设置-我的设备-全部参数-连续点击MIUI版本按钮",直到提示已打开开发者模式( p s : 这里需要重点关注红框平板型号和 M I U I 版本,例如我这里平板型号是 X i a o m i P a d 6 , M I U I 版本是 14.0.10 &am…...
01. k210-命令行环境搭建(ubuntu环境)
本文主要讲解k210在ubuntu23.04操作系统中的环境搭建 1.获取工具链 github下载工具链 截止到目前最新版本是:Kendryte GNU Toolchain v8.2.0-20190409[Pre-release]。 编译好的镜像有ubuntu版本和windows版本,本章我们主要讲解的是ubuntu系统的开发环境。 Versio…...
Spring Boot3整合Redis
⛰️个人主页: 蒾酒 🔥系列专栏:《spring boot实战》 🌊山高路远,行路漫漫,终有归途。 目录 前置条件 1.导依赖 2.配置连接信息以及连接池参数 3.配置序列化方式 4.编写测试 前置条件 已经初始化好一个spr…...
算法之美_2024
算法与数据结构进阶 – liuyubobo 学习链接 : 算法与数据结构 玩转算法面试 – Leetcode真题分门别类讲解 学习链接:玩转算法面试 LLM行业领军大佬 带你转型大语言模型 学习链接:LLM 区块链 学习链接:区块链 运维测试 学…...
Leetcode刷题笔记题解(C++):590. N 叉树的后序遍历
思路:类似于二叉树的排序,这里需要将子树进行依次递归遍历,前序遍历也与之类似 /* // Definition for a Node. class Node { public:int val;vector<Node*> children;Node() {}Node(int _val) {val _val;}Node(int _val, vector<N…...
华为CC++语言编程规范--笔记
华为C&C语言编程规范 1.基本要求1.1 变量规则1.1.1:指针变量、表示资源描述符的变量、BOOL变量声明必须赋予初值规则1.1.2:指向资源句柄或描述符的变量,在资源释放后立即赋予新值规则1.1.3:类的成员变量必须在构造函数中赋予初…...
洛谷_P5461 赦免战俘_python写法
捋一下这道题的思路,理解了题目的意思之后我们知道这道题一定会用递归。 那递归的出口很简单,矩阵为1x1的时候就是题目所说的不能再细分下去的意思。 问题就在于递归体。 我对于递归体的理解是找到一个普适的规律,这个规律适用于每一次的递归…...
RabbitMQ的延迟队列实现[死信队列](笔记二)
上一篇已经讲述了实现死信队列的rabbitMQ服务配置,可以点击: RabbitMQ的延迟队列实现(笔记一) 目录 搭建一个新的springboot项目模仿订单延迟支付过期操作启动项目进行测试 搭建一个新的springboot项目 1.相关核心依赖如下 <dependency><groupId>org.…...
买电脑注意事项之CPU型号后面的字母都代表什么意思
在 CPU 型号后面的字母通常表示该 CPU 的一些特性或用途。不同的字母可能代表不同的系列、性能级别、功耗特性等。以下是一些常见的 CPU 后缀字母及其可能的含义: U(例如:i5-8250U): Ultra Low Power:表示低功耗&#…...
Transformer实战-系列教程11:SwinTransformer 源码解读4(WindowAttention类)
🚩🚩🚩Transformer实战-系列教程总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 点我下载源码 SwinTransformer 算法原理 SwinTransformer 源码解读1(项目配置/SwinTr…...
Jenkins(本地Windows上搭建)上传 Pipeline构建前端项目并将生成dist文件夹上传至指定服务器
下载安装jdk https://www.oracle.com/cn/java/technologies/downloads/#jdk21-windows 下载jenkins window版 双击安装 https://www.jenkins.io/download/thank-you-downloading-windows-installer-stable/ 网页输入 http://localhost:8088/ 输入密码、设置账号、安装推…...
Elasticsearch 安装和配置脚本文档
Elasticsearch 安装和配置脚本文档 目录 **Elasticsearch 安装和配置脚本文档**0.**概述**1.**使用方法:**2.**脚本步骤:**3. **完整代码如下:** 0.概述 此Bash脚本用于自动化在CentOS 7系统上安装和配置Elasticsearch(ES&#x…...
【Android辟邪】之:gradle——在项目间共享依赖关系版本
翻译和简单修改自:https://docs.gradle.org/current/userguide/platforms.html#sec:sharing-catalogs 建议看原文(有能力的话) 现在 Gradle 脚本可以使用两种语法编写:Kotlin 和 Groovy 本文只使用kotlin脚本语法,更…...
Qt 项目树工程,拷贝子项目dll到子项目exe运行路径
1、项目树工程 2、项目树列表 ---- BuildAll -------- App (exe) -------- Database (dll) 注:使用 子项目–>添加库–>内部库 的方式 3、qmake 内置的变量 $$OUT_PWD 表示输出文件(如可执行文件…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
快刀集(1): 一刀斩断视频片头广告
一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...
