1. 程式人生 > >linux ELK(filebeat)環境搭建中加入kafka訊息佇列的詳細介紹(菜鳥新手級別)

linux ELK(filebeat)環境搭建中加入kafka訊息佇列的詳細介紹(菜鳥新手級別)

        本文所使用的軟體版本如下filebeat 5.4.0,elasticsearch 5.4.0,kibana 5.4.0,

最近公司需要做實時日誌分析系統,在網上查了很多資料,發現ELK是最適合的,而且是開源,官方文件還算詳細。

         儘管ELK環境搭建在網上一搜一大片,即使如此我還是花了好幾天的時間才能搭好,因為其中很多很多細節網上沒有提到。所以希望將我搭的過程中遇到的問題分享出來。

在這過程中學習到了很多東西,其中最重要的一點就是,多看官方原版英文文件,不要看中文翻譯的,不要看中文翻譯的,不要看中文翻譯的!! 其中stackoverflow是比較好用的網站!!!

         指導人很牛,給了很多的建議以及指導。以前安裝軟體只知道用yum,apt-get等等,基本沒用過原始碼安裝。指導人一句話給我講明白了,原話是這樣說的:yum ,apt-get等等安裝方法說白了就是windows安裝軟體時的下一步下一步。。

根本沒有選擇路徑的權利,基本都是安裝在/opt,配置文件在/etc/...下,而且對於不同的軟體,下載的位置根本不對,這樣就不便於集中管理。我之前就是這麼安裝的ELK,但是全解除安裝了。因為實在是不容易管理,看配置還要換很多目錄,切換的煩。所以全部用原始碼安裝。

         啥是原始碼安裝啊?說白了就是從官方下載壓縮檔案,什麼.tar,.tar.gz格式的檔案,然後在linux下解壓,這樣就會形成一個目錄,這就是原始碼安裝。簡單吧!!

1.ELK工作流程圖(十分關鍵,不理解就沒法配置環境!)


(1)首先最左側這幾個都是logstash agent,我們可以選擇其中一種,logstash agent是執行在我們想要收集日誌的機器上的,也就是我們想收集哪臺機器的日誌,我們就把logstash agent安裝在哪臺機器上。他的作用是收集日誌,其中可以選擇過濾掉一些日誌的行,我們可以設定,下面有詳細說明。

(2)logstash agent收集的資料要傳送給kafka,這樣為了防止在網路阻塞的時候資料丟失。相當於緩衝區,kafka具體內容不介紹,就當個黑盒就好了。logstash agent相當於kafka的producer。

(3)然後logstash從kafka中pull(拉)訊息,當做kafka的consumer。

(4)logstash可以將日誌解析,(這個解析很抽象,我們見下面的例子),然後將資料傳送到elasticsearch,elasticsearch是負責儲存資料的。

(5)kibana是展示端,僅僅負責展示ES中儲存的資料。

2.配置客戶機,filebeat的配置

2.1我們首先配置客戶機(也就是我們想在這臺機器上獲得日誌)

我們只需要安裝一種logstash agent就可以了,我們選擇filebeat,比較輕量級,對CPU負載不大,不佔用太多資源。

解壓了filebeat後,進入filebeat資料夾,你會發現如下的目錄結構:


我們只需要配置filebeat.yml,這個是filebeat執行的時候才用的配置。只需要修改他就行!這是其中的開頭幾行,paths指明你要把本機的哪個目錄的日誌分享出去。


其中include_lines表明,從filebeat輸出的日誌中要包含的內容,可以用萬用字元表示 ,比如 include_lines:[".*key.*]表示從filebeat收集的日誌的行一定要包含key,不包含key的不要。當然也有exclude_lines,是排除掉的日誌。

在官方文件瞭解到tags的用法,如果加了tags欄位,表明,filebeat輸出的日誌中將要加一個tags域,比如tags: ["log"],那麼filebeat輸出的日誌中會新加入一個特徵tags(也就是列),值為log。加入tags的目的是為了後續logstash對其進行篩選,很關鍵的操作。

之後最重要的就是下面的output部分。filebeat 5.4支援向kafka,logstash,es輸出資料。(注意:剛開始進入filebeat.yml的時候裡面並沒有output.kafka,是後加的,當時很惶恐啊。不知道可不可以,試了之後發現可以),其實們可以看和filebeat.yml同目錄下的filebeat.full.yml,這個是filebeat支援的所有操作,只不過都是註釋的而已,供我們參考,filebeat執行還是使用filebeat.yml配置。

我們可以把原來的output.elasticsearch註釋掉,之後再加上output.kafka。如下圖所示:


enabled表明這個模組是啟動的。host:   是想把filebeat傳入到哪臺機器的kafka上,比如 一個具體的ip + 9092(kafka預設埠號)。

topic這裡很關鍵,表明我們想傳送給kafka的哪個topic,若傳送的topic不存在,則會自動建立此topic!!!!

        其他選項預設就好。不用改。這樣filebeat就配置好了。

3.配置伺服器端

             這篇文章,我只在一臺機器上配置elasticsearch,logstash 和kibana,在公司剛開始應用ELK時,就是這麼配置的,只在一臺機器上執行這3個,這是可以用的。

3.1安裝kafka(後續新增)

3.2安裝與配置logstash

在官方網站下載logstash linux 64位的,。然後解壓 tar -xzvf logstash-5.4.0.tar.gz

會有如下目錄:


(裡面的start.sh指令碼是額外寫的,原本沒有)

我們暫時無須配置config裡面的logstash.yml,暫時用不到,如上圖所示,我們建立一個test_conf,名字可以隨意起,是因為logstash啟動必須用命令列引數指明需要使用的配置檔案,比如此圖中我們使用

bin/logstash -f test_conf,這樣表明logstash用tesh_conf配置啟動。那麼如何配置test_conf呢?如下圖所示

input外掛中有kafka,表示logstash 用kafka的輸出來作為輸入。其中各項屬性請參考官方文件,很容易理解。

filter 是過濾,其中grok外掛也是一門學問,需要多多檢視資料。

output可以指定logstash的輸出去向,我們是讓logstash輸出到elasticsearch。具體配置請見官方文件。其實output這裡index 和 document_type的理解很關鍵,建議去官方文件看看。

3.2安裝配置elasticsearch

在官方網站下載5.4版本的elasticsearch,解壓可得到如下的目錄結構:

只需要配置config中的elasticsearch.yml。


network.host是我們安裝的這臺機器的ip.

http.port 是我們想要elasticsearch執行的埠。預設是9200,可以自行改變。

後兩項是為了使用elasticsearch的外掛所設定的。常用的是head外掛,head可以在前端展示elasticsearch的儲存情況。

這樣elasticsearch設計就完成了,很簡單。

3.3安裝配置kibana

在官網下載kibana5.4,解壓,然後在config目錄下配置kibana.yml。


server.host 是kibana執行機器的ip

elasticsearch.url 是elasticsearch所在的ip+埠。

配置完成。