有一段時間沒有關注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的好處了。