使用開源軟件sentry來收集日誌

參考鏈接:
http://luxuryzh.iteye.com/blog/1980364

對於一個已經上線的系統,存在未知的bug或者運行時發生異常是很常見的事情,隨之而來的幾點需求產生了:
1、系統發生異常時是否能夠通過日誌查看到具體原因
2、怎樣第一時間撲捉到異常
3、系統都出現了哪些異常
4、哪些異常出現頻率高
第一點好解決,利用log4j、logback等日誌框架把異常信息(stacktrace,params)打印到日誌文件,可以在查找時很方便看到相信信息。但是這樣往往具有滯後性,等到用戶反饋或者系統崩潰的時候纔去線上查看日誌找到原因,可能異常已經發了好幾天了,損失很大。所以第二點顯得格外重要,怎樣做到第一時間捕捉到異常呢?你大可以tail -f yourlog.log盯着屏幕一直看,出現異常馬上解決,但是日誌數量大、分佈在多個服務器的時候這樣的做法肯定行不通了,所以需要有監控措施,第一時間告警。對於第三和第四點則是需要對異常進行分類統計。
所以一個日誌收集系統的原型勾勒出來了:具備收集日誌(對於分佈式環境下,日誌分佈在各臺服務器上)、日誌統計(統計次數最多的異常,往往這就是系統的隱患所在)、監控告警(出現異常或者異常積累到一定數量以短信或者郵件的形式告警)、以及以上功能的可視化界面。其實自己去開發這樣一個系統還是有難度的,好在目前已經有好的開源產品能夠直接使用了,這就是Sentry,一個基於Djongo的日誌收集系統。Sentry的界面漂亮、支持的語言和框架多、易於擴展、效率不錯。
Sentry的安裝和配置網上有很多教程,難度不大。Sentry是c/s結構的軟件,所以部署好了服務器端以後還需要客戶端,Sentry的客戶端支持python/php/ruby/java等語言並且支持在衆多框架中集成。
以和Java的logback集成爲例:
在項目的pom.xml文件中配置Sentry客戶端的依賴:
<!-- sentry raven-java configuration -->
Java代碼 收藏代碼
<dependency>
<groupId>net.kencochrane.raven</groupId>
<artifactId>raven-logback</artifactId>
<version>4.1.1</version>
</dependency>

<!-- jaskson configuration -->
Java代碼 收藏代碼
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.3.0</version>
</dependency>

<!-- sentry appender configuration -->
Java代碼 收藏代碼
<appender name="Sentry" class="net.kencochrane.raven.logback.SentryAppender">
<dsn>
http://your api key@your sentry host/4
</dsn>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
</appender>

dsn中需要配置api keys,這個在sentry的項目配置中可以得到,一切就是這麼簡單,無縫集成,不影響現有的日誌打印,還能幫助收集異常、統計異常,多好的事情,呵呵,下面附上一張我們部署的sentry系統的截圖,敏感信息用線條抹去了請諒解。

最後需要說一下,畢竟sentry的日誌收集是通過網絡傳輸(TCP/UDP),會帶來性能上的損耗。所以不適用於將所有業務日誌全部收集到Sentry,所以有了Sentry以後還是需要普通log的,畢竟業務邏輯的跟蹤和分析等等也離不開log,Sentry只是輔助的一個工具。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章