1. 程式人生 > >日誌實時收集之FileBeat+Kafka

日誌實時收集之FileBeat+Kafka

之前,我們的某一個業務用於實時日誌收集處理的架構大概是這樣的:

filebeat

在日誌的產生端(LogServer伺服器),都部署了FlumeAgent,實時監控產生的日誌,然後傳送至Kafka。經過觀察,每一個FlumeAgent都佔用了較大的系統資源(至少會佔用一顆CPU 50%以上的資源)。而另外一個業務,LogServer壓力大,CPU資源尤其緊張,如果要實時收集分析日誌,那麼就需要一個更輕量級、佔用資源更少的日誌收集框架,於是我試用了一下Filebeat。

Filebeat是一個開源的文字日誌收集器,採用go語言開發,它重構了logstash採集器原始碼,安裝在日誌產生伺服器上來監視日誌目錄或者特定的日誌檔案,並把他們傳送到logstash、elasticsearch以及kafka上。Filebeat是代替logstash-forwarder的資料採集方案,原因是logstash執行在jvm上,對伺服器的資源消耗比較大(Flume也是如此)。正因為Filebeat如此輕量級,因此不要奢望它能在日誌收集過程中做更多清洗和轉換的工作,它只負責一件事,就是高效可靠的傳輸日誌資料,至於清洗和轉換,可以在後續的過程中進行。

Filebeat官網地址為:https://www.elastic.co/guide/en/beats/filebeat/current/index.html  你可以在該地址中下載Filebeat和檢視文件。

Filebeat安裝配置

Filebeat的安裝和配置非常簡單。

下載filebeat-5.6.3-linux-x86_64.tar.gz,並解壓。 進入filebeat-5.6.3-linux-x86_64目錄,編輯配置檔案filebeat.yml

配置input,監控日誌檔案:

  1. filebeat.prospectors:
  2. - input_type: log
  3. paths:
  4. - /data/dmp/openresty/logs/dmp_intf_*.log

配置output到Kafka #—————————– Kafka output ——————————–

  1. output.kafka:
  2. hosts: ["datadev1:9092"]
  3. topic: lxw1234
  4. required_acks: 1

PS:假設你的Kafka已經安裝配置好,並建了Topic。

更多的配置選項,請參考官方文件。

Filebeat啟動

在filebeat-5.6.3-linux-x86_64目錄下,執行命令:

./filebeat -e -c filebeat.yml 來啟動Filebeat。

啟動後,Filebeat開始監控input配置中的日誌檔案,並將訊息傳送至Kafka。

你可以在Kafka中啟動Consumer來檢視:

./kafka-console-consumer.sh –bootstrap-server localhost:9092 –topic lxw1234 –from-beginning

Filebeat的訊息格式

原始日誌中,日誌格式如下:

2017-11-09T15:18:05+08:00|~|127.0.0.1|~|-|~|hy_xyz|~|200|~|0.002

Filebeat會將訊息封裝成一個JSON串,除了包含原始日誌,還包含了其他資訊。

filebeat

@timestamp:訊息傳送時間

beat:Filebeat執行主機和版本資訊

fields:使用者自定義的一些變數和值,非常有用,類似於Flume的靜態攔截器

input_type:input型別

message:原始日誌內容

offset:此條訊息在原始日誌檔案中的offset

source:日誌檔案

另外, Filebeat對CPU的佔用情況:

filebeat

經過初步試用,以下方面的問題還有待繼續測試:

  1. 資料可靠性:是否存在日誌資料丟失、重複傳送情況;
  2. 能否對Filebeat的訊息格式進行定製,去掉一些冗餘無用的項。