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

Ingress提供的7層負載均衡具有非常強大的能力,例如:
- 會話保持:讓相同的session ID路由到同一台後端機器,保證每個使用者的會話隻在一台機器上處理。
- 基于内容的轉發:能夠根據HTTP協定内容進行轉發,例如Host、URL甚至是PostBody等。
- 重寫請求:能夠對使用者的請求進行動态修改,非常适用于新老系統的相容性改造。
- 加密:在負載均衡上配置SSL,提供統一的證書管理,每個伺服器無需單獨維護證書。
- 健康檢查增強:可基于業務規則進行健康檢查,而不僅僅是判斷端口連通性,使健康檢查更加精确。
- 日志監控:全量7層通路日志,能夠擷取每個請求的結果、耗時、請求大小等資訊,能夠基于通路日志監控到每個服務的品質。
Ingress日志分析與監控
原始的通路日志記錄了網站的每個通路請求,每個請求包括使用者位址、Host、URL、狀态碼、耗時、請求大小等多個次元的資訊,基于通路日志可以統計出不同次元下的通路qps、成功率、延遲等黃金名額,以此實作可以針對各種次元的網站品質監控。但建構一套完整的通路日志分析系統還是非常困難,這其中包括了很多過程和工作:采集、存儲、分析、可視化、告警等。在實施過程中最為複雜的點在于:
- 采集問題:如何保證日志采集的可靠性、性能消耗、延時問題;
- 分析:在保證分析靈活性的同時能夠保持快速的分析、查詢速度以及較低的實施成本;
- 自動化:尤其在業務規模比較大的情況下,如何智能的監控和分析各個服務的狀态是一個迫切需要的功能。
為簡化廣大使用者對于Ingress日志分析與監控的門檻,阿裡雲容器服務和日志服務将Ingress日志打通(
官方文檔),隻需要應用一個yaml資源即可完成日志采集、分析、可視化等一整套Ingress日志方案的部署。
這套系統主要包括:
- 日志實時采集方式:通過Logtail實時采集Ingress産生的輸出日志,并進行格式轉換
- 存儲:SLS提供負載均衡的實時隊列用于日志的存儲,并提供按照TTL的存儲方式,可任意設定儲存的日志天數。
- 查詢/分析:基于SLS提供的SQL92文法可實作對Ingress日志各個次元的互動式分析與計算,例如統計UV變化,通路請求分布,TOP延遲等。
- 可視化大盤:将常見的監控、分析場景需求以圖表的形式固化成大盤,使用者絕大部分時間隻需要檢視大盤即可了解整個系統的狀态。
再次更新-從1.0到2.0
Ingress日志分析與監控的方案已經釋出2年左右,目前已經有上萬的執行個體使用了該方案。在長期的使用中,我們也發現了這套方案的一些限制,為了适應新時代的DevOps節奏,我們需要對方案進行整體的更新,提供更加簡單、更快速、更普惠、更智能的Ingress日志監控方案。
- 更簡單:整個方案使用者的使用更加簡單,不需要去關注SLS的相關的資源,可以直接以單獨Ingress監控APP的方式使用;
- 更快速:1.0的方案基于原始通路日志實時計算,在時間跨度較大或日志量較大的情況下查詢速度較慢,使用體驗較差;
- 更普惠:由于計算依賴原始日志,是以必須将日志長期儲存,原始日志的存儲量較高,會産生較高的費用;
- 更智能:随着K8s叢集中運作服務數量的增加,傳統的監控方式越來越吃力,依賴靜态名額的告警規則很難監控所有的異常,是以急需更加智能的AIOps能力來解放生産力。
方案架構
為了達到高性能、低成本、快速、智能等要求,SLS和阿裡雲容器服務團隊聯合對Ingress日志監控方案進行了一次架構更新,正式釋出了2.0版本的Ingress日志中心,日志中心包括以下幾個部分:
- 原始通路日志存儲:當Ingress Controller産生通路請求後,會實時将請求的通路日志推送到使用者自身的Logstore中,整個過程的延遲一般在3-5秒即可完成,SLS的Logstore具備高可靠、實時索引、自動擴容等功能,保證日志的可靠性和可擴充性。
- 預聚和:由于原始通路日志量巨大,基于原始日志計算名額性能開銷較大,是以SLS專門推出了基于通路日志的名額預聚和能力,能夠将上百萬甚至上億的通路日志實時聚合成名額類型的時序資料,資料量會降低1-2個數量級,後續的分析與監控可直接基于時序資料進行,大大提高效率。
- 智能巡檢:對于預聚和後的Metrics(名額資料),SLS提供了機器學習的自動巡檢功能,幫助使用者自動去檢測各個Ingress的各個次元的名額異常,将異常資訊實時展現在時序的圖表中,結合實時告警能力進行自動的告警配置。此外後續還會支援異常打标,基于使用者回報的資訊進行更加精确的檢測。
通過以上3層資料鍊路,實作了從原始通路日志到預聚和的名額最後再到機器學習的異常事件整個資料的流轉,對于使用者來說,告警和監控隻需要基于名額和智能巡檢的結果進行,而涉及到具體服務的問題分析可以再回到原始的通路日志并基于SLS提供的各種SQL統計方式進行自定義的排查和分析。
實時預聚和
Ingress的通路日志數量和使用者通路成正比,在原始通路日志上實時計算名額的開銷較大,一般不适合長時間的名額分析,并且原始日志存儲的成本較高,一般不會将日志存儲較長時間,但我們還是希望名額資料能夠盡可能長的存儲,這樣可以在分析的時候檢視更長時間的資料。為此SLS專門為Ingress通路日志定制了一套全托管名額實時預聚合的功能,能夠實時将Ingress的通路日志聚合成名額并存儲在SLS的時序庫中,這樣所有的監控資料查詢工作都可以基于聚合後的時序資料進行,大大提升監控資料的查詢效率。
豐富可視化
Ingress通路日志分析的一個重要工作是可視化系統的搭建,我們需要針對不同場景建立不同的報表以便滿足各個方面的需求,例如:
- 整體大盤:包括網站目前的通路UV/PV、整體延遲、成功率等,這個是老闆們和SRE需要看的資料,需要保證資料時效性和重新整理的速度
- 監控大盤:能夠把監控需要關注的各種資料(延遲(平均、P99/P9999等)、流量、成功率、錯誤碼、TOP類統計)等顯示在一張報表上,并且能夠支援各種次元的過濾,友善定位到問題的執行個體。
- 通路大盤:顯示和使用者相關的通路資訊,例如PV/UV、通路的地域分布、裝置分布等,一般情況技術Leader會關注,另外部分的營運同學可能也會需要這部分資料。
- 異常大盤:顯示異常巡檢的名額資訊,能夠把異常的名額顯示在報表上,友善檢視。
- 後端流量分析:快速分析後端的流量、QPS、延遲、錯誤率等分布資訊,能夠快速查找到“調皮”的機器。
智能巡檢
在時序監控場景中,使用者往往先确定監控對象,并通過其曆史資料,結合業務經驗,得到不同組的門檻值參數,通過各種手段(同比、環比、連續觸發幾次等)進行監控,往往一個監控對象要設計4~5條監控規則,并配置不同的參數。還有更大的問題,各個參數門檻值無法快速的複用到不同的類似觀測對象中,當觀測對象的規模達到數千,甚至上萬後,傳統的配置效率底下,無法滿足在大規則時序名額資料下的監控需求。流式算法具有天然的優勢可以解決上面的問題,使用者隻需要發起一個機器學習服務,模型自動拉取資料,實時訓練,實時回報(通俗地說:“來一個點,學習一個點,檢測一個點”),在極大的降低成本的同時,實作對每一條線的單獨模組化,單獨分析,單獨模型參數儲存,實作時序異常檢測的“千線千面”。
智能HPA
基于業務通路量的HPA
HPA(Horizontal Pod Autoscaler)是Kubernetes提供的一個标準元件,用于POD的橫向自動擴縮容,例如:當Pod CPU、記憶體等名額上升到一定程度時會自動擴容,當這些名額下去後會自動縮容。這樣能夠保證在使用者體驗不變的情況下叢集整體的資源使用都能處于一個較低的位置。
預設的HPA隻能針對叢集的一些标準名額(CPU、記憶體、網絡等)進行擴容,這種擴容方式相對靜态,而且反應不出業務的情況。是以我們對HPA進行了一些擴充,支援按照Ingress通路QPS進行擴容。即可以設定某個Service下的Pod限定能夠處理的QPS,當QPS上升到一定高度時會自動擴容一些Pod/節點,當QPS下降時會自動縮容一些Pod/節點。
基于業務量預測的HPA
HPA的預測原理是判斷某些名額的值進行擴縮容,而名額的值相對來說都有10-30秒左右的延遲,并且還有幾次的double check時間,是以從壓力上升到擴容的時間基本上在2-3分鐘左右,如果Pod啟動還需要預熱的話可能要更久,這段期間使用者的通路請求很可能會出現高延遲或錯誤的情況。
是以最好的方式是我們能夠提前知道未來幾分鐘的通路請求量,當我們發現未來通路請求會很高的時候,提前把Pod擴容出來并進行預熱,這樣可以在請求真正提升時Pod的資源已經提前配置設定好。為此我們結合SLS與阿裡雲達摩院聯合研發的多模型預測算法,實時預測Ingress上每個服務的通路請求,并把這些預測的名額提供給HPA做動态擴容,能夠在請求量即将超過門檻值的時候提前擴出Pod/節點,保證使用者通路一直流暢。
總結
Ingress通路日志中心提供了通路日志分析、秒級監控名額分析、實時告警等功能,并提供基于AIOps的自動異常巡檢功能。基于這些功能我們可以快速建構出一套企業級的監控系統,能夠以非常小的工作量實作公司所有通路入口的統一監控。
大家在使用Ingress通路日志或SLS過程中,如有任何問題, 可提工單, 或在使用者群中回報(見下放釘釘二維碼), 也歡迎關注我們的微信公衆号, 會推送實用的使用技巧和最佳實踐哦~