前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于elasticsearch的自定义业务告警的设计思路

基于elasticsearch的自定义业务告警的设计思路

作者头像
JAVA日知录
发布2019-10-19 11:12:16
8700
发布2019-10-19 11:12:16
举报
文章被收录于专栏:JAVA杂谈JAVA杂谈

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; ... }
  2. 关键查询 在单独的定时器项目中使用如下查询语法就可以检索出具体的告警日志。检索出来就可以根据日志中的模块字段找出具体的模块负责人,然后发送告警通知给负责人。 public List<LogDoc> 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); }
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-10-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JAVA日知录 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 实现方案
    • 没有ELK日志收集的方案
      • 有ELK日志收集的方案
        • 自定义开发实现
          • 核心代码
          相关产品与服务
          Elasticsearch Service
          腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档