日志收集框架對比 如何有效完整地收集log日志?
如何有效完整地收集log日志?你指的是什么?你表達(dá)的不夠全面如何優(yōu)化日志系統(tǒng)?答:此題邀請xinghua來解答,他總結(jié)了實(shí)際項(xiàng)目中對elk系統(tǒng)的一些調(diào)優(yōu)的經(jīng)驗(yàn),與你分享百億級elk日志系統(tǒng)優(yōu)化紀(jì)實(shí)。
如何有效完整地收集log日志?
你指的是什么?
你表達(dá)的不夠全面
如何優(yōu)化日志系統(tǒng)?
答:此題邀請xinghua來解答,他總結(jié)了實(shí)際項(xiàng)目中對elk系統(tǒng)的一些調(diào)優(yōu)的經(jīng)驗(yàn),與你分享百億級elk日志系統(tǒng)優(yōu)化紀(jì)實(shí)。
導(dǎo)語:elk是搭建實(shí)時日志分析系統(tǒng)的通用解決方案,通過elk可以方便地收集、搜索日志。但隨著日志量的增加,根據(jù)實(shí)際應(yīng)用場景的優(yōu)化調(diào)整能夠更充分的利用系統(tǒng)資源。本文主要記錄我們項(xiàng)目中對elk系統(tǒng)的一些調(diào)優(yōu)。隨著王者人生相關(guān)業(yè)務(wù)的快速發(fā)展,我們每天日志量很快超過了20億條,存儲超過2TB,elk日志系統(tǒng)的壓力逐漸增加,日志系統(tǒng)的調(diào)整優(yōu)化已經(jīng)迫在眉睫。
1、日志系統(tǒng)架構(gòu)
(elk日志系統(tǒng)架構(gòu))
FileBeat 是一個輕量級的日志收集處理工具(Agent)。
Elasticsearch 是個開源分布式搜索引擎,提供搜集、分析、存儲數(shù)據(jù)三大功能。
Logstash 主要是用來日志的搜集、分析、過濾日志的工具,支持大量的數(shù)據(jù)獲取。
Kibana 可以為 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以幫助匯總、分析和搜索重要數(shù)據(jù)日志。
2、優(yōu)化日志系統(tǒng)以下主要介紹 filebeat、logstash、elasticsearch 的一些優(yōu)化調(diào)整
2.1 filebeat優(yōu)化
(1) 負(fù)載均衡
問題 :當(dāng)日志量非常大(單機(jī)超過每天超100GB)的模塊上報日志時,日志落地延時大,要等一段時間才能在es里查出來。
原因:
當(dāng)filebeat.yml 配置文件里hosts配置了多個Logstash主機(jī),并且loadbalance設(shè)置為true,則輸出插件會將已發(fā)布的事件負(fù)載平衡到所有Logstash主機(jī)上。 如果設(shè)置為false,則輸出插件僅將所有事件發(fā)送到一個主機(jī)(隨機(jī)確定),如果所選主機(jī)無響應(yīng),則會切換到另一個主機(jī)。 默認(rèn)值為false。
方案:配置多個hosts,配置loadbalance為true
(修改配置前只有一個連接)
(負(fù)載均衡優(yōu)化后多個連接)
效果
單機(jī)filebeat吞吐量變大
(多連接優(yōu)化后單機(jī)出流量變大)
(es創(chuàng)建索引的速度變大)
(2)上報采集 源服務(wù)器ip
問題:不是所有日志都會打印本機(jī)IP,比如異常錯誤日志往往無法打印服務(wù)器IP。這部分日志收集之后無法區(qū)分來源,難以定位問題。
原因:filebeat目前不支持上報本機(jī)ip
方案:添加字段client_ip,重啟腳本動態(tài)修改client_ip為本機(jī)IP
filebeat.yml 部分配置
restart_示例
效果
異常日志也能定位服務(wù)器IP
2.2logstash優(yōu)化
(1)日志清洗、格式化
問題:采集的原始日志不規(guī)范,需要過濾,格式化
方案:利用logstash進(jìn)行清理
示例
效果
以刪掉message字段為例看效果
(刪掉message前冗余一份完整原始日志)
效果
平均每條日志存儲空間從1.2KB 下降到 0.84KB,減少了近30%的存儲
(每天日志統(tǒng)計(jì))
2.3elasticsearch優(yōu)化
(1)優(yōu)化模板_template配置
問題:隨著王者榮耀wifi特權(quán)上線,日志量激增,默認(rèn)配置下磁盤達(dá)到瓶頸。
原因:默認(rèn)配置滿足不了項(xiàng)目需要
number_of_shards 是數(shù)據(jù)分片數(shù),默認(rèn)為5
當(dāng)es集群節(jié)點(diǎn)超過分片數(shù)時,不能充分利用所有節(jié)點(diǎn)
number_of_replicas 是數(shù)據(jù)備份數(shù),默認(rèn)是1
方案:調(diào)整模板配置
number_of_shards改為72
number_of_replicas改為0
效果
每天日志的72個分片均勻分部在36個節(jié)點(diǎn)
(每個節(jié)點(diǎn)分配了2個分片)
備份從 1 改成了 0,減少了一半的寫入
(io使用率降低)
3.總結(jié)通過以上調(diào)整,目前elk日志系統(tǒng)可以支持每天超過20億條,2.2 TB的日志,峰值創(chuàng)建索引超6萬QPS
后續(xù)優(yōu)化:不同配置(磁盤空間)機(jī)器按權(quán)重分配,充分利用資源