- 深入理解Istio:云原生服務網格進階實戰(zhàn)
- 云原生社區(qū)
- 1841字
- 2022-08-16 14:38:21
2.3 可觀察性
面對復雜的應用環(huán)境和不斷擴展的業(yè)務需求,即使再完備的測試也難以覆蓋所有場景,無法保證服務不會出現(xiàn)故障。因此,系統(tǒng)才需要“可觀察性”,對服務的運行時狀態(tài)進行監(jiān)控、上報、分析,以提高服務可靠性。具有可觀察性的系統(tǒng),可以在服務出現(xiàn)故障時大大降低問題定位的難度,甚至可以在出現(xiàn)問題之前及時發(fā)現(xiàn)問題以降低風險。具體來說,可觀察性可以做到以下3點。
?及時反饋異常或風險,使得開發(fā)人員可以及時關注、修復和解決問題(告警)。
?在出現(xiàn)問題時,能夠快速定位問題根源并解決問題,以減少服務損失(減損)。
?收集并分析數據,以幫助開發(fā)人員不斷調整和改善服務(持續(xù)優(yōu)化)。
在微服務治理中,隨著服務數量大大增加,服務拓撲日益復雜,可觀察性也越來越重要。Istio自然也不可能缺少對可觀察性的支持。它會為所有的服務間通信生成詳細的遙測數據,使得網格中每個服務請求都可以被觀察和跟蹤。開發(fā)人員可以憑此定位故障,維護和優(yōu)化相關服務。而且,這一特性的引入無須侵入被觀察的服務。
Istio一共提供了3種不同類型的數據,從不同的角度支持可觀察性。
?指標(Metrics):指標本質上是時間序列上的一系列具有特定名稱的計數器的組合。不同計數器用于表征系統(tǒng)中的不同狀態(tài)并將之數值化。完成數據聚合之后,指標可以用于查看一段時間內系統(tǒng)狀態(tài)的變化情況,甚至預測未來一段時間內系統(tǒng)的行為。例如,系統(tǒng)可以使用一個計數器對所有請求進行計數,并且周期性(周期越短,實時性越好,開銷越大)地將該數值輸出到時間序列數據庫(如Prometheus)中。由此得到的一組數值,經過數據處理,可以直觀地展示系統(tǒng)中單位時間內的請求數及其變化趨勢,也可以用于實時監(jiān)控系統(tǒng)中的流量大小并預測未來的流量趨勢。而具體到Istio中,指標基于4類不同的監(jiān)控標識(響應延遲、流量大小、錯誤數量和飽和度)生成了一系列觀測不同服務的監(jiān)控指標,用于記錄和展示網格中的服務狀態(tài)。除此之外,它還提供了一組默認的基于上述指標的網格監(jiān)控儀表板,對指標數據進行聚合和可視化。借助指標,開發(fā)人員可以快速了解當前網格中流量大小、是否頻繁地出現(xiàn)異常響應、性能是否符合預期等關鍵狀態(tài)。但是,如前所述,指標本質上是計數器的組合和系統(tǒng)狀態(tài)的數值化表示,所以往往缺失細節(jié)內容,是從一個相對宏觀的角度來展現(xiàn)整個網格或系統(tǒng)狀態(tài)隨時間發(fā)生的變化及趨勢的。在一些情況下,指標也可以輔助定位問題。
?日志(Access Logs):日志是軟件系統(tǒng)中記錄軟件執(zhí)行狀態(tài)及內部事件最常用、有效的工具。在可觀測性的語境之下,日志是具有相對固定結構的一段文本或二進制數據(區(qū)別于運行時日志),并且和系統(tǒng)中需要關注的事件一一對應。當系統(tǒng)中發(fā)生一個新的事件時,指標只會進行幾個相關的計數器自增,而日志則會記錄該事件具體的上下文。因此,日志包含了系統(tǒng)狀態(tài)更多的細節(jié)部分。在分布式系統(tǒng)中,日志是定位復雜問題的關鍵手段。同時,由于每個事件都會產生一條對應的日志,因此日志往往作為數據源被用于計費系統(tǒng)。其相對固定的結構,為開發(fā)人員提供了日志解析和快速搜索的可能,開發(fā)人員在對接ELK等日志分析系統(tǒng)后,可以快速地篩選出具有特定特征的日志,以分析系統(tǒng)中某些特定的或需要關注的事件。在Istio 網格中,當請求流入網格的任何一個服務中時,Istio都會生成該請求的完整記錄,包括請求源、請求目標,以及請求本身的元數據等。日志使網格開發(fā)人員可以在單個服務實例級別中觀察和審計流經該實例的所有流量。
?分布式追蹤(Distributed Traces):盡管日志記錄了各個事件的細節(jié),但是在分布式系統(tǒng)中,日志仍然存在不足之處。雖然日志記錄的事件是孤立的,但是在實際的分布式系統(tǒng)中,不同組件中發(fā)生的事件往往存在因果關系。例如,組件A接收外部請求之后,會調用組件B,而組件B會繼續(xù)調用組件C。在組件A、B、C中,分別有一個事件發(fā)生,還各自產生了一條日志,但是3條日志并沒有將3個事件的因果關系記錄下來。分布式追蹤正是為了解決該問題而存在的。分布式追蹤通過額外數據(Span ID等特殊標記)記錄不同組件中事件之間的關聯(lián),并由外部數據分析系統(tǒng)重新構造出事件的完整事件鏈路及因果關系。在服務網格的一次請求中,Istio會為途徑的所有服務生成分布式追蹤數據并上報。通過Zipkin等追蹤系統(tǒng)重構服務調用鏈,開發(fā)人員可以借此了解網格內服務的依賴關系和調用流程,構建整個網格的服務拓撲。在未發(fā)生故障時,可以借此分析網格性能瓶頸或熱點服務;而在發(fā)生故障時,則可以通過分布式追蹤快速定位故障點。
本節(jié)只簡單介紹了Istio中可觀察性的相關概念,而未深入講解具體的細節(jié),希望讀者能夠基于這些建立起對可觀察性的初步印象。