前言
目前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響應時間等額外信息。從這些信息中,我們能夠分析出非常多的信息,例如:
- 網站訪問的PV、UV;
- 訪問的地域分佈、設備端分佈;
- 網站訪問的錯誤比例;
- 後端服務的響應延遲;
- 不同URL訪問分佈。
我們的開發、運維、運營、安全等人員可以基於這些信息完成各自的需求,例如:
- 新老版本發佈前後的數據指標對比;
- 網站質量監控、集群狀態監控;
- 惡意攻擊檢測、反作弊;
- 網站訪問量統計、廣告轉化率統計。
然而手動搭建、運維一整套的Ingress日誌分析與監控系統非常複雜,系統所需要的模塊有:
- 部署日誌採集Agent並配置採集、解析規則;
- 由於K8s集群中,訪問量相對較大,因此需要搭建一個緩衝隊列,例如Redis、Kafka等;
- 部署實時數據分析引擎,例如Elastic Search、clickhouse等;
- 部署可視化組件並搭建報表,例如grafana、kibana等;
- 部署告警模塊並配置告警規則,例如ElastAlert、alertmanager等。
阿里雲日誌服務Ingress解決方案
為簡化廣大用戶對於Ingress日誌分析與監控的門檻,阿里雲容器服務和日誌服務將Ingress日誌打通(官方文檔),只需要應用一個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相關的報表。
參考文檔
- 阿里雲日誌服務
- 阿里雲容器服務Kubernetes版
- Ingress日誌分析與監控
- 告警配置
- 訂閱報表
- Ingress官方文檔
- Ingress Controller官方文檔
閱讀更多 Echa攻城獅 的文章