ELK 5.x 搭建大規(guī)模日志實時處理系統(tǒng)

一、背景

ELK Stack 是軟件集合?Elasticsearch氨肌、Logstash鸿秆、Kibana 的簡稱,由這三個軟件及其相關的組件可以打造大規(guī)模日志實時處理系統(tǒng)怎囚。

其中卿叽,Elasticsearch 是一個基于 Lucene 的、支持全文索引的分布式存儲和索引引擎恳守,主要負責將日志索引并存儲起來考婴,方便業(yè)務方檢索查詢。

Logstash 是一個日志收集催烘、過濾沥阱、轉發(fā)的中間件,主要負責將各條業(yè)務線的各類日志統(tǒng)一收集伊群、過濾后考杉,轉發(fā)給 Elasticsearch 進行下一步處理。

Kibana 是一個可視化工具舰始,主要負責查詢 Elasticsearch 的數(shù)據(jù)并以可視化的方式展現(xiàn)給業(yè)務方崇棠,比如各類餅圖、直方圖丸卷、區(qū)域圖等枕稀。

所謂“大規(guī)模”及老,指的是 ELK Stack 組成的系統(tǒng)以一種水平擴展的方式支持每天收集抽莱、過濾、索引和存儲 TB 規(guī)模以上的各類日志骄恶。

通常食铐,各類文本形式的日志都在處理范圍,包括但不限于 Web 訪問日志僧鲁,如 Nginx/Apache Access Log 虐呻。

基于對日志的實時分析,可以隨時掌握服務的運行狀況寞秃、統(tǒng)計 PV/UV斟叼、發(fā)現(xiàn)異常流量、分析用戶行為春寿、查看熱門站內搜索關鍵詞等朗涩。

二、架構

ELK Stack 系統(tǒng)應用架構

上圖是 ELK Stack 實際應用中典型的一種架構绑改,其中 filebeat 部署在具體的業(yè)務機器上谢床,通過定時監(jiān)控的方式獲取增量的日志兄一,并轉發(fā)到 Kafka 消息系統(tǒng)暫存。

Kafka 以高吞吐量的特征识腿,作為一個消息系統(tǒng)的角色出革,接收從 filebeat 收集轉發(fā)過來的日志,通常以集群的形式提供服務渡讼。

然后骂束,Logstash 從 Kafka 中獲取日志,并通過 Input-Filter-Output 三個階段的處理成箫,更改或過濾日志展箱,最終輸出我們感興趣的數(shù)據(jù)。通常伟众,根據(jù) Kafka 集群上分區(qū)(Partition)的數(shù)量析藕,1:1 確定 Logstash 實例的數(shù)量,組成 Consumer Group 進行日志消費凳厢。

最后账胧,Elasticsearch 存儲并索引 Logstash 轉發(fā)過來的數(shù)據(jù),并通過 Kibana 查詢和可視化展示先紫,達到實時分析日志的目的治泥。

Elasticsearch/Kibana 還可以通過安裝 x-pack 插件實現(xiàn)擴展功能,比如監(jiān)控 Elasticsearch 集群狀態(tài)遮精、數(shù)據(jù)訪問授權等居夹。

三、實現(xiàn)

我們一步步安裝部署 ELK Stack 系統(tǒng)的各個組件本冲,然后以網站訪問日志為例進行數(shù)據(jù)實時分析准脂。

首先,到?ELK 官網?下載需要用到的 Filebeat/Logstash/Elasticsearch/Kibana 軟件安裝包檬洞。(推薦下載編譯好的二進制可執(zhí)行文件狸膏,直接解壓執(zhí)行就可以部署)

1、下載并配置 Filebeat添怔,開啟日志增量監(jiān)控

本文使用的版本是 5.2.2湾戳,解壓 Filebeat ,修改其中 filebeat.yml 的內容為:(詳細內容參見本文附錄鏈接)

filebeat.yml 配置文件示例

上述配置表示广料,F(xiàn)ilebeat 定期監(jiān)控:

/path/to/my/nginx/access/*.log

目錄下所有以 .log 結尾的文件砾脑,并且將增量日志轉發(fā)到 Kafka 集群。

然后艾杏,后臺啟動 Filebeat 進程:

nohup ./filebeat -c ./filebeat.yml &

這時候韧衣,在瀏覽器上訪問 Nginx 服務器并生成訪問日志后,F(xiàn)ilebeat 會及時的將日志轉發(fā)到 Kafka 集群。轉發(fā)的時候畅铭,F(xiàn)ilebeat 會傳輸 JOSN 對象萧求,而且原生的 Nginx 日志文本會作為 message 字段,示例如下:

filebeat 傳輸內容

2顶瞒、下載并配置 Kafka 集群

Kafka 官網 下載安裝包,本文使用的版本是 0.10.2.0元旬,確認已安裝 java 運行環(huán)境

解壓后榴徐,編輯配置文件 conf/server.properties:(詳細內容參見本文附錄鏈接)

Kafka server configuration

啟動 Zookeeper:

nohup ./bin/zookeeper-server-start.sh config/zookeeper.properties &

啟動 Kafka Server:(指定 JMX_PORT 端口,可以通過 Kafka-manager 獲取統(tǒng)計信息)

JMX_PORT=9001

nohup ./bin/kafka-server-start.sh config/server.properties &

2.1匀归、安裝 Kafka-Manager

kafka-manager 是 Yahoo 公司開源的一個 kafka 集群管理工具坑资。

可以在 Github 上下載安裝:https://github.com/yahoo/kafka-manager

如果你通過 sbt 編譯太慢的話,可以直接下載本文附件穆端,這是一個編譯好的安裝包袱贮,解壓后,修改配置文件 conf/application.conf 即可運行:

bin/kafka-manager -Dconfig.file=/path/to/application.conf -Dhttp.port=8080

然后体啰,通過瀏覽器訪問:

Kafka-manager 界面

3攒巍、下載并配置 Logstash

本文使用的版本是 5.2.2,創(chuàng)建 logstash.conf 文件:(詳細內容參見本文附錄鏈接)

Logstash configuration

配置文件主要分為三大部分: Input / Filter / Output荒勇,對應收集柒莉、過濾、轉發(fā)三個階段沽翔。顯然兢孝,Input 階段只需要指定 Kafka 集群相關信息即可,Output 階段只需要指定 Elasticsearch 服務器相關的信息即可仅偎,比較復雜的是 Filter 過濾階段跨蟹。

可以看到,上述配置中橘沥,grok 插件使用正則表達式將 Nginx 日志的各個字段匹配出來窗轩,包括訪問用戶 ip 地址、請求時間和地址威恼、服務器響應字節(jié)以及用戶標示 User-Agent 等品姓。

關于 Grok 的語法,可以參考:https://grokdebug.herokuapp.com/

然后箫措,mutate腹备、ruby、useragent斤蔓、date植酥、kv 等插件配合使用,過濾并獲取到感興趣的字段,最后輸出如下示例的 JOSN 對象:

Logstash 轉換后輸出的 JSON 對象

這就是最終存儲在 Elasticsearch 中的文檔內容友驮。

如果你想自定義開發(fā)插件漂羊,參見:https://juejin.im/post/58ca9d47570c3500589206d5

接下來,就可以啟動 Logstash 進程了:

nohup ./bin/logstash -f ./logstash.conf &

4卸留、配置并啟動 Elasticsearch 服務

本文使用的是 5.2.2 版本走越,下載并解壓后,修改 conf/elasticsearch.yml 內容如下:(詳細內容參見本文附錄鏈接)

Elasticsearch configuration

指定文檔和日志的存儲路徑以及監(jiān)聽的地址和端口耻瑟。

注意旨指,應當保證有足夠的磁盤空間來存儲文檔,否則 ES 將拒絕寫入新數(shù)據(jù)喳整。

安裝 x-pack 插件:

bin/elasticsearch-plugin install x-pack

另外谆构,不能使用 root 用戶啟動 Elasticsearch 進程,建議新建賬戶 elasticsearch框都。

環(huán)境變量 ES_JAVA_OPTS 被讀取為 Elasticsearch 的最大內存空間搬素,一般設置為你機器內存的一半即可,啟動 ES 服務:

ES_JAVA_OPTS="-Xms4g -Xmx4g"

nohup ./bin/elasticsearch &

如果啟動 Elasticsearch 出現(xiàn)以下錯誤提示:

max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]

max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536]

那么需要修改系統(tǒng)配置:

vi /etc/sysctl.conf 修改虛擬內存配置:

vm.max_map_count = 262144

對于 Ubuntu 系統(tǒng)需要執(zhí)行:

sudo sysctl -w vm.max_map_count=262144

可以通過

sudo sysctl -a | grep max_map_count

查看修改結果是否生效

vi /etc/security/limits.conf 修改 文件描述符限制:

elasticsearch ? ?soft? ? nofile? ? 65536

elasticsearch ? ?hard? ? nofile? ? 65536

然后魏保,退出終端熬尺,重新使用 elasticsearch 賬戶登錄,啟動 Elasticsearch 后囱淋,通過瀏覽器訪問 9200 端口猪杭,查看 Elasticsearch 狀態(tài):

Elasticsearch server

4.1、安裝 Cerebro

Cerebro 時一個第三方的 Elasticsearch 集群管理軟件妥衣,可以方便地查看集群狀態(tài):

Cerebro 界面

下載地址:https://github.com/lmenezes/cerebro

啟動進程后皂吮,可以在瀏覽器查看:

bin/cerebro -Dhttp.port=1234 -Dhttp.address=127.0.0.1

可以在管理后臺修改模板,優(yōu)化索引配置税手,例如:

關閉備份蜂筹,節(jié)省磁盤空間:"number_of_replicas": "0"

修改索引配置

5、配置并啟動 Kibana 服務

本文使用的版本是5.2.2芦倒,下載 Kibana 艺挪,修改 conf/kibana.yml ,內容為:(詳細內容參見本文附錄鏈接)

Kibana configuration

安裝 x-pack 插件:

bin/kibana-plugin install x-pack

啟動 Kibana 進程:

nohup ./bin/kibana &

tips:最好手動退出一下終端

exit

否則兵扬,關閉終端后麻裳,Kibana 進程可能也停止運行了。

然后器钟,就可以在瀏覽器訪問 Kibana 了:

Kibana 界面

注意:

初次訪問 Kibana 的時候津坑,需要配置一個默認的 ES 索引,一般填寫 .monitoring* 即可傲霸,這是因為在上述安裝 x-pack 后疆瑰,會自動開始監(jiān)控 Elasticsearch 集群的狀態(tài)眉反,并將監(jiān)控結果以 .monitoring* 命名索引文件

接下來,就可以使用 Kibana 的可視化功能分析日志了:

Kibana Visualize 功能
Kibana 可視化數(shù)據(jù)分析

5.1 分析各個接口的請求量

在 Kibana 管理后臺穆役,選擇 Visualize >> AreaChart >> logstash-* 索引:

選擇 Area chart
選擇 logstash-* 索引
接口請求量分布圖

將 x 軸 (X-Axis) 的類型選擇為 Date-Histogram寸五,按照參數(shù) request 拆分圖形 (Split-Area)

四、總結

綜上耿币,我們配置并部署了 ELK Stack 的整套組件梳杏,實現(xiàn)了日志收集、過濾淹接、索引和可視化的全部流程秘狞,基于這套系統(tǒng)我們就可以實時的分析業(yè)務。

五蹈集、附錄:

1、ELK 各個組件運行過程中會產生大量的日志雇初,所以需要注意日志處理拢肆,要么 > /dev/null 全部忽略,要么存儲在大磁盤空間靖诗,否則可能寫滿磁盤導致進程被 killed

2郭怪、上述安裝過程使用的配置文件下載:https://github.com/Ceelog/elkstack

3、通過水平擴展 Kafka刊橘、Elasticsearch 集群鄙才,可以實現(xiàn)日均幾百萬到數(shù)十億的日志實時處理

4、參考資料:

https://www.elastic.co/guide/index.html

https://www.elastic.co/guide/en/logstash/current/deploying-and-scaling.html

https://www.gitbook.com/book/chenryn/elk-stack-guide-cn/details

5促绵、磁盤對 Elasticsearch 的性能影響很大攒庵,能上 SSD 是最好的,否則本地磁盤也行败晴,如果是云存儲的話會導致機器負載極高

6浓冒、部署 Kafka Broker 節(jié)點的機器不要跑其他會產生大量磁盤I/O的程序,這樣才能保證 Kafka 磁盤 I/O 效率最高尖坤,從而提升吞吐量稳懒,當然,部署一個 Logstash 實例沒有問題

7慢味、為了提升 Logstash 的吞吐量场梆,可以適當增加 CPU 核數(shù),然后在啟動 Logstash 的時候指定worker 數(shù)量和 CPU 核數(shù)一致

8纯路、在 Logstash 處理日志的階段或油,盡量把不必要的字段刪除,這樣既能提高 ES 的索引速率感昼,又能節(jié)省磁盤空間

(還有疑問装哆?聯(lián)系作者微博/微信 @Ceelog,轉載請注明出處 )


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市蜕琴,隨后出現(xiàn)的幾起案子萍桌,更是在濱河造成了極大的恐慌,老刑警劉巖凌简,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件上炎,死亡現(xiàn)場離奇詭異,居然都是意外死亡雏搂,警方通過查閱死者的電腦和手機藕施,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來凸郑,“玉大人裳食,你說我怎么就攤上這事≤搅ぃ” “怎么了诲祸?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長而昨。 經常有香客問我救氯,道長,這世上最難降的妖魔是什么歌憨? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任着憨,我火速辦了婚禮,結果婚禮上务嫡,老公的妹妹穿的比我還像新娘甲抖。我一直安慰自己,他們只是感情好心铃,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布惧眠。 她就那樣靜靜地躺著,像睡著了一般于个。 火紅的嫁衣襯著肌膚如雪氛魁。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天厅篓,我揣著相機與錄音秀存,去河邊找鬼。 笑死羽氮,一個胖子當著我的面吹牛或链,可吹牛的內容都是我干的。 我是一名探鬼主播档押,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼挖藏,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了轧邪?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤腕窥,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后筛婉,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體簇爆,經...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年爽撒,在試婚紗的時候發(fā)現(xiàn)自己被綠了入蛆。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡硕勿,死狀恐怖哨毁,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情源武,我是刑警寧澤挑庶,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站软能,受9級特大地震影響,放射性物質發(fā)生泄漏举畸。R本人自食惡果不足惜查排,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望抄沮。 院中可真熱鬧跋核,春花似錦、人聲如沸叛买。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽率挣。三九已至刻伊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間椒功,已是汗流浹背捶箱。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留动漾,地道東北人丁屎。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像旱眯,于是被迫代替她去往敵國和親晨川。 傳聞我的和親對象是個殘疾皇子证九,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內容