架構之ELK日誌分析系統

ELK多種架構及優劣

既然要談ELK在大數據運維繫統中的應用,那麼ELK架構就不得不談。本章節引出四種筆者曾經用過的ELK架構,並討論各類架構所適合的場景和優劣供你們參考。ios

先大體介紹ELK組件。ELK是Elasticsearch、Logstash、Kibana的簡稱,這三者是核心套件,但並不是所有。後文的四種基本架構中將逐一介紹應用到的其它套件。web

  • Elasticsearch是實時全文搜索和分析引擎,提供蒐集、分析、存儲數據三大功能;是一套開放REST和JAVA API等結構提供高效搜索功能,可擴展的分佈式系統。它構建於Apache Lucene搜索引擎庫之上。數據庫

  • Logstash是一個用來蒐集、分析、過濾日誌的工具。它支持幾乎任何類型的日誌,包括系統日誌、錯誤日誌和自定義應用程序日誌。它能夠從許多來源接收日誌,這些來源包括 syslog、消息傳遞(例如 RabbitMQ)和JMX,它可以以多種方式輸出數據,包括電子郵件、websockets和Elasticsearch。緩存

  • Kibana是一個基於Web的圖形界面,用於搜索、分析和可視化存儲在 Elasticsearch指標中的日誌數據。它利用Elasticsearch的REST接口來檢索數據,不只容許用戶建立他們本身的數據的定製儀表板視圖,還容許他們以特殊的方式查詢和過濾數據。安全

咱們先談談第一種ELK架構,如圖1,這是最簡單的一種ELK架構方式。優勢是搭建簡單,易於上手。缺點是Logstash耗資源較大,運行佔用CPU和內存高。另外沒有消息隊列緩存,存在數據丟失隱患。建議供學習者和小規模集羣使用。服務器

此架構首先由Logstash分佈於各個節點上搜集相關日誌、數據,並通過分析、過濾後發送給遠端服務器上的Elasticsearch進行存儲。Elasticsearch將數據以分片的形式壓縮存儲並提供多種API供用戶查詢,操做。用戶亦能夠更直觀的經過配置Kibana Web Portal方便的對日誌查詢,並根據數據生成報表(詳細過程和配置在此省略)。websocket

圖1 ELK架構一

 

第二種架構(圖2)引入了消息隊列機制,位於各個節點上的Logstash Agent先將數據/日誌傳遞給Kafka(或者Redis),並將隊列中消息或數據間接傳遞給Logstash,Logstash過濾、分析後將數據傳遞給Elasticsearch存儲。最後由Kibana將日誌和數據呈現給用戶。由於引入了Kafka(或者Redis),因此即便遠端Logstash server因故障中止運行,數據將會先被存儲下來,從而避免數據丟失。網絡

圖2 ELK架構二

 

這種架構適合於較大集羣的解決方案,但因爲Logstash中心節點和Elasticsearch的負荷會比較重,可將他們配置爲集羣模式,以分擔負荷,這種架構的優勢在於引入了消息隊列機制,均衡了網絡傳輸,從而下降了網絡閉塞尤爲是丟失數據的可能性,但依然存在Logstash佔用系統資源過多的問題。架構

第三種架構(圖3)引入了Logstash-forwarder。首先,Logstash-forwarder將日誌數據蒐集並統一發送給主節點上的Logstash,Logstash分析、過濾日誌數據後發送至Elasticsearch存儲,並由Kibana最終將數據呈現給用戶。運維

圖3 ELK架構三

 

這種架構解決了Logstash在各計算機點上佔用系統資源較高的問題。經測試得出,相比Logstash,Logstash-forwarder所佔用系統CPU和MEM幾乎能夠忽略不計。另外,Logstash-forwarder和Logstash間的通訊是經過SSL加密傳輸,起到了安全保障。若是是較大集羣,用戶亦能夠如結構三那樣配置logstash集羣和Elasticsearch集羣,引入High Available機制,提升數據傳輸和存儲安全。更主要的配置多個Elasticsearch服務,有助於搜索和數據存儲效率。但在此種架構下發現Logstash-forwarder和Logstash間通訊必須由SSL加密傳輸,這樣便有了必定的限制性。

第四種架構(圖4),將Logstash-forwarder替換爲Beats。經測試,Beats滿負荷狀態所耗系統資源和Logstash-forwarder至關,但其擴展性和靈活性有很大提升。Beats platform目前包含有Packagebeat、Topbeat和Filebeat三個產品,均爲Apache 2.0 License。同時用戶可根據須要進行二次開發。

圖4 ELK架構四

 

這種架構原理基於第三種架構,可是更靈活,擴展性更強。同時可配置Logstash 和Elasticsearch 集羣用於支持大集羣系統的運維日誌數據監控和查詢。

無論採用上面哪一種ELK架構,都包含了其核心組件,即:Logstash、Elasticsearch 和Kibana。固然這三個組件並不是不能被替換,只是就性能和功能性而言,這三個組件已經配合的很完美,是密不可分的。各系統運維中究竟該採用哪一種架構,可根據現實狀況和架構優劣而定。

ELK在大數據運維繫統中的應用

在海量日誌系統的運維中,如下幾個方面是必不可少的:

  1. 分佈式日誌數據集中式查詢和管理

  2. 系統監控,包含系統硬件和應用各個組件的監控

  3. 故障排查

  4. 安全信息和事件管理

  5. 報表功能

ELK組件各個功能模塊如圖5所示,它運行於分佈式系統之上,經過蒐集、過濾、傳輸、儲存,對海量系統和組件日誌進行集中管理和準實時搜索、分析,使用搜索、監控、事件消息和報表等簡單易用的功能,幫助運維人員進行線上業務的準實時監控、業務異常時及時定位緣由、排除故障、程序研發時跟蹤分析Bug、業務趨勢分析、安全與合規審計,深度挖掘日誌的大數據價值。同時Elasticsearch提供多種API(REST JAVA PYTHON等API)供用戶擴展開發,以知足其不一樣需求。

圖5 ELK在運維繫統組件中應用圖示

 

彙總ELK組件在大數據運維繫統中,主要可解決的問題以下:

  1. 日誌查詢,問題排查,上線檢查

  2. 服務器監控,應用監控,錯誤報警,Bug管理

  3. 性能分析,用戶行爲分析,安全漏洞分析,時間管理

綜上,ELK組件在大數據運維中的應用是一套必不可少的且方便、易用的開源解決方案。

ELK實戰舉例

ELK實戰舉例一,經過ELK組件對Spark做業運行狀態監控,蒐集Spark環境下運行的日誌。通過篩選、過濾並存儲可用信息,從而完成對Spark做業運行和完成狀態進行監控,實時掌握集羣狀態,瞭解做業完成狀況,並生成報表,方便運維人員監控和查看。

數據來源能夠是各式各樣的日誌,Logstash配置文件有三個主要模塊:input()輸入或者說收集數據,定義數據來源;filter()對數據進行過濾,分析等操做;output()輸出。input plugin目前支持將近50種,以下表所示:

Beats couchdb_changes Xmpp eventlog exec s3 file ganglia gelf
Github Heartbeat Heroku http Sqs Irc imap jdbc JMX
lumberjack varnishlog Pipe snmptrap generator Rss rackspace RabbitMQ Redis
Sqlite Elasticsearch http_poller Stomp syslog TCP Twitter unix UDP
websocket drupal_dblog Zenoss ZeroMQ Graphite Log4j stdin wmi relp
Kafka puppet_facter Meetup            

數據源蒐集到後,而後經過filter過濾造成固定的數據格式。目前支持過濾的類JSON、grep、grok、geoip等,最後output到數據庫,好比Redis、Kafka或者直接傳送給Elasticsearch。當數據被存儲於Elasticsearch以後,用戶可使用Elasticsearch所提供API來檢索信息數據了,如經過REST API執行CURL GET請求搜索指定數據。用戶也可使用Kibana進行可視化的數據瀏覽。另外Kibana有時間過濾功能,運維人員可對某一時間段內數據查詢並查看報表,方便快捷。

圖6 ELK對Spark Task 監控

 

ELK實戰舉例二,經過ELK組件對系統資源狀態監控,如圖七、圖8所示,是筆者前段時間使用ELK組件爲集羣提供日誌查詢和系統資源監控的例子。經過各種日誌蒐集,分析,過濾,存儲並經過Kibana展示給用戶,供用戶實時監控系統資源、節點狀態、磁盤、CPU、MEM,以及錯誤、警告信息等。

圖7 ELK對系統狀態監控

 

圖8 ELK對系統資源狀況監控

 

ELK實戰舉例三,經過ELK組件對系統負載狀態監控,如圖9所示。

圖9 ELK對workload監控

 

ELK實戰舉例四,經過ELK組件對系統日誌管理和故障排查,如圖10所示。用戶可根據故障發生時間段集中查詢相關日誌,可經過搜索、篩選、過濾等功能,快速定位問題,從而排查故障。另外,經過對各個應用組件的日誌過濾,可快速列舉出各個應用對應節點上的Error或Warning日誌,從而對故障排查或者對發現產品bug提供快捷途徑。

圖10 ELK 對日誌搜索,查詢

 

結束語

除ELK套件之外,業界關於運維監控產品還有不少,如Splunk、Nagios等。

Splunk是在語句裏生成圖表。而ELK則是用戶在Kibana Web Portal上鼠標選擇的方式來點出來,相比Splunk來講要簡單得多,用戶不用記住那些語法便可繪製多種Chart。易用性有很大提升。另外,Splunk屬於入庫後對內容的即便處理,好比rex函數等等,而ES是儘可能在入庫前,即在Logstash端已經將數據源實時過濾、分析。提升了數據處理能力。最重要一點,ELK是免費的,Splunk則須要昂貴的費用。

Nagios最大的特色是其強大的管理中心,但看不到歷史數據,很難追查故障緣由,並且配置複雜,這些偏偏是ELK組件的優點所在。

本文所述案例和架構來自於IBM Platform團隊在使用ELK套件中的實戰經歷和工做總結,IBM Platform衝出了ELK套件僅對日誌蒐集的約束,除Logstash所支持input plugin外,還充分利用了Elasticsearch自己所支持多種數據源輸入,從而加強了數據源的輸入條件,提升了系統監控範圍,大大提升了ELK的擴展性和實用性。

ELK自己對POWER系統,還有IBM JAVA支持有必定侷限性,不過IBM Platform團隊已經將這些問題一一解決,使之能夠完美地集成於多個平臺。除此以外,IBM Platform將ELK和IBM Platform Cluster Manager、IBM Platform EGO集成於一體。用於ELK自動部署和管理,有效提升了ELK的部署和管理效率。並對IBM Platform Converge、IBM Platform Conductor(包括Spark)提供監控和Dashboard等功能。

 

點擊連接加入羣【.NET大型網站架構】433685124QQ羣

相關文章
相關標籤/搜索