使用 ConfigMap 在容器深入解析中設定資料收集
本文說明如何使用 ConfigMap 在容器深入解析中設定資料收集。 ConfigMaps 是一種 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 輪流啟動,因此其不會全部同時重新啟動。 重新啟動完成時,您會收到類似以下結果的訊息:
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 容器記錄收集。 當設定為 true 且沒有任何命名空間從 stdout 記錄收集中排除時,則會從叢集中所有 Pod 和節點的所有容器收集 stdout 記錄。 如果未在 ConfigMap 中指定,預設值為 true 。 |
[stdout] exclude_namespaces |
String | 逗號分隔的陣列 | 不會收集 stdout 記錄的 Kubernetes 命名空間陣列。 此設定只有在 enabled 設定為 true 時有效。 如果未在 ConfigMap 中指定,預設值為["kube-system","gatekeeper-system"] . |
[stderr] enabled |
布林值 | true false |
控制是否已啟用 stderr 容器記錄收集。 當設定為 true 且沒有任何命名空間從 stderr 記錄收集中排除時,則會從叢集中所有 Pod 和節點的所有容器收集 stderr 記錄。 如果未在 ConfigMap 中指定,預設值為 true 。 |
[stderr] exclude_namespaces |
String | 逗號分隔的陣列 | 不會收集 stderr 記錄的 Kubernetes 命名空間陣列。 此設定只有在 enabled 設定為 true 時有效。 如果未在 ConfigMap 中指定,預設值為["kube-system","gatekeeper-system"] . |
[env_var] enabled |
布林值 | true false |
此設定可控制叢集中所有 Pod 和節點的環境變數收集。 如果未在 ConfigMap 中指定,預設值為 true 。 如果全域啟用環境變數收集,您可以針對特定容器將它停用,其做法是使用 Dockerfile 設定或在 env: 區段底下的 Pod 的組態檔中,將環境變數 AZMON_COLLECT_ENV 設定為 False 。 如果全域已停用環境變數集合,您無法針對特定容器啟用集合。 唯一可以在容器層級套用的覆寫,就是在全域啟用集合時加以停用。 |
[enrich_container_logs] enabled |
布林值 | true false |
控制容器記錄擴充,針對叢集中所有容器記錄,填Name 入寫入 ContainerLog 數據表之每個記錄檔記錄的 和 Image 屬性值。 如果未在 ConfigMap 中指定,預設值為 false 。 |
[collect_all_kube_events] enabled |
布林值 | true false |
控制是否收集所有類型的 Kube 事件。 根據預設,不會收集類型為 Normal 的 Kube 事件。 當此設定為 true 時,不會再篩選 Normal 事件,而且會收集所有事件。 如果未在 ConfigMap 中指定,預設值為 false 。 |
[schema] containerlog_schema_version |
字串 (區分大小寫) | v2 v1 |
設定記錄擷取格式。 如果為 v2 ,則會使用 ContainerLogV2 資料表。 如果為 v1 ,則會使用 ContainerLog 資料表 (此資料表已被取代)。 針對使用 Azure CLI 2.54.0 版或更新版本的叢集啟用容器深入解析,預設值為 v2 。 如需詳細資訊,請參閱容器深入解析記錄結構描述。 |
[enable_multiline_logs] enabled |
布林值 | true false |
控制是否啟用多行容器記錄。 如需詳細資料,請參閱容器深入解析中的多行記錄。 如果未在 ConfigMap 中指定,預設值為 false 。 這需要 schema 設定成為 v2 。 |
[metric_collection_settings] | |||
[collect_kube_system_pv_metrics] enabled |
布林值 | true false |
允許在 kube-system 命名空間中收集永續性磁碟區 (PV) 使用計量。 根據預設,不會收集 kube-system 命名空間中具有永續性磁碟區宣告的永續性磁碟區使用計量。 當此設定設為 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
套用設定變更時發生的錯誤也可供檢閱。 下列選項可用來進一步執行設定變更的疑難排解:
從代理程式 Pod 記錄,使用相同的
kubectl logs
命令。從即時記錄。 即時記錄會顯示類似下列範例的錯誤:
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 註釋 (結構描述版本) 的形式提供。 您可以使用下列 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) 設定資料收集。