后臺回復(fù)'書',獲取 來源:r6d.cn/mFJ6 1. 監(jiān)控、鏈路追蹤、日志對于一個(gè)系統(tǒng)來說,監(jiān)控、鏈路追蹤、日志的這三者需求都是必然存在的,而有的時(shí)候我們會搞不清楚這三者相互之間是什么關(guān)系。我之前在做系統(tǒng)設(shè)計(jì)的時(shí)候也考慮過,是不是有必要引入那么多組件,畢竟如果這三者完全分開每一個(gè)一項(xiàng)的話,就有三個(gè)組件了(事實(shí)上就是:Prometheus+Grafana、Jaeger、ELK)。 因此想做個(gè)筆記嘗試舉例來梳理下。 外部鏈接:
2. 監(jiān)控Monitoring(監(jiān)控)舉例來說就是: 特點(diǎn)是:
這也是Prometheus的架構(gòu)做得非常簡單的原因,Monitoring的需求并沒有包含非常高的并發(fā)量和通訊量。反過來說:高并發(fā)、大數(shù)據(jù)量的需求并不適用于Monitoring這個(gè)點(diǎn)。 3. 鏈路追蹤Tracing(鏈路追蹤)舉例來說就是: 特點(diǎn)是:
因?yàn)門racing是針對某一個(gè)事件(一般來說就是一個(gè)API),而這個(gè)API可能會和很多組件進(jìn)行溝通,后續(xù)的所有的組件溝通無論是內(nèi)部還是外部的IO,都算作這個(gè)API調(diào)用的Tracing的一部分。可以想見在一個(gè)業(yè)務(wù)繁忙的系統(tǒng)中,API調(diào)用的數(shù)量已經(jīng)是天文數(shù)字,而其衍生出來的Tracing記錄更是不得了的量。其特點(diǎn)就是高頻、巨量,一個(gè)API會衍生出大量的子調(diào)用。 也因此適合用來做Monitoring的系統(tǒng)就不一定適合做Tracing了,用Prometheus這樣的系統(tǒng)來做Tracing肯定完蛋(Prometheus只有拉模式,全部都是HTTP請求,高并發(fā)直接掛掉)。一般來說Tracing系統(tǒng)都會在本地磁盤IO上做日志(最高效、也是最低的Cost),然后再通過本地Agent慢慢把文本日志數(shù)據(jù)發(fā)送到聚合服務(wù)器上,甚至可能在聚合服務(wù)器和本地的Agent之間還需要做消息隊(duì)列,讓聚合服務(wù)器慢慢消化巨量的消息。 Tracing在現(xiàn)在的業(yè)界是有標(biāo)準(zhǔn)的: 4. 日志Logging(日志)舉例來說就是: 從本質(zhì)上來說,Monitoring和Tracing都是Logging,Logging是這三者中覆蓋面最大的超集,而前兩者則是其一部分的子集。Logging最麻煩的是,開發(fā)者也不會完全知道最后記錄進(jìn)入到日志系統(tǒng)里的一共會有哪些東西,只有在使用(檢索)的時(shí)候才可能需要匯總查詢總量中的一部分。 要在一般的Loggin系統(tǒng)中進(jìn)行Monitoring也是可以的,直接把聚合進(jìn)來的日志數(shù)據(jù)提取出來,定期形成數(shù)據(jù)報(bào)告,就是監(jiān)控了。Tracing也是一樣,只要聚合進(jìn)了Logging系統(tǒng),有了原始數(shù)據(jù),后面要做都是可以做的。因此Logging系統(tǒng)最為通用,其特點(diǎn)和Tracing基本一致,也是需要處理高頻并發(fā)和巨大的數(shù)據(jù)量。 5. 總結(jié)這樣一看就很清楚了,每個(gè)組件都有其存在的必要性:
|
|