近年來,Kubernetes作為衆多公司雲原生改造的首選容器化編排平台,越來越多的開發和運維工作都圍繞Kubernetes展開,保證Kubernetes的穩定性和可用性是最基礎的需求,而這其中最核心的就是如何有效地監控Kubernetes叢集,保證整個叢集的一個良好的可觀察性。本期将為大家介紹如何對Kubernetes開展全方位的監控與分析。
監控整體架構
Kubernetes的監控整體上可以分為4層,自底向上包括基礎設施監控、ServiceMesh監控、接入層監控、業務監控,其中越底層的監控覆寫面越廣,可能也會包括一些上層的監控,比如從K8s的事件中也可以監控業務容器的一些狀态,做到一定程度的業務監控;而越往上會更加貼近業務,相關的名額也更能反映出業務是否正常,比如接入層的Ingress日志,直接就能看到目前服務的成功率、延遲等關鍵名額,而業務日志的監控則會更加具有針對性,是以監控的價值也越高。
從實施角度上來講,一般會自底向上逐漸實施,而且底層的監控相對固定,SLS都提供了一些标準的監控模闆可以直接使用,部署複雜度會低;而上層的業務監控一般需要依賴業務方的日志/監控資料輸出,而且不同公司不同技術棧的資料格式都不一樣,需要實施者做很多定制化工作。
資料中台實施方式
上述的監控架構設計非常多的資料源和資料格式,包括硬體、作業系統、Kubernetes系統元件、ServiceMesh、Ingress、業務Pod等,資料格式包括日志(Logging)、監控名額(Metrics)、鍊路追蹤(Tracing)資料。需要借助于阿裡雲SLS才能完整支援一整套監控體系。SLS提供了支援日志(Logging)、監控名額(Metrics)、鍊路追蹤(Tracing)資料的存儲和查詢引擎,并支援各種分析、可視化、告警方式,而且所有功能都提供了API接口調用,可定制程度極高。基于SLS提供的DevOps資料中台,可快速建構出一套适用于自己公司的Kubernetes監控方案。
目前SLS對于Kubernetes的基礎監控、ServiceMesh、接入層都提供了監控模闆,可以借助模闆快速部署一套監控方案。下面我們将為大家介紹如何部署這些監控模闆。
基礎名額監控-Prometheus
衆所周知,Kubernetes是CNCF的第一個畢業項目,也是最火的項目,而Prometheus則是CNCF下第二個畢業的項目,也是CNCF除Kubernetes外最火爆的項目。可以毫不誇張的說,Prometheus已經成為了雲原生領域監控的事實标準,如果說開啟雲原生的第一步是擁有一個Kubernetes環境,那Prometheus就是雲原生下監控的第一步。關于SLS支援Prometheus的相關功能介紹可以參考之前的文章:《
高性能、高可用、免運維-雲原生Prometheus方案與實踐》。
Prometheus在Kubernetes上部署非常簡單,隻需要部署一個Prometheus Operator即可完成,目前阿裡雲Kubernetes的應用市場已經内置了Prometheus Operator,可以直接選擇安裝,具體操作方式可以參考:《
使用Prometheus采集Kubernetes監控資料》。整體步驟分為:
- 建立一個Namespace,名為monitoring
- 在monitoring下建立一個保密詞典,填寫上申請好的隻具備SLS權限的AK
- 在容器服務Kubernetes應用市場安裝PrometheusOperator,修改其中的RemoteWrite部分參數
- 配置Grafana連接配接SLS進行可視化
- 基于Grafana或SLS配置監控告警
基礎事件監控-Kubernetes事件中心
為了讓使用者對Kubernetes的内部狀态有更好的了解,Kubernetes引入了事件(Events)系統,在Kubernetes的資源産生變化的時候,會以事件的形式記錄在APIServer中,并可以通過API或者 kubectl 指令去檢視件。
Kubernetes事件包含了發生的時間、元件、等級(Normal、Warning、Error)、類型、詳細資訊,通過事件我們能夠知道應用的部署、排程、運作、停止等整個生命周期,也能通過事件去了解系統中正在發生的一些異常。在Kubernetes各個元件的源碼中都會定義該元件可能會觸發的事件類型,例如kubelet的
事件源碼。
為了讓大家更便捷的使用Kubernetes事件功能,阿裡雲容器服務Kubernetes和日志服務SLS合作推出了Kubernetes事件中心,支援将Kubernetes中的事件實時采集到日志服務中,把阿裡工程師在多年Kubernetes運維中積累的事件監控、告警名額提煉到事件中心,開箱即可獲得這些積累的運維經驗,相關文章可以參考《
Kubernetes可觀察性:全方位事件監控事件中心的部署方式非常簡單,預設在阿裡雲Kubernetes開通的時候就已經勾選,開通後就會自動建立出事件中心;如果沒有勾選安裝事件中心,可以在阿裡雲Kubernetes應用市場安裝ack-node-problem-detector,具體可參考《
建立并使用Kubernetes事件中心》,安裝後會自動開啟事件中心。
接入層監控-Ingress通路日志監控與分析
在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日志的分析與監控方案需要搭建多個子產品(采集Agent、資料隊列、索引、可視化、告警燈),工作量極大。為簡化廣大使用者對于Ingress日志分析與監控的門檻,阿裡雲容器服務和日志服務将Ingress日志打通(
官方文檔),隻需要應用一個yaml資源即可完成日志采集、分析、可視化等一整套Ingress日志方案的部署。
整個Ingress的監控方案部署極其簡單,預設在阿裡雲Kubernetes開通的時候就已經支援,開通後就會自動建立出Ingress方案;如果沒有勾選安裝,隻需按照
文檔應用一個yaml即可完成。Ingress監控提供了秒級的各類次元監控資訊,包括PV、UV、地域分布、成功率、平均延遲、P99/P9999延遲等,此外還支援藍綠版本對比,便于灰階釋出時對比新老版本的關鍵名額。
ServiceMesh監控-Istio通路日志監控
現在越來越多的企業開始選擇使用ServiceMesh,其中Istio已經逐漸成為主流。目前SLS已經支援和阿裡雲服務網格(ASM)直接對接,和Ingress方案類似,直接控制台勾選或手動部署yaml即可完成安裝,詳細使用過程可參考《
使用日志服務采集資料平面的AccessLog業務監控-自定義日志分析
Kubernetes下的業務監控最佳方式還是基于日志的分析與監控,日志采集在Kubernetes中相比傳統的采集方式要複雜,需要考慮動态性、多目标、多日志格式等問題,主流的采集軟體很難穩定工作。目前Kubernetes日志借助于SLS提供的Logtail可以實作非常穩定的采集,支援CRD的Operator擴充方式,使用起來非常便捷,隻需要部署一個yaml即可定義采集的資料源和目标存儲,并且支援stdout、檔案、主控端、Journal等各種方式。詳細的功能優勢以及特點可以參考《
直擊痛點,詳解 K8s 日志采集最佳實踐在Kubernetes中最常見的是使用stdout和檔案的采集方式,相關的采集都可以通過CRD的方式來實作,詳情操作方式可參考:
資料采集完畢後,SLS支援各類日志檢視、分析、可視化以及監控方式,這裡建議使用的功能如下:
- 問題排查時使用日 志查詢 、 LiveTail 上下文 日志聚類 等功能;
- 配置 可視化報表 使用者業務名額展示;
- 使用 關鍵詞告警 功能,對日志中出現的Error、Exception等進行實時告警;
- 業務名額 告警功能,對業務流量、延遲、錯誤率等關鍵名額進行實時告警。
總結
Kubernetes提供了強大的功能,讓我們服務釋出、運維管理複雜性大大降低,但由于整體架構多了一個編排層,是以需要監控方案針對Kubernetes進行單獨的配置,最佳的方式還是部署一整套自底向上的監控系統。借助于SLS提供的各類模闆和功能,可以快速搭建出适應于自己業務場景的Kubernetes監控。
大家在使用SLS過程中,如有任何問題, 可提工單, 或在使用者群中回報(見下放釘釘二維碼), 也歡迎關注我們的微信公衆号, 會推送實用的使用技巧和最佳實踐哦~