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 服務的主流暴露方式。
圖片來源:
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 日誌打通(官方文件https://help.aliyun.com/document_detail/86532.html),只需要應用一個 yaml 資源即可完成日誌採集、分析、視覺化等一整套 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 審計日誌功能,我們特別開通了體驗中心,大家可以透過 進入,該頁面提供了非常多和 Kubernetes 相關的報表。
參考文件
[1]
[2]
[3]https://help.aliyun.com/document_detail/86532.html
[4]https://help.aliyun.com/document_detail/48162.html
[5]https://help.aliyun.com/document_detail/107758.html
[6]
[7]
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31555606/viewspace-2639410/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 雲原生架構日誌監控最佳實踐架構
- Kubernetes日誌的6個最佳實踐
- Kubernetes監控實踐
- 日誌最佳實踐
- 日誌監控實踐 - 監控Agent整合Lua引擎實現多維度日誌採集
- 黑盒監控、日誌監控
- SpringCloud 應用在 Kubernetes 上的最佳實踐 — 線上釋出(可監控)SpringGCCloud
- Kubernetes監控實踐(2):可行監控方案之Prometheus和SensuPrometheus
- Kubernetes之日誌和監控(十五)
- 分散式系統監控(五)- 日誌分析分散式
- Docker容器日誌管理最佳實踐Docker
- Kubernetes 叢集和應用監控方案的設計與實踐
- kubernetes實踐之十二:部署Traefik Ingress
- 日誌服務 HarmonyOS NEXT 日誌採集最佳實踐
- prometheus+grafana監控mysql最佳實踐PrometheusGrafanaMySql
- Mysql事件監控日誌MySql事件
- 監控雲流量的七種QoS最佳實踐
- K8s叢集nginx-ingress監控告警最佳實踐K8SNginx
- 乾貨|EasyMR 基於 Kubernetes 應用的監控實踐
- 深入理解Prometheus: Kubernetes環境中的監控實踐Prometheus
- GMTC 大前端時代前端監控的最佳實踐前端
- 打造立體化監控體系的最佳實踐
- 小程式日誌監控工具
- 03-Loki 日誌監控Loki
- Zabbix如何監控Oracle的告警日誌Oracle
- kubernetes實踐之四十四:Ingress詳解
- Kubernetes Deployment 最佳實踐
- MobX流程分析與最佳實踐
- service mesh istio微服務實驗之監控日誌與視覺化微服務視覺化
- ELK監控nginx日誌總結Nginx
- Grafana、Prometheus、mtail-日誌監控GrafanaPrometheusAI
- 部署Sentry日誌監控系統
- 使用zabbix監控oracle的後臺日誌Oracle
- kubernetes實踐之十三: 負載均衡機制Ingress負載
- Grafana監控系統的構建與實踐Grafana
- Kubernetes-20:日誌聚合分析系統—Loki的搭建與使用Loki
- 最佳實踐|從Producer 到 Consumer,如何有效監控 KafkaKafka
- Kubernetes 微服務最佳實踐微服務