問題導讀
一、ELK產生的背景?二、ELK的基本組成模塊以及各個模塊的做用? 三、ELK的使用總計有哪些? ![]() 背景
日誌,對每一個系統來講,都是很重要,又很容易被忽視的部分。日誌裏記錄了程序執行的關鍵信息,ERROR和WARNING信息等等。咱們能夠根據日誌作不少事情,作數據分析,系統監控,排查問題等等 。可是,任何一箇中大型系統都不多是單臺Server,日誌文件散落在幾十臺甚至成千上萬臺Server上,這給基於日誌的數據分析、問題排查都帶來了很大困難。
Centralized Logging![]()
集中式日誌存儲(Centralized Logging)的概念應運而生,將產生在各臺Server上的日誌統一收集到一個日誌平臺中。ELK就是專門作這個事情的。ELK是Elasticsearch(如下簡寫爲ES)+Logstash+Kibana的簡稱。ES負責數據的存儲和索引,Logstash負責數據的調整、過濾、傳輸,Kibana負責數據的展現。
Ealsticsearch
首先說ES,它是一個基於Lucene的優秀的存儲引擎,咱們也能夠把它看作一個PB級別的NoSQL DB。支持CRUD,多字段查詢,Aggreagation,全文檢索,能夠說涵蓋了各類各樣的查詢需求。 它自帶了Replication和Sharding的功能,經過簡單的配置就能夠作數據複製和分片。而且,ES在NRT(Near Real Time)方面作了一些優化,使得應用在實時性方面有很好的表現。
Logstash
Logstash是一個很是靈活的數據處理和傳輸工具。咱們能夠再也不須要本身寫一堆wget, scp, Socket代碼,來傳輸咱們的數據。Logstash統一實現了每一環節的數據傳輸,咱們只須要關注數據處理的邏輯。 咱們也再也不須要去學習各類各樣的API,去發現如何獲得數據(例如tail -f),如何寫入數據(例如寫入ES或MongoDB)。Logstash預置了一堆input & output plugin,經過配置就能夠實現實時增量數據的流出和流入。例如咱們用到的file input 和ES output 都已經有了。
Kibana
Kibana是一個強大的數據展現工具。大多數狀況下,不須要開發任何代碼,就能夠獲得一個Dashboard。
須要作的是:
(1)把數據放到ES中
(2)是在Kibana頁面上配置報表模版,或按照規則寫一套報表模版。
Architecture <ignore_js_op>![]()
FreeWheel - UI - Log Platform Architecture
上圖是日誌系統的架構圖。咱們的數據源是四個模塊的日誌文件,經過Logstash將數據實時導入到MQ中,再從MQ把數據實時導入到ES中。
使用MQ的目的是:
(1)減少峯值壓力
(2)對實時數據作處理,避免這個處理放在應用Server,形成對應用的負擔。
同時,根據MQ中的數據作規則匹配,會觸發相應的Alert。其中若是發現是Error信息,會存到Jira中,用於問題記錄、派發和追蹤。Error如何存到Jira中有一些策略來控制,包括Error判重,已修復Bug又再次Alert,等等 。小時級、天級別的Alert經過一個後臺調度的任務框架直接和ES交互。
ES結合了Hadoop Plugin,經過Hadoop2作Map Reduce的計算。
<ignore_js_op>
FreeWheel - UI - Dashboard of Throughput & Response time
(Hidden Y-axis data and query criteria)
最後就是Kibana,經過讀取ES數據,來提供報表展現。咱們如今是Kibana3&4混用,主要是使用Kibana3,並在Kibana3基礎之上開發了一些Plugin。例如Menu,可選時區的Datepicker等。Kibana4剛剛發佈沒多久,並非十分完善,因此咱們尚未徹底切換到4上。目前有一個報表是使用Kibana4開發的,用到了4提供的新功能,例如Percentile的Aggregation,多級Aggregation等。
日誌平臺應用![]()
FreeWheel - Application on Log Platform
在前邊咱們也提到一些了,有了這個日誌平臺的數據以後,咱們能夠作不少事情。
(1)日誌查詢、問題排查、上線檢查
(2)服務器監控,應用監控,錯誤報警,Bug管理
(3)性能分析,用戶行爲分析
總結
日誌平臺上線後,解決了不少原有的問題,它的重要性愈來愈強,將來咱們的計劃以下:
(1)更靈活的報表。Kibana解決了基礎的報表需求,但不能實現邏輯複雜的報表。考慮擴展Kibana,支持定製化圖表+Kibana混合而成的Dashboard。
(2)更強大的報警。參考或結合Watcher,Zabbix等,實現更強大更易用的報警配置。
|