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);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/253155.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue electron应用调exe程序

描述 用Python写了一个本地服务编译成exe程序&#xff0c;在electron程序启动后&#xff0c;自动执行exe程序 实现 1. 使用node的child_process模块可以执行windows执行&#xff0c;通过指令调exe程序 // electron/index.js var cp require("child_process"); /…

C++泛编程(3)

类模板基础 1.类模板的基本概念2.类模板的分文件编写3.类模板的嵌套 在往节内容中&#xff0c;我们详细介绍了函数模板&#xff0c;这节开始我们就来聊一聊类模板。C中&#xff0c;类的细节远比函数多&#xff0c;所以这个专题也会更复杂。 1.类模板的基本概念 和函数模板一样…

AES算法:数据传输的安全保障

在当今数字化时代&#xff0c;数据安全成为了一个非常重要的问题。随着互联网的普及和信息技术的发展&#xff0c;我们需要一种可靠的加密算法来保护我们的敏感数据。Advanced Encryption Standard&#xff08;AES&#xff09;算法应运而生。本文将介绍AES算法的优缺点、解决了…

【调试】pstore原理和使用方法总结

什么是pstore pstore最初是用于系统发生oops或panic时&#xff0c;自动保存内核log buffer中的日志。不过在当前内核版本中&#xff0c;其已经支持了更多的功能&#xff0c;如保存console日志、ftrace消息和用户空间日志。同时&#xff0c;它还支持将这些消息保存在不同的存储…

H5 简约四色新科技风引导页源码

H5 简约四色新科技风引导页源码 源码介绍&#xff1a;一款四色切换自适应现代科技风动态背景的引导页源码&#xff0c;源码有主站按钮&#xff0c;分站按钮2个&#xff0c;QQ联系站长按钮一个。 下载地址&#xff1a; https://www.changyouzuhao.cn/11990.html

适合龙年春节的SVG模版

宝藏模版 往期推荐&#xff08;点击阅读&#xff09;&#xff1a; 趣味效果&#xff5c;高大上&#xff5c;可爱风&#xff5c;年终总结&#xff08;一&#xff09;&#xff5c;年终总结&#xff08;二&#xff09;&#xff5c;循环特效&#xff5c;情人节&#xff08;一&…

Quartus IP 之mif与hex文件创建与使用

一、mif与hex概述 ROM IP的数据需要满足断电不丢失的要求&#xff0c;ROM IP数据的文件格式一般有三种文件格式&#xff1a;.mif、.hex、.coe&#xff0c;Xilinx与Intel Altera支持的ROM IP数据文件格式如下&#xff1a; Xilinx与Altera支持的ROM文件格式 Alterahex、mifAM&am…

DolphinScheduler本地安装

文章目录 前言1. 安装部署DolphinScheduler1.1 启动服务 2. 登录DolphinScheduler界面3. 安装内网穿透工具4. 配置Dolphin Scheduler公网地址5. 固定DolphinScheduler公网地址 前言 本篇教程和大家分享一下DolphinScheduler的安装部署及如何实现公网远程访问&#xff0c;结合内…

如果品牌刚刚开始,切入私域社群团购,快团团是最好的选择

如果品牌刚刚开始&#xff0c;切入私域社群团购&#xff0c;快团团是最好的选择&#xff0c;借力新渠道社群团购&#xff0c;快团团&#xff0c;成就你的新品牌&#xff0c; 社群团购平台本身就有大量的信任你平台的流量&#xff0c;这个流量基数是巨大的。 你要知道的是&…

惟客数据地产经营分析解决方案-构建数字化经营体系,提高精细化管理能力

惟客数据地产经营分析解决方案以拉通数据底座&#xff0c;以管理行为、量化考核、预警机制为核心&#xff0c;强化对经营风险的识别和解决&#xff0c;以终为始&#xff0c;通过高频高价值场景的应用适配&#xff0c;支撑企业在数字化时代中不断创新、转型&#xff0c;提升企业…

Rhino.Inside带材质将Revit模型bake到Rhino

Hello大家好&#xff01;我是九哥~ 今天来讲一个小技巧&#xff0c;就是我通常采用RIR将Revit的模型的Geometry Bake到Rhino&#xff0c;肯定是没有材质的&#xff0c;那么如果我们需要带材质那要怎么办呢&#xff1f; 对于会的人&#xff0c;其实挺简单的&#xff0c;只需要…

力扣热门100题 - 4.寻找两个正序数组的中位数

力扣热门100题 - 4.寻找两个正序数组的中位数 题目描述&#xff1a;示例&#xff1a;提示&#xff1a;解题思路&#xff1a;代码&#xff1a; 题目链接&#xff1a;4.寻找两个正序数组的中位数 题目描述&#xff1a; 给定两个大小分别为 m 和 n 的正序&#xff08;从小到大&a…

用python编写爬虫,爬取房产信息

题目 报告要求 工程报告链接放在这里 https://download.csdn.net/download/Samature/88816284使用 1.安装jupyter notebook 2.用jupyter notebook打开工程里的ipynb文件&#xff0c;再run all就行 注意事项 可能遇到的bug 暂无&#xff0c;有的话私信我

Verilog刷题笔记20

题目&#xff1a; Case statements in Verilog are nearly equivalent to a sequence of if-elseif-else that compares one expression to a list of others. Its syntax and functionality differs from the switch statement in C. 解题&#xff1a; module top_module ( …

docker自定义镜像并使用

写在前面 本文看下如何自定义镜像。 ik包从这里 下载。 1&#xff1a;自定义带有ik的es镜像 先看下目录结构&#xff1a; /opt/program/mychinese [rootlocalhost mychinese]# ll total 16 -rw-r--r-- 1 root root 1153 Feb 5 04:18 docker-compose.yaml -rw-rw-r-- 1 el…

C语言中的内存函数你知道多少呢?

目录 ​编辑 1. memcpy的使用和模拟实现 1.1函数介绍 ​编辑 1.2函数的使用 1.3模拟实现 2. memmove的使用和模拟实现 2.1函数介绍 2.2函数的使用 2.3模拟实现 3. memset函数的使用 3.1函数介绍 3.2函数的使用 ​编辑 4. memcmp函数的使用 4.1函数介绍 4.2函数…

压力测试工具-Jmeter使用总结

目录 一.前言 二.线程组 三.线程组的组件 四.线程组-HTTP请求 1、JSON提取器 2、XPATH提取器 3、正则表达式提取器 五.线程组-断言 1、响应断言 2、JSON断言 六.创建测试 1.创建线程组 2.配置元件 3.构造HTTP请求 4.添加HTTP请求头 5.添加断言 6.添加查看结果树…

Python 连接 mysql 详解(mysql-connector-python)

文章目录 1 概述1.1 第三方库&#xff1a;mysql-connector-python1.2 可视化工具&#xff1a;navicat1.3 创建测试数据库 2 连接 mysql 数据库2.1 创建一个连接2.2 捕获连接异常2.3 从配置文件中获取连接信息 3 执行 sql 语句3.1 插入、更新、删除3.2 查询 1 概述 1.1 第三方库…

物流自动化移动机器人|HEGERLS三维智能四向穿梭车助力优化企业供应链

智能化仓库/仓储贯穿于物流的各个环节&#xff0c;不局限于存储、输送、分拣、搬运等单一作业环节的自动化&#xff0c;更多的是利用科技手段实现整个物流供应链流程的自动化与智能化&#xff0c;将传统自动化仓储物流各环节进行多维度的有效融合。 例如在数智化物流仓储的建设…

UE4 C++创建摄像机摇臂和相机并且设置Transform

新建MyPawn C类 .h #include "GameFramework/SpringArmComponent.h" //SpringArm组件 #include "Camera/CameraComponent.h" //Camera组件class 工程名称_API AMyPawn : public APawn { //定义组件变量 public:UPROPERTY(VisibleAnywhere, BlueprintRead…