使用 ConfigMap 在容器深入解析中設定數據收集

本文說明如何使用 ConfigMap 在容器深入解析中設定數據收集。 Config 地圖 是 Kubernetes 機制,可讓您儲存非機密數據,例如組態檔或環境變數。

ConfigMap 主要用於設定叢集容器記錄和環境變數的數據收集。 您可以個別設定 stdout 和 stderr 記錄,同時啟用多行記錄。 l 您可以使用 ConfigMap 執行的特定設定包括:

  • 啟用/停用 stdout 和 stderr 記錄的命名空間篩選
  • 啟用/停用叢集環境變數的集合
  • 篩選一般 Kube 事件
  • 選取記錄結構描述
  • 啟用/停用多行記錄
  • 忽略 Proxy 設定

重要

容器深入解析中數據收集的完整設定可能需要編輯叢集的 ConfigMap 和數據收集規則 (DCR),因為每個方法都允許設定不同的設定集。

如需設定清單,以及使用 DCR 設定資料收集的程式,請參閱 使用資料收集規則 在容器深入解析中設定資料收集。

必要條件

  • ConfigMap 是全域清單,而且容器深入解析只能套用一個 ConfigMap 給代理程式。 套用另一個 ConfigMap 將會覆寫先前的 ConfigMap 集合設定。
  • 從容器工作負載收集 stdout、stderr 和環境變數的最低代理程式版本為 ciprod06142019 或更新版本。 若要確認代理程式版本,請在 [ 節點 ] 索引標籤上選取節點。 在 [屬性] 窗格中,記下 [代理程式映射標記] 屬性的值。 如需代理程式版本和每個版本所含專案的詳細資訊,請參閱 代理程式版本資訊

設定及部署 ConfigMap

使用下列程式來設定 ConfigMap 組態檔並將其部署至叢集:

  1. 下載範本 ConfigMap YAML 檔案,並在編輯器中開啟它。 如果您已經有 ConfigMap 檔案,則可以使用該檔案。

  2. 使用資料收集設定中所述 的設定,使用自定義專案編輯 ConfigMap YAML 檔案

  3. 執行下列 kubectl 命令來建立 ConfigMap:

    kubectl apply -f <configmap_yaml_file.yaml>
    

    範例:

    kubectl apply -f container-azm-ms-agentconfig.yaml
    

    可能需要幾分鐘的時間才能完成設定變更並生效。 然後叢集中的所有 Azure 監視器代理程式 Pod 都會重新啟動。 重新啟動是所有 Azure 監視器代理程式 Pod 的滾動重新啟動,因此並非所有 Pod 都會同時重新啟動。 重新啟動完成後,您會收到類似下列結果的訊息:

    configmap "container-azm-ms-agentconfig" created`.
    

數據收集設定

下表描述您可以設定以控制數據收集的設定。

設定 資料類型 Description
schema-version 字串 (區分大小寫) v1 剖析此 ConfigMap 時,由代理程式使用。 目前支援的架構版本為 v1。 不支援修改此值,而且會在評估 ConfigMap 時遭到拒絕。
config-version String 可讓您在原始檔控制系統/存放庫中追蹤此組態檔的版本。 允許的最大字元為 10,而所有其他字元都會被截斷。
[log_collection_settings]
[stdout] enabled 布林值 true
false
控制是否啟用 stdout 容器記錄收集。 當 stdout 記錄收集設為 true 且未排除任何命名空間時,stdout 記錄將會從叢集中所有 Pod 和節點的所有容器收集。 如果未在 ConfigMap 中指定, 則預設值為 true
[stdout] exclude_namespaces String 逗號分隔的陣列 不會收集 stdout 記錄的 Kubernetes 命名空間陣列。 只有當 設定為 trueenabled,此設定才有效。 如果未在 ConfigMap 中指定,預設值為
["kube-system","gatekeeper-system"].
[stderr] enabled 布林值 true
false
控制是否啟用 stderr 容器記錄收集。 當設定為 true 且未排除 stderr 記錄收集的命名空間時,stderr 記錄將會從叢集中所有 Pod 和節點的所有容器收集。 如果未在 ConfigMap 中指定, 則預設值為 true
[stderr] exclude_namespaces String 逗號分隔的陣列 不會收集 stderr 記錄的 Kubernetes 命名空間陣列。 只有當 設定為 trueenabled,此設定才有效。 如果未在 ConfigMap 中指定,預設值為
["kube-system","gatekeeper-system"].
[env_var] enabled 布林值 true
false
此設定可控制叢集中所有 Pod 和節點的環境變數集合。 如果未在 ConfigMap 中指定, 則預設值為 true。 如果全域啟用環境變數集合,您可以將環境變數AZMON_COLLECT_ENVFalse設定為 Dockerfile 設定,或在 區段下 env: Pod 的組態檔中將其停用。 如果全域停用環境變數的集合,您無法針對特定容器啟用集合。 唯一可以在容器層級套用的覆寫是在全域啟用時停用集合。
[enrich_container_logs] enabled 布林值 true
false
控制容器記錄擴充,針對叢集中所有容器記錄,填Name入寫入 ContainerLogV2ContainerLog 數據表之每個記錄檔記錄的 和 Image 屬性值。 如果未在 ConfigMap 中指定, 則預設值為 false
[collect_all_kube_events] enabled 布林值 true
false
控制是否收集所有類型的 Kube 事件。 根據預設,不會收集類型為 Normal 的 Kube 事件。 當此設定為 true時, 不會再篩選一般 事件,而且會收集所有事件。 如果未在 ConfigMap 中指定, 則預設值為 false
[schema] containerlog_schema_version 字串 (區分大小寫) v2
v1
設定記錄擷取格式。 如果 v2為 ,則會 使用 ContainerLogV2 數據表。 如果 v1為 ,則會 使用 ContainerLog 資料表(此數據表已被取代)。 針對使用 Azure CLI 2.54.0 版或更新版本的叢集啟用容器深入解析,預設設定為 v2。 如需詳細資訊,請參閱 容器深入解析記錄架構
[enable_multiline_logs] enabled 布林值 true
false
控制是否啟用多行容器記錄。 如需詳細資訊,請參閱 Container Insights 中的多行記錄。 如果未在 ConfigMap 中指定, 則預設值為 false。 這需要 schema 設定為 v2
[metric_collection_settings]
[collect_kube_system_pv_metrics] enabled 布林值 true
false
允許在 kube 系統命名空間中收集永續性磁碟區 (PV) 使用計量。 根據預設,不會收集 kube 系統命名空間中具有永續性磁碟區宣告之永續性磁碟區的使用計量。 當此設定設為 true時,會收集所有命名空間的PV使用計量。 如果未在 ConfigMap 中指定, 則預設值為 false
[agent_settings]
[proxy_config] ignore_proxy_settings 布林值 true
false
當 為 時 true,會忽略 Proxy 設定。 針對已啟用 AKS 和 Arc 的 Kubernetes 環境,如果您的叢集是使用正向 Proxy 設定,則會自動套用 Proxy 設定,並用於代理程式。 針對某些組態,例如使用 AMPLS + Proxy,您可能會想要忽略 Proxy 組態。 如果未在 ConfigMap 中指定, 則預設值為 false

確認設定

若要確認組態已成功套用至叢集,請使用下列命令來檢閱代理程式 Pod 中的記錄。

kubectl logs ama-logs-fdf58 -n kube-system

如果 Azure 監視器代理程式 Pod 發生設定錯誤,輸出會顯示類似下列範例的錯誤:

***************Start Config Processing******************** 
config::unsupported/missing config schema version - 'v21' , using defaults

套用設定變更時發生的錯誤也可供檢閱。 下列選項可用來對組態變更執行更多疑難解答:

  • 從使用相同 kubectl logs 命令的代理程式 Pod 記錄檔。

  • 從即時記錄檔。 即時記錄會顯示類似下列範例的錯誤:

    config::error::Exception while parsing config map for log collection/env variable settings: \nparse error on value \"$\" ($end), using defaults, please check config map for errors
    
  • 從 Log Analytics 工作區中的 KubeMonAgentEvents 資料表。 數據會每小時傳送一次,並出現設定錯誤的錯誤嚴重性。 如果沒有錯誤,數據表中的專案將會有嚴重性信息的數據,且不會報告任何錯誤。 Tags 屬性包含發生錯誤的 Pod 和容器識別碼,還有過去一小時內第一次發生、最後一次發生和計數的詳細資訊。

驗證架構版本

支援的組態架構版本可在 Azure 監視器代理程式 Pod 上以 Pod 批注 (schema-versions) 的形式提供。 您可以使用下列 kubectl 命令來查看它們。

kubectl describe pod ama-logs-fdf58 -n=kube-system.

類似下列範例的輸出會出現附註架構版本:

    Name:           ama-logs-fdf58
    Namespace:      kube-system
    Node:           aks-agentpool-95673144-0/10.240.0.4
    Start Time:     Mon, 10 Jun 2019 15:01:03 -0700
    Labels:         controller-revision-hash=589cc7785d
                    dsName=ama-logs-ds
                    pod-template-generation=1
    Annotations:    agentVersion=1.10.0.1
                  dockerProviderVersion=5.0.0-0
                    schema-versions=v1 

常見問題集

如何? 透過 Helm 為 kube 系統命名空間中的容器啟用記錄收集?

kube 系統命名空間中容器的記錄收集預設為停用。 您可以在 Azure 監視器代理程式上設定環境變數,以啟用記錄收集。 請參閱容器深入解析 GitHub 頁面

下一步