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

這篇文章主要介紹“如何設(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í)吧!

成都創(chuàng)新互聯(lián)公司2013年至今,先為故城等服務(wù)建站,故城等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢(xún)服務(wù)。為故城企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。

A系統(tǒng)與B系統(tǒng)之間有很多接口交互,但是有一段時(shí)間接口經(jīng)常報(bào)錯(cuò),作為開(kāi)發(fā)如果不能第一時(shí)間知道問(wèn)題且及時(shí)解決的話(huà)就會(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)的告警日志滿(mǎn)足一定條件就觸發(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. 日志格式化 我們直接在客戶(hù)端構(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)鍵查詢(xún) 在單獨(dú)的定時(shí)器項(xiàng)目中使用如下查詢(xún)語(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)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

名稱(chēng)欄目:如何設(shè)計(jì)elasticsearch的自定義業(yè)務(wù)告警
網(wǎng)址分享:http://muchs.cn/article44/ghcjhe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、用戶(hù)體驗(yàn)、手機(jī)網(wǎng)站建設(shè)服務(wù)器托管、網(wǎng)站建設(shè)品牌網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)