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官方文檔),比較流行的有 Nginx、Traefik、Istio、Kong 等,在國內接受度最高的是 Nginx Ingress Controller。

日誌與監控

日誌和監控是所有 Ingress Controller 都會提供的基礎功能,日誌一般包括訪問日誌(Access Log)、控制日誌(Controller Log)和錯誤日誌(Error Log),監控主要從日誌以及 Controller 中提取部分 Metric 信息。這些數據中訪問日誌的量級最大、信息最多、價值也最高,一般7層的訪問日誌包括:URL、源 IP、UserAgent、狀態碼、入流量、出流量、響應時間等,對於 Ingress Controller 這種轉髮型的日誌,還包括轉發的 Service 名、Service 響應時間等額外信息。從這些信息中,我們能夠分析出非常多的信息,例如:

  1. 網站訪問的 PV、UV;
  2. 訪問的地域分佈、設備端分佈;
  3. 網站訪問的錯誤比例;
  4. 後端服務的響應延遲;
  5. 不同 URL 訪問分佈。

我們的開發、運維、運營、安全等人員可以基於這些信息完成各自的需求,例如:

  1. 新老版本發布前後的數據指標對比;
  2. 網站質量監控、集羣狀態監控;
  3. 惡意攻擊檢測、反作弊;
  4. 網站訪問量統計、廣告轉化率統計。

然而手動搭建、運維一整套的 Ingress 日誌分析與監控系統非常複雜,系統所需要的模塊有:

  1. 部署日誌採集 Agent 並配置採集、解析規則;
  2. 由於 K8s 集羣中,訪問量相對較大,因此需要搭建一個緩衝隊列,例如 Redis、Kafka 等;
  3. 部署實時數據分析引擎,例如 Elastic Search、clickhouse 等;
  4. 部署可視化組件並搭建報表,例如 grafana、kibana 等;
  5. 部署告警模塊並配置告警規則,例如 ElastAlert、alertmanager 等。

阿里雲日誌服務Ingress解決方案

為簡化廣大用戶對於 Ingress 日誌分析與監控的門檻,阿里雲容器服務和日誌服務將 Ingress 日誌打通(官方文檔help.aliyun.com/documen](help.aliyun.com/documen)),只需要應用一個 yaml 資源即可完成日誌採集、分析、可視化等一整套 Ingress 日誌方案的部署。

Ingress 可視化分析

日誌服務默認為 Ingress 創建 5 個報表,分別是:Ingress 概覽、Ingress 訪問中心、Ingress 監控中心、Ingress 藍綠髮布監控中心、Ingress 異常檢測中心。不同角色的人員可根據需求使用不同的報表,同時每個報表均提供篩選框用於篩選特定的 Service、URL、狀態碼等。所有的報表均基於日誌服務提供的基礎可視化組件實現,可根據公司實際場景進行定製化調整。

Ingress 概覽

Ingress 概覽報表主要展示當前 Ingress 的整體狀態,主要包括以下幾類信息:

  1. 整體架構狀態(1 天),包括:PV、UV、流量、響應延遲、移動端佔比、錯誤比例等;
  2. 網站實時狀態(1 分鐘),包括:PV、UV、成功率、5XX 比例、平均延遲、P95/P99 延遲等;
  3. 用戶請求類信息(1 天),包括:1天/7天訪問PV對比、訪問地域分佈、TOP訪問省份/城市、移動端佔比、Android/IOS 佔比等;
  4. 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% 時觸發。

除了通用的告警功能外,日誌服務還額外支持:

  1. 多維度數據關聯,即通過多組 SQL 結果交叉判斷進行告警,增加告警準確度;
  2. 除支持簡訊、語音、通知中心、email 外,還支持釘釘機器人通知、自定義 WebHook 擴展;
  3. 告警的記錄也以日誌的形式記錄,可以實現對告警失敗進行告警的雙保險。

訂閱報告

日誌服務除支持通過告警方式通知外,還支持報表訂閱功能,可使用該功能將報表定期渲染成圖片並通過郵件、釘釘羣等方式發送。例如每天早上 10 點向運營羣中發送昨日網站訪問情況、每週發送報告到郵件組中存檔、新版本發布時每 5 分鐘發送一次監控報表...

自定義分析

如果容器服務 Kubernetes 版提供的默認報表無法滿足你的分析需求,可以直接使用日誌服務 SQL、儀錶盤等功能進行自定義的分析和可視化。

嘗鮮

為了讓大家可以體驗 Kubernetes 審計日誌功能,我們特別開通了體驗中心,大家可以通過 promotion.aliyun.com/nt 進入,該頁面提供了非常多和 Kubernetes相關的報表。

參考文檔

[1]aliyun.com/product/sls

[2]aliyun.com/product/kube

[3]help.aliyun.com/documen

[4]help.aliyun.com/documen

[5]help.aliyun.com/documen

[6]kubernetes.io/docs/conc

[7]kubernetes.io/docs/conc

本文作者:jessie筱姜

原文鏈接

更多技術乾貨敬請關注云棲社區知乎機構號:阿里云云棲社區 - 知乎

本文為雲棲社區原創內容,未經允許不得轉載。

推薦閱讀:

相關文章