您好,登錄后才能下訂單哦!
這篇文章主要介紹“如何設計elasticsearch的自定義業務告警”,在日常操作中,相信很多人在如何設計elasticsearch的自定義業務告警問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”如何設計elasticsearch的自定義業務告警”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
A系統與B系統之間有很多接口交互,但是有一段時間接口經常報錯,作為開發如果不能第一時間知道問題且及時解決的話就會收到業務投訴,當月績效涼涼。
如果你也有這種場景,那么你就需要一個及時告警的功能。
實現及時告警分以下兩種場景:
有ELK日志收集
沒有ELK日志收集
很簡單,搭建一個日志收集環境(O(∩_∩)O哈哈~)需要在業務代碼中嵌入硬編碼,每次catch到異常直接發送告警信息告警平臺進行告警
最核心的是 elasticsearch組件,所有的告警方案前提條件都是告警日志需要進ES,然后定時從ES中檢索出符合業務規定的告警日志(比如ERROR日志),如果檢索出來的告警日志滿足一定條件就觸發告警通知。
實現方式主要有以下幾種:
ES WATCHER 這個是elasticsearch的官方插件,它可以根據數據的變化提供警報和通知,目前是收費的,具體操作配置可以參看官方地址
elastalert 是Yelp公司基于python寫的告警框架,大家可以去GitHub上查看具體使用方法。elastalert
自定義開發
主要由以下幾個步驟實現:
分離出單獨的告警日志,與業務日志分離
在logstash中解析日志,構建格式化的告警日志,需要有以下幾個關鍵參數: 日志級別、日志時間、日志描述、開發模塊、關聯主鍵、請求參數、響應參數
定時任務每隔一段時間去ES中檢索符合要求的日志,如果檢索到就發送告警通知。
日志格式化 我們直接在客戶端構建好格式化的日志,以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; ... }
關鍵查詢 在單獨的定時器項目中使用如下查詢語法就可以檢索出具體的告警日志。檢索出來就可以根據日志中的模塊字段找出具體的模塊負責人,然后發送告警通知給負責人。
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); }
到此,關于“如何設計elasticsearch的自定義業務告警”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。