日志實時收集之FileBeat+Kafka


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

 


 

在日志的產生端(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,監控日志文件:

filebeat.prospectors:

- input_type: log

paths:

- /data/dmp/openresty/logs/dmp_intf_*.log

配置output到Kafka

#—————————– Kafka output ——————————–

output.kafka:

hosts: ["datadev1:9092"]

topic: lxw1234

required_acks: 1

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

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

需要大數據學習資料和交流學習的同學可以加大數據學習群:724693112 有免費資料分享和一群學習大數據的小伙伴一起努力

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串,除了包含原始日志,還包含了其他信息。

 


 

@timestamp:消息發送時間

beat:Filebeat運行主機和版本信息

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

input_type:input類型

message:原始日志內容

offset:此條消息在原始日志文件中的offset

source:日志文件

 

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

 


 

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

數據可靠性:是否存在日志數據丟失、重復發送情況;

能否對Filebeat的消息格式進行定制,去掉一些冗余無用的項。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM