ELK介紹
需求背景:
- 業務發展越來越龐大,服務器越來越多
- 各種訪問日志、應用日志、錯誤日志量越來越多,導致運維人員無法很好的去管理日志
- 開發人員排查問題,需要到服務器上查日志,不方便
- 運營人員需要一些數據,需要我們運維到服務器上分析日志
為什么要用到ELK:
一般我們需要進行日志分析場景:直接在日志文件中 grep、awk 就可以獲得自己想要的信息。但在規模較大也就是日志量多而復雜的場景中,此方法效率低下,面臨問題包括日志量太大如何歸檔、文本搜索太慢怎么辦、如何多維度查詢。需要集中化的日志管理,所有服務器上的日志收集匯總。常見解決思路是建立集中式日志收集系統,將所有節點上的日志統一收集,管理,訪問。
大型系統通常都是一個分布式部署的架構,不同的服務模塊部署在不同的服務器上,問題出現時,大部分情況需要根據問題暴露的關鍵信息,定位到具體的服務器和服務模塊,構建一套集中式日志系統,可以提高定位問題的效率。
一個完整的集中式日志系統,需要包含以下幾個主要特點:
- 收集-能夠采集多種來源的日志數據
- 傳輸-能夠穩定的把日志數據傳輸到中央系統
- 存儲-如何存儲日志數據
- 分析-可以支持 UI 分析
- 警告-能夠提供錯誤報告,監控機制
而ELK則提供了一整套解決方案,並且都是開源軟件,之間互相配合使用,完美銜接,高效的滿足了很多場合的應用。是目前主流的一種日志系統。
ELK簡介:
ELK是三個開源軟件的縮寫,分別為:Elasticsearch 、 Logstash以及Kibana , 它們都是開源軟件。不過現在還新增了一個Beats,它是一個輕量級的日志收集處理工具(Agent),Beats占用資源少,適合於在各個服務器上搜集日志后傳輸給Logstash,官方也推薦此工具,目前由於原本的ELK Stack成員中加入了 Beats 工具所以已改名為Elastic Stack。
Elastic Stack包含:
-
Elasticsearch是個開源分布式搜索引擎,提供搜集、分析、存儲數據三大功能。它的特點有:分布式,零配置,自動發現,索引自動分片,索引副本機制,restful風格接口,多數據源,自動搜索負載等。詳細可參考Elasticsearch權威指南
-
Logstash 主要是用來日志的搜集、分析、過濾日志的工具,支持大量的數據獲取方式。一般工作方式為c/s架構,client端安裝在需要收集日志的主機上,server端負責將收到的各節點日志進行過濾、修改等操作在一並發往elasticsearch上去。
-
Kibana 也是一個開源和免費的工具,Kibana可以為 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以幫助匯總、分析和搜索重要數據日志。
- Beats在這里是一個輕量級日志采集器,其實Beats家族有6個成員,早期的ELK架構中使用Logstash收集、解析日志,但是Logstash對內存、cpu、io等資源消耗比較高。相比 Logstash,Beats所占系統的CPU和內存幾乎可以忽略不計
ELK Stack (5.0版本之后)--> Elastic Stack == (ELK Stack + Beats)。目前Beats包含六種工具:
- Packetbeat: 網絡數據(收集網絡流量數據)
- Metricbeat: 指標 (收集系統、進程和文件系統級別的 CPU 和內存使用情況等數據)
- Filebeat: 日志文件(收集文件數據)
- Winlogbeat: windows事件日志(收集 Windows 事件日志數據)
- Auditbeat:審計數據 (收集審計日志)
- Heartbeat:運行時間監控 (收集系統運行時的數據)
上面是一些官方說明,比較清晰明了,下面是一般的ELK架構:
filebeat是作為客戶端的日志收集器,部署在若干個產出日志的應用系統上,將數據傳輸到es集群和logstash服務,傳遞給logstash的數據會被進一步處理最終流入es集群,kibana從es中獲取索引日志信息進行展現。
之后會依次詳細介紹logstash、beats、kibana組件,由於在工作中elasticsearch是作為存儲組件使用的,無需特別調研,就不詳細介紹了,只介紹些在elk中使用到的操作。