目前Kubernetes(K8s)已經真正地佔領了容器編排市場,是默認的雲無關計算抽象,愈來愈多的企業開始將服務構建在K8s集羣上。在K8s中,組件經過Service對外暴露服務,常見的包括NodePort、LoadBalancer、Ingress等。其中Ingress主要提供HTTP層(7層)路由功能,相比TCP(4層)的負載均衡具有很是多的優點(路由規則更加靈活、支持金絲雀、藍綠、A/B Test發佈模式、SSL支持、日誌、監控、支持自定義擴展等),是目前K8s中HTTP/HTTPS服務的主流暴露方式。html
Ingress提供的7層負載均衡具備很是強大的能力,例如:算法
原始的訪問日誌記錄了網站的每一個訪問請求,每一個請求包括用戶地址、Host、URL、狀態碼、耗時、請求大小等多個維度的信息,基於訪問日誌能夠統計出不一樣維度下的訪問qps、成功率、延遲等黃金指標,以此實現能夠針對各類維度的網站質量監控。但構建一套完整的訪問日誌分析系統仍是很是困難,這其中包括了不少過程和工做:採集、存儲、分析、可視化、告警等。在實施過程當中最爲複雜的點在於:後端
爲簡化廣大用戶對於Ingress日誌分析與監控的門檻,阿里雲容器服務和日誌服務將Ingress日誌打通(官方文檔),只須要應用一個yaml資源便可完成日誌採集、分析、可視化等一整套Ingress日誌方案的部署。
這套系統主要包括:服務器
Ingress日誌分析與監控的方案已經發布2年左右,目前已經有上萬的實例使用了該方案。在長期的使用中,咱們也發現了這套方案的一些限制,爲了適應新時代的DevOps節奏,咱們須要對方案進行總體的升級,提供更加簡單、更快速、更普惠、更智能的Ingress日誌監控方案。網絡
爲了達到高性能、低成本、快速、智能等要求,SLS和阿里雲容器服務團隊聯合對Ingress日誌監控方案進行了一次架構升級,正式發佈了2.0版本的Ingress日誌中心,日誌中心包括如下幾個部分:session
經過以上3層數據鏈路,實現了從原始訪問日誌到預聚和的指標最後再到機器學習的異常事件整個數據的流轉,對於用戶來講,告警和監控只須要基於指標和智能巡檢的結果進行,而涉及到具體服務的問題分析能夠再回到原始的訪問日誌並基於SLS提供的各類SQL統計方式進行自定義的排查和分析。架構
Ingress的訪問日誌數量和用戶訪問成正比,在原始訪問日誌上實時計算指標的開銷較大,通常不適合長時間的指標分析,而且原始日誌存儲的成本較高,通常不會將日誌存儲較長時間,但咱們仍是但願指標數據可以儘量長的存儲,這樣能夠在分析的時候查看更長時間的數據。爲此SLS專門爲Ingress訪問日誌定製了一套全託管指標實時預聚合的功能,可以實時將Ingress的訪問日誌聚合成指標並存儲在SLS的時序庫中,這樣全部的監控數據查詢工做均可以基於聚合後的時序數據進行,大大提高監控數據的查詢效率。負載均衡
Ingress訪問日誌分析的一個重要工做是可視化系統的搭建,咱們須要針對不一樣場景建立不一樣的報表以便知足各個方面的需求,例如:機器學習
在時序監控場景中,用戶每每先肯定監控對象,並經過其歷史數據,結合業務經驗,獲得不一樣組的閾值參數,經過各類手段(同比、環比、連續觸發幾回等)進行監控,每每一個監控對象要設計4~5條監控規則,並配置不一樣的參數。還有更大的問題,各個參數閾值沒法快速的複用到不一樣的相似觀測對象中,當觀測對象的規模達到數千,甚至上萬後,傳統的配置效率底下,沒法知足在大規則時序指標數據下的監控需求。流式算法具備自然的優點能夠解決上面的問題,用戶只須要發起一個機器學習服務,模型自動拉取數據,實時訓練,實時反饋(通俗地說:「來一個點,學習一個點,檢測一個點」),在極大的下降成本的同時,實現對每一條線的單獨建模,單獨分析,單獨模型參數保存,實現時序異常檢測的「千線千面」。
性能
HPA(Horizontal Pod Autoscaler)是Kubernetes提供的一個標準組件,用於POD的橫向自動擴縮容,例如:當Pod CPU、內存等指標上升到必定程度時會自動擴容,當這些指標下去後會自動縮容。這樣可以保證在用戶體驗不變的狀況下集羣總體的資源使用都能處於一個較低的位置。
默認的HPA只能針對集羣的一些標準指標(CPU、內存、網絡等)進行擴容,這種擴容方式相對靜態,並且反應不出業務的狀況。所以咱們對HPA進行了一些擴展,支持按照Ingress訪問QPS進行擴容。便可以設置某個Service下的Pod限定可以處理的QPS,當QPS上升到必定高度時會自動擴容一些Pod/節點,當QPS降低時會自動縮容一些Pod/節點。
HPA的預測原理是判斷某些指標的值進行擴縮容,而指標的值相對來講都有10-30秒左右的延遲,而且還有幾回的double check時間,所以從壓力上升到擴容的時間基本上在2-3分鐘左右,若是Pod啓動還須要預熱的話可能要更久,這段期間用戶的訪問請求極可能會出現高延遲或錯誤的狀況。
所以最好的方式是咱們可以提早知道將來幾分鐘的訪問請求量,當咱們發現將來訪問請求會很高的時候,提早把Pod擴容出來並進行預熱,這樣能夠在請求真正提高時Pod的資源已經提早分配好。爲此咱們結合SLS與阿里雲達摩院聯合研發的多模型預測算法,實時預測Ingress上每一個服務的訪問請求,並把這些預測的指標提供給HPA作動態擴容,可以在請求量即將超過閾值的時候提早擴出Pod/節點,保證用戶訪問一直流暢。
Ingress訪問日誌中心提供了訪問日誌分析、秒級監控指標分析、實時告警等功能,並提供基於AIOps的自動異常巡檢功能。基於這些功能咱們能夠快速構建出一套企業級的監控系統,可以以很是小的工做量實現公司全部訪問入口的統一監控。
原文連接本文爲阿里雲原創內容,未經容許不得轉載。