淺談 Apache APISIX 的可觀測性

可觀測性是從系統外部去觀察系統內部程序的的運行時狀態和資源使用情況。衡量可觀測性的主要手段包括:Metrics、Logging 和 Tracing,下圖是 Metrics、Logging 和 Tracing 之間的關係。

舉個例子,Tracing 和 Logging 重合的部分代表的是 Tracing 在 request 級別產生的日誌,並通過 Tracing ID 將 Tracing 和 Logging 關聯起來。對這份日誌進行一定的聚合運算之後,能夠得到一些 Metrics。Tracing 自身也會產生一些 Metrics,例如調用量之間的關係。

Apache APISIX 的可觀測性能力


Apache APISIX 擁有完善的可觀測性能力:支持 Tracing 和 Metrics、擁有豐富的 Logging 插件生態、支持查詢節點狀態。

Tracing

Apache APISIX 支持多種 Tracing 插件,包括:Zipkin、OpenTracing 和 SkyWalking。需要注意是:Tracing 插件默認處於關閉狀態,使用前需要手動開啓 Tracing 插件;Tracing 插件需要與路由或全局規則綁定,如果沒有采樣率的要求,建議與全局規則綁定,這樣可以避免遺漏。

Metrics

在 Apache APISIX 中, Metrics 的相關信息通過 Prometheus Exporter 上報,兼容 Prometheus 的數據格式。在 Apache APISIX 中使用 Prometheus Plugin 有兩件事情需要注意。

第一,請儘量提高路由、服務和上游這三者名稱的可讀性。

Prometheus Plugin 中有一個名爲 prefer_name的參數,將這個參數的值設置爲true時,即:prefer_name: true,如果路由、服務和上游這三者的名稱可讀性比較強,這會帶來一些好處:後續通過 Grafana 監控大屏展示參數的時候,不僅能夠清楚地展示出所有的數據,還能夠清晰地知曉這些數據的來源。如果prefer_name參數的值爲false,則只會展示資源的 ID 作爲數據來源,例如 路由 ID、上游 ID,進而造成監控大屏的可讀性較低的問題。

第二,Prometheus Plugin 必須與路由或者全局規則綁定,然後纔可以查看到指定資源的 Metrics。

完成上述設置以後,Metrics 的數據會存儲在 Prometheus 裏面。由於 Prometheus 的存儲性能很好,但展示性能欠佳,所以我們需要藉助 Grafana Dashboard 展示數據。我們可以看到 Nginx 實例的 Metrics、網絡帶寬的 Metrics、路由和上游的 Metrics 等,詳情如下圖所示:

Logging

Apache APISIX 支持多種日誌插件,可以與其他外部的平臺直接分享日誌數據。Error Log 插件支持 HTTP 與 TCP 協議,並且兼容 SkyWalking 的日誌格式。也可以通過 FluentBit 等日誌收集組件,將日誌同步到日誌平臺進行處理。

Access Log 插件目前還不支持在日誌格式裏面進行嵌套。因爲 Access Log 插件是路由級別的,所以需要跟路由進行綁定,纔可以收集到路由的訪問日誌。但是日誌的格式是全局的,而全局只能有一份日誌格式。

支持查詢節點狀態

Apache APISIX 的支持查詢節點狀態,啓用之後,可以通過 /apisix/status收集到節點的信息,包括節點數、等待鏈接數、處理連接數等。

美中不足

上文講到,Apache APISIX 的可觀測性能力非常完善,能夠收集 Metrics、Logging 和 Tracing 等信息。雖然藉助 Apache APISIX 的內置插件配合 Grafana Dashboard,能夠解決監控數據收集和指標可視化問題,但是各種數據分散在各個平臺。期望有一個可觀測性分析平臺能集成 Metrics、Logging、Tracing 信息,能夠將所有數據聯動起來。

使用 Apache SkyWalking 增強 Apache APISIX 的觀測能力


Apache SkyWalking 是一個針對分佈式系統的應用性能監控(APM)和可觀測性分析平臺。它提供了多維度應用性能分析手段,從分佈式拓撲圖到應用性能指標、Trace、日誌的關聯分析與告警。

一站式數據處理

Apache SkyWalking 支持對接 Metrics、Logging、Tracing 等多種監控數據,兼容 Prometheus 數據模型,還可以通過 Log Analysis Language 進行二次聚合,產生新的 Metrics。

更詳細的數據展示

Apache SkyWalking 的 Dashboard 分爲上下兩個區域。上部是功能選擇區域,下部是面板內容。Dashboard 提供全局、服務、示例、Endpoint 等多個實體維度的 Metrics 相關信息,支持以不同的視圖展示可觀測性。以全局視圖爲例,展示的 Metrics 包括:服務負載、慢服務數量、不健康的服務數量等,如下圖所示。

另外值得一說的是 SkyWalking Dashboard 的 Trace 視圖。SkyWalking 提供了 3 種展現形式:列表、樹狀圖和表格。Trace 視圖是分佈式追蹤的典型視圖,這些視圖允許用戶從不同角度查看追蹤數據,特別是 Span 間的耗時關係。

SkyWalking Dashboard 也支持拓撲圖。拓撲圖是根據探針上行數據分析出的整體拓撲結構。拓撲圖支持點擊展現和下鑽單個服務的性能統計、Tracing、告警,也可以點擊拓撲圖中的關係線,展示服務之間、服務示例間的性能 Metrics。

支持容器化部署

Kubernetes 是一個開源的雲原生容器化集羣管理平臺,目標是讓部署容器化的應用簡單且高效。Apache SkyWalking 後臺可以部署在 Kubernetes 之中,而且得益於 Kubernetes 的高效率管理,可以保證 UI 組件的高可用性。

如果在集羣上部署了 Apache APISIX,Apache SkyWalking 支持以 sidecar 或服務發現的形式部署 SkyWalking Satellite,監控集羣中的 Apache APISIX。

未來計劃


Apache APISIX 在未來仍會繼續加強可觀測性相關的功能支持,例如:

  1. 解決 SkyWalking Nginx-Lua 插件的 peer 缺失問題 

  2. 支持在日誌中打印 trace id 

  3. 接入訪問日誌 

  4. 支持網關元數據 

結語


本文介紹了 Apache APISIX 的可觀測性能力以及如何通過 Apache SkyWalking 提升 Apache APISIX 的可觀測性能力。未來兩個社區還會繼續深度合作,進一步增強 Apache APISIX 的可觀測性能力。希望大家能夠多多地參與到 Apache APISIX 和 Apache SkyWalking 項目中來。如果你對這兩個開源項目很感興趣,卻不熟悉代碼,寫文章、做視頻、對外分享、積極參與社區和郵件列表討論都是很不錯方式。

關於 Apache APISIX


Apache APISIX 是一個動態、實時、高性能的開源 API 網關,提供負載均衡、動態上游、灰度發佈、服務熔斷、身份認證、可觀測性等豐富的流量管理功能。Apache APISIX 可以幫忙企業快速、安全的處理 API 和微服務流量,包括網關、Kubernetes Ingress 和服務網格等。

Apache APISIX 落地用戶(僅部分)

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/WPdVov6DVzQW0o6oZpvzeA