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