監視 Azure Kubernetes Service (AKS)

當您有依賴 Azure 資源的重要應用程式和商務程序時,您會想要監視這些資源的可用性、效能和操作。 本文說明使用 Azure 監視器分析和 AKS 產生的監視資料。 Azure 監視器為所有使用到 Azure 監視器的 Azure 服務提供通用功能,若您對這些功能不甚熟悉,請參閱使用 Azure 監視器監視 Azure 資源

重要

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

監視資料

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

從 AKS 收集監視數據的圖表。

來源 描述
平台計量 平台計量 會自動針收集 AKS 叢集,且無需費用。 您可以使用 計量檔案總管 來分析這些計量,或使用計量警示
Prometheus 計量 當您為叢集啟用計量抓取時, Prometheus 計量 會收集適用於 Prometheus 的 Azure 監視器受控服務 ,並儲存在 Azure 監視器工作區中。 使用 Azure 受控 Grafana 中的 預先建置儀錶板,並使用 Prometheus 警示來分析。
活動記錄 會自動收集 AKS 叢集的活動記錄,且無需費用。 這些記錄會追蹤資訊,例如,建立叢集或進行設定變更的時機。 將活動記錄傳送至 Log Analytics 工作區,以使用您的其他記錄資料進行分析。
資源記錄 AKS 的控制平面記錄會實作為資源記錄。 建立診斷設定,將記錄送至 Log Analytics 工作區 ,您可以在其中使用 Log Analytics 中的記錄查詢來分析和警示。
容器深入解析 容器深入解析會從叢集收集各種記錄和效能資料,包括 stdout/stderr 串流,並將其儲存在 Log Analytics 工作區Azure 監視器計量中。 使用容器深入解析隨附的檢視和活頁簿,或使用 Log Analytics計量檔案總管來分析此資料。

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

概觀頁面上的監視索引標籤,可讓您快速開始檢視Azure 入口網站中每個 AKS 叢集的監視資料。 這包括節點集區分隔的叢集通用計量圖表。 點選此資料,以進一步分析計量檔案總管中的資料。

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

AKS 概觀頁面的螢幕快照。

提示

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

整合

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

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

容器深入解析會將大部分的資料儲存在 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 節點擷取計量。 您也應該啟用 Azure 受控 Prometheus 計量來收集容器計量和 Kubernetes 物件計量,例如部署的物件狀態。 請參閱從 AKS 叢集收集 Prometheus 計量 ,以將資料傳送至適用於 Prometheus 的 Azure 受控服務。

啟用現有叢集受控 Prometheus 的螢幕快照。

AKS 也會透過 Azure 受控 Prometheus 公開來自重要控制平面元件的計量,例如 API 伺服器、ETCD、排程器。 這項功能目前處於預覽狀態,您可以在這裡找到更多詳細數據。

記錄

AKS 控制平面/資源記錄

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

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

重要

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

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

請參閱使用 Azure 服務和雲端原生工具監視 Kubemetes取得進一步建議,以及成本最佳化和 Azure 監視取得進一步降低監視費用的策略。

AKS 診斷設定對話框的螢幕快照。

AKS 對資源記錄支援 AKS 診斷模式資源專屬模式。 這會指定 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 資料表。 您可以使用 [類別] 資料行區分不同記錄。 如需每個類別的描述,請參閱 AKS 參考資源記錄

描述 記錄檔查詢
計算每個類別的記錄
(Azure 診斷模式)
AzureDiagnostics
| where ResourceType == "MANAGEDCLUSTERS"
| 依類別總結 Count = count()
所有 API 伺服器記錄
(Azure 診斷模式)
AzureDiagnostics
| where Category == "kube-apiserver"
時間範圍內的所有 kube-audit 記錄
(Azure 診斷模式)
起始時間 = datetime("2023-02-23");
結束時間 = datetime("2023-02-24");
AzureDiagnostics
| where 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
排除取得和列出稽核事件的所有稽核記錄
(資源專屬模式)
AKSAuditAdmin
所有 API 伺服器記錄
(資源專屬模式)
AKSControlPlane
| where Category == "kube-apiserver"

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

AKS 資料平面/容器深入解析記錄

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

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

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

AKS 數據平面記錄收集組態頁面的螢幕快照。

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

ContainerLogV2 結構描述

Azure 監視器容器深入解析提供容器記錄的架構,稱為 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 叢集的多個層面視覺化。

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 在所有節點的平均工作集使用率超過閾值時引發。

記錄型警示

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

請參閱如何從容器深入解析建立記錄警示如何從容器深入解析查詢記錄。 記錄警示可以測量兩種不同的東西,可用於監視不同案例:

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

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

網路可檢視性

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

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

下一步