從日誌中收集數據,集中到離線的數據倉庫提供給業務方html
離線日誌中心化場景,入庫頻次1次/天,每日生成日誌(即filebeat須要收集的數據)量級爲?,kafka接收到的數據量級爲?,從kafka讀取數據的程序吞吐量爲?併發
需求比較明確,就是要搭建一條日誌中心化(收集)鏈路,只須要知足日頻次的分析需求,因此場景能夠是實時也能夠是離線ide
目前業界對於日誌中心化的解決方案通常是elk或者flume+kafka這樣的實時鏈路。考慮filebeat的輕量級和具體的業務場景,採用filebeat -> kafka測試
裝以前先看了官方refrence的Getting Started和how filebeat works以及kafka output,大體瞭解一下filebeat的原理、使用方法和filebeat output to kafka的在我組業務場景下的可行性。
按照Getting Started的步驟下載包並配置了filebeat.yml,因爲有對不一樣的log輸出到不一樣的kafka topic的需求,因此又在網上找了一下output to multiple kafka topic的配置,最終的配置文件以下(是錯滴):ui
filebeat.prospectors: - input_type: log paths: - /log/1.log* include_lines: [‘\[LOG\].+?_MATCH'] fields: topic: topic_1 - input_type: log paths: - /log/2.log.* include_lines: [‘\[LOG\].+?_MATCH'] fields: topic: topic_2 output.kafka: hosts: [「broker1:9092", 「broker2:9092", 「broker3:9092"] topic: ‘%{[fields.topic]}' required_acks: 1
執行./filebeat啓動後遇到了一些問題日誌
Q1:執行啓動filebeat的命令無日誌
A:加上-e選項(意思是把stderr的內容重定向到stdout),或者在filebeat.yml中配置logging選項)
Q2:從filebeat執行後的console打印來看,配置的log文件時而能夠正常註冊到harvester並收集到spooler發送到kafka,時而一點反應都🈚️。
A:一開始考慮到filebeat會在registry文件中記錄註冊到prospector的文件的status,因此在reference裏面翻翻揀揀找到了兩個配置項(clean_xx),然而並無效果【多是我配錯了】;又試着把文件用mv命令重命名了一下,但仍是不能穩定地讀到我配置的兩個input path(只能讀到其中一個)。
再次翻了一下官方refrence中關於propectors的部分,其中關於fields的解釋是「在最終輸出的文檔中添加一個fields字段」,冥思苦想這個配置:code
再次在網上搜了一下output to multiple kafka topic,找到了document_vtype這個配置項,在官方refrence裏面能夠搜索到,含義是「The event type to use for published lines read by harvesters. 」(filebeat裏面的event指的是harvester從log文件中收集併發送新內容給spooler,見https://www.elastic.co/guide/... 第二段第三行),因此它的值應該能夠用在output上。在prospector的官方refrence也能夠看到關於document_type的示例。參考refrence + 這篇blog修改後的配置文件以下:htm
filebeat.prospectors: - input_type: log paths: - /log/1.log* include_lines: [‘\[LOG\].+?_MATCH'] document_type: topic1 - input_type: log paths: - /log/2.log.* include_lines: [‘\[LOG\].+?_MATCH'] document_type: topic2 output.kafka: hosts: [「broker1:9092", 「broker2:9092", 「broker3:9092"] topic: ‘%{[type]}’ required_acks: 1
刪掉fielbeats安裝目錄的data目錄下的registry文件,再執行./filebeat -e -c filebeat.yml能夠正常收集blog
關於爲何要刪掉registry文件,能夠參考 how filebeat works。這裏的緣由是我拿來測試的文件一直是同一個,懶得改它的名字。和registry文件中記錄的status相關的prospector配置項還有兩個clean_xx,由於目前尚未找到它的正確配置方法,因此就先直接刪掉registry文件讓filebeat本身從新生成。