方案1:基于skywalking的鏈路追蹤與日志收集方案
概述
SkyWalking: 一個開源的可觀測平臺, 用于從服務(wù)和云原生基礎(chǔ)設(shè)施收集, 分析, 聚合及可視化數(shù)據(jù)。SkyWalking 提供了一種簡便的方式來清晰地觀測分布式系統(tǒng), 甚至橫跨多個云平臺乏屯。SkyWalking 更是一個現(xiàn)代化的應(yīng)用程序性能監(jiān)控(Application Performance Monitoring)系統(tǒng), 尤其專為云原生坡倔、基于容器的分布式系統(tǒng)設(shè)計(jì)儿惫。
SkyWalking 邏輯上分為四部分: 探針, 平臺后端, 存儲和用戶界面午磁。
skywalking能為我們做什么
- 鏈路追蹤: skywalking的核心功能是鏈路追蹤砚著,使用java-agent探針采集數(shù)據(jù)蛀蜜,通過grpc協(xié)議傳輸數(shù)據(jù)到平臺后端(OAP)特碳,存儲數(shù)據(jù)到h2或elasticSearch诚亚,最后在skywalking-ui界面查看與分析;
- 日志收集: skywalking能夠?qū)崿F(xiàn)簡單的日志收集午乓。通過logback grpc appender將日志發(fā)送到平臺后端(OAP)站宗,存儲到elasticSearch。通過skywalking-ui查看鏈路時可以查看對應(yīng)鏈路的日志益愈,也可以通過kibana直接檢索日志索引梢灭;
- 其他指標(biāo)收集: jvm指標(biāo)收集等額外功能;
- 告警: 支持配置告警指標(biāo)蒸其。
整體架構(gòu)
方案優(yōu)缺點(diǎn)
優(yōu)點(diǎn)
- 使用skywalking實(shí)現(xiàn)了鏈路追蹤敏释;
- 日志收集過程無需引入ELK中的filebeat、logstash等組件摸袁,在鏈路追蹤過程中順帶實(shí)現(xiàn)了日志收集钥顽;
- 鏈路數(shù)據(jù)與日志數(shù)據(jù)均使用skywalking的grpc輕量級rpc協(xié)議實(shí)現(xiàn)。
缺點(diǎn)
- 關(guān)于skywalking
- 雖然skywalking號稱對代碼零侵入靠汁,但這只是針對其java agent蜂大。要實(shí)現(xiàn) 日志寫入traceId、日志上報(bào)蝶怔、鏈路數(shù)據(jù)子線程傳遞 等功能奶浦,仍需要在程序中添加配置或代碼;
- skywalking使用grpc實(shí)時上報(bào)數(shù)據(jù)踢星,沒有消息隊(duì)列緩沖澳叉。官方解釋這不是缺點(diǎn),是設(shè)計(jì): 鏈路數(shù)據(jù)可以容忍丟失沐悦,可以通過降低采樣率解決數(shù)據(jù)堆積問題成洗;
- 對比廣泛使用的springcloud sleuth + zipkin方案,skywalking的確功能更豐富藏否,至少UI上已經(jīng)豐富多了泌枪,支持直接查看鏈路日志,還有一些告警秕岛、jvm指標(biāo)收集等額外功能。但springcloud支持消息隊(duì)列緩沖。
- 日志收集
- skywalking主要為鏈路追蹤服務(wù)继薛,所以修壕,鏈路以外的日志不會上報(bào): 如程序啟動日志、沒有特殊處理的子線程日志等;
- skywalking的日志上報(bào)模塊較為簡單遏考,所有日志均收集到一個按日期滾動的索引慈鸠,沒有辦法(我沒找到)實(shí)現(xiàn)根據(jù)不同應(yīng)用區(qū)分索引的需求;
- 關(guān)于日志歸檔: logstash包含以elasticsearch輸入灌具、s3輸出的插件青团。但引入了logstash,為啥不直接用ELK呢咖楣?
方案2:基于ELK的日志收集與skywalking的鏈路追蹤方案
概述
ELK: ElasticStack提供的一套被廣泛使用的日志收集與分析套件督笆。是三個開源項(xiàng)目的首字母縮寫,這三個項(xiàng)目分別是:Elasticsearch诱贿、Logstash 和 Kibana娃肿。Elasticsearch 是一個搜索和分析引擎。Logstash 是服務(wù)器端數(shù)據(jù)處理管道珠十,能夠同時從多個來源采集數(shù)據(jù)料扰,轉(zhuǎn)換數(shù)據(jù),然后將數(shù)據(jù)發(fā)送到諸如 Elasticsearch 等“存儲庫”中焙蹭。Kibana 則可以讓用戶在 Elasticsearch 中使用圖形和圖表對數(shù)據(jù)進(jìn)行可視化晒杈。
skywalking: 介紹見前文。
整體架構(gòu)
方案優(yōu)缺點(diǎn)
優(yōu)點(diǎn)
- 使用filebeat采集本地日志孔厉,日志采集過程程序無感知拯钻,并且能采集到所有日志;
- 使用logstash做為中轉(zhuǎn)環(huán)節(jié)烟馅,可以通過gork腳本等方式说庭,對日志做精細(xì)控制: 例如不同應(yīng)用收集到不同索引、info與error日志收集到不同索引等郑趁;
- logstash可以配置多個output刊驴,同時輸出到elasticsearch與s3,實(shí)現(xiàn)日志查詢與歸檔需求寡润;
- 鏈路追蹤仍使用skywalking實(shí)現(xiàn)捆憎。
缺點(diǎn)
- 方案較復(fù)雜,引入組件較多梭纹;
- 如果想在skywalking-ui直接查看鏈路日志躲惰,elasticsearch上將會存在兩份日志: logstash和skywalking-agent分別上報(bào)了一份,這樣會造成存儲資源的浪費(fèi)变抽。當(dāng)然础拨,可以通過犧牲一定的便利性氮块,節(jié)省存儲資源: 關(guān)閉skywalking的日志上報(bào),鏈路日志通過traceId到kibana上查找诡宗。