Logstash收集日誌

Logstash 的介紹

logstash是一種分佈式日誌收集框架,開發語言是JRuby,固然是爲了與Java平臺對接,不過與Ruby語法兼容良好,很是簡潔強大,常常與ElasticSearch,Kibana配置,組成著名的ELK技術棧,很是適合用來作日誌數據的分析。html

固然它能夠單獨出現,做爲日誌收集軟件,你能夠收集日誌到多種存儲系統或臨時中轉系統,如MySQL,redis,kakfa,HDFS, lucene,solr等並不必定是ElasticSearch。redis

官網下載地址:https://www.elastic.co/downloads/logstash spring

官網文檔地址:https://www.elastic.co/guide/en/logstash/current/index.html shell

中文文檔地址:http://udn.yyuap.com/doc/logstash-best-practice-cn/index.html apache

Logstash 的安裝

Logstash 的安裝很是簡單,直接官網下載對應的版本(須要和 Elasticsearch 的版本匹配)解壓縮便可json

# tar -zxvf logstash-2.3.2.tar.gz

測試啓動spring-mvc

# cd logstash/
# cd bin/
# ./logstash -e 'input { stdin { } } output { stdout {} }'

啓動成功提示緩存

Settings: Default pipeline workers: 4
Pipeline main started

Logstash配置

  啓動logstash收集須要建立自定義conf配置文件 tomcat

   一般 Logstash 的一個配置文件含 input{},filter{},output{} 三部分,該三部分的做用也很好理解,一個配置輸入源,一個配置過濾規則,一個配置輸出;服務器

   其每一個部分又能夠配置各類不一樣的插件,全部插件的說明請參考官網文檔的說明

   三部分我以爲最難的配置就是filter了,須要配置grok插件

   在dir下建立一個文件,文件名隨意

   將dir加入grok路徑: patterns_dir => "./dir"

   將想要增長的SYNTAX寫入: SYNTAX_NAME regexp

   使用方法和使用默認SYNTAX相同:%{SYNTAX_NAME:SEMANTIC}

#log4j日誌
# 2016-04-10 07:19:16-|INFO|-Root WebApplicationContext: initialization started
MYTIMESTAMP 20%{YEAR}-%{MONTHNUM}-%{MONTHDAY} %{HOUR}:%{MINUTE}:%{SECOND}
MYLOG %{MYTIMESTAMP:mytimestamp}-\|%{LOGLEVEL:level}\|-%{JAVALOGMESSAGE:logmsg}
 
SERVER_LOG %{DATA:year}-%{DATA:month}-%{DATA:day}\ %{DATA:hour}\:%{DATA:min}\:%{DATA:sec}\ %{DATA:level}\ %{DATA:class} -{ip:%{DATA:ip},url:%{DATA:url},param:%{DATA:param},return:%{DATA:return},cost:%{BASE10NUM:cost}
 
#tomcatAccess日誌
ACCESSIP (?:[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})
ACCESSTIMESTAMP %{MONTHDAY}\/%{MONTH}\/20%{YEAR}:%{HOUR}:%{MINUTE}:%{SECOND} %{ISO8601_TIMEZONE}
HTTPMETHOD (GET|POST|PUT|DELETE)
PRJNAME ([^\s]*)
HTTPVERSION (https?\/[0-9]{1}\.[0-9]{1})
STATUSCODE ([0-9]{3})
# 192.168.1.101 - - [10/Apr/2016:08:31:34 +0800] "GET /spring-mvc-showcase HTTP/1.1" 302 -
ACCESSLOG %{ACCESSIP:accIP}\s-\s\-\s\[%{ACCESSTIMESTAMP:accstamp}\]\s"%{HTTPMETHOD:method}\s\/%{PRJNAME:prjName}\s%{JAVALOGMESSAGE:statusCode}

  建立.conf文件

input {
  file {
   type=>"xx_server_log"
   path=>"/opt/software/apache-tomcat-7.0.59/logs/catalina.out"
 }
}
filter {
        if [type] == "xx_server_log" {
           grok {
                 match => [ "message","%{SERVER_LOG}"]
                 patterns_dir => ["/opt/conf/logstash"]
                 remove_field => ["message"]
          }
        }
}
output {
   redis{
   host => '10.4.8.5' #redis服務器地址
   key => 'logstash:redis'
   datatype => 'list'
  }
  stdout{     #調試方即可以在輸出到stdout,判斷grok解析是否正確.若是tag中沒有出現grok failure字樣,說明解析正確。
        codec=>json
  }
}

Logstash啓動

# ./bin/logstash -f ./conf/access-log.conf

  解釋: -f 後面指定的是配置文件

導入到es

以上我是將採集到的日誌先放在redis緩存,再次經過logstash導入到es

input {
    redis{
      host => '10.4.8.5'
      key => 'logstash:redis'
      datatype => 'list'
    }
}
#日誌在上面已經結構化了,能夠再也不解析。
#filter{
#}
output
{
 # stdout{}
  elasticsearch {
   host => '10.4.8.5'
   protocol => 'http'
   index => "logstash-%{type}"#設置在elasticsearch中的indexer名字,默認爲logstash-%{yyyy.MM.dd}
  }
}

博客地址:http://my.oschina.net/wangnian

相關文章
相關標籤/搜索