ELK+FileBeat日誌分析系統構建,elkfilebeat
日誌分析系統重新構建了一下,選定的技術方案是ELK,也就是Elasticsearch, LogStash,Kibana。另外加了Filebeat和Kafka
這兩天稍微清閑一些,就趁機重新構建了日誌分析系統。沒有寫代碼,全部使用成熟的技術方案來做資料擷取,至於後期如何使用這些資料,還在考慮中,先收集吧。
整體的解決方案如所示:
其中,日誌採集工具使用FileBeat,傳輸工具使用Kafka,資料整理工具使用LogStash叢集,資料存放區工具使用ES。當然,這個系統是可以簡化的,比如說簡化為Filebeat+Elasticsearch,FileBeat+LogStash+Elasticsearch,在不考慮資料Filter和資料處理能力的情況下,這兩種方案都可以。但是建立這個平台的初衷是要支援整個網站的所有日誌,於是就增加了Kafka,保證資料處理能力。
FileBeat採集資料之後傳輸給Kafka訊息佇列,然後LogStash採集訊息佇列中的資料,作過濾處理,最後將資料轉送給ES。FileBeat採集資料時就是Json化的,這個日誌採集工具相當輕量級,對系統資源的消耗很少。而LogStash的優點則是有豐富的Filter外掛程式,用於對資料作粗處理。Kafka和ES的優點就不用說了。為了保證系統穩定性,這裡所有的組件都使用叢集形式。kafka叢集使用三台虛擬機器,LogStash叢集使用兩台虛擬機器,而Elasticsearch叢集使用兩台虛擬機器。下面來分別說一下各個組件的安裝和配置。
FileBeat
FileBeat 是用來替代LogStash-Forwarding的一個組件,是一個輕量級的日誌採集器,相比於LogStash-Forwarding日誌採集器,Filebeat對系統資源的佔用低很多。我這裡用到的伺服器是Windows,當然也可以放在Linux機器上,配置方法一致。
首先要下載filebeat,為:https://www.elastic.co/downloads/beats/filebeat#ga-release。這裡把安裝和使用步驟寫的很清楚,我就不贅述了,簡單來說就是下載,修改設定檔,啟動,觀察。所以,請看圖:
我用的版本是5.2.2,整個安裝目錄如所示:
其中filebeat.yml表示設定檔,filebeat.template.json表示資料輸出的json格式。設定檔詳情如下:
filebeat.prospectors:- input_type: log# Paths that should be crawled and fetched. Glob based paths. paths: - D:\Log\Error\*#類型和編碼encoding: GB2312document_type: Error# 跨行讀取multiline.pattern: '^[0-2][0-9]:[0-5][0-9]:[0-5][0-9]'multiline.negate: truemultiline.match: after- input_type: log# Paths that should be crawled and fetched. Glob based paths.paths:- D:\Log\Info*encoding: GB2312document_type: Infomultiline.pattern: '^[0-2][0-9]:[0-5][0-9]:[0-5][0-9]'multiline.negate: truemultiline.match: after#-------------------------- Elasticsearch output ------------------------------#output.elasticsearch:# Array of hosts to connect to.# hosts: ["localhost:9200"]# Optional protocol and basic auth credentials.#protocol: "https"#username: "elastic"#password: "changeme"#----------------------------- Logstash output --------------------------------output.logstash:# Logstash的host地址,這裡給兩個假的hosts: ["106.205.10.138:5044","106.205.10.139:5044"]
這份設定檔中,定義了兩種類型的日誌,分別是Error和Info。日誌輸出可以是ES,可以使LogStash也可以是Kafka,不過由於Kafka營運還沒開過來,我先臨時寫入到了LogStash中。
設定檔寫完之後,就可以啟動FileBeat了,Linux下的啟動沒啥好說的,./filebeat即可。而Windows下的安裝有點繁瑣,需要使用powershell來執行指令碼。開啟CMD視窗,具體的安裝代碼如下:
PowerShell.exe -ExecutionPolicy UnRestricted -File .\install-service-filebeat.ps1
具體執行如:
安裝之後,在服務視窗下啟動,或者是在CMD視窗執行net start filebeat即可。
LogStash
LogStash 的主要功能是對FileBeat採集到的粗資料作過濾,然後將過濾之後的資料寫入到ES中。如果不需要對資料過濾,可以直接從FileBeat或者Kafka將資料寫入ES。不過為了實現日誌時間解析、冗餘欄位濾除等功能,這裡還是選擇增加LogStash的使用。LogStash的安裝配置過程如下。
首先是下載安裝包,我這裡使用的版本是2.4.0,在Linux主機上執行;
wget https://download.elastic.co/logstash/logstash/logstash-2.4.0.tar.gzsudo tar -zxf logstash-2.4.0.tar.gz -C /usr/local/cd /usr/local/logstash-2.4.0sudo vim simple.conf
這段代碼就是下載安裝包、解壓安裝包、建立設定檔的過程。建立simple.conf之後,我在其中做的配置如下:
input{ beats{ codec => plain{charset => "UTF-8"} port => "5044" }}filter{ mutate{ remove_field => "@version" remove_field => "offset" remove_field => "input_type" remove_field => "beat" remove_field => "tags" } ruby{ code => "event.timestamp.time.localtime" }}output{ elasticsearch{ codec => plain{charset => "UTF-8"} hosts => ["106.205.10.138", "106.205.10.139"] }}
其中input選擇將filebeat的資料來源作為接入資料,通過output將資料推送到ES中,filter中過濾掉冗餘欄位。而 code => “event.timestamp.time.localtime” 則表示將時間戳記從UTC時間改到本地時間,這裡是東八區,所以加了八小時。
配置完成之後,啟動LogStash,執行代碼如下;
bin/logstash -f simple.conf
此時就完成了logstash的安裝和配置。
Elasticsearch
最後再來說一下ES的安裝和配置,這個在前面一篇文章裡寫的很清楚了,安裝配置過程參見:http://blyang.cn/index.php/archives/26/
尾聲
SO, 到這裡,整個安裝配置過程結束,看一下效果先:
這是測試資料擷取兩天之後的狀態。後續的資料分析在此基礎上進行,可能用Kibana,也可能自己開發,確定的時候會繼續寫出來。