了解容器深入解析的監視成本

本文提供容器深入解析的定價指引,以協助您了解如何:

  • 在一或多個容器上啟用容器深入解析之後測量成本。
  • 控制資料的收集並降低成本。

提示

如需降低 Azure 監視器成本的策略,請參閱成本最佳化和 Azure 監視器

Azure 監視器定價模型主要是以每天內嵌至 Log Analytics 工作區的資料量為基礎 (以 GB 為單位)。 Log Analytics 工作區的成本不只是以收集的資料量為基礎,也取決於選取的方案,以及對於從叢集產生的資料所選儲存時間長度。

注意

請參閱預估 Azure 監視器成本,在啟用容器深入解析之前預估您的成本。

透過容器深入解析從 Kubernetes 叢集收集的下列資料類型會影響成本,而且可以根據您的使用量來自訂:

  • Perf、Inventory、InsightsMetrics 和 KubeEvents 可透過成本最佳化設定來控制
  • 叢集中每個 Kubernetes 命名空間的每個受監視容器的 Stdout、stderr 容器記錄 (透過 ConfigMap 代理程式收集)
  • 叢集中每個受監視容器的容器環境變數
  • 叢集中已完成的 Kubernetes 作業/Pod 不需要監視
  • 作用中 Prometheus 計量抓取
  • Azure Kubernetes Service (AKS) 叢集中 Kubernetes 主要節點記錄的資源記錄收集,用於分析主要元件所產生的記錄資料,例如 kube-apiserverkube-controller-manager

控制擷取以降低成本

請考慮組織不同業務單位共用 Kubernetes 基礎結構和 Log Analytics 工作區的案例。 每個業務單位均以 Kubernetes 命名空間分隔。 您可以使用資料使用量 Runbook,將每個工作區中擷取的資料量視覺化。 Runbook 可從 [報表] 索引標籤取得。

Screenshot that shows the View Workbooks dropdown list.

此活頁簿可協助您視覺化資料的來源,而不需要由我們在文件中共用的內容建置自己的查詢程式庫。 在此活頁簿中,您可以檢視呈現可計費資料的圖表,例如:

  • 依解決方案擷取的可計費資料總計 (以 GB 為單位)。
  • 依容器記錄 (應用程式記錄) 擷取的可計費資料。
  • 依 Kubernetes 命名空間擷取的可計費容器記錄資料。
  • 依叢集名稱隔離、擷取的可計費容器記錄資料。
  • 依記錄來源項目擷取的可計費容器記錄資料。
  • 依診斷主節點記錄擷取的可計費診斷資料。

Screenshot that shows the Data Usage workbook.

若要了解管理活頁簿的權限和存取權限,請參閱存取控制

判斷資料擷取的根本原因

容器深入解析資料主要包含計量計數器 (Perf、Inventory、InsightsMetrics 和自訂計量) 和記錄 (ContainerLog)。 根據您的叢集使用量和大小,您可能有不同的需求和監視要求。

藉由瀏覽至資料使用量活頁簿的 [依資料表] 區段,您可以看到容器深入解析的資料表大小明細。

Screenshot that shows the By Table breakdown in Data Usage workbook.

如果大部分的資料來自下列其中一個資料表:

  • 效能
  • InsightsMetrics
  • ContainerInventory
  • ContainerNodeInventory
  • KubeNodeInventory
  • KubePodInventory
  • KubePVInventory
  • KubeServices
  • KubeEvents

您可以使用成本最佳化設定和/或遷移至 Prometheus 計量附加元件來調整擷取

否則,大部分的資料都屬於 ContainerLog 資料表。 您也可以遵循下列步驟來降低 ContainerLog 成本。

降低 ContainerLog 成本

完成分析以判斷哪些來源產生超出您需求的資料之後,您可以重新設定資料收集。 如需設定 stdout、stderr 和環境變數收集的詳細資訊,請參閱設定代理程式資料收集設定

下列範例描述您可以藉由修改 ConfigMap 檔案將哪些變更套用至叢集,進而協助控制成本。

  1. 在提取計量的 Azure 容器深入解析服務的 ConfigMap 檔案中修改下列程式碼,以停用叢集中所有命名空間的 stdout 記錄:

    [log_collection_settings]       
       [log_collection_settings.stdout]          
          enabled = false
    
  2. 停止從開發命名空間收集 stderr 記錄。 例如 dev-test。 變更 ConfigMap 檔案中的下列程式碼,以繼續從其他命名空間收集 stderr 記錄,例如 proddefault

    注意

    預設會停用 kube-system 記錄收集。 預設設定會保留。 將 dev-test 命名空間新增至排除命名空間清單會套用至 stderr 記錄收集。

    [log_collection_settings.stderr]          
       enabled = true          
          exclude_namespaces = ["kube-system", "dev-test"]
    
  3. 修改 ConfigMap 檔案中的下列程式碼,以停用整個叢集的環境變數收集。 這項修改會套用至每個 Kubernetes 命名空間中的所有容器。

    [log_collection_settings.env_var]
        enabled = false
    
  4. 若要清除已完成的工作,請在工作定義 yaml 中指定清除原則。 以下是使用清除原則的工作定義範例。 如需詳細資訊,請參閱 Kubernetes 文件

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: pi-with-ttl
    spec:
      ttlSecondsAfterFinished: 100
    

將這其中一項或多項變更套用至您的 ConfigMap 後,使用 kubectl apply -f <config3. map_yaml_file.yaml> 命令將其套用至叢集。 例如,執行 kubectl apply -f container-azm-ms-agentconfig.yaml 命令以在預設編輯器中開啟檔案進行修改,然後儲存。

設定基本記錄

您可以在 Log Analytics 工作區中主要用來偵錯、疑難排解和稽核 (以基本記錄形式) 的 ContainerLog 上,節省資料擷取成本。 如需詳細資訊,包括基本記錄的限制,請參閱設定 Azure 監視器中的基本記錄。 ContainerLogV2 是容器深入解析所使用的已設定基本記錄版本。 ContainerLogV2 包含詳細的文字型記錄資料列。

您必須使用 ContainerLogV2 結構描述,才能設定基本記錄。 如需詳細資訊,請參閱啟用 ContainerLogV2 結構描述 (預覽)

Prometheus 計量抓取

注意

本節說明 Log Analytics 工作區中的 Prometheus 計量收集。 如果您使用受控 Prometheus 來抓取您的 Prometheus 計量,這項資訊並不適用。

如果您在 Log Analytics 工作區中收集 Prometheus 計量,請確定您已限制從叢集收集的計量數目:

  • 請確定設定最佳抓取頻率。 預設值是 60 秒。 您可以將頻率增加至 15 秒,但您必須確保抓取的計量會以該頻率發佈。 否則會抓取許多重複的計量,並依間隔傳送至 Log Analytics 工作區,這會增加資料擷取和保留成本,但不符合效益。
  • 容器深入解析支援依計量名稱設定的排除和包含清單。 例如,如果您要在叢集中抓取 kubedns 計量,則預設可能會抓取數百個計量。 但您很可能只對一小部分計量感興趣。 請確認您已指定要抓取的計量清單,或排除要儲存在資料擷取磁碟區上以外的項目。 您可以輕鬆啟用抓取,而不使用其中許多計量,這只會在您的 Log Analytics 帳單中新增費用。
  • 在抓取 Pod 註釋時,請確定您依命名空間篩選,以便排除抓取命名空間中不使用的 Pod 計量。 例如 dev-test 命名空間。

從 Kubernetes 叢集收集的資料

計量資料

容器深入解析包含預先定義的一組所收集計量和庫存項目,這些項目會作為記錄資料寫入至 Log Analytics 工作區中。 下表中的所有計量都會每一分鐘收集一次。

類型 計量
節點計量 cpuUsageNanoCores
cpuCapacityNanoCores
cpuAllocatableNanoCores
memoryRssBytes
memoryWorkingSetBytes
memoryCapacityBytes
memoryAllocatableBytes
restartTimeEpoch
used (disk)
free (disk)
used_percent (disk)
io_time (diskio)
writes (diskio)
reads (diskio)
write_bytes (diskio)
write_time (diskio)
iops_in_progress (diskio)
read_bytes (diskio)
read_time (diskio)
err_in (net)
err_out (net)
bytes_recv (net)
bytes_sent (net)
Kubelet_docker_operations (kubelet)
容器計量 cpuUsageNanoCores
cpuRequestNanoCores
cpuLimitNanoCores
memoryRssBytes
memoryWorkingSetBytes
memoryRequestBytes
memoryLimitBytes
restartTimeEpoch

叢集庫存

下列清單是預設收集的叢集庫存資料:

  • KubePodInventory – 每分鐘每個 Pod 1 個
  • KubeNodeInventory – 每分鐘每個節點 1 個
  • KubeServices – 每分鐘每個服務 1 個
  • ContainerInventory – 每分鐘每個容器 1 個

下一步

為協助您了解根據容器深入解析所收集的資料,取得最新的使用量模式,以了解成本詳細資料,請參閱在 Log Analytics 工作區中分析使用量