1.項(xiàng)目背景
在項(xiàng)目日常開發(fā)中,開發(fā)人員需要關(guān)注線上的異常日志慰安,進(jìn)而針對(duì)異常日志反應(yīng)的程序問題來相應(yīng)的優(yōu)化改造代碼。但項(xiàng)目系統(tǒng)眾多&集群的情況下聪铺,不可能要求開發(fā)人員實(shí)時(shí)去查詢?nèi)罩臼欠裼袌?bào)警或者異常日志化焕。通常我們需要對(duì)日志進(jìn)行監(jiān)控,當(dāng)日志出現(xiàn)異常日志時(shí)铃剔,可以實(shí)時(shí)通過通訊手段自動(dòng)提醒開發(fā)人員撒桨。
2.常用日志監(jiān)控手段
針對(duì)日志監(jiān)控,通常的手段有键兜,在日志輸出時(shí)凤类,并在寫到磁盤前,就可以通過攔截手段拿到日志并分析日志的級(jí)別(本文的基本實(shí)現(xiàn)方式)普气,或者在異常處理時(shí)就觸發(fā)日志警告(比如告警系統(tǒng)Cat),也可以通過Java agent的手段(如skywalking使用探針技術(shù)收集)谜疤,當(dāng)然也可以在日志寫到磁盤上,由ELK采集日志并分析日志,并將異常結(jié)果推送到用戶夷磕,比如可以將日志采集并存儲(chǔ)到阿里云的SLS履肃,并由SLS分析并觸發(fā)日志告警。
3.Logback日志
Logback是由log4j創(chuàng)始人設(shè)計(jì)的又一個(gè)開源日志組件坐桩。logback當(dāng)前分成三個(gè)模塊:logback-core,logback- classic和logback-access尺棋。logback-core是其它兩個(gè)模塊的基礎(chǔ)模塊。logback-classic是log4j的一個(gè) 改良版本绵跷。此外logback-classic完整實(shí)現(xiàn)SLF4J API使你可以很方便地更換成其它日志系統(tǒng)如log4j或JDK14 Logging膘螟。logback-access訪問模塊與Servlet容器集成提供通過Http來訪問日志的功能。
當(dāng)我們系統(tǒng)中集成使用了Logback碾局,我們便可以很方便的管理我們的日志荆残。其也提供了一些可實(shí)現(xiàn)的日志處理供我們自定義實(shí)現(xiàn)來處理日志操作。
4.接入思路及實(shí)現(xiàn)
其他的告警擦俐,都需要搭建一套完整的告警系統(tǒng)脊阴,如Cat,skywalking等都需要搭建獨(dú)立的系統(tǒng),為此蚯瞧,考慮成本嘿期,我們就實(shí)現(xiàn)由logback集成企信機(jī)器人來實(shí)現(xiàn)告警功能。如上圖埋合,通過logback备徐,我們是通過appender將日志分析并寫入到磁盤上,那么我們可以在appender獲取到日志內(nèi)容甚颂,并分析并判斷是否需要告警蜜猾,并在appender中處理并發(fā)送推送。
由于工作中我們使用的通訊工具是企信振诬,為此我們可以考慮把日志告警推送到企信蹭睡,企信提供了群聊機(jī)器人功能,非常方便我們實(shí)現(xiàn)赶么。企信機(jī)器人接入文檔:企信群聊機(jī)器人接入
4.1 自定義appender
通過集成AppenderBase并重寫append方法肩豁,在append方法中,判斷采集的日志是否符合告警要求辫呻,如果符合清钥,則發(fā)送告警信息到企信。
4.2 自定義LevelFilter
自定義LogLevelFilter,重寫decide,如果配置的Level與日志的Level匹配放闺,則接受ACCEPT祟昭。在appender中,如果ACCPET怖侦,則選擇觸發(fā)告警篡悟。
4.3 Logback.xml中配置使用
將自定義的appender配置到logback日志中谜叹,并執(zhí)行filter級(jí)別。
4.4 實(shí)際效果
實(shí)際告警效果恰力,在發(fā)布上線后叉谜,appender獲取到ERROR日志后,并觸發(fā)告警信息到企業(yè)微信踩萎。