Logback和Logstash的集成

有一段時間沒有關注Logstash這個項目了,現在幾個項目統一在ElasticSearch下面了。可喜!

http://www.elasticsearch.org/overview/elkdownloads/

Logstash是什麼

大家在每臺服務器上都有Log,規模小的話,一臺一臺機器登進去看當然沒問題。但是當你有上十臺以上,管理成本開始增加了,Logstash就是爲了解決這個問題。

現在的應用通常以分佈式的服務爲主,一個流程調用這裏一個服務,那裏一個服務,當問題發生的時候,排查上比較困難,你必須得在每臺相關的服務器上看日誌,過程比較花時間。

以往有syslogd等工具可以彙總到一臺機器,但都是以文件方式,搜索不方便。Logstash可配置輸出到ElasticSearch服務幫忙做搜索功能,可以做到實時的關鍵字搜索,作爲系統管理員,這個配置非常方便。

Logstash有相當多的渠道去獲取Log,得到原始Log之後,可以配置做一下格式的轉換,把關鍵的信息抽取出來,再輸出到不同的地方,而ElasticSearch只是其中之一。

目前個人覺得比較方便的界面是Kibana,Kibana是一個比較友好的界面去看到在ElasticSearch上面的Log。

實際用例

在Java開發中,不少人會用到Logback作爲日誌的工具,由於Logback目前沒有渠道直接把Log發到Logstash上,我就做了一個Appender,通過Redis以JSON格式把Log發佈到Logstash裏。達到的效果是,只要改改logback的配置,就可以把所有應用的Log匯聚在Logstash上。

前期準備:

  • Redis服務器,可以與Logstash在同一臺服務器
  • Logstash+ElasticSearch+Kibana:安裝過程參考官方文檔

配置logback,需要一個轉接的Appender,可以通過Maven依賴加到項目中:

<dependency>
  <groupId>com.cwbase</groupId>
  <artifactId>logback-redis-appender</artifactId>
  <version>1.0.0</version>
</dependency>

非Maven(如Scala)就要按情況改變一下。

配上對應的logback.xml(或者相應的配置文件)

<configuration>
  <appender name="LOGSTASH" class="com.cwbase.logback.RedisAppender">
    <source>YOUR_APPLICATION_NAME</source>
    <type>test</type>
    <host>YOUR_REDIS_SERVER</host>
    <key>logstash</key>   <!-- 這個Key是Redis List的Key,需要和Logstash讀取Redis的Key匹配 -->
    <tags>test</tags>
    <mdc>true</mdc>
    <location>true</location>
    <callerStackIndex>0</callerStackIndex>
  </appender>

  <root level="DEBUG">
    <appender-ref ref="LOGSTASH" />
  </root>

</configuration>

每一個配置項可以參考項目的說明 https://github.com/kmtong/logback-redis-appender

簡單的 Logstash Input 配置:http://www.logstash.net/docs/1.4.2/inputs/redis

input {
  redis {
    host => 'YOUR_REDIS_SERVER',
    key => 'logstash',
    data_type => 'list',
    format => 'json_event'
    # password => ... # password (optional)
    # port => ... # number (optional), default: 6379
    # tags => ... # array (optional)
    # type => ... # string (optional)
  }
}

現在就可以享受中央儲存和搜索Log的好處了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章