可觀測(cè)性一詞誕生于幾十年前的控制理論乱陡。近年來(lái)捣炬,隨著企業(yè)以微服務(wù)熊昌、?服務(wù)器和容器技術(shù)的形式迅速采?了AWS、阿里云等云原?基礎(chǔ)設(shè)施服務(wù)湿酸。在這些分布式系統(tǒng)中追蹤事件的起源需要在云上婿屹、本地或兩者上運(yùn)?的數(shù)千個(gè)進(jìn)程。傳統(tǒng)的監(jiān)控技術(shù)和?具就很難跟蹤這些分布式架構(gòu)中的許多通信路徑和相互依賴關(guān)系推溃。更別提排查問(wèn)題并定位根本原因了昂利。
監(jiān)控技術(shù)和工具革新迫在眉睫。
而可觀測(cè)性一詞近兩年火起來(lái)的導(dǎo)火索是 CNCF 在云原生定義中提到 Observerbility铁坎,并聲稱這是云原生時(shí)代的必備能力蜂奸。
于是從生產(chǎn)所需到概念發(fā)聲,加之包括谷歌在內(nèi)的眾多大廠一擁而上厢呵,“可觀測(cè)性”正式出道窝撵。
可觀測(cè)性的定義
Observability是來(lái)自控制論的一個(gè)概念:
In control theory, observability is a measure for how well internal states of a system can be inferred by knowledge of its external outputs. The observability and controllability of a system are mathematical duals. The concept ofobservability was introduced by American-Hungarian scientist Rudolf E. Kalmanfor linear dynamic systems.
官方話語(yǔ),感興趣的讀者可以自行翻譯襟铭。
用相對(duì)嚴(yán)謹(jǐn)?shù)脑拋?lái)說(shuō)碌奉,可觀測(cè)性指的是一種能力--是通過(guò)檢查其輸出來(lái)衡量系統(tǒng)內(nèi)部狀態(tài)的能?。這些輸出體現(xiàn)內(nèi)部系統(tǒng)狀態(tài)的能力越強(qiáng)寒砖,可觀測(cè)性也就越好赐劣。
簡(jiǎn)單來(lái)看,如果僅使?來(lái)?輸出的信息(即傳感器數(shù)據(jù))可以估計(jì)當(dāng)前狀態(tài)哩都,則系統(tǒng)被認(rèn)為是“可觀測(cè)的”魁兼。
可觀測(cè)性的價(jià)值
谷歌給出可觀測(cè)性的核心價(jià)值很簡(jiǎn)單:快速排障(troubleshooting)。
這個(gè)世界上沒(méi)有不存在 Bug 的系統(tǒng)漠嵌,而隨著系統(tǒng)越來(lái)越精細(xì)咐汞,越來(lái)越復(fù)雜,越來(lái)越動(dòng)態(tài)儒鹿,越來(lái)越龐大化撕,潛藏的問(wèn)題和風(fēng)險(xiǎn)也就越來(lái)越多。
因此约炎,任何一個(gè)軟件的成功植阴,不僅僅要依靠軟件架構(gòu)的合理設(shè)計(jì)蟹瘾,軟件開(kāi)發(fā)的代碼質(zhì)量,更要依靠軟件系統(tǒng)的運(yùn)行維護(hù)掠手。而運(yùn)行維護(hù)的基礎(chǔ)憾朴,就是可觀測(cè)性。
從銀行的交易系統(tǒng)喷鸽,互聯(lián)網(wǎng)公司的業(yè)務(wù)平臺(tái)众雷,到運(yùn)營(yíng)商的云化核心網(wǎng)等運(yùn)行在云上的各類軟件系統(tǒng),每時(shí)每刻都處在一定的風(fēng)險(xiǎn)之中魁衙。而保證這些系統(tǒng)能夠風(fēng)險(xiǎn)可控报腔,穩(wěn)定運(yùn)行,需要做的就是提前發(fā)現(xiàn)異常剖淀,快速定位根本原因,迅速排除或者規(guī)避故障纤房。
因此纵隔,在 CNCF 對(duì)于云原生的定義中,已經(jīng)明確將可觀測(cè)性列為一項(xiàng)必備要素炮姨。
可觀測(cè)性的三大支柱
業(yè)界對(duì)可觀測(cè)性的共識(shí)捌刮,基于可觀測(cè)性的三大支柱“metrics、logs舒岸、traces”绅作。
1、logs(日志)
?志是在特定時(shí)間發(fā)?的事件的?本記錄蛾派,包括說(shuō)明事件發(fā)?時(shí)間的時(shí)間戳和提供上下?的有效負(fù)載俄认。?志有三種格式:純?本、結(jié)構(gòu)化和?進(jìn)制洪乍。純?本是最常?的眯杏,但結(jié)構(gòu)化?志?包括額外的數(shù)據(jù)和元數(shù)據(jù)并且更容易查詢?正變得越來(lái)越流?。當(dāng)系統(tǒng)出現(xiàn)問(wèn)題時(shí)壳澳,?志通常也是您?先查看的地?岂贩。
2、metrics(指標(biāo))
指標(biāo)是在?段時(shí)間內(nèi)測(cè)量的數(shù)值巷波,包括特定屬性萎津,例如時(shí)間戳、名稱抹镊、KPI 和值锉屈。與?志不同,指標(biāo)在默認(rèn)情況下是結(jié)構(gòu)化的髓考,這使得查詢和優(yōu)化存儲(chǔ)變得更加容易部念,讓您能夠?qū)⑺鼈儽A舾?時(shí)間。
3、traces(跟蹤)
跟蹤表示請(qǐng)求通過(guò)分布式系統(tǒng)的端到端旅程儡炼。當(dāng)請(qǐng)求通過(guò)主機(jī)系統(tǒng)時(shí)妓湘, 對(duì)其執(zhí)?的每個(gè)操作(稱為“跨度”)都使?與執(zhí)?該操作的微服務(wù)相關(guān)的重要數(shù)據(jù)進(jìn)?編碼。通過(guò)查看跟蹤乌询,每個(gè)跟蹤都包含?個(gè)或多個(gè)跨度榜贴,您可以通過(guò)分布式系統(tǒng)跟蹤其進(jìn)程并確定瓶頸或故障的原因。
從一個(gè)簡(jiǎn)單的“系統(tǒng)探查--日志搜集--日志統(tǒng)計(jì)”流程來(lái)看:三者之間的關(guān)系從 traces 開(kāi)始妹田,通過(guò)探查等手段采集眾多信息唬党,形成logs,logs詳細(xì)記錄了各種邊界行為(如登陸鬼佣,開(kāi)啟服務(wù)驶拱,關(guān)閉服務(wù),退出系統(tǒng)晶衷,修改數(shù)據(jù))蓝纲,而對(duì)于系統(tǒng)運(yùn)行來(lái)說(shuō),更重要的是 特定事件發(fā)生的次數(shù)晌纫。這些信息可以從日志中提取税迷,但是有一種更有效的方法:metrics。
至此锹漱,如果你的 metrics 與告警相關(guān)聯(lián)箭养,則可在系統(tǒng)關(guān)鍵節(jié)點(diǎn)設(shè)置閾值。如果指標(biāo)超過(guò)了閾值哥牍,隨叫隨到的人員就會(huì)收到Slack或微軟團(tuán)隊(duì)中的電子郵件毕泌、短信或消息∩靶模快速響應(yīng)排出故障懈词。
總結(jié)
可觀測(cè)性簡(jiǎn)單來(lái)說(shuō)就是通過(guò)檢查其輸出來(lái)衡量系統(tǒng)內(nèi)部狀態(tài)的能?。這些輸出體現(xiàn)內(nèi)部系統(tǒng)狀態(tài)的能力越強(qiáng)辩诞,可觀測(cè)性也就越好坎弯。
其價(jià)值在于快速排障(troubleshooting)。
當(dāng)下译暂,業(yè)界對(duì)可觀測(cè)性的共識(shí)抠忘,基于三大支柱“metrics、logs外永、traces”崎脉。
那么,要構(gòu)建一個(gè)優(yōu)秀的可觀測(cè)系統(tǒng)伯顶,僅有 metrics囚灼、logs骆膝、traces 是不是就夠用了呢?我們下期再接著聊灶体。