張鵬
摘要
大數(shù)據(jù)時(shí)代,服務(wù)器規(guī)模的不斷擴(kuò)大和分布式云應(yīng)用的快速普及,使得系統(tǒng)運(yùn)行監(jiān)控和日常維護(hù)變得十分重要,相關(guān)運(yùn)行日志的管理是其中一個(gè)不容忽視的問(wèn)題。本文通過(guò)介紹ElasticStack的部署及應(yīng)用情況,直觀展現(xiàn)了Elastic Stack在日志收集及分析、增強(qiáng)系統(tǒng)監(jiān)控運(yùn)維能力、提升運(yùn)維效率方面的作用,也為技術(shù)運(yùn)維部門(mén)探索實(shí)現(xiàn)自動(dòng)化運(yùn)維的工具引入和廣泛使用提供了參考。
【關(guān)鍵詞】運(yùn)維 日志管理 數(shù)據(jù)采集 數(shù)據(jù)分析 數(shù)據(jù)挖掘 Elastic Stack
1 引言
隨著互聯(lián)網(wǎng)技術(shù)的不斷發(fā)展,云計(jì)算及大數(shù)據(jù)技術(shù)日新月異,部署互聯(lián)網(wǎng)應(yīng)用系統(tǒng)由以前的步驟復(fù)雜變得越來(lái)越簡(jiǎn)單,甚至按一個(gè)按鈕就已經(jīng)可以上線(xiàn)使用。這樣的變化也驅(qū)動(dòng)著系統(tǒng)運(yùn)維由傳統(tǒng)的運(yùn)維管理開(kāi)始向運(yùn)維分析轉(zhuǎn)變,從而從分散人工操作向集中自動(dòng)化運(yùn)維服務(wù)轉(zhuǎn)變。在日常運(yùn)維中,操作系統(tǒng)、應(yīng)用服務(wù)、數(shù)據(jù)庫(kù)服務(wù)和安全設(shè)備等主要維護(hù)對(duì)象,每天都會(huì)產(chǎn)生大量的日志數(shù)據(jù),這些數(shù)據(jù)包括了系統(tǒng)運(yùn)行信息、、訪(fǎng)問(wèn)日志信息、數(shù)據(jù)庫(kù)操作信息、安全攔截信息等。這些信息價(jià)值很高,獲取成本低,具有特有的優(yōu)勢(shì),也是企業(yè)信息資產(chǎn)的重要組成部分。因此,日志數(shù)據(jù)的分析挖掘就成為運(yùn)維分析的首個(gè)考慮要素。
過(guò)去,系統(tǒng)產(chǎn)生的日志數(shù)據(jù)基本都是分散存在于宿主服務(wù)器磁盤(pán)上,運(yùn)維工程師通過(guò)遠(yuǎn)程連接工具登陸對(duì)應(yīng)服務(wù)器,手動(dòng)輸入相應(yīng)的查看命令進(jìn)行臨時(shí)、事后的分析和審計(jì)工作。在現(xiàn)在大數(shù)據(jù)的時(shí)代,系統(tǒng)產(chǎn)生的海量日志分布在本地機(jī)房、托管機(jī)房、公用云服務(wù)等不同的地方,傳統(tǒng)的日志處理方案顯示非常低效,也會(huì)因?yàn)椴僮髁?xí)慣的差異導(dǎo)致出錯(cuò)機(jī)率的增加。因此,對(duì)日志進(jìn)行及時(shí)收集、統(tǒng)一管理和實(shí)時(shí)分析成為運(yùn)維部門(mén)急需解決的問(wèn)題。
Elastic Stack實(shí)現(xiàn)了海量日志的統(tǒng)一管理和高效挖掘分析,有效地發(fā)揮了日志信息在故障處理、問(wèn)題定位、性能優(yōu)化等實(shí)際運(yùn)維工作中的作用。
2 Elastic Stack簡(jiǎn)介
2.1 Elastic Stack簡(jiǎn)介
Elastic Stack是三個(gè)軟件產(chǎn)品的組合,分別是:Elasticsearch,Logstash和Kibanao通常三者配合使用。Elasticscarch是一個(gè)基于Lucene的搜索服務(wù)器;Logstash是一個(gè)管理事件和日志的工具;Kibana是一個(gè)開(kāi)源的分析與可視化平臺(tái),設(shè)計(jì)出來(lái)用于和Elasticsearch一起使用的。
其實(shí),簡(jiǎn)單來(lái)說(shuō),Elastic Stack的核心是Elasticsearch,Logstash和Kibana都是為Elasticsearch服務(wù)的。使用Logstash能夠很方便的將其他來(lái)源的數(shù)據(jù),比如:日志文件、數(shù)據(jù)庫(kù)等方便的導(dǎo)入到Elasticsearch中。使用Kibana可以直觀清晰的展示Elasticsearch中存儲(chǔ)的數(shù)據(jù),生成圖表,幫助分析,同時(shí)提供控制臺(tái)來(lái)操作Elasticscarch。這三者的有機(jī)結(jié)合為日志數(shù)據(jù)實(shí)時(shí)、可視化處理提供了完整的解決方案。
2.2 Elastic Stack在日志管理與分析方面具有以下優(yōu)點(diǎn)
處理靈活:Elasticsearch是實(shí)時(shí)全文索引;
配置簡(jiǎn)單:Elasticsearch全部采用JSON接口,Logstash是Ruby DSL設(shè)計(jì),都是目前業(yè)界最通用的配置語(yǔ)法設(shè)計(jì);
性能高效:確保每次查詢(xún)都是實(shí)時(shí)計(jì)算,優(yōu)秀的設(shè)計(jì)和實(shí)現(xiàn)基本可以達(dá)到百億級(jí)數(shù)據(jù)查詢(xún)的秒級(jí)響應(yīng);
集群擴(kuò)展:Elasticscarch和Logstash集群都是可以線(xiàn)性擴(kuò)展的;
數(shù)據(jù)可視:Kibana界面上,運(yùn)維人員點(diǎn)擊鼠標(biāo),就可以完成搜索、聚合功能,使數(shù)據(jù)以生成炫麗的圖片,組成儀表板進(jìn)行集中展示。
2.3 Elastic Stack解決了以下運(yùn)維痛點(diǎn)
開(kāi)發(fā)人員不能登錄線(xiàn)上服務(wù)器查看詳細(xì)日志:由于企業(yè)人事架構(gòu)的限制,開(kāi)發(fā)人員與運(yùn)維人員對(duì)于線(xiàn)上服務(wù)器的操作權(quán)限是有區(qū)別的,那意味著對(duì)于已上線(xiàn)應(yīng)用需要檢查運(yùn)行日志進(jìn)行排障的時(shí)候,就必須要運(yùn)維人員介入配合,從而增加溝通成本和影響工作效率。
各個(gè)系統(tǒng)日志信息分散存放,技術(shù)人員難以查找:隨著企業(yè)的不斷發(fā)展,應(yīng)用系統(tǒng)越來(lái)越多,甚至出現(xiàn)應(yīng)用平臺(tái)集群化部署的情況,技術(shù)人員查找分析日志的難度和時(shí)間隨著平臺(tái)子系統(tǒng)規(guī)模的擴(kuò)大而增大。
日志數(shù)據(jù)量大,查詢(xún)速度慢,或者數(shù)據(jù)不夠?qū)崟r(shí):應(yīng)用系統(tǒng)運(yùn)行過(guò)程時(shí)刻產(chǎn)生日志數(shù)據(jù),且數(shù)據(jù)量大,通過(guò)系統(tǒng)文本處理工具進(jìn)行查詢(xún)耗費(fèi)時(shí)間太長(zhǎng),也無(wú)法感知新采集的日志數(shù)據(jù),影響最終報(bào)告的輸出。
3 Elastic Stack平臺(tái)應(yīng)用實(shí)踐
3.1 平臺(tái)網(wǎng)絡(luò)拓?fù)浼軜?gòu)
為保證日志分析服務(wù)的可擴(kuò)展性,采取分區(qū)域搭建Logstash及Redis服務(wù),再組成集群,充分結(jié)合了企業(yè)自身的網(wǎng)絡(luò)環(huán)境實(shí)際,平臺(tái)網(wǎng)絡(luò)拓?fù)淙鐖D1所示。
這個(gè)架構(gòu)中,首先在接入平臺(tái)日志收集的各個(gè)收集對(duì)象(服務(wù)器群)上分別部署Logstash-Agent和Beat收集插件進(jìn)行原始日志采集,所有采集到的日志經(jīng)過(guò)各自區(qū)域Redis集群,利用消息隊(duì)列機(jī)制降低數(shù)據(jù)丟失的隱患隨后Logstash的索引組件將負(fù)責(zé)從Redis中讀取日志數(shù)據(jù),進(jìn)行解析轉(zhuǎn)換等數(shù)據(jù)預(yù)處理工作,再將經(jīng)過(guò)預(yù)處理的數(shù)據(jù)輸入Elastcsearch集群進(jìn)行進(jìn)一步的處理和存儲(chǔ);最終Kibana負(fù)責(zé)完成面向用戶(hù)的日志數(shù)據(jù)統(tǒng)計(jì)、分析與展現(xiàn)工作。
3.2 環(huán)境部署
按照官方的安裝指南完成Elastic Stack平臺(tái)基礎(chǔ)環(huán)境的搭建,只針對(duì)一些關(guān)鍵配置進(jìn)行說(shuō)明。
3.2.1 配置Filebeat采集訪(fǎng)問(wèn)日志數(shù)據(jù)寫(xiě)入Redis
安裝日志文件采集插件Filebeat,修改配置文件,指定日志采集路徑與輸出路徑:
filebeat.prospectors:
-input_type:log
paths:
-/var/weblogs/*/*.log
tags:["nginx-log"]
output.redis:
hosts:["172.23.130.219"]
port:6379
key:"nginx-log"
datatype:list
db:0
3.2.2 配置Logstash讀取Redis中的日志數(shù)據(jù)寫(xiě)入Elasticsearch
配置輸入指向Redis和輸出指向Elasticsearch:
input{
redis{
data_type=>"pattern channel"
key=>"logstash-*"
host=>"172.23.130.219"
port=>6379
threads=>5
}
}
output{
elasticsearch{
hosts=>'172.23.130.219:9200'
}
}
3.2.3 配置ELasticsearch
只需要在Elasticsearch配置文件elasticsearch.yml中進(jìn)行相關(guān)路徑和端口設(shè)置:
cluster.name:nfw-elk
node.name:nfw-elk-nodel
path.data:/esdata
path.logs:/var/log/elasticsearch
network.host:0.0.0.0
http.port:9200
3.2.4 配置Kibana
server.port:5601
server.host:"172.23.130.219"
elasticsearch.url:"http://172.23.130.219:9200"
kibana.index:".kibana"
3.2.5 訪(fǎng)問(wèn)Kibana
所有安裝和配置完成之后,在瀏覽器中訪(fǎng)問(wèn)http://172.23.130.219:5601即可看到最終Kibana界面,如圖2所示。
4 應(yīng)用效果
Elastic Stack平臺(tái)主要為技術(shù)運(yùn)維部門(mén)提供日志集中管理和日志分析兩大功能:
在日志管理方面,不僅將以往分散在各臺(tái)服務(wù)器的日志進(jìn)行了集中管理,而且簡(jiǎn)化了日志查詢(xún)的方式,大幅提高了日志查詢(xún)的效率;引入Elastic Stack之前,人工操作查看單臺(tái)應(yīng)用主機(jī)日志平均耗時(shí)5分鐘;引入ElasticStack之后,所有應(yīng)用主機(jī)日志均可在界面上集中查詢(xún),平均耗時(shí)1秒。且不受應(yīng)用主機(jī)數(shù)量和日志數(shù)量增長(zhǎng)的限制。
在日志分析方面,Elastic Stack的分析挖掘能力,對(duì)監(jiān)控過(guò)程中的異常告警和故障診斷起到了極大的輔助作用;通過(guò)從日志中挖掘出被監(jiān)控系統(tǒng)的各項(xiàng)指標(biāo),及時(shí)反映系統(tǒng)的健康狀態(tài)和性能瓶頸,改變了原先需要編寫(xiě)復(fù)雜腳本才能部署監(jiān)控的方式,不僅效率更高,同時(shí)對(duì)系統(tǒng)正常的業(yè)務(wù)運(yùn)行沒(méi)有任何影響,通過(guò)對(duì)多種日志的快速檢索,關(guān)聯(lián)分析和直觀展現(xiàn),有效地幫助運(yùn)維人員提高了定位故障原因的速度。
5 結(jié)語(yǔ)
隨著業(yè)務(wù)的不斷發(fā)展,在大規(guī)模的系統(tǒng)運(yùn)維過(guò)程中,集中日志處理及分析平臺(tái)是保障業(yè)務(wù)系統(tǒng)穩(wěn)定運(yùn)行的關(guān)鍵。通過(guò)基于ElasticStack的集中運(yùn)維日志分析平臺(tái),運(yùn)維人員可以對(duì)系統(tǒng)運(yùn)行的各種指標(biāo)實(shí)時(shí)進(jìn)行監(jiān)控,及時(shí)發(fā)現(xiàn)各種異常;對(duì)各類(lèi)指標(biāo)進(jìn)行多維度分析展現(xiàn);對(duì)各種數(shù)據(jù)按需要進(jìn)行有效存儲(chǔ)用于容量、性能等分析;對(duì)日志文本數(shù)據(jù)進(jìn)行精確或模糊的全文檢索;處理的數(shù)據(jù)容量達(dá)到TB甚至PB級(jí)別。該平臺(tái)學(xué)習(xí)門(mén)檻低,只需比較低的開(kāi)發(fā)成本,就可以讓每個(gè)運(yùn)維人員都按照各個(gè)系統(tǒng)不同的特點(diǎn)進(jìn)行開(kāi)發(fā),開(kāi)發(fā)周期短,滿(mǎn)足各種個(gè)性化需求;與目前最為流行的機(jī)器學(xué)習(xí)功能融合,從大量的數(shù)據(jù)中發(fā)現(xiàn)規(guī)律,對(duì)于不符合規(guī)律的現(xiàn)象進(jìn)行提示,從而實(shí)現(xiàn)提前預(yù)警,一定程度上避免被動(dòng)處理問(wèn)題;實(shí)時(shí)總結(jié)及發(fā)現(xiàn)海量數(shù)據(jù)處理中的內(nèi)在規(guī)律,也可以為技術(shù)管理部門(mén)作出正確的決策提供依據(jù)。
參考文獻(xiàn)
[1]饒深琳.ELK Stack權(quán)威指南[M].機(jī)械工業(yè)出版社,2015.
[2]詹玉林.民生銀行:我們的ELK日志分析平臺(tái),2017.