一闲询、接入vicrab
????在接入vicrab之前厚掷,如果在項目出現(xiàn)異常,都需要我們?nèi)斯げ樵內(nèi)罩疚募V绊椖恳?guī)模不大晨炕,我們倒也沒有覺得哪里不好沟堡,但是由于最近項目發(fā)展痊乾,用戶量急劇增長嗦明,出的問題也是五花八門。所以公司決定接入一個異常管理追蹤的平臺凯楔,經(jīng)過比較窜骄,我們決定選用vicrab作為項目異常管理平臺。接入方式也十分簡單摆屯,vicrab 官網(wǎng) 有挺詳細的文檔邻遏。
- Maven添加vicrab依賴
<dependency>
<groupId>com.vicrab</groupId>
<artifactId>vicrab-logback</artifactId>
<version>1.2.1</version>
</dependency>
<dependency>
<groupId>com.vicrab</groupId>
<artifactId>vicrab-spring-boot-starter</artifactId>
<version>1.2.1</version>
</dependency>
- 項目使用了logback, 所以在logback中添加一個appender
<appender name="Vicrab" class="com.vicrab.logback.VicrabAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
</appender>
- 配置DSN,每創(chuàng)建一個項目虐骑,都能在vicrab獲得一個密鑰准验,使用Vicrab類初始化。
import com.vicrab.Vicrab;
Vicrab.init("dsn");
????經(jīng)過以上幾步簡單的配置廷没,就已經(jīng)成功接入vicrab了糊饱。項目中出現(xiàn)的異常就會發(fā)送到vicrab經(jīng)過分析處理后進行展示。在這里可以看到項目出現(xiàn)的所有問題列表颠黎,每種問題出現(xiàn)的次數(shù)等等信息另锋。這可比之前人工上服務(wù)器翻日志方便多了。
-
項目首頁狭归,可以看到組織下每個項目實時產(chǎn)生的問題數(shù)量
-
項目問題列表夭坪,展示了項目下所有問題,可以篩選排序
-
問題詳情过椎,可以查看異常堆棧信息
二台舱、遇到問題
????剛開始接入vicrab,所有設(shè)置用的都是官方默認設(shè)置,雖然這樣已經(jīng)可以查看項目的所有異常竞惋,但是由于公司項目體量大,并不能在vicrab迅速定位到具體的問題灰嫉。
????當時場景是有一個特定的用戶拆宛,當他點擊搜索的時候,會不定時的出現(xiàn)系統(tǒng)異常讼撒。由于并不知道什么時候會出現(xiàn)問題浑厚,所以這就給我們造成了很大的困擾。之后查看官網(wǎng)介紹根盒,我們決定使用vicrab自帶的通知 alert 系統(tǒng)來解決這個問題钳幅。
三、vicrab alert
????通過vicrab有一個報警通知系統(tǒng)炎滞。在項目設(shè)置中選擇警報敢艰,可以給每個項目定制一個報警規(guī)則。項目創(chuàng)建的時候系統(tǒng)會默認初始化一個報警規(guī)則:"新問題通知"册赛,即當項目出現(xiàn)新問題的時候钠导,系統(tǒng)會給你發(fā)送一封報警郵件。除了系統(tǒng)默認的報警條件之外森瘪,vicrab還提供了其他幾種報警條件牡属,包含對事件的屬性,標簽扼睬,級別以及事件產(chǎn)生的頻率進行監(jiān)控逮栅。
vicrab 提供的報警條件
- "問題在 {event_interval} 時間內(nèi)產(chǎn)生的事件數(shù)量大于 {event_count}", 可以篩選出產(chǎn)生頻率過高的異常
- "產(chǎn)生新的問題"窗宇, 可以篩選出所有新產(chǎn)生的異常
- "問題的標簽滿足 {tag} {match} {value}"措伐,可以對問題的標簽進行篩選通知
- "問題的屬性滿足 {attribute} {match} {value}", 可以對問題的屬性進行篩選通知
- "問題的級別 level {match} {level}"担映,可以針對問題的級別進行篩選通知
四废士、解決問題
????我們決定使用標簽通知來進行優(yōu)化。首先為項目新建一個通知規(guī)則蝇完。點擊新增報警規(guī)則官硝,添加"問題的標簽滿足 {tag} {match} {value}"條件,設(shè)置tag為user_id短蜕,value為具體的user_id氢架,然后保存規(guī)則。為了保證盡量實時收到通知朋魔,把規(guī)則間隔設(shè)置為5分鐘岖研。
新增的報警規(guī)則
????通過查看vicrab官方文檔,在項目中添加標簽支持。把user_id作為標簽的傳遞給vicrab孙援。
- 編寫切面方法害淤,前置通知中添加user_id的標簽tag
Vicrab.getContext().addTag("user_id", user.getUserId());
- 后置通知,需要清空vicrab context
Vicrab.getContext().clear();
????通過上面的操作拓售,可以把user_id作為標簽傳給vicrab窥摄,之后在vicrab控制臺可以通過篩選user_id查詢到2272這個用戶發(fā)生的異常。只要這個用戶出現(xiàn)了異常础淤,vicrab就會給我發(fā)送報警郵件崭放,實現(xiàn)對系統(tǒng)的實時監(jiān)控。
vicrab 郵件通知
也可以通過 vicrab 控制臺鸽凶,通過篩選標簽得到指定用戶發(fā)生的異常
五币砂、后記
????通過使用vicrab集中化錯誤跟蹤平臺可以很好的實時查看項目產(chǎn)生的異常。而vicrab提供的報警功能則可以使我們具備更迅速的異常監(jiān)控能力玻侥。但是目前vicrab報警通知支持的類型太少了决摧,功能也比較單一,不過若真有滿足自己項目需求的情況使碾,使用一下也無妨蜜徽。