Kubernetes Ingress 日誌分析與監控的最佳實踐
Ingress 主要提供 HTTP 層(7 層)路由功能,是目前 K8s 中 HTTP/HTTPS 服務的主流暴露方式。為簡化廣大使用者對於 Ingress 日誌分析與監控的門檻,阿里雲容器服務和日誌服務將 Ingress 日誌打通,只需要應用一個 yaml 資源即可完成日誌採集、分析、視覺化等一整套 Ingress 日誌方案的部署。
前言
目前 Kubernetes(K8s)已經真正地佔領了容器編排市場,是預設的雲無關計算抽象,越來越多的企業開始將服務構建在K8s叢集上。在 K8s 中,元件通過 Service 對外暴露服務,常見的包括 NodePort、LoadBalancer、Ingress 等。其中 Ingress 主要提供 HTTP 層(7 層)路由功能,相比 TCP(4 層)的負載均衡具備非常多的優勢(路由規則更加靈活、支援金絲雀、藍綠、A/B Test 釋出模式、SSL 支援、日誌、監控、支援自定義擴充套件等),是目前 K8s 中 HTTP/HTTPS 服務的主流暴露方式。
Ingress 簡介
K8s 中 Ingress 只是一種 API 資源的宣告,具體的實現需要安裝對應的 Ingress Controller,由 Ingress Controller 接管 Ingress 定義,將流量轉發到對應的 Service。目前 Ingress Controller 的實現有非常多種(具體可以參考
日誌與監控
日誌和監控是所有 Ingress Controller 都會提供的基礎功能,日誌一般包括訪問日誌(Access Log)、控制日誌(Controller Log)和錯誤日誌(Error Log),監控主要從日誌以及 Controller 中提取部分 Metric 資訊。這些資料中訪問日誌的量級最大、資訊最多、價值也最高,一般7層的訪問日誌包括:URL、源 IP、UserAgent、狀態碼、入流量、出流量、響應時間等,對於 Ingress Controller 這種轉發型的日誌,還包括轉發的 Service 名、Service 響應時間等額外資訊。從這些資訊中,我們能夠分析出非常多的資訊,例如:
- 網站訪問的 PV、UV;
- 訪問的地域分佈、裝置端分佈;
- 網站訪問的錯誤比例;
- 後端服務的響應延遲;
- 不同 URL 訪問分佈。
我們的開發、運維、運營、安全等人員可以基於這些資訊完成各自的需求,例如:
- 新老版本釋出前後的資料指標對比;
- 網站質量監控、叢集狀態監控;
- 惡意攻擊檢測、反作弊;
- 網站訪問量統計、廣告轉化率統計。
然而手動搭建、運維一整套的 Ingress 日誌分析與監控系統非常複雜,系統所需要的模組有:
- 部署日誌採集 Agent 並配置採集、解析規則;
- 由於 K8s 叢集中,訪問量相對較大,因此需要搭建一個緩衝佇列,例如 Redis、Kafka 等;
- 部署實時資料分析引擎,例如 Elastic Search、clickhouse 等;
- 部署視覺化元件並搭建報表,例如 grafana、kibana 等;
- 部署告警模組並配置告警規則,例如 ElastAlert、alertmanager 等。
阿里雲日誌服務Ingress解決方案
為簡化廣大使用者對於 Ingress 日誌分析與監控的門檻,阿里雲容器服務和日誌服務將 Ingress 日誌打通(官方文件https://help.aliyun.com/document_detail/86532.html[](https://help.aliyun.com/document_detail/86532.html)),只需要應用一個 yaml 資源即可完成日誌採集、分析、視覺化等一整套 Ingress 日誌方案的部署。
Ingress 視覺化分析
日誌服務預設為 Ingress 建立 5 個報表,分別是:Ingress 概覽、Ingress 訪問中心、Ingress 監控中心、Ingress 藍綠髮布監控中心、Ingress 異常檢測中心。不同角色的人員可根據需求使用不同的報表,同時每個報表均提供篩選框用於篩選特定的 Service、URL、狀態碼等。所有的報表均基於日誌服務提供的基礎視覺化元件實現,可根據公司實際場景進行定製化調整。
Ingress 概覽
Ingress 概覽報表主要展示當前 Ingress 的整體狀態,主要包括以下幾類資訊:
- 整體架構狀態(1 天),包括:PV、UV、流量、響應延遲、移動端佔比、錯誤比例等;
- 網站實時狀態(1 分鐘),包括:PV、UV、成功率、5XX 比例、平均延遲、P95/P99 延遲等;
- 使用者請求類資訊(1 天),包括:1天/7天訪問PV對比、訪問地域分佈、TOP訪問省份/城市、移動端佔比、Android/IOS 佔比等;
- TOPURL 統計(1 小時),包括:訪問 TOP10、延遲 TOP10、5XX 錯誤 TOP10、404 錯誤 TOP10。
Ingress 訪問中心
Ingress 訪問中心主要側重於用於訪問請求相關的統計資訊,一般用於運營分析,包括:當日 UV/PV、UV/PV 分佈、UV/PV 趨勢、TOP 訪問省份/城市、TOP 訪問瀏覽器、TOP 訪問IP、移動端佔比、Android/IOS 佔比等。
Ingress 監控中心
Ingress 監控中心主要側重於網站實時監控資料,一般用於實時監控與告警,包括:請求成功率、錯誤比例、5XX 比例、請求未轉發比例、平均延遲、P95/P99/P9999 延遲、狀態碼分佈、Ingress 壓力分佈、Service 訪問 TOP10、Service 錯誤 TOP10、Service 延遲 TOP10、Service 流量 TOP10 等。
Ingress 藍綠髮布監控中心
Ingress 藍綠髮布監控中心主要用於版本釋出時的實時監控與對比(版本前後對比以及藍綠版本當前對比),以便在服務釋出時快速檢測異常並進行回滾。在該報表中需要選擇進行對比的藍綠版本(ServiceA 和 ServiceB),報表將根據選擇動態顯示藍綠版本相關指標,包括:PV、5XX 比例、成功率、平均延遲、P95/P99/P9999 延遲、流量等。
Ingress 異常檢測中心
Ingress 異常檢測中心基於日誌服務提供的機器學習演算法,通過多種時序分析演算法從 Ingress 的指標中自動檢測異常點,提高問題發現的效率。
實時監控與告警
Ingress 作為 K8s 網站請求的主要入口,實時監控與告警是必不可少的 Ops 手段之一。在日誌服務上,基於上述的報表,只需 3 個簡單的步驟即可完成告警的建立。下述示例為 Ingress 配置 5XX 比例的告警,告警每 5 分鐘執行一次,當 5XX 比例超過 1% 時觸發。
除了通用的告警功能外,日誌服務還額外支援:
- 多維度資料關聯,即通過多組 SQL 結果交叉判斷進行告警,增加告警準確度;
- 除支援簡訊、語音、通知中心、email 外,還支援釘釘機器人通知、自定義 WebHook 擴充套件;
- 告警的記錄也以日誌的形式記錄,可以實現對告警失敗進行告警的雙保險。
訂閱報告
日誌服務除支援通過告警方式通知外,還支援報表訂閱功能,可使用該功能將報表定期渲染成圖片並通過郵件、釘釘群等方式傳送。例如每天早上 10 點向運營群中傳送昨日網站訪問情況、每週傳送報告到郵件組中存檔、新版本釋出時每 5 分鐘傳送一次監控報表...
自定義分析
如果容器服務 Kubernetes 版提供的預設報表無法滿足你的分析需求,可以直接使用日誌服務 SQL、儀表盤等功能進行自定義的分析和視覺化。
嚐鮮
為了讓大家可以體驗 Kubernetes 審計日誌功能,我們特別開通了體驗中心,大家可以通過 https://promotion.aliyun.com/ntms/act/logdoclist.html 進入,該頁面提供了非常多和 Kubernetes相關的報表。
原文連結
本文為雲棲社群原創內容,未經