日志收集系統 ELK


  查看日志一直都是一個很困擾的問題,登錄到服務器上查看幾百兆的txt文件,從中找到某個問題可能會留下的日志記錄......    尤其是現在,在集群式部署的服務器原來越多的時候,找到一個異常記錄幾乎要翻遍每一台服務器,想想就崩潰了!這個時候就特別希望能有一個集中查看日志的方案來拯救我。

  曾經找到一個名為log4Grid的項目,試用了一下。日志數據都保存到mssql數據庫中,通過一個web項目來查詢顯示日志記錄。只是實現了基本的日志數據收集和顯示,項目沒有持續更新,使用起來也不夠穩定。不是一個成熟的日志收集項目。

  log4net項目里有一個SimpleSocketServer的小應用,可以把多個服務器上的log4net日志集中到一個服務器上,然后再選擇log4net的某種記錄方式寫下來。但是不能滿足方便查看的要求。

  后來因為公司要求學習Java,所以經常能搜索到的ELK系統也進入了考慮的范圍。經過初步試用,感覺是能滿足我的基本需求的。
  雖然能搜索到很多ELK的部署說明,但是自己操作的時候還是遇到了很多坑,中間還遇到了無法繼續的情況。在這里我也記錄下自己的部署過程(因為沒有及時記錄,竟然有些細節忘記了)。
  那時候還不知道Exceptionless呢。
 
下載列表:
jdk1.8 (oracle)
logstash (https://www.elastic.co/downloads)
elasticsearch (https://www.elastic.co/downloads)
kibana (https://www.elastic.co/downloads)
redis for x64 (github)
Nssm(http://nssm.cc/download)

 

一. jdk安裝

ELK是運行在JVM上的所以也要安裝jdk,jdk安裝在Windows系統上后需要配置系統環境變量。詳細配置可以看成是另外一件事,請自行搜索網上文章。

 

二. elasticsearch

elasticsearch 是ELK的核心負責存儲和檢索。

將elasticsearch 解壓到一個目錄下,在\bin目錄下找到服務的安裝、啟動文件 service.bat:

執行命令 service.bat install 安裝windows服務
執行命令 service.bat start 啟動windows服務
 
用瀏覽器訪問 http://localhost:9200/ 能返回一個正常的頁面就說明服務啟動成功了
 

三. kibana

kibana 是ELK中負責顯示檢索結果的。

將kibana 解壓到一個目錄下,將nssm復制到kibana的\bin目錄下(為了簡單所以直接復制nssm):

執行命名 nssm install kibana
在nssm的界面上選擇啟動文件kibana.bat,設置自動啟動,完成。
用瀏覽器訪問 http://localhost:5601/ 能返回一個正常頁面的話說明服務啟動成功了
 

四. logstash

logstash在ELK中負責收集轉化數據的,從日志中獲取的數據由它傳給elasticsearch。

將logstash解壓到一個目錄下,在\bin的同級目錄下新建\conf目錄,在該目錄下存放配置文件。

啟動服務時使用 logstash.bat -f ..\conf\xx.conf 的命令。

在logstash進入工作狀態前,為了測試其能否正常工作,做了一個從日志文件獲取數據的配置 example.conf:

input {
   file {
       path => "C:\logs\log.log"
   }
}
filter {}
output {
   stdout {
      codec => rubydebug
  }
}

當日志文件有新增時就會在控制台上輸出。

一般情況下應該從log4j(我系統是log4j的)的輸出獲取數據,配置 log4j.conf :
input {
  log4j{
    mode => "server"
    type=>"log4j-json"
    port=>4712
  } 
}
filter {}
output {
   stdout { codec => rubydebug }
   elasticsearch { hosts => ["127.0.0.1"] }
}

這就是在單機上配置ELK的關鍵點,跨服務器還沒試過。

logstash的配置文件很容易出錯誤,最后我只放基本的配置,用ANSI不用中文不用注釋。

 

對應的在系統內log4j要配置SocketAppender輸出,log4j的properties配置:

log4j.rootLogger=info,logstash
# Socket,logstash
log4j.appender.logstash=org.apache.log4j.net.SocketAppender
log4j.appender.logstash.Port=4712
log4j.appender.logstash.RemoteHost=localhost
log4j.appender.logstash.ReconnectionDelay=60000
log4j.appender.logstash.LocationInfo=true
 

把新的輸出配置logstash加到log4j.rootLogger= 后就能獲得全部的日志輸出。

如果收到以下提示信息,說明沒找到log4j的SocketAppender輸出請檢查日志配置是否正確
log4j:WARN No appenders could be found for logger (org.apache.http.client.protoc
ol.RequestAuthCache).
log4j:WARN Please initialize the log4j system properly.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM