透過現象看本質——聊一聊ELK

透過現象看本質——聊一聊ELK

前言

​ 本文將從日誌分析引入ELK,帶着疑問了解、熟知、實踐、領會ELK的原理與魅力。

引入

​ 想必做過專業運維的工程師都明白也非常清楚日誌分析的重要性——發現問題的所在,解決問題的根源與基礎。

​ 一般來說,日誌主要包括系統日誌、應用程序日誌和安全日誌。系統運維和開發人員可以通過日誌瞭解服務器軟硬件信息、檢查配置過程中的錯誤及錯誤發生的原因。通過分析日誌可以瞭解服務器的負荷,性能安全性,從而及時採取措施避免發生意外狀況。

​ 通常情況下,日誌被分散的儲存在不同的設備上。如果你管理數十上百臺服務器,你還在使用依次登錄每臺機器的傳統方法查閱日誌,即繁瑣又效率低下。爲此,我們可以使用集中化的日誌管理,例如:開源的syslog,將所有服務器上的日誌收集彙總。
​ 然而,集中化管理日誌後,日誌的統計和檢索又成爲一件比較麻煩的事情,一般我們使用grep、awk和wc等Linux命令能實現檢索和統計,但是對於更高要求的查詢、排序和統計等,再加上龐大的機器數量,使用這樣的方法依然難免有點力不從心。

​ 因此,開源實時的日誌分析ELK平臺應運而生了。

什麼是ELK?

​ 筆者也不知道是爲什麼,一些朋友看到陌生的英文單詞,尤其是縮寫,就感覺這個玩意兒非常高bigger,甚至會不敢與接觸它。其實這樣的認識並不正確。就好比ELK,熟悉的人就不說了,沒聽過的就會有些好奇與疑惑。

​ ELK其實是三個單詞的開頭字母,分別是Elastic Search 、Logstash以及Kibana。而ELK就是由這三個開源工具組成的(以及Beats)。官方網站:Elastic官網

ELK三者聯繫概覽(ELK工作流程)

【APPServer集羣】→→【logstash Agent 採集器】→→【ElasticSearch Cluster】→→【Kibana Server】→→【Browser】

Logstash收集AppServer產生的Log數據文件,並存放到ElasticSearch集羣中,而Kibana則從ES集羣中查詢數據生成圖表,再返回給Browser。簡單來說,進行日誌處理分析,一般需要經過以下幾個步驟:

  1. 將日誌進行集中化管理(beats)
  2. 將日誌格式化(logstash)
  3. 對格式化後的數據進行索引和存儲(elasticsearch)
  4. 前端數據的展示(可視化展現)(kibana)

ELK主要組件梳理

Elasticsearch介紹

Elasticsearch的概念

​ Elasticsearch是一個基於Apache Lucene的基礎上開發而成的分佈式的開源搜索分析引擎,適用於所有類型的數據,包括文本、數字、地理空間、結構化和非結構化數據。Elasticsearch以其簡單的REST 風格API、分佈式特性、速度和可擴展性而聞名,也是Elastic Stack的核心組件。

​ Elastic Stack 是適用於數據採集、充實、存儲、分析和可視化的一組開源工具。人們通常將 Elastic Stack 稱爲 ELK Stack(代指 Elasticsearch、Logstash 和 Kibana),目前 Elastic Stack 包括一系列豐富的輕量型數據採集代理,這些代理統稱爲 Beats,可用來向 Elasticsearch 發送數據。

Elasticsearch的作用

Elasticsearch 在速度和可擴展性方面都表現出色,而且還能夠索引多種類型的內容,這意味着其可用於多種用例:

  • 應用程序搜索
  • 網站搜索
  • 企業搜索
  • 日誌處理和分析
  • 基礎設施指標和容器監測
  • 應用程序性能監測
  • 地理空間數據分析和可視化
  • 安全分析
  • 業務分析

Elasticsearch 的工作原理是什麼?

​ 原始數據會從多個來源如:日誌、系統指標和網絡應用程序(也就是上面所說的三種日誌)輸入到 Elasticsearch 中。數據採集(是由Logstash agent採集數據的,下文會講述什麼是Logstash)指在 Elasticsearch 中進行索引(下面會講述什麼是elasticsearch的索引)之前解析、標準化並充實這些原始數據的過程。這些數據在 Elasticsearch 中索引完成之後,用戶便可針對他們的數據運行復雜的查詢,並使用聚合來檢索自身數據的複雜彙總。在 Kibana 中,用戶可以基於自己的數據創建強大的可視化,分享儀表板,並對 Elastic Stack 進行管理。

Elasticsearch 索引是什麼?(索引、類型、文檔)

​ Elasticsearch 索引指相互關聯的文檔集合。Elasticsearch 會以 JSON 文檔(可以與xml比較)的形式存儲數據。每個文檔都會在一組(字段或屬性的名稱)和它們對應的值(字符串、數字、布爾值、日期、數值組、地理位置或其他類型的數據)之間建立聯繫。

​ Elasticsearch 使用的是一種名爲倒排索引的數據結構,這一結構的設計可以允許十分快速地進行全文本搜索。倒排索引會列出在所有文檔中出現的每個特有詞彙,並且可以找到包含每個詞彙的全部文檔。

​ 在索引過程中,Elasticsearch 會存儲文檔並構建倒排索引,這樣用戶便可以近實時地對文檔數據進行搜索。索引過程是在索引 API 中啓動的,通過此 API 您既可向特定索引中添加 JSON 文檔,也可更改特定索引中的 JSON 文檔。

​ 在一個索引中,可以定義一種或多種類型。類型可以作爲索引的一個邏輯上的分區,通常會爲具有一組共同字段的文檔定義一個類型。文檔則是一個可以被索引的基礎信息單元。文檔以JSON(Javascript Object Notation)格式來表示,而JSON是一個到處存在的互聯網數據交互格式。

JSON格式文檔舉例

{
    "name": "中國",
    "province": [{
        "name": "黑龍江",
        "cities": {
            "city": ["哈爾濱", "大慶"]
        }
    }, {
        "name": "廣東",
        "cities": {
            "city": ["廣州", "深圳", "珠海"]
        }
    },, {
        "name": "新疆",
        "cities": {
            "city": ["烏魯木齊"]
        }
    }]
}

​ 當然在Elasticsearch中還有一些要點,例如分片(shard)、副本(replica)、路由(routing)等等。這裏簡述一下分片和副本。

分片:

​ 在實際的生產環境下,索引存儲的數據可能超過單個節點的硬件限制。這就意味着將這種大量數據存儲在單個節點上不太適合,一方面硬件資源不一定可以滿足,另一方面則是即使存儲在單個節點上其安全性以及搜索效率都不可保證。

​ 因此,爲了解決諸如此類的問題,Elasticsearch提供將索引分成多個分片的功能。當在創建索引時,可以定義想要分片的數量。每個分片就是一個全功能的獨立索引,可以位於集羣中任何節點上。

分片可以進行水平分割擴展,增大存儲量;支持分佈式並行跨分片操作,提高性能和吞吐量。

副本:

​ 網絡問題等等其它問題可以在任何時候不期而至,爲了健壯性,強烈建議要有一個故障切換機制,無論何種故障以防止分片或者節點不可用。 爲此,Elasticsearch讓我們將索引分片複製一份或多份,稱之爲副本。

副本隨着而來的優勢在於高可用性以及吞吐量的作用。

總結:爲什麼使用Elasticsearch?

  1. 搜索速度快,延時非常低
  2. 具備分佈式的本質特徵,提高安全性能
  3. 包含一系列廣泛功能:可擴展、彈性伸縮、數據彙總和索引生命週期管理等
  4. Elastic Stack簡化了數據採集、可視化和報告過程

​ 通過與 Beats 和 Logstash 進行集成,用戶能夠在向 Elasticsearch 中索引數據之前輕鬆地處理數據。同時,Kibana 不僅可針對 Elasticsearch 數據提供實時可視化,同時還提供 UI 以便用戶快速訪問應用程序性能監測 (APM)、日誌和基礎設施指標等數據。

Logstash介紹

​ Logstash由 JRuby 語言編寫,基於消息(message-based)的簡單架構,並運行在Java虛擬機(JVM)上(對jvm虛擬機有所瞭解最好)。Logstash不同於分離的代理端(agent)或主機端(server),LogStash可配置單一的代理端(agent)與其它開源軟件結合,以實現不同的功能。

Logstash主要工作

  1. Collect:數據輸入
  2. Enrich:數據處理,如過濾,改寫
  3. Transport:數據輸出

​ Logstash可用來對數據進行聚合和處理,並將數據發送到 Elasticsearch。Logstash 是一個開源的服務器端數據處理管道,允許您在將數據索引到 Elasticsearch 之前同時從多個來源採集數據,並對數據進行對應處理。

Logstash主要組件

●Shipper:日誌收集者 。負責監控本地日誌文件的變化,及時把日誌文件的最新內容收集起來。通常,遠程代理端(agent)只需要運行這個組件即可;

●Indexer:日誌存儲者。負責接收日誌並寫入到本地文件。

●Broker:日誌Hub。負責連接多個Shipper和多個Indexer

●Search and Storage:允許對事件進行搜索和存儲;

●Web Interface:基於Web的展示界面

由於Logstash支持所有組件在其架構中可以獨立部署,因此可以提供更好的集羣擴展性。

Logstash主機分類

  • 代理主機:作爲事件的傳遞者(shipper),將各種日誌數據發送至中心主機,只運行agent程序;
  • 中心主機:可運行包括中間轉發器(Broker)、索引器(Indexer)、搜索和存儲器(Search and Storage)、Web界面端(Web Interface)在內的各個組件,以實現對日誌數據的接收、處理和存儲。

Kibana介紹

​ Kibana是一個針對Elasticsearch的開源分析及可視化平臺,用來搜索、查看交互存儲在Elasticsearch索引中的數據。

​ 使用Kibana,可以通過各種圖表進行高級數據分析及展示。Kibana讓海量數據更容易理解。它操作簡單,基於瀏覽器的用戶界面可以快速創建儀表板(dashboard)實時顯示Elasticsearch查詢動態。設置Kibana非常簡單。無需編寫代碼,幾分鐘內就可以完成Kibana安裝並啓動Elasticsearch索引監測。

Kibana主要作用:

  1. 搜索、查看並可視化 Elasticsearch 中所索引的數據,並通過創建柱狀圖、餅狀圖、表格、直方圖和地圖對數據進行分析。儀表板視圖能將這些可視化元素集中到一起,然後通過瀏覽器加以分享,以提供有關海量數據的實時分析視圖,爲下列用例提供支持:
    • 日誌處理和分析
    • 基礎設施指標和容器監測
    • 應用程序性能監測 (APM)
    • 地理空間數據分析和可視化
    • 安全分析
    • 業務分析
  2. 藉助網絡界面來監測和管理 Elastic Stack 實例並確保實例的安全。
  3. 針對基於 Elastic Stack 開發的內置解決方案(面向可觀測性、安全和企業搜索應用程序),將其訪問權限集中到一起。

爲何使用 Kibana?

Kibana 是 Elasticsearch 的官方界面。Elasticsearch 用戶在發掘數據洞見並對 Elastic Stack 運行狀況進行主動管理時,均認爲 Kibana 是效果最佳的界面。

Kibana 可以解決很多用例。Elastic 在可視化界面創新領域投入了巨大精力。用戶可以利用 Kibana 的內置功能來完成下列用例:APM、安全分析、業務分析、運行狀態監測、地理空間分析,等等。

Kibana 擁有強大的支持社區。作爲一個開源界面,Kibana 的採用率很高,而且社區在開發過程中也做出了很大貢獻。雖然 Kibana 用戶的經驗水平參差不齊,但是我們的文檔、說明和社區支持能夠滿足用戶在專業知識方面的廣泛需求。Elastic 同時還提供培訓和個性化支持來幫助用戶完成部署並運行。

總結

​ 本文通過日誌引入什麼是ELK,介紹其主要組件的感念和作用。

​ PS:下篇文章將給出如何部署配置ELK日誌分析系統的案例

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章