開發與維運

DevOps訓練營-Kubernetes監控與分析最佳實踐

近年來,Kubernetes作為眾多公司雲原生改造的首選容器化編排平臺,越來越多的開發和運維工作都圍繞Kubernetes展開,保證Kubernetes的穩定性和可用性是最基礎的需求,而這其中最核心的就是如何有效地監控Kubernetes集群,保證整個集群的一個良好的可觀察性。本期將為大家介紹如何對Kubernetes開展全方位的監控與分析。

監控整體架構

image.png

Kubernetes的監控整體上可以分為4層,自底向上包括基礎設施監控、ServiceMesh監控、接入層監控、業務監控,其中越底層的監控覆蓋面越廣,可能也會包括一些上層的監控,比如從K8s的事件中也可以監控業務容器的一些狀態,做到一定程度的業務監控;而越往上會更加貼近業務,相關的指標也更能反映出業務是否正常,比如接入層的Ingress日誌,直接就能看到當前服務的成功率、延遲等關鍵指標,而業務日誌的監控則會更加具有針對性,所以監控的價值也越高。

從實施角度上來講,一般會自底向上逐步實施,而且底層的監控相對固定,SLS都提供了一些標準的監控模板可以直接使用,部署複雜度會低;而上層的業務監控一般需要依賴業務方的日誌/監控數據輸出,而且不同公司不同技術棧的數據格式都不一樣,需要實施者做很多定製化工作。

數據中臺實施方式

image.png

上述的監控架構設計非常多的數據源和數據格式,包括硬件、操作系統、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方案與實踐》。
image.png

Prometheus在Kubernetes上部署非常簡單,只需要部署一個Prometheus Operator即可完成,目前阿里雲Kubernetes的應用市場已經內置了Prometheus Operator,可以直接選擇安裝,具體操作方式可以參考:《使用Prometheus採集Kubernetes監控數據》。整體步驟分為:

  1. 創建一個Namespace,名為monitoring
  2. 在monitoring下創建一個保密詞典,填寫上申請好的只具備SLS權限的AK
  3. 在容器服務Kubernetes應用市場安裝PrometheusOperator,修改其中的RemoteWrite部分參數
  4. 配置Grafana連接SLS進行可視化
  5. 基於Grafana或SLS配置監控告警

image.png

基礎事件監控-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事件中心》,安裝後會自動開啟事件中心。

image.png

接入層監控-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延遲等,此外還支持藍綠版本對比,便於灰度發佈時對比新老版本的關鍵指標。

image.png

ServiceMesh監控-Istio訪問日誌監控

image.png

現在越來越多的企業開始選擇使用ServiceMesh,其中Istio已經逐漸成為主流。目前SLS已經支持和阿里雲服務網格(ASM)直接對接,和Ingress方案類似,直接控制檯勾選或手動部署yaml即可完成安裝,詳細使用過程可參考《使用日誌服務採集數據平面的AccessLog》。
image.png

業務監控-自定義日誌分析

image.png

Kubernetes下的業務監控最佳方式還是基於日誌的分析與監控,日誌採集在Kubernetes中相比傳統的採集方式要複雜,需要考慮動態性、多目標、多日誌格式等問題,主流的採集軟件很難穩定工作。目前Kubernetes日誌藉助於SLS提供的Logtail可以實現非常穩定的採集,支持CRD的Operator擴展方式,使用起來非常便捷,只需要部署一個yaml即可定義採集的數據源和目標存儲,並且支持stdout、文件、宿主機、Journal等各種方式。詳細的功能優勢以及特點可以參考《直擊痛點,詳解 K8s 日誌採集最佳實踐》。

在Kubernetes中最常見的是使用stdout和文件的採集方式,相關的採集都可以通過CRD的方式來實現,詳情操作方式可參考:

  1. 安裝Kubernetes日誌採集組件
  2. Kubernetes CRD採集標準輸出日誌
  3. Kubernetes CRD採集文件日誌

數據採集完畢後,SLS支持各類日誌查看、分析、可視化以及監控方式,這裡建議使用的功能如下:

  1. 問題排查時使用日志查詢LiveTail上下文日誌聚類等功能;
  2. 配置可視化報表用戶業務指標展示;
  3. 使用關鍵詞告警功能,對日誌中出現的Error、Exception等進行實時告警;
  4. 使用業務指標告警功能,對業務流量、延遲、錯誤率等關鍵指標進行實時告警。

總結

Kubernetes提供了強大的功能,讓我們服務發佈、運維管理複雜性大大降低,但由於整體架構多了一個編排層,所以需要監控方案針對Kubernetes進行單獨的配置,最佳的方式還是部署一整套自底向上的監控系統。藉助於SLS提供的各類模板和功能,可以快速搭建出適應於自己業務場景的Kubernetes監控。

大家在使用SLS過程中,如有任何問題, 可提工單, 或在用戶群中反饋(見下放釘釘二維碼), 也歡迎關注我們的微信公眾號, 會推送實用的使用技巧和最佳實踐哦~

image.png

Leave a Reply

Your email address will not be published. Required fields are marked *