天天看點

2019玩轉ELK(ElasticSearch + LogStash + Kibana = ELKStack),輕松幾步搭建ELK環境,對資料進行實時監控和分析(上)

一、元件介紹

Elasticsearch是個開源分布式搜尋引擎,提供搜集、分析、存儲資料三大功能。它的特點有:分布式,零配置,自動發現,索引自動分片,索引副本機制,restful風格接口,多資料源,自動搜尋負載等。Elasticsearch是一個高度可擴充的開源全文搜尋和分析引擎。它允許您快速,近實時地存儲,搜尋和分析大量資料。它通常用作支援具有複雜搜尋功能和需求的應用程式的底層引擎/技術。

Logstash 主要是用來日志的搜集、分析、過濾日志的工具,支援大量的資料擷取方式。一般工作方式為c/s架構,client端安裝在需要收集日志的主機上,server端負責将收到的各節點日志進行過濾、修改等操作在一并發往elasticsearch上去。

Kibana:Web前端,可以将ElasticSearch檢索後的日志轉化為各種圖表,為使用者提供資料可視化支援。

Winlogbeat:輕量型windows事件日志采集器,負責采集wondows的事件日志,并将采集來的日志推送給logstash進行處理。

Filebeat:輕量型日志采集器,負責采集檔案形式的日志,并将采集來的日志推送給logstash進行處理。

FileBeat是一個輕量級的日志收集處理工具(Agent),Filebeat占用資源少,适合于在各個伺服器上搜集日志後傳輸給Logstash,官方推薦。

Filebeat隸屬于Beats,目前Beats包含四種工具:

Packetbeat(搜集網絡流量資料)

Topbeat(搜集系統、程序和檔案系統級别的 CPU 和記憶體使用情況等資料)

Filebeat(搜集檔案資料)

二、資源下載下傳

以下的資源都可以去相應的官網進行,如果不會翻牆,覺得下載下傳太慢或者覺得麻煩,可以直接到下面的位址進行下載下傳,所用資源均在裡面。

三、最終效果

部分截圖:

2019玩轉ELK(ElasticSearch + LogStash + Kibana = ELKStack),輕松幾步搭建ELK環境,對資料進行實時監控和分析(上)

四、環境搭建

1、 安裝jdk,至少1.8以上的版本,下載下傳位址:​​https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html;​​

2、 配置java環境變量,參考位址:​​https://jingyan.baidu.com/article/f96699bb8b38e0894e3c1bef.html;​​

3、 下載下傳ELK,ElasticSearch(ES)、Logstash和Kibana,下載下傳位址:​​https://www.elastic.co/downloads/;​​

4、 安裝ES,cmd進入elasticsearch的bin目錄,運作elasticsearch-service install,安裝ES服務;運作 elasticsearch-service manager,管理配置ES,點選Start啟動服務,下方的Startup type設定為Automatic最好;至此,ES服務安裝配置基本完成。

5、 打開浏覽器,輸入http://localhost:9200/,進行驗證,沒有出錯,傳回一串json資料表示安裝成功。

6、 下載下傳nodejs,下載下傳位址:​​https://nodejs.org/en/;​​ 下載下傳完成安裝,一直next即可,保持預設選項;

7、 Cmd進入dos指令界面,執行node -v檢視是否成功;

8、 在nodejs目錄下執行 npm install -g grunt-cli 安裝grunt ,-g代表全局安裝,安裝路徑為C:\Users\yourname\AppData\Roaming\npm,安裝完成後執行grunt -version檢視是否安裝成功,會顯示安裝的版本号。

9、 修改config目錄下的elasticsearch.yml檔案,如下所示:

10、 重新啟動ES服務,這個可以在serrvices.msc上啟動,也可在bin目錄下輸入elasticsearch-service start啟動。

11、 把head的源碼clone過來,在此之前需要在git官網安裝git,然後在ES的bin目錄下執行git clone git://github.com/mobz/elasticsearch-head.git。

12、 在Gruntfile.js修改head插件源碼,找到connect的地方,修改如下:

13、 在elasticsearch-head目錄下運作,下面的指令:

14、 輸入localhost:9100,可檢視叢集狀态,至此ES成功安裝。

15、 在logstash檔案夾的bin目錄裡建立logstash.conf配置檔案,具體内容如下,具體參數可以自定義:

16、 在bin目錄中建立logstash啟動檔案run.bat,内容如下:

17、 下載下傳nssm,下載下傳位址:​​http://nssm.cc/download;​​ 根據作業系統的位數是32還是64,取出對應的nssm.exe,放入bin目錄下。

18、 安裝logstash到windows服務:從nssm官網下載下傳nssm壓縮包,根據作業系統是32位還是64位提取出壓縮包中的nssm.exe,拷貝到logstash的bin目錄下,在cmd中運作nssm install logstash,出現安裝界面并填寫相應的内容,在依賴(dependencies)裡面根據填寫如下内容(注意:Java是32位的字尾是x86,64位的是x64)。添加依賴的原因是,logstash的輸出配置的是Elasticsearch,如果Elasticsearch沒有啟動,logstash無法正常工作。

19、 最後單擊install service按鈕,執行安裝過程(注意這裡若出現警告的話,選擇允許執行全部操作)。

20、 安裝Kibana服務和logstash服務步驟基本相同,将nssm.exe拷貝到kibana的bin目錄下,在cmd中運作nssm install kibana,填寫如下内容,最後單擊install service按鈕,執行安裝過程:

21、 在cmd中運作services.msc打開windows服務,依次啟動如下服務:

Elasticsearch->Logstash->Kibana

在浏覽器中輸入:​​​http://localhost:5601/​​ ,如果出現如下界面,表示服務啟動成功:

22、 至此,所有服務安裝完成,平台搭建完成,後續叢集的部署還需要在ELK的各個配置檔案中進行詳細的配置。

五、基本概念

接近實時(NRT)

Elasticsearch 是一個接近實時的搜尋平台。這意味着,從索引一個文檔直到這個文檔能夠被搜尋到有一個很小的延遲(通常是 1 秒)。

叢集(cluster)

代表一個叢集,叢集中有多個節點(node),其中有一個為主節點,這個主節點是可以通過選舉産生的,主從節點是對于叢集内部來說的。es的一個概念就是去中心化,字面上了解就是無中心節點,這是對于叢集外部來說的,因為從外部來看es叢集,在邏輯上是個整體,你與任何一個節點的通信和與整個es叢集通信是等價的。

索引(index)

ElasticSearch将它的資料存儲在一個或多個索引(index)中。用SQL領域的術語來類比,索引就像資料庫,可以向索引寫入文檔或者從索引中讀取文檔,并通過ElasticSearch内部使用Lucene将資料寫入索引或從索引中檢索資料。

文檔(document)

文檔(document)是ElasticSearch中的主要實體。對所有使用ElasticSearch的案例來說,他們最終都可以歸結為對文檔的搜尋。文檔由字段構成。

映射(mapping)

所有文檔寫進索引之前都會先進行分析,如何将輸入的文本分割為詞條、哪些詞條又會被過濾,這種行為叫做映射(mapping)。一般由使用者自己定義規則。

類型(type)

每個文檔都有與之對應的類型(type)定義。這允許使用者在一個索引中存儲多種文檔類型,并為不同文檔提供類型提供不同的映射。

分片(shards)

代表索引分片,es可以把一個完整的索引分成多個分片,這樣的好處是可以把一個大的索引拆分成多個,分布到不同的節點上。構成分布式搜尋。分片的數量隻能在索引建立前指定,并且索引建立後不能更改。5.X預設不能通過配置檔案定義分片。

副本(replicas)

代表索引副本,es可以設定多個索引的副本,副本的作用一是提高系統的容錯性,當個某個節點某個分片損壞或丢失時可以從副本中恢複。二是提高es的查詢效率,es會自動對搜尋請求進行負載均衡。

資料恢複(recovery)

代表資料恢複或叫資料重新分布,es在有節點加入或退出時會根據機器的負載對索引分片進行重新配置設定,挂掉的節點重新啟動時也會進行資料恢複。

GET /_cat/health?v #可以看到叢集狀态。

資料源(River)

代表es的一個資料源,也是其它存儲方式(如:資料庫)同步資料到es的一個方法。它是以插件方式存在的一個es服務,通過讀取river中的資料并把它索引到es中,官方的river有couchDB的,RabbitMQ的,Twitter的,Wikipedia的,river這個功能将會在後面的檔案中重點說到。

網關(gateway)

代表es索引的持久化存儲方式,es預設是先把索引存放到記憶體中,當記憶體滿了時再持久化到硬碟。當這個es叢集關閉再重新啟動時就會從gateway中讀取索引資料。es支援多種類型的gateway,有本地檔案系統(預設),分布式檔案系統,Hadoop的HDFS和amazon的s3雲存儲服務。

自動發現(discovery.zen)

代表es的自動發現節點機制,es是一個基于p2p的系統,它先通過廣播尋找存在的節點,再通過多點傳播協定來進行節點之間的通信,同時也支援點對點的互動。

5.X關閉廣播,需要自定義。

通信(Transport)

代表es内部節點或叢集與用戶端的互動方式,預設内部是使用tcp協定進行互動,同時它支援http協定(json格式)、thrift、servlet、memcached、zeroMQ等的傳輸協定(通過插件方式內建)。

節點間通信端口預設:9300-9400。

分片和複制(shards and replicas)

一個索引可以存儲超出單個結點硬體限制的大量資料。比如,一個具有10億文檔的索引占據1TB的磁盤空間,而任一節點可能沒有這樣大的磁盤空間來存儲或者單個節點處理搜尋請求,響應會太慢。

為了解決這個問題,Elasticsearch提供了将索引劃分成多片的能力,這些片叫做分片。當你建立一個索引的時候,你可以指定你想要的分片的數量。每個分片本身也是一個功能完善并且獨立的“索引”,這個“索引” 可以被放置到叢集中的任何節點上。

分片之是以重要,主要有兩方面的原因:

允許你水準分割/擴充你的内容容量

允許你在分片(位于多個節點上)之上進行分布式的、并行的操作,進而提高性能/吞吐量

至于一個分片怎樣分布,它的文檔怎樣聚合回搜尋請求,是完全由Elasticsearch管理的,對于作為使用者的你來說,這些都是透明的。

在一個網絡/雲的環境裡,失敗随時都可能發生。在某個分片/節點因為某些原因處于離線狀态或者消失的情況下,故障轉移機制是非常有用且強烈推薦的。為此, Elasticsearch允許你建立分片的一份或多份拷貝,這些拷貝叫做複制分片,或者直接叫複制。

繼續閱讀