1. 程式人生 > >ELK+FileBeat日誌分析系統

ELK+FileBeat日誌分析系統

日誌分析系統重新構建了一下,選定的技術方案是ELK,也就是ElasticSearch, LogStash,Kibana。另外加了Filebeat和Kafka

2017.06.28



這兩天稍微清閒一些,就趁機重新構建了日誌分析系統。沒有寫程式碼,全部使用成熟的技術方案來做資料採集,至於後期如何使用這些資料,還在考慮中,先收集吧。
整體的解決方案如下圖所示:

請輸入圖片描述

其中,日誌採集工具使用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: GB2312 document_type: Error # 跨行讀取 multiline.pattern: '^[0-2][0-9]:[0-5][0-9]:[0-5][0-9]' multiline.negate: true multiline.match: after - input_type: log # Paths that should be crawled and fetched. Glob based paths. paths: - D:\Log\Info* encoding: GB2312 document_type: Info multiline.pattern: '^[0-2][0-9]:[0-5][0-9]:[0-5][0-9]' multiline.negate: true multiline.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.gz
sudo tar -zxf logstash-2.4.0.tar.gz -C /usr/local/
cd /usr/local/logstash-2.4.0
sudo 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

尾聲

SO, 到這裡,整個安裝配置過程結束,看一下效果先:

請輸入圖片描述

這是測試資料採集兩天之後的狀態。後續的資料分析在此基礎上進行,可能用Kibana,也可能自己開發,確定的時候會繼續寫出來。