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

原文地址:http://luxuryzh.iteye.com/blog/1980364php

 

對於一個已經上線的系統,存在未知的bug或者運行時發生異常是很常見的事情,隨之而來的幾點需求產生了: 
一、系統發生異常時是否可以經過日誌查看到具體緣由 
二、怎樣第一時間撲捉到異常 
三、系統都出現了哪些異常 
四、哪些異常出現頻率高 
     第一點好解決,利用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代碼   收藏代碼
  1. <dependency>  
  2. <groupId>net.kencochrane.raven</groupId>  
  3. <artifactId>raven-logback</artifactId>  
  4. <version>4.1.1</version>  
  5. </dependency>  

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

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

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

        最後須要說一下,畢竟sentry的日誌收集是經過網絡傳輸(TCP/UDP),會帶來性能上的損耗。因此不適用於將全部業務日誌所有收集到Sentry,因此有了Sentry之後仍是須要普通log的,畢竟業務邏輯的跟蹤和分析等等也離不開log,Sentry只是輔助的一個工具。
相關文章
相關標籤/搜索