当前位置: 首页 > news >正文

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
  • Email
  • JIRA
  • OpsGenie
  • SNS
  • HipChat
  • Slack
  • Telegram
  • Debug
  • Stomp

1.2 ElastAlert 特性

  1. 架构简单,定制灵活
  2. 支持多种匹配规则(频率、阈值、数据变化、黑白名单、变化率等)
  3. 支持多种警报类型(邮件、HTTP POST、自定义脚本等)
  4. 匹配项汇总报警,重复警报抑制,报警失败重试和过期
  5. 可用性强,状态信息保存到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 日志告警插件&#xff0c;…...

假设检验的过程

假设检验的核心思想是小概率事件在一次实验中不可能发生&#xff0c;假设检验就是利用小概率事件的发生进行反正。学习假设检验&#xff0c;有几个概念不能跳过&#xff0c;原假设、p值 1.原假设 假设检验的基本过程如下&#xff1a; 1&#xff09;做出一个假设H0&#xff0c…...

vue项目打包部署到flask等后端服务里面,实现前后端不分离部署,解决空白页面和刷新页面not fount问题

1. 编译模式一定要设置为esnext&#xff0c;否则会报错&#xff1a; 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、带参数启动标注工具 左侧可以选择切换为需要的数据格式 一些快捷键 和自动保存&#xff0c…...

STM32/C51开发环境搭建(KeilV5安装)

Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统&#xff0c;与汇编相比&#xff0c;C语言在功能上、结构性、可读性、可维护性上有明显的优势&#xff0c;因而易学易用。Keil提供了包括C编译器、宏汇编、链接器、库管理和一个功能强大的仿真调试器等…...

前端开发 :(二)HTML基础

1. 介绍HTML 1.1 HTML的定义和作用 HTML&#xff08;HyperText Markup Language&#xff09;是一种标记语言&#xff0c;用于创建和设计网页的结构和内容。它通过使用标签来描述文档的结构&#xff0c;使得浏览器能够正确地解释和显示页面。 1.2 HTML的发展历史 HTML的发展…...

小米平板6获取root权限教程

1. 绑定账号 1> 打开"设置-我的设备-全部参数-连续点击MIUI版本按钮"&#xff0c;直到提示已打开开发者模式( p s : 这里需要重点关注红框平板型号和 M I U I 版本&#xff0c;例如我这里平板型号是 X i a o m i P a d 6 &#xff0c; 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版本&#xff0c;本章我们主要讲解的是ubuntu系统的开发环境。 Versio…...

Spring Boot3整合Redis

⛰️个人主页: 蒾酒 &#x1f525;系列专栏&#xff1a;《spring boot实战》 &#x1f30a;山高路远&#xff0c;行路漫漫&#xff0c;终有归途。 目录 前置条件 1.导依赖 2.配置连接信息以及连接池参数 3.配置序列化方式 4.编写测试 前置条件 已经初始化好一个spr…...

算法之美_2024

算法与数据结构进阶 – liuyubobo 学习链接 &#xff1a; 算法与数据结构 玩转算法面试 – Leetcode真题分门别类讲解 学习链接&#xff1a;玩转算法面试 LLM行业领军大佬 带你转型大语言模型 学习链接&#xff1a;LLM 区块链 学习链接&#xff1a;区块链 运维测试 学…...

Leetcode刷题笔记题解(C++):590. N 叉树的后序遍历

思路&#xff1a;类似于二叉树的排序&#xff0c;这里需要将子树进行依次递归遍历&#xff0c;前序遍历也与之类似 /* // 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&#xff1a;指针变量、表示资源描述符的变量、BOOL变量声明必须赋予初值规则1.1.2&#xff1a;指向资源句柄或描述符的变量&#xff0c;在资源释放后立即赋予新值规则1.1.3&#xff1a;类的成员变量必须在构造函数中赋予初…...

洛谷_P5461 赦免战俘_python写法

捋一下这道题的思路&#xff0c;理解了题目的意思之后我们知道这道题一定会用递归。 那递归的出口很简单&#xff0c;矩阵为1x1的时候就是题目所说的不能再细分下去的意思。 问题就在于递归体。 我对于递归体的理解是找到一个普适的规律&#xff0c;这个规律适用于每一次的递归…...

RabbitMQ的延迟队列实现[死信队列](笔记二)

上一篇已经讲述了实现死信队列的rabbitMQ服务配置&#xff0c;可以点击: RabbitMQ的延迟队列实现(笔记一) 目录 搭建一个新的springboot项目模仿订单延迟支付过期操作启动项目进行测试 搭建一个新的springboot项目 1.相关核心依赖如下 <dependency><groupId>org.…...

买电脑注意事项之CPU型号后面的字母都代表什么意思

在 CPU 型号后面的字母通常表示该 CPU 的一些特性或用途。不同的字母可能代表不同的系列、性能级别、功耗特性等。以下是一些常见的 CPU 后缀字母及其可能的含义&#xff1a; U&#xff08;例如&#xff1a;i5-8250U&#xff09;: Ultra Low Power&#xff1a;表示低功耗&#…...

Transformer实战-系列教程11:SwinTransformer 源码解读4(WindowAttention类)

&#x1f6a9;&#x1f6a9;&#x1f6a9;Transformer实战-系列教程总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 点我下载源码 SwinTransformer 算法原理 SwinTransformer 源码解读1&#xff08;项目配置/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.**使用方法&#xff1a;**2.**脚本步骤&#xff1a;**3. **完整代码如下&#xff1a;** 0.概述 此Bash脚本用于自动化在CentOS 7系统上安装和配置Elasticsearch&#xff08;ES&#x…...

【Android辟邪】之:gradle——在项目间共享依赖关系版本

翻译和简单修改自&#xff1a;https://docs.gradle.org/current/userguide/platforms.html#sec:sharing-catalogs 建议看原文&#xff08;有能力的话&#xff09; 现在 Gradle 脚本可以使用两种语法编写&#xff1a;Kotlin 和 Groovy 本文只使用kotlin脚本语法&#xff0c;更…...

Qt 项目树工程,拷贝子项目dll到子项目exe运行路径

1、项目树工程 2、项目树列表 ---- BuildAll -------- App &#xff08;exe&#xff09; -------- Database &#xff08;dll&#xff09; 注&#xff1a;使用 子项目–>添加库–>内部库 的方式 3、qmake 内置的变量 $$OUT_PWD 表示输出文件&#xff08;如可执行文件…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 &#xff08;FL&#xff09; 支持跨分布式客户端进行协作模型训练&#xff0c;而无需共享原始数据&#xff0c;这使其成为在互联和自动驾驶汽车 &#xff08;CAV&#xff09; 等领域保护隐私的机器学习的一种很有前途的方法。然而&#xff0c;最近的研究表明&…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域&#xff0c;准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具&#xff0c;正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中&#xff0c;电磁频谱已成为继陆、海、空、天之后的 “第五维战场”&#xff0c;雷达作为电磁频谱领域的关键装备&#xff0c;其干扰与抗干扰能力的较量&#xff0c;直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器&#xff0c;凭借数字射…...

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象&#xff0c;只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意&#xff1a;它移动的位置必须是相连的有内容的单元格…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;社区养老保险系统小程序被用户普遍使用&#xff0c;为方…...

LeetCode - 199. 二叉树的右视图

题目 199. 二叉树的右视图 - 力扣&#xff08;LeetCode&#xff09; 思路 右视图是指从树的右侧看&#xff0c;对于每一层&#xff0c;只能看到该层最右边的节点。实现思路是&#xff1a; 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

IP如何挑?2025年海外专线IP如何购买?

你花了时间和预算买了IP&#xff0c;结果IP质量不佳&#xff0c;项目效率低下不说&#xff0c;还可能带来莫名的网络问题&#xff0c;是不是太闹心了&#xff1f;尤其是在面对海外专线IP时&#xff0c;到底怎么才能买到适合自己的呢&#xff1f;所以&#xff0c;挑IP绝对是个技…...