使用 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 組態檔並將其部署至叢集:
下載範本 ConfigMap YAML 檔案,並在編輯器中開啟它。 如果您已經有 ConfigMap 檔案,則可以使用該檔案。
使用資料收集設定中所述 的設定,使用自定義專案編輯 ConfigMap YAML 檔案
執行下列 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 命名空間陣列。 只有當 設定為 true 時enabled ,此設定才有效。 如果未在 ConfigMap 中指定,預設值為["kube-system","gatekeeper-system"] . |
[stderr] enabled |
布林值 | true false |
控制是否啟用 stderr 容器記錄收集。 當設定為 true 且未排除 stderr 記錄收集的命名空間時,stderr 記錄將會從叢集中所有 Pod 和節點的所有容器收集。 如果未在 ConfigMap 中指定, 則預設值為 true 。 |
[stderr] exclude_namespaces |
String | 逗號分隔的陣列 | 不會收集 stderr 記錄的 Kubernetes 命名空間陣列。 只有當 設定為 true 時enabled ,此設定才有效。 如果未在 ConfigMap 中指定,預設值為["kube-system","gatekeeper-system"] . |
[env_var] enabled |
布林值 | true false |
此設定可控制叢集中所有 Pod 和節點的環境變數集合。 如果未在 ConfigMap 中指定, 則預設值為 true 。 如果全域啟用環境變數集合,您可以將環境變數AZMON_COLLECT_ENV False 設定為 Dockerfile 設定,或在 區段下 env: Pod 的組態檔中將其停用。 如果全域停用環境變數的集合,您無法針對特定容器啟用集合。 唯一可以在容器層級套用的覆寫是在全域啟用時停用集合。 |
[enrich_container_logs] enabled |
布林值 | true false |
控制容器記錄擴充,針對叢集中所有容器記錄,填Name 入寫入 ContainerLogV2 或 ContainerLog 數據表之每個記錄檔記錄的 和 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 頁面。
下一步
- 請參閱 使用數據收集規則在容器深入解析中設定數據收集, 以使用 DCR 而不是 ConfigMap 來設定數據收集。