線(xiàn)上質(zhì)量監(jiān)控:日志分析ELK

ELK 架構(gòu)

在互聯(lián)網(wǎng)項(xiàng)目中,良好的日志監(jiān)控和分析能保障業(yè)務(wù)穩(wěn)定運(yùn)行,不過(guò)一般情況下日志都分散在各個(gè)生產(chǎn)服務(wù)器,且開(kāi)發(fā)和測(cè)試人員無(wú)法登陸生產(chǎn)服務(wù)器,一般來(lái)說(shuō)只能是運(yùn)維去取這些日志的數(shù)據(jù),當(dāng)然要是在C/S架構(gòu)或者有物理實(shí)物的,我們也可以通過(guò)它本身的日志來(lái)查看的,但是針對(duì)B/S架構(gòu),純粹的頁(yè)面的話(huà),僅僅靠F12的話(huà),怕是很難解決問(wèn)題的,這個(gè)時(shí)候我們就需要分析后臺(tái)的服務(wù)器日志,看看當(dāng)時(shí)到底做了什么操作,產(chǎn)生了什么請(qǐng)求。甚至這時(shí)候就需要一個(gè)集中式的日志收集裝置,對(duì)日志中的關(guān)鍵字進(jìn)行監(jiān)控,觸發(fā)異常時(shí)進(jìn)行報(bào)警,協(xié)助開(kāi)發(fā)人員查看相關(guān)日志。

現(xiàn)在也流行使用ELK來(lái)實(shí)現(xiàn)這種功能,它是elasticsearch,logstash以及kibana的簡(jiǎn)稱(chēng)。

日志系統(tǒng)基于elastic stack

ELK 要求本地環(huán)境中安裝了 JDK 。如果不確定是否已安裝,使用的 ELK 是 6.0.0,要求 jdk 版本不低于 JDK8

友情提示:安裝 ELK 時(shí),三個(gè)應(yīng)用請(qǐng)選擇統(tǒng)一的版本,避免出現(xiàn)一些莫名其妙的問(wèn)題。
例如:由于版本不統(tǒng)一,導(dǎo)致三個(gè)應(yīng)用間的通訊異常。

建議采用docker進(jìn)行部署

ELK實(shí)戰(zhàn)舉例

ELK實(shí)戰(zhàn)舉例一,通過(guò)ELK組件對(duì)Spark作業(yè)運(yùn)行狀態(tài)監(jiān)控,搜集Spark環(huán)境下運(yùn)行的日志。經(jīng)過(guò)篩選、過(guò)濾并存儲(chǔ)可用信息,從而完成對(duì)Spark作業(yè)運(yùn)行和完成狀態(tài)進(jìn)行監(jiān)控,實(shí)時(shí)掌握集群狀態(tài),了解作業(yè)完成情況,并生成報(bào)表,方便運(yùn)維人員監(jiān)控和查看。

數(shù)據(jù)來(lái)源可以是各式各樣的日志,Logstash配置文件有三個(gè)主要模塊:input()輸入或者說(shuō)收集數(shù)據(jù),定義數(shù)據(jù)來(lái)源;filter()對(duì)數(shù)據(jù)進(jìn)行過(guò)濾,分析等操作;output()輸出。input plugin目前支持將近50種,如下表所示:

Beats couchdb_changes Xmpp eventlog exec s3 file ganglia gelf
Github Heartbeat Heroku http Sqs Irc imap jdbc JMX
lumberjack varnishlog Pipe snmptrap generator Rss rackspace RabbitMQ Redis
Sqlite Elasticsearch http_poller Stomp syslog TCP Twitter unix UDP
websocket drupal_dblog Zenoss ZeroMQ Graphite Log4j stdin wmi relp
Kafka puppet_facter Meetup

數(shù)據(jù)源搜集到后,然后通過(guò)filter過(guò)濾形成固定的數(shù)據(jù)格式。目前支持過(guò)濾的類(lèi)JSON、grep、grok、geoip等,最后output到數(shù)據(jù)庫(kù),比如Redis、Kafka或者直接傳送給Elasticsearch。

當(dāng)數(shù)據(jù)被存儲(chǔ)于Elasticsearch之后,用戶(hù)可以使用Elasticsearch所提供API來(lái)檢索信息數(shù)據(jù)了,如通過(guò)REST API執(zhí)行CURL GET請(qǐng)求搜索指定數(shù)據(jù)可以使用Kibana進(jìn)行可視化的數(shù)據(jù)瀏覽。另外Kibana有時(shí)間過(guò)濾功能,運(yùn)維人員可對(duì)某一時(shí)間段內(nèi)數(shù)據(jù)查詢(xún)并查看報(bào)表,方便快捷。

image.png

ELK對(duì)Spark Task 監(jiān)控

ELK實(shí)戰(zhàn)舉例二,通過(guò)ELK組件對(duì)系統(tǒng)資源狀態(tài)監(jiān)控,使用ELK組件為集群提供日志查詢(xún)和系統(tǒng)資源監(jiān)控的例子。
通過(guò)各類(lèi)日志搜集,分析,過(guò)濾,存儲(chǔ)并通過(guò)Kibana展現(xiàn)給用戶(hù),供用戶(hù)實(shí)時(shí)監(jiān)控系統(tǒng)資源、節(jié)點(diǎn)狀態(tài)、磁盤(pán)、CPU、MEM,以及錯(cuò)誤、警告信息等。
(監(jiān)控機(jī)器資源的產(chǎn)生儀表還是建議采用Grafana)

image.png

ELK實(shí)戰(zhàn)舉例三,通過(guò)ELK組件對(duì)系統(tǒng)負(fù)載狀態(tài)監(jiān)控

image.png

ELK實(shí)戰(zhàn)舉例四,通過(guò)ELK組件對(duì)系統(tǒng)日志管理和故障排查。
用戶(hù)可根據(jù)故障發(fā)生時(shí)間段集中查詢(xún)相關(guān)日志,可通過(guò)搜索、篩選、過(guò)濾等功能,快速定位問(wèn)題,從而排查故障。另外,通過(guò)對(duì)各個(gè)應(yīng)用組件的日志過(guò)濾,可快速列舉出各個(gè)應(yīng)用對(duì)應(yīng)節(jié)點(diǎn)上的Error或Warning日志,從而對(duì)故障排查或者對(duì)發(fā)現(xiàn)產(chǎn)品bug提供快捷途徑。

image.png

ELK常見(jiàn)部署架構(gòu)

2.1 Logstash作為日志收集器

這種架構(gòu)是比較原始的部署架構(gòu),在各應(yīng)用服務(wù)器端分別部署一個(gè)Logstash組件,作為日志收集器,然后將Logstash收集到的數(shù)據(jù)過(guò)濾、分析、格式化處理后發(fā)送至Elasticsearch存儲(chǔ),最后使用Kibana進(jìn)行可視化展示,這種架構(gòu)不足的是:

Logstash比較耗服務(wù)器資源,所以會(huì)增加應(yīng)用服務(wù)器端的負(fù)載壓力。

image

2.2 Filebeat作為日志收集器

該架構(gòu)與第一種架構(gòu)唯一不同的是:應(yīng)用端日志收集器換成了Filebeat,F(xiàn)ilebeat輕量,占用服務(wù)器資源少,所以使用Filebeat作為應(yīng)用服務(wù)器端的日志收集器,一般Filebeat會(huì)配合Logstash一起使用,這種部署方式也是目前最常用的架構(gòu)。

image

2.3 引入緩存隊(duì)列的部署架構(gòu)

該架構(gòu)在第二種架構(gòu)的基礎(chǔ)上引入了Redis緩存隊(duì)列(還可以是其他消息隊(duì)列例如Kafka),將Filebeat收集到的數(shù)據(jù)發(fā)送至Redis,然后在通過(guò)Logstasth讀取Redis中的數(shù)據(jù),這種架構(gòu)主要是解決大數(shù)據(jù)量下的日志收集方案,使用緩存隊(duì)列主要是解決數(shù)據(jù)安全與均衡Logstash與Elasticsearch負(fù)載壓力。

image

2.4 以上三種架構(gòu)的總結(jié)

第一種部署架構(gòu)由于資源占用問(wèn)題,現(xiàn)已很少使用,目前使用最多的是第二種部署架構(gòu),至于第三種部署架構(gòu)個(gè)人覺(jué)得沒(méi)有必要引入消息隊(duì)列,除非有其他需求,因?yàn)樵跀?shù)據(jù)量較大的情況下,F(xiàn)ilebeat 使用壓力敏感協(xié)議向 Logstash 或 Elasticsearch 發(fā)送數(shù)據(jù)。如果 Logstash 正在繁忙地處理數(shù)據(jù),它會(huì)告知 Filebeat 減慢讀取速度。擁塞解決后,F(xiàn)ilebeat 將恢復(fù)初始速度并繼續(xù)發(fā)送數(shù)據(jù)。

image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容