監視 Azure Kubernetes Service (AKS)

當您有依賴 Azure 資源的重要應用程式和商務程序時,您會想要監視這些資源的可用性、效能和操作。 本文說明 AKS 所產生的監視數據,並使用 Azure 監視器進行分析。 如果您不熟悉所有使用 Azure 服務的 Azure 監視器通用功能,請參閱 使用 Azure 監視器監視 Azure 資源。

重要

Kubernetes 是複雜的分散式系統,具有許多行動元件,因此需要多個層級的監視。 雖然 AKS 是受控 Kubernetes 服務,但仍需要對多個層級進行監視的相同嚴謹性。 本文提供監視 AKS 叢集的高階資訊和最佳做法。 如需其他詳細數據,請參閱下列內容。

監視資料

AKS 會產生與從 Azure 資源監視數據中所述 的其他 Azure 資源相同的監視數據類型。 如需 AKS 所建立計量和記錄的詳細資訊,請參閱 監視 AKS 資料參考其他 Azure 服務和功能 會收集其他數據,並啟用其他分析選項,如下圖所示。

Diagram of collection of monitoring data from AKS.

來源 描述
平台計量 系統會自動針對AKS叢集收集平臺計量 ,不收費。 您可以使用計量總管來分析這些計量,或將其用於計量警示
Prometheus 計量 當您為叢集啟用計量擷取時,Prometheus 計量是由適用於 Prometheus 的 Azure 監視器受控服務所收集,並儲存在 Azure 監視器工作區。 使用 Azure 受控 GrafanaPrometheus 警示中預先建置的儀錶板來分析它們。
活動記錄 系統會自動針對 AKS 叢集收集活動記錄 檔,而不需要任何費用。 這些記錄會追蹤資訊,例如建立叢集或有設定變更的時間。 將 活動記錄傳送至Log Analytics工作區 ,以與其他記錄數據一起分析。
資源記錄 AKS 的控制平面記錄會實作為資源記錄。 建立診斷設定,以將它們傳送至 Log Analytics 工作區,您可以在其中使用 Log Analytics 中的記錄查詢來分析和警示它們。
容器深入解析 容器深入解析會從叢集收集各種記錄和效能數據,包括 stdout/stderr 數據流,並將其儲存在 Log Analytics 工作區Azure 監視器計量中。 使用容器深入解析隨附的檢視和活頁簿,或使用 Log Analytics計量總管來分析此數據。

Azure 入口網站中的 [監視] 概觀頁面

[概觀] 頁面上的[監視] 索引標籤可讓您快速開始檢視每個 AKS 叢集中 Azure 入口網站 中的監視數據。 這包括具有節點集區分隔之叢集通用計量的圖表。 按兩下上述任何圖表,以進一步分析計量總管中的數據

[概觀] 頁面也包含目前叢集受控 Prometheus容器深入解析的連結。 如果您尚未啟用這些工具,系統會提示您這麼做。 您也可以在畫面頂端看到橫幅,建議您啟用其他功能來改善叢集的監視。

Screenshot of AKS overview page.

提示

Azure 入口網站 的 [監視] 功能表,或從 Kubernetes 服務功能表的 [監視] 區段存取訂用帳戶中所有 AKS 叢集的監視功能。

整合

Azure 監視器的下列 Azure 服務和功能可用來額外監視 Kubernetes 叢集。 您可以從 Azure 入口網站、Azure CLI、Terraform、Azure 原則 中的 [整合] 索引卷標,或在稍後將叢集上線至它們期間啟用這些功能。 每項功能都可能會產生成本,因此請先參閱每個功能的定價資訊,再加以啟用。

服務/ 功能 描述
容器深入解析 使用 Azure 監視器代理程式的容器化版本來收集叢集中每個節點的 stdout/stderr 記錄和 Kubernetes 事件,以支援 AKS 叢集的各種監視案例。 您可以使用 Azure CLIAzure 原則、Azure 入口網站 或 Terraform 來建立 AKS 叢集時啟用監視。 如果您在建立叢集時未啟用容器深入解析,請參閱 啟用 Azure Kubernetes Service (AKS) 叢集 的容器深入解析,以取得其他選項以啟用它。

容器深入解析會將大部分的數據儲存在Log Analytics工作區中,而且您通常會使用與叢集的資源記錄相同的Log Analytics工作區。 請參閱 設計Log Analytics工作區架構 ,以取得您應該使用的工作區數目和位置的指引。
適用於 Prometheus 的 Azure 監視器受管理服務 Prometheus 是 Cloud Native Compute Foundation 的雲端原生計量解決方案,也是用來從 Kubernetes 叢集收集和分析計量數據的最常見工具。 適用於 Prometheus 的 Azure 監視器受控服務是 Azure 中完全受控的 Prometheus 相容監視解決方案。 如果您在建立叢集時未啟用受控 Prometheus,請參閱 從 AKS 叢集 收集 Prometheus 計量,以取得其他選項以啟用它。

適用於 Prometheus 的 Azure 監視器受控服務會將其數據儲存在 Azure 監視器工作區中,此工作區會連結到 Grafana 工作區,讓您可以使用 Azure 受控 Grafana 分析數據。
Azure 受控 Grafana Grafana 的完全受控實作,這是一個開放原始碼數據視覺效果平臺,通常用來呈現 Prometheus 數據。 多個預先定義的 Grafana 儀錶板可用於監視 Kubernetes 和完整堆棧疑難解答。 如果您在建立叢集時未啟用受控 Grafana,請參閱 連結 Grafana 工作區 詳細數據,以將它連結到您的 Azure 監視器工作區,以便存取叢集的 Prometheus 計量。

計量

計量在叢集監視、識別問題,以及優化 AKS 叢集中的效能方面扮演著重要角色。 平臺計量是使用安裝在 kube-system 命名空間中的現用計量伺服器來擷取,該伺服器會定期從 Kubelet 服務的所有 Kubernetes 節點擷取計量。 T=您也應該啟用 Azure 受控 Prometheus 計量來收集容器計量和 Kubernetes 物件計量,例如部署的對象狀態。 請參閱 從 AKS 叢集 收集 Prometheus 計量,以將數據傳送至適用於 Prometheus 的 Azure 受控服務。

Screenshot of enabling Managed Prometheus for existing cluster.

記錄

AKS 控制平面/資源記錄

AKS 叢集的控制平面記錄會實作為 Azure 監視器中的資源記錄 。 在您建立診斷設定以將記錄路由傳送至一或多個位置之前,不會收集並儲存資源記錄。 您通常會將它們傳送至 Log Analytics 工作區,這是儲存容器深入解析的大部分數據的地方。

如需使用 Azure 入口網站、CLI 或 PowerShell 建立診斷設定的詳細程式,請參閱建立診斷設定。 在建立診斷設定時,您可以指定要收集的記錄類別。 AKS 的類別列在 AKS 監視資料參考

重要

收集 AKS 的資源記錄時可能會花費大量成本,特別是針對 kube-audit 記錄。 請考慮下列建議,以減少收集的數據量:

  • 不需要時停用 kube-audit 記錄。
  • kube-audit-admin 啟用收集,這會排除取得和列出稽核事件。
  • 啟用資源特定的記錄,如下所示,並將數據表設定 AKSAudit基本記錄

如需進一步的建議和成本優化,請參閱使用 Azure 服務和雲端原生工具監視 Kubernetes 叢集和 Azure 監視器以取得進一步的策略,以降低監視成本。

Screenshot of AKS diagnostic setting dialog box.

AKS 支援 Azure 診斷模式資源記錄的資源特定模式 。 這會指定 Log Analytics 工作區中傳送數據的數據表。 Azure 診斷模式會將所有數據傳送至 AzureDiagnostics 數據表,而資源特定模式會將數據傳送至 AKS 稽核、AKS 稽核 管理員AKS 控制平面,如資源記錄數據表所示。

基於下列原因,建議使用資源特定的模式:AKS:

  • 數據更容易查詢,因為它位於 AKS 專用的個別數據表中。
  • 支援設定為 基本記錄 ,以節省大量成本。

如需集合模式之間差異的詳細資訊,包括如何變更現有的設定,請參閱 選取收集模式

注意

選取收集模式的功能尚未在所有區域中的 Azure 入口網站 中提供。 若是尚未使用的區域,請使用 CLI 以下列命令建立診斷設定:

az monitor diagnostic-settings create --name AKS-Diagnostics --resource /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myresourcegroup/providers/Microsoft.ContainerService/managedClusters/my-cluster --logs '[{""category"": ""kube-audit"",""enabled"": true}, {""category"": ""kube-audit-admin"", ""enabled"": true}, {""category"": ""kube-apiserver"", ""enabled"": true}, {""category"": ""kube-controller-manager"", ""enabled"": true}, {""category"": ""kube-scheduler"", ""enabled"": true}, {""category"": ""cluster-autoscaler"", ""enabled"": true}, {""category"": ""cloud-controller-manager"", ""enabled"": true}, {""category"": ""guard"", ""enabled"": true}, {""category"": ""csi-azuredisk-controller"", ""enabled"": true}, {""category"": ""csi-azurefile-controller"", ""enabled"": true}, {""category"": ""csi-snapshot-controller"", ""enabled"": true}]'  --workspace /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/myresourcegroup/providers/microsoft.operationalinsights/workspaces/myworkspace --export-to-resource-specific true

範例記錄查詢

重要

當您從 AKS 叢集的功能表中選取 [記錄 ] 時,Log Analytics 會開啟,並將查詢範圍設定為目前的叢集。 這表示記錄查詢只會包含來自該資源的資料。 如果您想要執行包含其他叢集數據或來自其他 Azure 服務之數據的查詢,請從 [Azure 監視器] 功能選取 [記錄]。 如需詳細資訊,請參閱 Azure 監視器 Log Analytics 中的記錄查詢範圍和時間範圍

如果叢集的診斷設定使用 Azure 診斷模式,AKS 的資源記錄會儲存在 AzureDiagnostics 數據表中。 您可以使用 Category 資料行來區分不同的記錄。 如需每個類別的描述,請參閱 AKS 參考資源記錄

描述 記錄查詢
計算每個類別的記錄
(Azure 診斷模式)
AzureDiagnostics
|where ResourceType == “MANAGEDCLUSTERS”
|summarize count() by Category
所有 API 伺服器記錄
(Azure 診斷模式)
AzureDiagnostics
|where Category == “kube-apiserver”
時間範圍內的所有 kube-audit 記錄
(Azure 診斷模式)
let starttime = datetime(“2023-02-23”):
let endtime = datetime(“2023-02-24”):
AzureDiagnostics
|其中 TimeGenerated between(starttime..endtime)
|where Category == “kube-audit”
|extend event = parse_json(log_s)
|extend HttpMethod = tostring(event.verb)
|extend User = tostring(event.user.username)
|extend Apiserver = pod_s
|extend SourceIP = tostring(event.sourceIPs[0])
|project TimeGenerated, Category, HttpMethod, User, Apiserver, SourceIP, OperationName, event
所有稽核記錄
(資源特定模式)
AKSAudit
排除取得和列出稽核事件的所有稽核記錄
(資源特定模式)
AKSAudit 管理員
所有 API 伺服器記錄
(資源特定模式)
AKSControlPlane
|where Category == “kube-apiserver”

若要存取 Log Analytics 工作區中的一組預先建置查詢,請參閱 Log Analytics 查詢介面 ,然後選取資源類型 Kubernetes Services。 如需容器深入解析的常見查詢清單,請參閱 容器深入解析查詢

AKS 數據平面/Container Insights 記錄

Container Insights 會從容器和 Kubernetes 叢集收集各種類型的遙測數據,以協助您監視、疑難解答,以及深入瞭解在 AKS 叢集中執行的容器化應用程式。 如需數據表清單及其容器深入解析所使用的詳細描述,請參閱 Azure 監視器數據表參考。 所有這些數據表都可用於 記錄查詢

成本優化設定 可讓您自定義及控制透過容器深入解析代理程式收集的計量數據。 此功能支援個別數據表選取、數據收集間隔和命名空間的數據收集設定,以透過 Azure 監視器資料收集規則 (DCR) 排除資料收集。 這些設定可控制擷取的數量,並降低容器深入解析的監視成本。 您可以使用下列選項,透過 Azure 入口網站 自定義容器深入解析收集的數據。 選取 [全部] 以外的任何選項 會導致容器深入解析體驗變得無法使用。

分組 資料表 備註
所有 (預設值) 所有標準容器深入解析數據表 啟用預設容器深入解析視覺效果的必要專案
效能 Perf、InsightsMetrics
記錄和事件 ContainerLog 或 ContainerLogV2、KubeEvents、KubePodInventory 如果您已啟用 Managed Prometheus 計量,建議使用
工作負載、部署和 HPA InsightsMetrics、KubePodInventory、KubeEvents、ContainerInventory、ContainerNodeInventory、KubeNodeInventory、KubeServices
永續性磁碟區 InsightsMetrics、KubePVInventory

Screenshot of AKS data plane logs collection configuration page.

記錄和事件群組會從 ContainerLogContainerLogV2、KubeEventsKubePodInventory 數據表擷取記錄,但不會擷取計量。 收集計量的建議路徑是從 AKS 叢集啟用 適用於 Prometheus 的 Azure 監視器受控服務 Prometheus ,並使用 Azure Managed Grafana 進行數據視覺效果。 如需詳細資訊,請參閱 管理 Azure 監視器工作區

ContainerLogV2 架構

Azure 監視器 Container Insights 提供容器記錄的架構,稱為 ContainerLogV2,這是建議的選項。 此格式包含下列欄位,可協助檢視與 AKS 和已啟用 Azure Arc 的 Kubernetes 叢集相關的數據時常見的查詢:

  • ContainerName
  • PodName
  • PodNamespace

此外,此架構與 基本記錄 數據計劃相容,可提供標準分析記錄的低成本替代方案。 基本記錄數據計劃可讓您節省在Log Analytics工作區中擷取和儲存大量詳細資訊記錄的成本,以進行偵錯、疑難解答和稽核,而不是用於分析和警示。 如需詳細資訊,請參閱 管理 Log Analytics 工作區中的數據表。 ContainerLogV2 是建議的方法,是客戶使用 ARM、Bicep、Terraform、Policy 和 Azure 入口網站,使用受控識別驗證將容器深入解析上線的默認架構。 如需如何透過叢集的數據收集規則 (DCR) 或 ConfigMap 啟用 ContainerLogV2 的詳細資訊,請參閱 啟用 ContainerLogV2 架構

視覺效果

數據視覺效果是一個基本概念,可讓系統管理員和操作工程師更輕鬆地取用收集到的資訊。 他們可以使用可視化表示法,而不是查看原始數據,以快速顯示數據並顯示在查看原始數據時可能隱藏的趨勢。 您可以使用 Grafana 儀錶板或原生 Azure 活頁簿來呈現數據視覺效果。

Azure 受控 Grafana

分析和呈現 Prometheus 數據的最常見方式是使用 Grafana 儀錶板。 Azure 受控 Grafana 包含 預先建置的儀錶板來監視 Kubernetes 叢集,包括數個將類似信息呈現為容器深入解析檢視的儀錶板 。 另外還有各種社群建立的儀錶板,可從 Prometheus 所收集的計量,將 Kubernetes 叢集的多個層面可視化。

Screenshot of Grafana.

活頁簿

Azure 監視器活 頁簿是 Azure 監視器中的一項功能,可為數據分析和建立豐富的視覺效果報表提供彈性畫布。 活頁簿可協助您建立可協助數據分析的視覺報表。 針對 Azure 活頁簿,建議使用容器深入解析中的報表。 Azure 為每個服務提供內建活頁簿,包括您可以從 Azure 入口網站 存取的 Azure Kubernetes Service (AKS)。 在 Azure 入口網站 的 [Azure 監視器] 功能表上,選取 [容器]。 在 [監視] 區段中,選取 [深入解析],選擇特定的叢集,然後選取 [報告] 索引標籤。您也可以從 Azure 監視器中的活頁簿資源庫檢視它們。

例如,「叢集優化活頁簿提供多個分析器,讓您快速檢視 Kubernetes 叢集的健康情況和效能。 它有多個分析器,每個分析器都會提供與叢集相關的不同資訊。 一旦叢集上啟用容器深入解析,活頁簿就不需要設定。 突出功能包括偵測即時探查失敗及其頻率的能力、識別和群組事件異常,以指出事件量最近增加,以便進行更容易存取的分析,以及識別具有高或低 CPU 和記憶體限制和要求的容器,以及針對在 AKS 叢集中執行的這些容器建議的限制和要求值。如需這些活頁簿的詳細資訊,請參閱 容器深入解析中的報表。

警示

Azure 監視器警示 可協助您偵測並解決使用者注意到問題,方法是主動通知您 Azure 監視器收集的數據指出您的雲端基礎結構或應用程式可能有問題。 如此便能在您的客戶注意到之前,先在您的系統中識別問題並加以對應。 可在 [計量]、[記錄]、[活動記錄] 中設定警示。 不同類型的警示各有優缺點。

容器深入解析會根據 Prometheus 計量或平台計量,使用兩種類型的計量規則。

Prometheus 計量型警示

當您 啟用叢集的 Prometheus 計量 集合時,您可以下載建議的 Prometheus 警示規則集合。 這包括下列規則:

層級 警示
Pod 層級 KubePodCrashLooping
作業未及時完成
Pod 容器在過去 1 小時內重新啟動
Pod 的就緒狀態小於 80%
處於失敗狀態的 Pod 數目大於 0
KubePodNotReadyByController
KubeStatefulSetGenerationMismatch
KubeJobNotCompleted
KubeJobFailed
每個容器的平均 CPU 使用量大於 95%
每個容器的平均記憶體使用量大於 95%
KubeletPodStartUpLatencyHigh
叢集層級 平均 PV 使用量大於 80%
KubeDeploymentReplicasMismatch
KubeStatefulSetReplicasMismatch
KubeHpaReplicasMismatch
KubeHpaMaxedOut
KubeCPUQuotaOvercommit
KubeMemoryQuotaOvercommit
KubeVersionMismatch
KubeClientErrors
CPUThrottlingHigh
KubePersistentVolumeFillingUp
KubePersistentVolumeInodesFillingUp
KubePersistentVolumeErrors
節點層級 平均節點 CPU 使用率大於 80%
節點的工作集記憶體大於 80%
OOM 終止的容器數目大於 0
KubeNodeUnreachable
KubeNodeNotReady
KubeNodeReadinessFlapping
KubeContainerWaiting
KubeDaemonSetNotScheduled
KubeDaemonSetMisScheduled
KubeletPlegDurationHigh
KubeletServerCertificateExpiration
KubeletClientCertificateRenewalErrors
KubeletServerCertificateRenewalErrors
KubeQuotaAlmostFull
KubeQuotaFullyUsed
KubeQuotaExceeded

平臺計量型警示

下表列出 AKS 叢集的建議計量警示規則。 這些警示是以叢集的平臺計量 為基礎

Condition 描述
CPU 使用量百分比 > 95 在所有節點的平均 CPU 使用量超過閾值時引發。
記憶體工作集百分比 > 100 在所有節點的平均工作集超過閾值時引發。

記錄型警示

記錄警示 可讓您在資料平面 和控制 平面 記錄上 發出警示。 以預先定義的間隔執行查詢,並根據結果建立警示。 您可以檢查特定記錄的計數,或根據數值資料行執行計算。

請參閱 如何從 Container Insights 建立記錄警示和 如何從 Container Insights 查詢記錄。 記錄警示 可以測量兩個不同的專案,這可用於在不同案例中監視:

  • 結果計數 :計算查詢傳回的資料列數目,並可用來處理 Windows 事件記錄、Syslog 和應用程式例外狀況等事件。
  • 值的 計算:根據數值資料行進行計算,並可用來包含任意數目的資源。 例如 CPU 百分比。

根據所需的警示案例,必須建立記錄查詢,以使用 now 運算子比較 DateTime 與目前時間,並返回一小時。 若要瞭解如何建置記錄型警示,請參閱 從容器深入解析 建立記錄警示。

網路可觀察性

網路可觀察性 是維護狀況良好且高效能 Kubernetes 叢集的重要部分。 藉由收集和分析網路流量的相關資料,您可以深入瞭解叢集的運作方式,並在造成中斷或效能降低之前找出潛在問題。

啟用網路可觀察性 附加元件時,它會收集並將有用的計量轉換成 Prometheus 格式,其可在 Grafana 中視覺化。 啟用時,收集的計量會自動內嵌至適用于 Prometheus 的 Azure 監視器受控服務。 Grafana 公用儀表板存放庫中提供 Grafana 儀表板,以視覺化 Prometheus 收集的網路可觀察性計量。 如需詳細資訊,請參閱 網路可觀察性設定 以取得詳細指示。

下一步