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安裝軟體時的下一步下一步。。
啥是原始碼安裝啊?說白了就是從官方下載壓縮檔案,什麼.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+埠。
配置完成。