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(蒐集文件數據)

二、資源下載

以下的資源都可以去相應的官網進行,如果不會翻牆,覺得下載太慢或者覺得麻煩,可以直接到下面的地址進行下載,所用資源均在裏面。地址:https://me.csdn.net/download/u014374009

三、最終效果

部分截圖:
在這裏插入圖片描述

四、環境搭建

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允許你創建分片的一份或多份拷貝,這些拷貝叫做複製分片,或者直接叫複製。

複製之所以重要,有兩個主要原因:

在分片/節點失敗的情況下,複製提供了高可用性。複製分片不與原/主要分片置於同一節點上是非常重要的。因爲搜索可以在所有的複製上並行運行,複製可以擴展你的搜索量/吞吐量
總之,每個索引可以被分成多個分片。一個索引也可以被複制0次(即沒有複製) 或多次。一旦複製了,每個索引就有了主分片(作爲複製源的分片)和複製分片(主分片的拷貝)。
分片和複製的數量可以在索引創建的時候指定。在索引創建之後,你可以在任何時候動態地改變複製的數量,但是你不能再改變分片的數量。
5.X默認5:1 5個主分片,1個複製分片
默認情況下,Elasticsearch中的每個索引分配5個主分片和1個複製。這意味着,如果你的集羣中至少有兩個節點,你的索引將會有5個主分片和另外5個複製分片(1個完全拷貝),這樣每個索引總共就有10個分片。

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