filebeat+kafka+logstash部署及配置

filebeat+kafka+logstash部署及配置

工作上有個搭建ELK平臺的需求,設計方案的時候,日誌採集部分計劃使用filebeat+kafka+logstash的架構。終端使用filebeat進行日誌的簡單採集,再通過kafka集羣送給logstash過濾和加工,再最後輸出給ElasticSearch。

一、搭建環境及軟件版本
服務器

IP地址 操作系統
192.168.241.11 CentOs7-1804
192.168.241.12 CentOs7-1611
192.168.241.13 CentOs7-1804

JAVA JDK版本:1.8.0_151
Filebeat版本:6.5.2
Kafka版本:2.12-2.1.0
Logstash版本:6.5.2

二、安裝Kafka集羣
請參閱《Kafka集羣及Kafka-Manager部署》

三、Filebeat安裝及配置
1、Filebeat下載及安裝
官網下載地址爲:https://www.elastic.co/downloads/beats/filebeat
本文采用的是rpm安裝方式,下載到的安裝包爲:filebeat-6.5.2-x86_64.rpm。
將安裝包拷貝到服務器的/tmp目錄,執行如下命令完成安裝。

rpm -ivh /tmp/filebeat-6.5.2-x86_64.rpm

2、Filebeat配置
安裝完成後,filebeat主程序目錄爲/usr/share/filebeat,配置文件目錄爲/etc/filebeat,日誌目錄爲/var/log/filebeat。這些目錄通過查看/usr/lib/systemd/system/filebeat.service文件就可以知道。我們要關注的是/etc/filebeat/filebeat.yml文件,我們需要修改其中的input和output配置。本文只根據項目的實際需要簡單講解幾個配置項,所有的配置示例在/etc/filebeat/filebeat.reference.yml文件中,需要了解的話可結合這個文件和百度。
input配置(輸入配置):
filebeat的輸入配置在filebeat.inputs節點下。type爲log,表明這是從文件獲取輸入。我們需要將log類型下的enabled的值置爲true,在paths中編輯需要獲取輸入的文件,文件可以是多個,也可以使用通配符。如下圖:在這裏插入圖片描述
output配置(輸出配置):
我們需要將讀取到的日誌輸出到Kafka集羣中,而配製文件中默認沒有Kafka集羣的輸出配置,因此需要在其中增加(關於Kafka集羣的輸出配置示例,可以在/etc/filebeat/filebeat.reference.yml文件中查看)。我們增加的Kafka集羣配置如下圖所示:
在這裏插入圖片描述
從上圖可以看到,首先要增加output.kafka節點,在此節點下配置enabled、hosts、topic這三個配置項。
更多配置詳情,請參考百度和官方文檔https://www.elastic.co/guide/en/beats/filebeat/current/index.html

四、Logstash安裝及配置
1、Logstash下載及安裝
官方下載地址爲:https://www.elastic.co/downloads/logstash
本文采用的是rpm安裝方式,下載到的安裝包爲:logstash-6.5.2.rpm。
將安裝包拷貝到服務器的/tmp目錄,執行如下命令完成安裝。

rpm -ivh /tmp/logstash-6.5.2.rpm

2、Logstash配置
安裝完成後,logstash主程序目錄爲/usr/share/logstash,配置文件目錄爲/etc/logstash,日誌目錄爲/var/log/logstash。
Logstash的基礎配置文件是/etc/logstash/logstash.yml,但是這個文件我們不用動,我們只需要將自己的輸入輸出配置寫到以“.conf”結尾的文件裏,把這文件放入/etc/logstash/conf.d目錄下,logstash就會讀取我們的配置。我編寫了一個文件kafka.conf,放到/etc/logstash/conf.d,內容如下:

#輸入配置,一個input{}裏可以配置多個輸入源
input {
  #kafka輸入源配置
  kafka {
    #kafka集羣地址
    bootstrap_servers => ["192.168.241.11:9092,192.168.241.12:9092,192.168.241.13:9092"]
    #從kafka中哪個topic讀取數據,這裏的topic名要與filebeat中使用的topic保持一致
    topics => ["filebeat-logstash"]

    #這是kafka中的消費組者ID,默認值是“logstash”。kafka將消息發到每個消費者組中,同一個組中的消費者收到的數據不重複。例如有兩個消費者組G1、G2,G1中有成員A、B,G2中有成員C、D。kafka從輸入中收到了10條消息,會將這10條消息同時發送給G1和G2,A和B各會收到這10條消息中的一部分,他們收到消息的並集就是這10條消息,C和D同理。
    group_id => "filebeat-logstash"
    #kafka消費者組中每個消費者的ID,默認值是“logstash”
    client_id => "logstashnode1"

    #logstash的消費線程,一般一個線程對應kafka中的一個partition(分區),同一組logstash的consumer_threads之和應該不大於一個topic的partition,超過了就是資源的浪費,一般的建議是相等。
    consumer_threads => 1
    #由於beat傳輸數據給kafka集羣的時候,會附加很多tag,默認情況下,logstash就會將這串tag也認爲是message的一部分。這樣不利於後期的數據處理。所有需要添加codec處理。得到原本的message數據。
    codec => json
  }
}

#輸出配置,這裏表示輸出到文件
output {
  file {
    path => "/tmp/logstash.output"
  }
}

配置的詳細解釋請參考註釋,更多配置詳情,請參考百度和官方文檔https://www.elastic.co/guide/en/logstash/current/index.html

五、啓動服務及驗證
根據上文完成部署後,分別啓動kafka集羣,filebeat,logstash,在filebeat所在服務器上,往/tmp/input.test文件中輸入內容,就會在logstash所在服務器的/tmp/logstash.output文件裏產生輸出。詳細驗證過程這裏就不贅述了。

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