1. 程式人生 > >Kubernetes Ingress 日誌分析與監控的最佳實踐

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官方文件),比較流行的有 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 日誌打通(官方文件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. 整體架構狀態(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 審計日誌功能,我們特別開通了體驗中心,大家可以通過 https://promotion.aliyun.com/ntms/act/logdoclist.html 進入,該頁面提供了非常多和  Kubernetes相關的報表。

 

原文連結
本文為雲棲社群原創內容,未經