本文已經(jīng)更新到 ELK 5.x 版本:http://www.reibang.com/p/f3658d267b5d
What it is ?
ELK 是軟件集合 Elasticsearch趾牧、Logstash、Kibana 的簡稱肯污,由這三個(gè)軟件及其相關(guān)的組件可以打造大規(guī)模日志實(shí)時(shí)處理系統(tǒng)翘单。
其中,Elasticsearch 是一個(gè)基于 Lucene 的蹦渣、支持全文索引的分布式存儲(chǔ)和索引引擎哄芜,主要負(fù)責(zé)將日志索引并存儲(chǔ)起來,方便業(yè)務(wù)方檢索查詢剂桥。
Logstash 是一個(gè)日志收集忠烛、過濾、轉(zhuǎn)發(fā)的中間件权逗,主要負(fù)責(zé)將各條業(yè)務(wù)線的各類日志統(tǒng)一收集美尸、過濾后,轉(zhuǎn)發(fā)給 Elasticsearch 進(jìn)行下一步處理斟薇。
Kibana 是一個(gè)可視化工具师坎,主要負(fù)責(zé)查詢 Elasticsearch 的數(shù)據(jù)并以可視化的方式展現(xiàn)給業(yè)務(wù)方,比如各類餅圖堪滨、直方圖胯陋、區(qū)域圖等。
所謂“大規(guī)模”指的是 ELK 組成的系統(tǒng)以一種水平擴(kuò)展的方式每天支持收集遏乔、過濾义矛、索引和存儲(chǔ) TB 規(guī)模以上的各類日志(注:1TB = 1024GB )。
通常盟萨,各類文本形式的日志都在處理范圍凉翻,包括但不限于 Web 訪問日志,如 Nginx/Apache Access Log捻激;應(yīng)用運(yùn)行時(shí)日志制轰,如 Swift/PHP/Python/Ruby/Java/C# 等構(gòu)建的應(yīng)用程序在執(zhí)行業(yè)務(wù)過程中記錄下來的日志。?
How it work ?
上圖是 ELK 實(shí)際應(yīng)用中典型的一種架構(gòu)胞谭,其中 Filebeat 部署在具體的業(yè)務(wù)機(jī)器上垃杖,通過定時(shí)監(jiān)控的方式獲取增量的日志,并轉(zhuǎn)發(fā) push 到 Redis 的一個(gè) list 對(duì)象中暫存丈屹。
Redis 以高讀寫性能以及擁有支持 push/pop 操作的 list 數(shù)據(jù)結(jié)構(gòu)的特征调俘,作為一個(gè)緩沖隊(duì)列的角色,接收所有從 Filebeat 收集轉(zhuǎn)發(fā)過來的日志泉瞻。
然后脉漏,Logstash 從 Redis 中獲取日志苞冯,并通過 Input-Filter-Output 三個(gè)階段的處理袖牙,更改或過濾日志,最終輸出我們感興趣的數(shù)據(jù)舅锄。
最后鞭达,Elasticsearch 存儲(chǔ)并索引從 Logstash 轉(zhuǎn)發(fā)過來的數(shù)據(jù),并通過 Kibana 查詢和可視化展示皇忿,達(dá)到實(shí)時(shí)分析日志的目的畴蹭。
Getting started
我們一步步安裝部署 ELK 系統(tǒng)的各個(gè)組件,然后以網(wǎng)站訪問日志為例進(jìn)行數(shù)據(jù)實(shí)時(shí)分析鳍烁。(假定已經(jīng)有部署好的 Nginx 服務(wù)器和 Redis 實(shí)例)
首先叨襟,到 ELK 官網(wǎng)下載需要用到的 Filebeat/Logstash/Elasticsearch/Kibana 軟件安裝包。(推薦下載編譯好的二進(jìn)制可執(zhí)行文件幔荒,直接解壓執(zhí)行就可以部署)
1糊闽、下載并配置 Filebeat,開啟日志增量監(jiān)控
解壓后的 Filebeat 包含以下三個(gè)文件:
修改其中 filebeat.yml 的內(nèi)容為:
上述配置表示爹梁,F(xiàn)ilebeat 每 10s 監(jiān)控一次
/path/to/nginx/access/*.log
目錄下所有以 .log 結(jié)尾的文件右犹,并且將增量日志轉(zhuǎn)發(fā)到 Redis 服務(wù)器。
然后姚垃,后臺(tái)啟動(dòng) Filebeat 進(jìn)程:
nohup ./filebeat -c ./filebeat.yml &?
這時(shí)候念链,在瀏覽器上訪問 Nginx 服務(wù)器并生成訪問日志后,F(xiàn)ilebeat 會(huì)及時(shí)的將日志轉(zhuǎn)發(fā)到 Redis 服務(wù)器。轉(zhuǎn)發(fā)的時(shí)候掂墓,F(xiàn)ilebeat 會(huì)傳輸 JOSN 對(duì)象谦纱,而且原生的 Nginx 日志文本會(huì)作為 message 字段。
2君编、下載并配置 Logstash 服协,開啟日志過濾
解壓后的 Logstash 包含以下目錄和文件:
創(chuàng)建并編輯 filebeat-logstash-elastic.conf 文件,內(nèi)容為:
配置文件主要分為三大部分: Input / Filter / Output啦粹,對(duì)應(yīng)收集偿荷、過濾、轉(zhuǎn)發(fā)三個(gè)階段唠椭。顯然跳纳,Input 階段只需要指定 Redis 服務(wù)器相關(guān)信息即可,Output 階段只需要指定 Elasticsearch 服務(wù)器相關(guān)的信息即可贪嫂,比較復(fù)雜的是 Filter 過濾階段寺庄。
可以看到,上述配置中力崇,grok 插件使用正則表達(dá)式將 Nginx 日志的各個(gè)字段匹配出來斗塘,包括訪問用戶 ip 地址、請(qǐng)求時(shí)間和地址亮靴、服務(wù)器響應(yīng)時(shí)間和響應(yīng)字節(jié)以及用戶標(biāo)示 User-Agent 等馍盟。
然后,mutate茧吊、ruby贞岭、useragent、date搓侄、kv 等插件配合使用瞄桨,過濾并獲取到感興趣的字段,最后輸出如下示例的 JOSN 對(duì)象:
這就是最終存儲(chǔ)在 Elasticsearch 中的文檔內(nèi)容讶踪。
接下來芯侥,就可以啟動(dòng) Logstash 進(jìn)程了:
nohup ./bin/logstash agent -f ./filebeat-logstash-elastic.conf &
3、配置并啟動(dòng) Elasticsearch 服務(wù)
下載并解壓后乳讥,可以看到 ES 的目錄和文件:
修改 conf/elasticsearch.yml 內(nèi)容如下:
指定文檔和日志的存儲(chǔ)路徑以及監(jiān)聽的地址和端口即可柱查。注意,應(yīng)當(dāng)保證有足夠的磁盤空間來存儲(chǔ)文檔雏婶,否則 ES 將拒絕寫入新數(shù)據(jù)物赶。
環(huán)境變量 ES_HEAP_SIZE 被讀取為 Elasticsearch 的最大內(nèi)存空間,一般設(shè)置為你機(jī)器內(nèi)存的一半即可:?
export ES_HEAP_SIZE=10g
然后留晚,啟動(dòng) ES 服務(wù)即可:
nohup ./bin/elasticsearch &
4酵紫、配置并啟動(dòng) Kibana 服務(wù)
下載解壓后的 Kibana 目錄和文件:
修改 conf/kibana.yml 告嘲,內(nèi)容為:
?elasticsearch.url: "http://localhost:9200"
指定 ES 服務(wù)的地址和端口即可,然后啟動(dòng) Kibana 進(jìn)程:
nohup ./bin/kibana &
tips:最好手動(dòng)退出一下終端
exit
否則奖地,關(guān)閉終端后橄唬,Kibana 進(jìn)程可能也停止運(yùn)行了。
然后参歹,就可以在瀏覽器訪問 Kibana 了 http://10.142.86.182:5601/ (換成相應(yīng)的 IP 地址訪問)
注意:初次訪問 Kibana 的時(shí)候仰楚,需要配置一個(gè)默認(rèn)的 ES 索引,一般填寫 logstash-* 即可犬庇。
接下來僧界,就可以使用 Kibana 的可視化功能分析日志了:
總結(jié)
綜上,我們配置并部署了 ELK 的整套組件臭挽,實(shí)現(xiàn)了日志收集捂襟、過濾、索引和可視化的全部流程欢峰,基于這套系統(tǒng)我們就可以實(shí)時(shí)的了解業(yè)務(wù)運(yùn)行狀態(tài)葬荷。
tips:
ELK 各個(gè)組件運(yùn)行過程中會(huì)產(chǎn)生大量的日志,所以需要注意日志處理纽帖,要么 > /dev/null 全部忽略宠漩,要么存儲(chǔ)在大磁盤空間,否則可能寫滿磁盤導(dǎo)致進(jìn)程被 killed
作者微博/微信 @Ceelog懊直,轉(zhuǎn)載請(qǐng)注明出處 ;)