前言
在前面的文章中,我們學習了如何通過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告警類讀取配置文件方式。
推送告警到微信群,就不再文章講述了,有需求的小伙伴可以自行研究實現。希望大家多多總結,提高自己。
歡迎來公眾號【俠夢的開發筆記】,回復干貨,領取精選學習視頻一份