02.25 Kubernetes Ingress 日誌分析與監控的最佳實踐

前言

目前Kubernetes(K8s)已經真正地佔領了容器編排市場,是默認的雲無關計算抽象,越來越多的企業開始將服務構建在K8s集群上。在K8s中,組件通過Service對外暴露服務,常見的包括NodePort、LoadBalancer、Ingress等。其中Ingress主要提供HTTP層(7層)路由功能,相比TCP(4層)的負載均衡具備非常多的優勢(路由規則更加靈活、支持金絲雀、藍綠、A/B Test發佈模式、SSL支持、日誌、監控、支持自定義擴展等),是目前K8s中HTTP/HTTPS服務的主流暴露方式。


Kubernetes Ingress 日誌分析與監控的最佳實踐


Ingress簡介

K8s中Ingress只是一種API資源的聲明,具體的實現需要安裝對應的Ingress Controller,由Ingress Controller接管Ingress定義,將流量轉發到對應的Service。目前Ingress Controller的實現有非常多種(具體可以參考Ingress Controller官方文檔),比較流行的有Nginx、Traefik、Istio、Kong等,在國內接受度最高的是Nginx Ingress Controller。


Kubernetes Ingress 日誌分析與監控的最佳實踐


日誌與監控

日誌和監控是所有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. 網站訪問量統計、廣告轉化率統計。


Kubernetes Ingress 日誌分析與監控的最佳實踐


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

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

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

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

Kubernetes 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。
Kubernetes Ingress 日誌分析與監控的最佳實踐

Ingress訪問中心

Ingress訪問中心主要側重於用於訪問請求相關的統計信息,一般用於運營分析,包括:當日UV/PV、UV/PV分佈、UV/PV趨勢、TOP訪問省份/城市、TOP訪問瀏覽器、TOP訪問IP、移動端佔比、Android/IOS佔比等。

Kubernetes Ingress 日誌分析與監控的最佳實踐

Ingress監控中心

Ingress監控中心主要側重於網站實時監控數據,一般用於實時監控與告警,包括:請求成功率、錯誤比例、5XX比例、請求未轉發比例、平均延遲、P95/P99/P9999延遲、狀態碼分佈、Ingress壓力分佈、Service訪問TOP10、Service錯誤TOP10、Service延遲TOP10、Service流量TOP10等。

Kubernetes Ingress 日誌分析與監控的最佳實踐

Ingress藍綠髮布監控中心

Ingress藍綠髮布監控中心主要用於版本發佈時的實時監控與對比(版本前後對比以及藍綠版本當前對比),以便在服務發佈時快速檢測異常並進行回滾。在該報表中需要選擇進行對比的藍綠版本(ServiceA和ServiceB),報表將根據選擇動態顯示藍綠版本相關指標,包括:PV、5XX比例、成功率、平均延遲、P95/P99/P9999延遲、流量等。

Kubernetes Ingress 日誌分析與監控的最佳實踐

Ingress異常檢測中心

Ingress異常檢測中心基於日誌服務提供的機器學習算法,通過多種時序分析算法從Ingress的指標中自動檢測異常點,提高問題發現的效率。

Kubernetes Ingress 日誌分析與監控的最佳實踐

實時監控與告警

Ingress作為K8s網站請求的主要入口,實時監控與告警是必不可少的Ops手段之一。在日誌服務上,基於上述的報表,只需3個簡單的步驟即可完成告警的創建。下述示例為Ingress配置5XX比例的告警,告警每5分鐘執行一次,當5XX比例超過1%時觸發。

Kubernetes Ingress 日誌分析與監控的最佳實踐

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

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

訂閱報告

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


Kubernetes Ingress 日誌分析與監控的最佳實踐


自定義分析

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


Kubernetes Ingress 日誌分析與監控的最佳實踐


嚐鮮

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

Kubernetes Ingress 日誌分析與監控的最佳實踐

參考文檔

  1. 阿里雲日誌服務
  2. 阿里雲容器服務Kubernetes版
  3. Ingress日誌分析與監控
  4. 告警配置
  5. 訂閱報表
  6. Ingress官方文檔
  7. Ingress Controller官方文檔


分享到:


相關文章: