以前,咱們的某一個業務用於實時日誌收集處理的架構大概是這樣的:html
在日誌的產生端(LogServer服務器),都部署了FlumeAgent,實時監控產生的日誌,而後發送至Kafka。通過觀察,每個FlumeAgent都佔用了較大的系統資源(至少會佔用一顆CPU 50%以上的資源)。而另一個業務,LogServer壓力大,CPU資源尤爲緊張,若是要實時收集分析日誌,那麼就須要一個更輕量級、佔用資源更少的日誌收集框架,因而我試用了一下Filebeat。linux
Filebeat是一個開源的文本日誌收集器,採用go語言開發,它重構了logstash採集器源碼,安裝在日誌產生服務器上來監視日誌目錄或者特定的日誌文件,並把他們發送到logstash、elasticsearch以及kafka上。Filebeat是代替logstash-forwarder的數據採集方案,緣由是logstash運行在jvm上,對服務器的資源消耗比較大(Flume也是如此)。正由於Filebeat如此輕量級,所以不要奢望它能在日誌收集過程當中作更多清洗和轉換的工做,它只負責一件事,就是高效可靠的傳輸日誌數據,至於清洗和轉換,能夠在後續的過程當中進行。bootstrap
Filebeat官網地址爲:https://www.elastic.co/guide/en/beats/filebeat/current/index.html 你能夠在該地址中下載Filebeat和查看文檔。服務器
Filebeat的安裝和配置很是簡單。框架
下載filebeat-5.6.3-linux-x86_64.tar.gz,並解壓。jvm
進入filebeat-5.6.3-linux-x86_64目錄,編輯配置文件filebeat.ymlelasticsearch
配置input,監控日誌文件:ide
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-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
原始日誌中,日誌格式以下:
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的消息格式進行定製,去掉一些冗餘無用的項。