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

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: A系统与B系统之间有很多接口交互,但是有一段时间接口经常报错,作为开发如果不能第一时间知道问题且及时解决的话就会收到业务投诉,当月绩效凉凉。

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


实现方案


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


  • 有ELK日志收集


  • 没有ELK日志收集


没有ELK日志收集的方案


~~很简单,搭建一个日志收集环境(O(∩_∩)O哈哈~

需要在业务代码中嵌入硬编码,每次catch到异常直接发送告警信息告警平台进行告警


有ELK日志收集的方案


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


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


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


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


  • 自定义开发


自定义开发实现


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


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


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


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


核心代码


  1. 日志格式化

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


publicclassAlarmLog {
/**日志级别*/privateStringlogLevel;
/**日志描述*/privateStringmessage;
/**关联主键 一般使用requestId*/privateStringrefCode;
/**请求参数*/privateStringparm;
/**响应数据*/privateStringresponse;
/**开发模块,根据此参数配置模块负责人*/privateStringmodule;
/**日志时间*/privatelonglogTime;
  ...
}


  1. 关键查询


     在单独的定时器项目中使用如下查询语法就可以检索出具体的告警日志。检索出来就可以根据日志中的模块字段找出具体的模块负责人,然后发送告警通知给负责人。


publicList<LogDoc>findRangeLogByLevel(DateTimeminRange, DateTimemaxRange, StringlogLevel) {
//需要强制转换成小写logLevel=logLevel.toLowerCase();
SearchQuerysearchQuery=newNativeSearchQueryBuilder()
      .withQuery(boolQuery()
//module 必须有值才能告警          .must(existsQuery("module"))
          .must(termQuery("logLevel", logLevel))
          .must(rangeQuery("logTime")
              .from(minRange.getMillis())
              .to(maxRange.getMillis())))
      .build();
returnelasticsearchTemplate.queryForList(searchQuery, LogDoc.class);
}


好了,各位朋友们,本期的内容到此就全部结束啦,能看到这里都是优秀的同学,下一个升职加薪的就是你了。


如果觉得这篇文章对你有所帮助的话请扫描下面二维码加个关注。“转发” 加 “在看”,养成好习惯!咱们下期再见!

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
9月前
|
自然语言处理 API 索引
ElasticSearch自定义pinyin和ik分词库
ElasticSearch自定义pinyin和ik分词库
87 0
|
3天前
|
自然语言处理 数据可视化 Linux
ElasticSearch安装ik分词器_使用_自定义词典
ElasticSearch安装ik分词器_使用_自定义词典
7 1
|
1月前
|
存储 数据建模 索引
来自钉钉群的问题——Elasticsearch 如何实现文件名自定义排序?
来自钉钉群的问题——Elasticsearch 如何实现文件名自定义排序?
25 0
|
1月前
|
自然语言处理
Elasticsearch+IK+pinyin自定义分词器
Elasticsearch+IK+pinyin自定义分词器
38 0
|
8月前
|
索引
Elasticsearch集群的索引清理及自定义清理
Elasticsearch集群的索引清理及自定义清理
118 1
|
JSON 数据格式 Python
基于elasticsearch的自定义业务告警的设计思路
基于elasticsearch的自定义业务告警的设计思路
165 0
|
自然语言处理 索引
白话Elasticsearch29-IK中文分词之IK分词器配置文件+自定义词库
白话Elasticsearch29-IK中文分词之IK分词器配置文件+自定义词库
279 0
|
算法
白话Elasticsearch26-深度探秘搜索技术之function_score自定义相关度分数算法
白话Elasticsearch26-深度探秘搜索技术之function_score自定义相关度分数算法
77 0
|
自然语言处理 算法 应用服务中间件
Elasticsearch安装IK分词器、配置自定义分词词库
Elasticsearch安装IK分词器、配置自定义分词词库
370 0
|
自然语言处理 索引
elasticsearch hanlp插件自定义分词配置(停用词)
简述elasticsearch hanlp插件自定义分词配置,涉及停用词,专有名词
elasticsearch hanlp插件自定义分词配置(停用词)