CTO詳細講解海量日誌處理ELK

ELK實時日誌分析平臺之Elasticsearch簡介

Elasticsearch是一個高度靈活的開源全文檢索和分析引擎。它能夠迅速(幾乎是實時地)地存儲、查找和分析大規模數據。通常被用在有複雜的搜索要求的系統中。比如:

  • 在電子商務系統中用戶搜索商品,可以使用Elasticsearch存儲產品目錄後為客戶提供搜索接口。

    如果要收集日誌或交易信息,然後分析這些數據得到有價值信息,可以先使用Logstash收集、聚合、解析這些數據,然後存入Elasticsearch,利用Elasticsearch即可以挖掘有價值信息。

  • 在商業數據分析領域,如果想要對海量數據進行實時的分析,將分析結果可視化,可以先將數據存入Elasticsearch,然後藉助Kibana即可導出各種有用數據。

下面介紹Elasticsearch中幾個基本概念:

Near Realtime(NRT):Elasticsearch是一個接近實時的查詢平臺,數據從被索引到可被搜索大概有1秒的延時。

Cluster:集群是共同存儲數據且提供索引和查詢能力的節點的集合。每個集群由一個唯一的名字標識,默認是elasticsearch。但是多個集群之間注意不要有重複的名字。一個集群中可以只包含一個節點。

Node:節點是集群中的一個服務器,用於存儲數據,參與集群的索引和查詢。節點有自己的名字,默認是一個隨機的名字。指定節點名字在對集群的管理中非常重要,可以方便的根據名字知道是集群中哪一個節點。可以為節點指定一個集群名字,表示節點加入到這個集群中,默認都是加入elasticsearch這個集群。所以,在一個各個節點可以互通的網絡中,如果未對節點指定集群名字,則默認所有節點均加入elasticsearch集群中(自動發現)。

Index:索引是有相似特徵的數據項(Document)的集合。比如有顧客數據的索引,產品名錄的索引,訂單的索引等等。索引由全部是小寫字母組成的名字標識,在建立索引、查找、更新、刪除數據項的時候都會用到這個名字。在一個集群上,可以定義任意多的索引。

Type:在索引中,可以定義多個類型,類型可以看作索引的一個邏輯上的分類,其語義可以自己定義。假如在一個博客系統中所有的信息存儲在一個單獨的索引中,可以為用戶數據定義一個類型,為博客數據定義一個類型,再為評論數據定義一個類型。

Document: document是一個可以被索引的基本的信息集合。例如,可以有某個顧客的document,某個產品的document,某個訂單的document。Document以JSON的格式存在,在某一個索引/類型下,可以存儲任意多的document。

Shard&Replicas:大數據時代,一個索引下面存儲的數據很容易超過一個節點的存儲能力,或者即使不超出,可能會對查詢的性能造成影響。通過Elasticsearch可以在定義一個索引時指定將索引分為多個shard(碎片),每個碎片都是一個全功能的獨立的“索引”,可以分佈在集群中任意一個節點上。

使用shard有如下好處:

  • 允許橫向分隔、擴展存儲空間

  • 允許在shard間分佈式、並行運行計算,可以提高ES的吞吐和性能

    至於shard在nodes間是如何拼湊處理的,完全由ES負責,用戶可以不關注這部分內容。

在企業級系統中,高可靠性至關重要,為了提高故障恢復能力,Elasticsearch允許對shard進行備份,稱為replica shard或者簡稱replica。針對一個shard,可以有多個replica。

副本有如下好處:

  • 一旦某個shard/node掛掉,它提供了高可用性,所以千萬不要把replica和它的源shard(稱為primary shard)放在一臺機器上。

  • 在多個副本上執行操作時也可以提高效率。

索引建立後,replica的數量是可以動態調節的,但是shard的數量是不可以改變的。默認情況下,ES中每個index被分配5個primary shard和1個replica,即集群中至少有2個節點,一個index有5個primary shard和5個replica(即每個index一共有10個shard)。

ELK實時日誌分析平臺之Beats平臺簡介

Beats是在被監控服務器上以客戶端形式運行的數據收集器的統稱,可以直接把數據發送給Elasticsearch或者通過Logstash發送給Elasticsearch,然後進行後續的數據分析活動。

elastic官方的Beats有Packetbeat、Topbeat和Filebeat:Packetbeat可以分析網絡報文,抓取各個應用服務器的交換信息;Topbeat是一個服務器監控程序,可以週期性的監控系統及某個進程的信息;Filebeat用來從服務器上收集日誌。

CTO詳細講解海量日誌處理ELK

ELK實時日誌分析平臺之Beats平臺搭建

在被監控的系統使用Beats平臺,要配合Elasticsearch、Logstash(如果需要的話)、Kibana共同使用。搭建該平臺要求在安裝Beat客戶端的機器上可以訪問到Elasticsearch、Logstash(如果有的話)以及Kibana服務器。隨著系統的演進,可能會將Elasticsearch擴展為集群,或者將部署過程自動化。

1.安裝Elasticsearch

Elasticsearch是一個實時的、分佈式存儲、查詢和分析引擎。它尤其擅長索引半結構化的數據,比如日誌或者網絡報文。關於Elasticsearch的更詳細的安裝過程可以參考Elasticsearch安裝過程,確認Elasticsearch安裝並運行成功後,進行下一步。

2.安裝Logstash(可選)

在最簡單的Beats平臺中,可以不使用Logstash,使用Logstash的優勢在於可以自由調整Beats收集到的數據的格式,並且Logstash有很多output的插件可以與其他系統很好的結合。關於Logstash的更詳細的安裝過程可以參考這裡。

確認Logstash安裝並運行成功後,還需要對Logstash進行一些配置才可以配合Beats平臺使用。比如,Logstash使用beats input plugin接收來自beat的數據(適配所有遵循beats框架的beat),然後使用Elasticsearch output plugin向Elasticsearch發送數據,比如在/etc/logstash/conf.d目錄下添加配置文件beats-input.conf:

input {

beats {

port => 5044

type => "logs"

}

}

再添加如下配置文件output.conf:

output {

elasticsearch {

hosts => "localhost:9200"

index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"

document_type => "%{[@metadata][type]}"

}

}

當然,需要在Beat的配置文件中指定將收集到的數據發送給Logstash,下面以使用Filebeat收集日誌為例講解Logstash與Filebeat配合的方法。

3.安裝Filebeat

在filebeat.yml的配置文件中,配置要監控的日誌文件的路徑,然後配置Filebeat向Logstash輸出,需要在output字段將向Elasticsearch輸出的配置註釋掉,然後將向Logstash的輸出的配置反註釋掉。比如:

output:

logstash:

hosts: ["localhost:5044"]

在啟動Filebeat之前,需要Elasticsearch加載相應的索引模板,推薦使用的模板在安裝Filebeat的時候已經放在其配置路徑下面了,名字叫做filebeat.template.json,可以使用如下命令裝載模板:

$ curl -XPUT 'http://localhost:9200/_template/filebeat?pretty' -d@/etc/filebeat/filebeat.template.json

然後從下游到上游依次啟動各個工具:

$ sudo service elasticsearch restart

$ sudo service logstash restart

$ sudo service filebeat restart

在被監控日誌文件中添加內容,查看/var/lib/elasticsearch中是否有新增內容,如果有的話,進行下一步。

4.安裝Kibana

Kibana是一個與Elasticsearch配合使用的圖形化工具,提供高度可定製化的UI。關於Kibana的更詳細的安裝過程可以參考這裡。確認Kibana安裝並運行成功後,在瀏覽器中訪問http://localhost:5601,第一次使用會跳轉至Kibana的配置界面,填入配置的索引的pattern(本教程的index pattern是filebeat-*),敲入回車,然後點擊Create:

CTO詳細講解海量日誌處理ELK

接下來顯示將會被顯示在Kibana的Field字段:

CTO詳細講解海量日誌處理ELK

目前我們先忽略這部分的內容,點擊左上角的Discover頁籤,在被監控的日誌中添加新的一行並保存,就會看到日誌中的信息:

CTO詳細講解海量日誌處理ELK

至此,最簡單的ELK日誌分析平臺就搭建完成了。後續如果想根據自己的需求進行定製,需要繼續深入研究Filebeat、Logstash、Elasticsearch及Kibana的配置了。


分享到:


相關文章: