背景介紹
項目采用分布式框架(Dubbo、Zookeeper)進行開發,項目初期,為了按計划上線就沒有搭建日志收集分析平台,日志都保存在各個服務器本地。隨着項目推進,基礎服務越來越多,各個服務都是集群部署,服務器的數量也快速增長,此時就暴露出了很多的問題:
- 問題排查困難,查詢一個服務的日志,需要登錄多台服務器;
- 日志串接困難,一個流程有多個節點,要把整個流程的日志串接起來工作量大;
- 運維管理困難,不是每個同事都有登錄服務器查看日志的權限,但又需要根據日志排查問題,就需要有權限的同事下載日志后給到相應負責的同事。
- 系統預警困難,無法實現服務出現異常后,及時通知到相應的負責人。
所以需要搭建一套集中式的日志收集、存儲、分析系統,將所有節點的日志統一收集、管理。
經技術調研,ELK提供了一套解決方案,能解決上述問題,下面簡單介紹一下ELK。
一、ELK簡介
ELK是三個開源軟件的縮寫,分別表示:Elasticsearch , Logstash, Kibana ,
- Elasticsearch是個開源分布式搜索引擎,提供搜集、分析、存儲數據三大功能。它的特點有:分布式,零配置,自動發現,索引自動分片,索引副本機制,restful風格接口,多數據源,自動搜索負載等
- Logstash 主要是用來日志的搜集、分析、過濾日志的工具,支持大量的數據獲取方式。一般工作方式為c/s架構,client端安裝在需要收集日志的主機上,server端負責將收到的各節點日志進行過濾、修改等操作在一並發往elasticsearch上去。
- Kibana可以為 Logstash 和 ElasticSearch 通過報表、圖形化數據進行可視化展示 Web 界面,可以幫助匯總、分析和搜索重要數據日志。
二、解決方案分析:
方案一:
Logstash部署到每個節點,收集相關的日志,並經過分析過濾后發送到Elasticsearch進行存儲,Elasticsearch將數據以分片的形式壓縮存儲,通過kibana對日志進行圖形化的展示,
優點:此架構搭建簡單,容易上手
缺點:1、每個節點部署logstash,運行時占用CUP、內存大,會對節點性能造成一定的影響;
2、沒有將日志數據進行緩存,存在丟失的風險。
方案二:
logstash agent 監控並過濾日志,將過濾的日志內容發給 kafka或redis,logstashServer 將日志收集一起交給elasticsearch。引入了消息隊列機制作為緩存池,即使logstashServer出現異常,由於日志暫存在kafaka消息隊列中,能避免日志數據丟失,但是還是沒有解決性能問題。
方案三:
Filebeat是一個日志文件托運工具,做為一個agent安裝到服務器上,filebeat會監控日志目錄或者指定的日志文件,追蹤讀取這些文件;
將filebeat 作為日志收集器,相比logstach,filebeat更輕量,占用資源更少,filebeat采集日志后,發送到消息隊列kafaka或redis暫存起來,起到一個緩沖池的作用,能緩解日志峰值處理壓力;
然后logstash去消息隊列中獲取,利用filter功能過濾分析,然后存儲到elasticsearch中,再通過kibana圖形化直觀展示。缺點就是部署較復雜,如果是正式環境還要考慮集群部署,避免單點。
該選擇哪個方案需根據項目實際情況考慮,沒有最完美的方案,只有最適合的方案。