溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何設(shè)計(jì)elasticsearch的自定義業(yè)務(wù)告警

發(fā)布時(shí)間:2021-06-26 14:06:06 來(lái)源:億速云 閱讀:395 作者:chen 欄目:大數(shù)據(jù)

這篇文章主要介紹“如何設(shè)計(jì)elasticsearch的自定義業(yè)務(wù)告警”,在日常操作中,相信很多人在如何設(shè)計(jì)elasticsearch的自定義業(yè)務(wù)告警問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”如何設(shè)計(jì)elasticsearch的自定義業(yè)務(wù)告警”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

A系統(tǒng)與B系統(tǒng)之間有很多接口交互,但是有一段時(shí)間接口經(jīng)常報(bào)錯(cuò),作為開(kāi)發(fā)如果不能第一時(shí)間知道問(wèn)題且及時(shí)解決的話就會(huì)收到業(yè)務(wù)投訴,當(dāng)月績(jī)效涼涼。

如果你也有這種場(chǎng)景,那么你就需要一個(gè)及時(shí)告警的功能。

實(shí)現(xiàn)方案

實(shí)現(xiàn)及時(shí)告警分以下兩種場(chǎng)景:

  • 有ELK日志收集

  • 沒(méi)有ELK日志收集

沒(méi)有ELK日志收集的方案

很簡(jiǎn)單,搭建一個(gè)日志收集環(huán)境(O(∩_∩)O哈哈~)需要在業(yè)務(wù)代碼中嵌入硬編碼,每次catch到異常直接發(fā)送告警信息告警平臺(tái)進(jìn)行告警

有ELK日志收集的方案

最核心的是 elasticsearch組件,所有的告警方案前提條件都是告警日志需要進(jìn)ES,然后定時(shí)從ES中檢索出符合業(yè)務(wù)規(guī)定的告警日志(比如ERROR日志),如果檢索出來(lái)的告警日志滿足一定條件就觸發(fā)告警通知。

實(shí)現(xiàn)方式主要有以下幾種:

  • ES WATCHER 這個(gè)是elasticsearch的官方插件,它可以根據(jù)數(shù)據(jù)的變化提供警報(bào)和通知,目前是收費(fèi)的,具體操作配置可以參看官方地址

  • elastalert 是Yelp公司基于python寫(xiě)的告警框架,大家可以去GitHub上查看具體使用方法。elastalert

  • 自定義開(kāi)發(fā)

自定義開(kāi)發(fā)實(shí)現(xiàn)

主要由以下幾個(gè)步驟實(shí)現(xiàn):

  1. 分離出單獨(dú)的告警日志,與業(yè)務(wù)日志分離

  2. 在logstash中解析日志,構(gòu)建格式化的告警日志,需要有以下幾個(gè)關(guān)鍵參數(shù): 日志級(jí)別、日志時(shí)間、日志描述、開(kāi)發(fā)模塊、關(guān)聯(lián)主鍵、請(qǐng)求參數(shù)、響應(yīng)參數(shù)

  3. 定時(shí)任務(wù)每隔一段時(shí)間去ES中檢索符合要求的日志,如果檢索到就發(fā)送告警通知。

核心代碼

  1. 日志格式化 我們直接在客戶端構(gòu)建好格式化的日志,以json的形式輸出到日志文件中,這樣在logstash解析的時(shí)候直接使用json解析即可。 這一步不是必須的,可以自由構(gòu)建日志格式,然后在logstash解析的時(shí)候使用grok語(yǔ)法進(jìn)行解析。

public class AlarmLog {
    /**日志級(jí)別*/
    private String logLevel;
    /**日志描述*/
    private String message;
    /**關(guān)聯(lián)主鍵 一般使用requestId*/
    private String refCode;
    /**請(qǐng)求參數(shù)*/
    private String parm;
    /**響應(yīng)數(shù)據(jù)*/
    private String response;
    /**開(kāi)發(fā)模塊,根據(jù)此參數(shù)配置模塊負(fù)責(zé)人*/
    private String module;
    /**日志時(shí)間*/
    private long logTime;
	...
}
  1. 關(guān)鍵查詢 在單獨(dú)的定時(shí)器項(xiàng)目中使用如下查詢語(yǔ)法就可以檢索出具體的告警日志。檢索出來(lái)就可以根據(jù)日志中的模塊字段找出具體的模塊負(fù)責(zé)人,然后發(fā)送告警通知給負(fù)責(zé)人。

public List<LogDoc> findRangeLogByLevel(DateTime minRange, DateTime maxRange, String logLevel) {
	//需要強(qiáng)制轉(zhuǎn)換成小寫(xiě)
	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);
}

到此,關(guān)于“如何設(shè)計(jì)elasticsearch的自定義業(yè)務(wù)告警”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI