千家信息网

如何设计elasticsearch的自定义业务告警

发表于:2024-11-25 作者:千家信息网编辑
千家信息网最后更新 2024年11月25日,这篇文章主要介绍"如何设计elasticsearch的自定义业务告警",在日常操作中,相信很多人在如何设计elasticsearch的自定义业务告警问题上存在疑惑,小编查阅了各式资料,整理出简单好用的
千家信息网最后更新 2024年11月25日如何设计elasticsearch的自定义业务告警

这篇文章主要介绍"如何设计elasticsearch的自定义业务告警",在日常操作中,相信很多人在如何设计elasticsearch的自定义业务告警问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"如何设计elasticsearch的自定义业务告警"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

A系统与B系统之间有很多接口交互,但是有一段时间接口经常报错,作为开发如果不能第一时间知道问题且及时解决的话就会收到业务投诉,当月绩效凉凉。

如果你也有这种场景,那么你就需要一个及时告警的功能。

实现方案

实现及时告警分以下两种场景:

  • 有ELK日志收集

  • 没有ELK日志收集

没有ELK日志收集的方案

很简单,搭建一个日志收集环境(O(∩_∩)O哈哈~)需要在业务代码中嵌入硬编码,每次catch到异常直接发送告警信息告警平台进行告警

有ELK日志收集的方案

最核心的是 elasticsearch组件,所有的告警方案前提条件都是告警日志需要进ES,然后定时从ES中检索出符合业务规定的告警日志(比如ERROR日志),如果检索出来的告警日志满足一定条件就触发告警通知。

实现方式主要有以下几种:

  • ES WATCHER 这个是elasticsearch的官方插件,它可以根据数据的变化提供警报和通知,目前是收费的,具体操作配置可以参看官方地址

  • elastalert 是Yelp公司基于python写的告警框架,大家可以去GitHub上查看具体使用方法。elastalert

  • 自定义开发

自定义开发实现

主要由以下几个步骤实现:

  1. 分离出单独的告警日志,与业务日志分离

  2. 在logstash中解析日志,构建格式化的告警日志,需要有以下几个关键参数: 日志级别、日志时间、日志描述、开发模块、关联主键、请求参数、响应参数

  3. 定时任务每隔一段时间去ES中检索符合要求的日志,如果检索到就发送告警通知。

核心代码

  1. 日志格式化 我们直接在客户端构建好格式化的日志,以json的形式输出到日志文件中,这样在logstash解析的时候直接使用json解析即可。 这一步不是必须的,可以自由构建日志格式,然后在logstash解析的时候使用grok语法进行解析。

public class AlarmLog {    /**日志级别*/    private String logLevel;    /**日志描述*/    private String message;    /**关联主键 一般使用requestId*/    private String refCode;    /**请求参数*/    private String parm;    /**响应数据*/    private String response;    /**开发模块,根据此参数配置模块负责人*/    private String module;    /**日志时间*/    private long logTime;        ...}
  1. 关键查询 在单独的定时器项目中使用如下查询语法就可以检索出具体的告警日志。检索出来就可以根据日志中的模块字段找出具体的模块负责人,然后发送告警通知给负责人。

public List findRangeLogByLevel(DateTime minRange, DateTime maxRange, String logLevel) {        //需要强制转换成小写        logLevel = logLevel.toLowerCase();        SearchQuery searchQuery = new NativeSearchQueryBuilder()                        .withQuery(boolQuery()                                        //module 必须有值才能告警                                        .must(existsQuery("module"))                                        .must(termQuery("logLevel", logLevel))                                        .must(rangeQuery("logTime")                                                        .from(minRange.getMillis())                                                        .to(maxRange.getMillis())))                        .build();        return elasticsearchTemplate.queryForList(searchQuery, LogDoc.class);}

到此,关于"如何设计elasticsearch的自定义业务告警"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

日志 业务 检索 参数 模块 开发 设计 方案 时间 格式 学习 负责人 代码 关键 场景 官方 接口 数据 方法 时候 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 ie所接收的html数据库 上海同则网络技术有限公司 非关系型数据库的技术代表 联想机架式服务器维修方案 天津沐白互联网科技有限公司 搭建时间服务器 软件开发质量痛点 台州市五金模具erp软件开发 网络安全公司宣传方式有哪些 破坏王把dreaM服务器 用c语言对数据库进行命名 服务器的图片 曙光服务器网卡配置文件 智慧校园网络技术平台 如何保护自身安全网络安全篇 刀片服务器风扇温控线 爬虫将数据写入数据库用什么函数 网络安全答题打分有创意 小米解除网络安全 上海软件开发服务平台 关于网络安全的12字标语 网络安全密匙忘了怎么办 河西区应用软件开发诚信推荐 服务器接入安全问题 深圳市软件开发薪酬标准 心理微课守护网络安全 中国生物医学数据库的网址是 设置cctv解码器服务器地址 华为路由器怎么映射服务器端口号 clinvar数据库
0