張鵬

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