收集和分析日志是應用開發(fā)中至關重要的一環(huán),互聯(lián)網(wǎng)大規(guī)模、分布式的特性決定了日志的源頭越來越分散,
產(chǎn)生的速度越來越快,傳統(tǒng)的手段和工具顯得日益力不從心。在規(guī)?;瘓鼍跋?,grep、awk 無法快速發(fā)揮作用,我們需要一種高效、靈活的日志分析方式,可以給故障處理,問題定位提供更好的支持?;谌乃阉饕?Lucene 構建的 ELKstack 平臺,是目前比較流行的日志收集方解決方案。
ELK系統(tǒng)的部署按照官方文檔操作即可,相關資料也很多,這篇文章更多的關注三個組件的設計和實現(xiàn),幫助大家了解這個流行的日志收集系統(tǒng),
ELK統(tǒng)一日志系統(tǒng)
結合Logstash,ElasticSearch和Kibana三個組件,可以搭建一套高效的日志收集和分析系統(tǒng)。
ELK日志系統(tǒng)數(shù)據(jù)流圖
ELK stack支持組件間的靈活組合,提供強大的開箱即用的日志收集和檢索功能。
可以看到ELK系統(tǒng)進行日志收集的過程可以分為三個環(huán)節(jié):
日志收集和導入ElasticSearch
ElasticSearch進行索引等處理
可視化操作,查詢等
Logstash可以結合Redis或者kafka等收集應用服務器產(chǎn)生的日志,經(jīng)過簡單的過濾等操作后發(fā)送到ElasticSearch,ElasticSearch進行相關的索引處理,最后在Kibana進行相關的可視化操作。
Logstash進行日志采集
Logstash 是一種功能強大的信息采集工具,類似于同樣用于日志收集的 Flume。
Logstash通過配置文件規(guī)定 Logstash 如何處理各種類型的事件流,一般包含 input、filter、output 三個部分。
Logstash 為各個部分提供相應的插件,通過 input、filter、output 三類插件完成各種處理和轉換,
另外 codec 類的插件可以放在 input 和 output 部分通過簡單編碼來簡化處理過程。
1.Logstash架構
Logstash使用Jruby語言編寫,對于使用者來講,Logstash本身是基于命令行界面,面向任務處理的。
Logstash的軟件架構是一種帶有“