a系统与b系统之间有很多接口交互,但是有一段时间接口经常报错,作为开发如果不能第一时间知道问题且及时解决的话就会收到业务投诉,当月绩效凉凉。
如果你也有这种场景,那么你就需要一个及时告警的功能。
实现及时告警分以下两种场景:
~~很简单,搭建一个日志收集环境(o(∩_∩)o哈哈~)~~
需要在业务代码中嵌入硬编码,每次catch到异常直接发送告警信息告警平台进行告警
最核心的是 elasticsearch组件,所有的告警方案前提条件都是告警日志需要进es,然后定时从es中检索出符合业务规定的告警日志(比如error日志),如果检索出来的告警日志满足一定条件就触发告警通知。
实现方式主要有以下几种:
es watcher
这个是elasticsearch的官方插件,它可以根据数据的变化提供警报和通知,目前是收费的,具体操作配置可以参看
elastalert
是yelp公司基于python写的告警框架,大家可以去github上查看具体使用方法。
自定义开发
主要由以下几个步骤实现:
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; ... }
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); }
如对本文有疑问, 点击进行留言回复!!
SpringBoot多Module启动报错Could not transfer metadata
Hibernate项目报错:Cannot call sendError() after the response has been committed
Chrome浏览器插件万能视频下载器Video DownloadHelper
DevTools failed to load SourceMap: Could not load content
网友评论