logstash搭建日誌追蹤系統

前言

開始博客以前,首先看個問題:
做爲一隻程序猿,寫的代碼的過程須要加入一些日誌信息,這些日誌信息包括debug調試信息,異常記錄日誌等。 Java猿通常都是使用log4j,logback等第三方庫記錄日誌。 那麼問題來了,挖掘機到底哪家強?…… 扯個淡,那麼問題來了,若是咱們想看日誌信息,怎麼辦, ssh到服務器上,vim而後查詢。每次都這樣,是否是很蛋疼 = =; 還有另一個問題,若是咱們想分析、追蹤日誌,或者找關鍵字(分詞後的關鍵字),這樣簡簡單單看日誌文件是不可能的。 所以,咱們就須要開源力量了!html

logstash介紹

摘自官網上的一句話:logstash is a tool for managing events and logs. You can use it to collect logs, parse them, and store them for later use (like, for searching)。logstash是一個用來管理事件和日誌的工具,它的做用是收集日誌,解析日誌,存儲日誌爲之後使用。java

官網上有tutorials。 本文也就是對tutorials作一個總結。git

logstash日誌追蹤系統搭建過程

要搭建logstash日誌追蹤系統須要如下幾個環境:github

  1. JDK
  2. logstash
  3. elasticsearch

沒有JDK的小夥伴首先先去下載吧。 logstash和elasticsearch都先下載過來吧~。redis

logstash環境搭建

首先先進入logstash的bin目錄創建一個logstash.conf配置文件:apache

input { stdin { } }
output {
  stdout { codec => rubydebug }
}

而後執行:json

./logstash -f logstash.conf

這時控制檯等待輸入內容,咱們輸入hello world,這個時候控制檯會打印出:vim

{
   "message" => "hello world",
   "@version" => "1",
   "@timestamp" => "2014-11-01T12:38:17.217Z",
      "host" => "format-2.local"
}

這個說明咱們的logstash本地配置成功了。瀏覽器

配置文件有2個內容組成,input和output,其實還有2個配置:filter和codec。
這就是logstash內部的一個叫作事件處理管道(pipeline)的核心概念的3大組成部分:
input:
生成事件(logstash中的事件是由隊列實現的,這個隊列由ruby的SizedQueue實現)的數據來源,常見的有file(文件)、syslog(系統日誌)、redis(緩存系統)、lumberjack(lumberjack協議)緩存

filter:
修改事件內容,常見的filter有grok(經常使用,解析文本並結構化地存儲下來,用來處理沒有結構的文本)、mutate、drop、clone、geoip

output:
展示結果,常見的有elasticsearch(搜索引擎)、file、graphite、statsd

codec:
能夠做爲input或output的一部分,主要用來處理日誌過程當中產生的消息,常見的codec有json、rubydebug

如今咱們回過頭看來咱們的logstash.conf配置文件,只配置了input和output,其中input由一個stdin組成,這個stdin沒有任何參數,output由stdout組成,這個stdout由codec參數,且使用了rebydebug,所以控制檯打印出的信息是reby的對象格式。 咱們把codec改爲json的話,將會打印出如下內容:

{"message":"hello world","@version":"1","@timestamp":"2014-11-01T13:16:38.221Z","host":"format-2.local"}

elasticsearch環境搭建

elasticsearch的環境搭建比較簡單,download elasticsearch以後進入bin目錄,執行:

./elasticsearch

以後打開瀏覽器進入http://localhost:9200/,發現有一串json文本就表示elasticsearch服務器已啓。 可是貌似沒有發現什麼界面,是否是很不友好= =。

elasticsearch支持插件功能,咱們使用kibana插件,下載以後修改config.js文件,把elasticsearch對應的地址改爲elasticsearch服務器地址,而後把kibana解壓出來的全部文件放到$elasticsearchhome/plugins/kibana/_site/目錄中。
以後打開http://localhost:9200/_plugin/kibana


logstash整合elasticsearch

配置完logstash和elasticsearch以後,整合一下這兩個框架。
logstash配置文件(input、output能夠配置多個):

input { stdin { } }
output {
  stdout { codec => json }
  elasticsearch { host => localhost }
}

而後從新啓動logstash,控制檯輸入hello elasticsearch,刷新kibana頁面:

logstash日誌追蹤系統搭建完畢。

logstash的實際應用

以log4j爲例。

logstash配置:

input {
  stdin { }
  log4j {
     mode => "server"
     host  => "127.0.0.1"
     port => 56789
     type => "log4j"
  }
}
output {
  stdout { codec => rubydebug }
  elasticsearch { host => localhost }
}

測試類:

public class LogTest {

    private Logger logger = Logger.getLogger(DebugLogger.class);

    @Before
    public void setUp() {
        PropertyConfigurator.configure(LogTest.class.getClassLoader().getResourceAsStream("log4j.properties"));
    }

    @Test
    public void testLog() {
        logger.debug("hello logstash, this is a message from log4j");
    }

    @Test
    public void testException() {
        logger.error("error", new TestException("sorry, error"));
    }

}

log4j配置:

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p %t %c : %m%n

log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.file=/Users/fangjian/Develop/log_file/test_log.log
log4j.appender.file.maxFileSize=1024
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d %p %t %c : %m%n

# logstash配置
log4j.appender.logstash=org.apache.log4j.net.SocketAppender
log4j.appender.logstash.port=56789
log4j.appender.logstash.remoteHost=127.0.0.1

log4j.rootLogger=debug,stdout,file,logstash

2個test方法跑完以後,刷新kibana界面:

總結

本文僅僅只是對logstash的搭建作一個總結,包括logstash內部的結構,還有一些配置語言的介紹都沒有很是詳細的解釋,若是讀者有興趣,能夠自行查閱相關資料。

參考資料:
http://logstash.net/
http://blog.yeradis.com/2013/10/logstash-and-apache-log4j-or-how-to.html
http://www.cnblogs.com/buzzlight/p/logstash_elasticsearch_kibana_log.html

相關文章
相關標籤/搜索