在容器深入解析中篩選記錄收集
本文會說明容器深入解析中可用的不同篩選選項。 Kubernetes 叢集會產生容器深入解析所收集的大量資料。 由於您需支付此資料的擷取和保留費用,因此您可以篩選出您不需要的資料,以大幅降低監視成本。
重要
本文會說明不同的篩選選項,這些選項會要求您修改受監視叢集的 DCR 或 ConfigMap。 如需執行此設定的詳細資訊,請參閱在容器深入解析中設定記錄收集。
篩選容器記錄
容器記錄是 Kubernetes 叢集中容器所產生的 stderr 和 stdout 記錄。 這些記錄會儲存在您 Log Analytics 工作區的 ContainerLogV2 資料表中。 根據預設,會收集所有容器記錄,但您可以從特定命名空間篩選出記錄,或完全停用容器記錄的收集。
使用資料收集規則 (DCR),您可以啟用或停用 stdout 和 stderr 記錄,並從每個記錄篩選特定命名空間。 容器記錄和命名空間篩選的設定包含在 Azure 入口網站中設定的成本預設值中,而且您可以使用其他 DCR 設定方法個別設定這些值。
使用 ConfigMap,您可以針對叢集分別設定 stderr
和 stdout
記錄的集合,因此您可以選擇啟用一個記錄,而不啟用另一個記錄。
下列範例顯示 ConfigMap 設定,以收集不包括 kube-system
和 gatekeeper-system
命名空間的 stdout 和 stderr。
[log_collection_settings]
[log_collection_settings.stdout]
enabled = true
exclude_namespaces = ["kube-system","gatekeeper-system"]
[log_collection_settings.stderr]
enabled = true
exclude_namespaces = ["kube-system","gatekeeper-system"]
[log_collection_settings.enrich_container_logs]
enabled = true
平台記錄篩選 (系統 Kubernetes 命名空間)
根據預設,會從集合中排除來自系統命名空間的容器記錄,以將 Log Analytics 成本降到最低。 不過,在特定疑難排解案例中,系統容器的容器記錄可能很重要。 這項功能僅限於下列系統命名空間: kube-system
、gatekeeper-system
、calico-system
、azure-arc
、kube-public
和 kube-node-lease
。
使用 ConfigMap 搭配 collect_system_pod_logs
設定來啟用平台記錄。 您也必須確定系統命名空間不在 exclude_namespaces
設定中。
下列範例會顯示 ConfigMap 設定,以在 kube-system
命名空間中收集 coredns
容器的 stdout 和 stderr 記錄。
[log_collection_settings]
[log_collection_settings.stdout]
enabled = true
exclude_namespaces = ["gatekeeper-system"]
collect_system_pod_logs = ["kube-system:coredns"]
[log_collection_settings.stderr]
enabled = true
exclude_namespaces = ["kube-system","gatekeeper-system"]
collect_system_pod_logs = ["kube-system:coredns"]
工作負載的註釋型篩選
註釋型篩選可讓您藉由註釋 Pod 來排除特定 Pod 和容器的記錄集合。 這可大幅降低記錄擷取成本,並讓您專注於相關資訊,而不需篩選雜訊。
使用 ConfigMap 搭配下列設定來啟用註釋型篩選。
[log_collection_settings.filter_using_annotations]
enabled = true
您也必須在工作負載 Pod 規格上新增所需的註釋。下表會醒目提示不同的可能 Pod 註釋。
註釋 | 描述 |
---|---|
fluentbit.io/exclude: "true" |
排除 Pod 中所有容器上的 stdout 和 stderr 資料流 |
fluentbit.io/exclude_stdout: "true" |
只排除 Pod 中所有容器上的 stdout 資料流 |
fluentbit.io/exclude_stderr: "true" |
只排除 Pod 中所有容器上的 stderr 資料流 |
fluentbit.io/exclude_container1: "true" |
只針對 Pod 中的 container1 排除 stdout 和 stderr 資料流 |
fluentbit.io/exclude_stdout_container1: "true" |
只針對 Pod 中的 container1 排除 stdout |
注意
這些註釋是 Fluent Bit 型的註釋。 如果您使用自己的 Fluent-Bit 型記錄收集解決方案搭配 Kubernetes 外掛程式篩選和註釋型排除,則其會停止從容器深入解析和您的解決方案中收集記錄。
以下是 Pod 規格中的 fluentbit.io/exclude: "true"
註釋的範例:
apiVersion: v1
kind: Pod
metadata:
name: apache-logs
labels:
app: apache-logs
annotations:
fluentbit.io/exclude: "true"
spec:
containers:
- name: apache
image: edsiper/apache_logs
篩選環境變數
使用 ConfigMap 搭配下列設定,啟用叢集中所有 Pod 和節點的環境變數集合。
[log_collection_settings.env_var]
enabled = true
如果全域啟用環境變數收集,您可以針對特定容器將它停用,其做法是使用 Dockerfile 設定或在 env:
區段底下的 Pod 的組態檔中,將環境變數 AZMON_COLLECT_ENV
設定為 False
。 如果全域已停用環境變數集合,您無法針對特定容器啟用集合。 唯一可以在容器層級套用的覆寫,就是在全域啟用集合時加以停用。
對視覺效果和警示的影響
如果您有任何使用容器深入解析資料的自訂警示或活頁簿,則修改資料集合設定可能會降低這些體驗。 如果您排除命名空間或降低資料收集頻率,請檢閱使用此資料的現有警示、儀表板和活頁簿。
若要掃描參考這些資料表的警示,請執行下列 Azure Resource Graph 查詢:
resources
| where type in~ ('microsoft.insights/scheduledqueryrules') and ['kind'] !in~ ('LogToMetric')
| extend severity = strcat("Sev", properties["severity"])
| extend enabled = tobool(properties["enabled"])
| where enabled in~ ('true')
| where tolower(properties["targetResourceTypes"]) matches regex 'microsoft.operationalinsights/workspaces($|/.*)?' or tolower(properties["targetResourceType"]) matches regex 'microsoft.operationalinsights/workspaces($|/.*)?' or tolower(properties["scopes"]) matches regex 'providers/microsoft.operationalinsights/workspaces($|/.*)?'
| where properties contains "Perf" or properties contains "InsightsMetrics" or properties contains "ContainerInventory" or properties contains "ContainerNodeInventory" or properties contains "KubeNodeInventory" or properties contains"KubePodInventory" or properties contains "KubePVInventory" or properties contains "KubeServices" or properties contains "KubeEvents"
| project id,name,type,properties,enabled,severity,subscriptionId
| order by tolower(name) asc
下一步
- 請參閱容器深入解析中的資料轉換,以將轉換新增至 DCR,以根據詳細準則進一步篩選資料。