1. 程式人生 > >pinpoint實現告警推送至釘釘和微信群

pinpoint實現告警推送至釘釘和微信群

前言

在前面的文章中,我們學習瞭如何通過java實現將訊息傳送到釘釘、和將訊息傳送到微信群聊。

基於上述基礎,我們今天來接入pinpoint的告警,傳送到釘釘群。

實操前準備

開始之前,推薦閱讀一下,官方的告警說明文件。

閱讀官方文件後,我們實際的來操作一遍。

按照官方說明,首先需要建立對應的使用者組和使用者,但是我們這裡開啟有異常:

通過後臺,pinpoint-web的日誌可以發現,這是由於沒有配置mysql表的原因。

步驟1-配置mysql表

首先,我們建立一個名為pinpoint的資料庫。

然後,匯入官方的指令碼,配置好需要的表。

匯入的所有表顯示如下:

匯入15張資料表後,我們需要修改pinpoint-web的jdbc.properties配置檔案。

配置好正確的資料庫和賬號密碼後,重啟pinpoint-web。

步驟2-介面配置使用者組和使用者

首先配置一個使用者組,然後在這個組下面新建一個使用者。

使用者這裡輸入id、使用者名稱、手機號、郵箱等資訊新增即可。

步驟3-新增應用的告警規則

配置完使用者後,接著我們配置對應應用的告警規則

這裡我針對testboot這個服務,配置了一個慢 請求告警,當慢請求大於5個時,就會觸發。

這裡的type選項指定告警的方式,可以是簡訊、郵件,或者兩者。

然後包含具體的告警指標,這裡我單純選擇的是Slow count,慢請求個數。

具體每個指標的含義,考慮後續再出一篇文章來作詳細解釋。

這篇主要以實現告警功能為目的,就不再深入了。

至此,告警規則就配置好了。

步驟4-改造原始碼思路分析

冷靜分析

pinpoint 採用Spring Batch框架來執行job,其中
一個Job有多個Step,每個step又包含一系列規定動作(read,process,write)。

介面上所有的可配置指標都是通過Checker計算出來的,我們的Slow Count的也不例外。

AlarmMessageSender是我們需要關注的告警介面,它有一個空的實現類,EmptyMessageSender。

本來打算直接在這個類裡面寫程式碼的,但轉念一想,還是算了,因為他沒有被spring管理,是直接new出來的,我們後面可能需要依賴spring的一些bean,避免用著不方便,所以還是自己寫一個類來實現把。

預設情況下,我們都只是使用不帶任何引數的@Autowired。
設定required引數為false,表示忽略當前要注入的bean,如果有直接注入,沒有跳過,不會報錯。

步驟5-進行原始碼改造

新建一個類,實現告警介面,原始碼我上傳到了github,需要的小夥伴,公眾號回覆釘釘,即可獲取。

寫完程式碼後,我們上傳編譯後的class檔案到WEB-INF/classes/com/navercorp/pinpoint/web/alarm目錄下:

由於我使用了一個內部類,所以一共有兩個class檔案。

改一下檔案許可權

chmod 777 ./DingTalkAndWechatMessageSender.class

chmod 777 ./DingTalkAndWechatMessageSender$DingResponse.class

在/WEB-INF/classes/pinpoint-web.properties配置中新增
web.ding.talk.url屬性配置,這個屬性就是釘釘的webhok地址。

當然你也可以寫具體的微服務地址,來進行更多的邏輯處理,這裡為了讓大家開箱即用,我將訊息直接推送給釘釘。

有了推送的url後,我們在applicationContext-web.xml中新增一個bean配置。

    <bean id="dingTalkAndWechatMessageSender" class="com.navercorp.pinpoint.web.alarm.DingTalkAndWechatMessageSender" >
        <property name="dingTalkUrl" value="#{pinpointWebProps['web.ding.talk.url'] ?: ''}"/>
    </bean>

步驟6-測試驗證

檢視是否賦值成功:

呼叫業務介面,我偽造了一個慢請求介面

驗證日誌:

驗證釘釘訊息:

總結

如上,就是將pinpoint告警接入釘釘群的全部過程,若有任何疑問,歡迎來交流討論。
通過這篇文章,來複測以下,是否掌握了以下知識呢:
1、如何傳送訊息接入釘釘群聊。

2、如何編譯class增量釋出。(雖然並不是很推薦這種方式,但是為了提高效率所以這樣用了)

3、如何實現pinpoint的告警介面。

4、pinpoint告警類讀取配置檔案方式。

推送告警到微信群,就不再文章講述了,有需求的小夥伴可以自行研究實現。希望大家多多總結,提高自己。

歡迎來公眾號【俠夢的開發筆記】,回覆乾貨,領取精選學習視訊一份