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


前言

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

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

實操前准備

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

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

按照官方說明,首先需要創建對應的用戶組和用戶,但是我們這里打開有異常:

file

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

file

步驟1-配置mysql表

首先,我們創建一個名為pinpoint的數據庫。

file

然后,導入官方的腳本,配置好需要的表。

file

導入的所有表顯示如下:

file

導入15張數據表后,我們需要修改pinpoint-web的jdbc.properties配置文件。

配置好正確的數據庫和賬號密碼后,重啟pinpoint-web。

步驟2-界面配置用戶組和用戶

首先配置一個用戶組,然后在這個組下面新建一個用戶。

用戶這里輸入id、用戶名、手機號、郵箱等信息添加即可。
file

步驟3-添加應用的告警規則

配置完用戶后,接着我們配置對應應用的告警規則

file

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

這里的type選項指定告警的方式,可以是短信、郵件,或者兩者。
file

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

file

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

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

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

步驟4-改造源碼思路分析

冷靜分析

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

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

file

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

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

file

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

步驟5-進行源碼改造

新建一個類,實現告警接口,源碼我上傳到了github,需要的小伙伴,公眾號回復釘釘,即可獲取。

file

寫完代碼后,我們上傳編譯后的class文件到WEB-INF/classes/com/navercorp/pinpoint/web/alarm目錄下:

file

由於我使用了一個內部類,所以一共有兩個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-測試驗證

查看是否賦值成功:
file

調用業務接口,我偽造了一個慢請求接口

file

驗證日志:

file

驗證釘釘消息:

file

總結

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

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

3、如何實現pinpoint的告警接口。

4、pinpoint告警類讀取配置文件方式。

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM