容器深入解析記錄結構描述
容器深入解析會將所收集的記錄資料儲存在名為 ContainerLogV2 的表格中。 本文說明此表格的結構描述及其從舊版 ContainerLog 表格的比較和移轉。
重要
ContainerLogV2 是透過 CLI 2.54.0 版和更新版本的 ConfigMap 的預設結構描述。 對於透過使用 ARM、Bicep、Terraform、原則和入口網站上線的受控識別驗證,將容器深入解析上線的客戶,ContainerLogV2 是預設的擷取格式。 ContainerLogV2 可以使用資料收集設定,透過 CLI 2.51.0 版或更高版本明確啟用。
ContainerLog 表格的支援將於 2026 年 9 月 30 日淘汰。
表格比較
下表醒目提示使用 ContainerLogV2 和 ContainerLog 結構描述之間的主要差異。
功能差異 | ContainerLog | ContainerLogV2 |
---|---|---|
結構描述 | ContainerLog 的詳細資料。 | ContainerLogV2 的詳細資料。 其他資料行為: - ContainerName - PodName - PodNamespace - LogLevel 1- KubernetesMetadata 2 |
登入 | 只能透過 ConfigMap 進行設定。 | 可透過 ConfigMap 和 DCR 來設定。 3 |
定價 | 只與全價分析記錄相容。 | 除了分析記錄之外,還支援低成本基本記錄層。 |
查詢 | 建立自我聯結通常需要多重聯結條件。 | 包含額外的 Pod 和容器中繼資料,以減少查詢複雜性和聯結作業。 |
多行 | 不支援多行項目會分割成多個列。 | 支援多行記錄,以允許多行輸出的合併單一項目。 |
1如果 LogMessage 是有效的 JSON,而且具有具名 層級的索引鍵,則會使用其值。 否則,我們會使用以 regex 為基礎的關鍵詞比對方法,從 LogMessage 本身推斷 LogLevel。 請注意,您可能會看到一些分類錯誤,因為此值是推斷的。
2KubernetesMetadata 是選擇性數據行,而且可以使用 Kubernetes 元數據功能來啟用此欄位的集合。 此欄位的值是 JSON,其中包含 podLabels、podAnnotations、podUid、Image、ImageTag 和 Image 存放庫等字段。
3使用服務主體驗證型叢集的叢集不支援 DCR 設定。 若要使用此體驗, 請將叢集與服務主體移轉至受控識別。
注意
如果傳入的 LogMessage 不是有效的 JSON,則不支援匯出至事件中樞和儲存體帳戶。 為了獲得最佳效能,建議您以 JSON 格式發出容器記錄。
評估對現有警示的影響
啟用 ContainerLogsV2 結構描述之前,您應該評估您是否有任何警示規則依賴 ContainerLog 表格。 任何這類警示都必須更新,才能使用新的數據表。
若要瀏覽參考 ContainerLog 表格的警示,請執行下列 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 "ContainerLog"
| project id,name,type,properties,enabled,severity,subscriptionId
| order by tolower(name) asc
啟用 ContainerLogV2 結構描述
您可以使用叢集的資料收集規則 (DCR) 或 ConfigMap,為叢集啟用 ContainerLogV2 結構描述。 如果啟用這兩個設定,ConfigMap 會優先使用。 當 DCR 和 ConfigMap 明確設定為關閉時,Stdout 和 stderr 記錄只會內嵌至 ContainerLog 數據表。
Kubernetes 元數據和記錄篩選
Kubernetes 元數據和記錄篩選會使用更多 Kubernetes 元數據來增強 ContainerLogsV2 架構,例如 PodLabels、PodAnnotations、PodUid、Image、ImageID、ImageRepo 和 ImageTag。 此外,記錄 篩選 功能提供工作負載和平臺(即系統命名空間)容器的篩選功能。 有了這些功能,使用者就會獲得更豐富的內容,並改善工作負載的可見度。
主要功能
使用 Kubernetes 元數據欄位增強的 ContainerLogV2 架構: Kubernetes 記錄元數據引進了其他選擇性元數據欄位,可增強使用簡單 Log Analytics 查詢的疑難解答體驗,並移除與其他數據表聯結的需求。 這些欄位包含基本資訊,例如 “PodLabels”、“PodAnnotations”、“PodUid”、“ImageID”、“ImageRepo” 和 “ImageTag”。 藉由讓此內容可供使用,使用者可以快速進行疑難解答,並快速找出問題。
自定義的包含清單組態: 用戶可以透過編輯 configmap 來量身打造想要查看的新元數據字段。 請注意,啟用 時
metadata_collection
,預設會收集所有元數據欄位,而且如果您想要選取特定欄位,請取消批include_fields
注並指定需要收集的欄位。
增強的 ContainerLogV2 架構與記錄層級: 用戶現在可以根據色彩編碼嚴重性層級來評估應用程式健康情況,例如 CRITICAL、ERROR、WARNING、INFO、DEBUG、TRACE 或 UNKNOWN。 這是事件回應和主動式監視的重要工具。 藉由以可視化方式區分嚴重性層級,使用者可以快速找出受影響的資源。 色彩編碼系統可簡化調查程式,並讓用戶藉由選取面板進一步向下切入,以取得進一步偵錯的探索體驗。 不過,請務必注意,這項功能僅適用於使用 Grafana 時。 如果您使用Log Analytics工作區,LogLevel 只是 ContainerLogV2 資料表中的另一個數據行。
工作負載的註釋型記錄篩選: 透過Pod註釋有效率的記錄篩選技術。 用戶可以專注於相關信息,而不需篩選雜訊。 註釋型篩選可讓用戶藉由標註 Pod 來排除特定 Pod 和容器的記錄收集,這有助於大幅降低記錄分析成本。
平台記錄的 ConfigMap 型記錄篩選(系統 Kubernetes 命名空間): 平台記錄是由系統 (或類似限制的) 命名空間中的容器所發出。 根據預設,系統會排除系統命名空間中的所有容器記錄,以將Log Analytics成本降到最低。 不過,在特定疑難解答案例中,系統容器的容器記錄扮演重要角色。 例如,請考慮 kube-system 命名空間內的 coredns 容器。 若要從 coredns 容器窗體 kube-system 中獨佔收集記錄 (stdout 和 stderr),您可以在 configmap 中啟用下列設定。
- 適用於視覺效果的 Grafana 儀錶板: Grafana 儀錶板不僅會顯示記錄層級的色彩編碼視覺效果,範圍從 CRITICAL 到 UNKNOWN,也會深入探討記錄磁碟區、記錄速率、記錄記錄、記錄檔。 使用者可以取得時間敏感分析、一段時間記錄層級趨勢的動態深入解析,以及重要的實時監視。 我們也提供計算機、Pod 和容器的詳細細目,其可提供深入分析和精確疑難解答功能。最後,在新記錄數據表體驗中,使用者可以使用展開檢視來檢視深度詳細數據,並檢視每個數據行中的數據,並放大他們想要查看的資訊。
以下是展示 Grafana 儀錶板的影片:
如何啟用 Kubernetes 元數據和記錄篩選
必要條件
移轉至受控識別驗證。 深入了解。
確定已啟用 ContainerLogV2。 受控識別驗證叢集預設會啟用此架構。 如果沒有, 請啟用 ContainerLogV2 架構。
限制
ContainerLogV2 Grafana 儀錶板不支援 ContainerLogV2 數據表上的基本記錄 SKU。
啟用 Kubernetes 元數據
- 下載 configmap,並將設定從 false 修改為 true,如下列螢幕快照所示。 請注意,預設會收集所有支援的元數據欄位。 如果您想要收集特定欄位,請在 中
include_fields
指定必要的欄位。
套用 ConfigMap。 請參閱 設定 configmap 以深入瞭解部署和設定 ConfigMap。
幾分鐘后,數據應該會使用 Kubernetes Logs Metadata 流入您的 ContainerLogV2 數據表,如下列螢幕快照所示。
上線至 Grafana 儀錶板體驗
- 在 [深入解析] 索引卷標下,選取 [監視設定] 並上線至具有 10.3.4+ 版的 Grafana 儀錶板
- 檢查訪問控制 (IAM) 以確保您有一個 Grafana 管理員/編輯器/讀取者角色。 如果沒有,請加以新增。
- 請確定您的 Grafana 實例可以存取 Azure Logs Analytics(LA) 工作區。 如果它沒有存取權,您必須將 La 工作區的 Grafana 實例監視讀取者角色存取權授與 Grafana 實例。
流覽至 Grafana 工作區,然後從 Grafana 資源庫匯 入 ContainerLogV2 儀錶板 。
選取 DataSource、訂用帳戶、ResourceGroup、叢集、命名空間和標籤的資訊。 然後,儀錶板會填入如下螢幕快照中所述。
注意
當您一開始載入 Grafana 儀錶板時,可能會因為尚未選取變數而擲回一些錯誤。 若要防止這種情況重複執行,請在選取一組變數之後儲存儀錶板,讓它在第一次開啟時變成預設值。
啟用註釋型篩選
請遵循下列所述的步驟來啟用批注型篩選。 發佈相關的篩選文件之後,請在這裡尋找連結。
- 下載 configmap,並將設定從 false 修改為 true,如下列螢幕快照所示。
套用 ConfigMap。 請參閱 設定 configmap 以深入瞭解部署和設定 ConfigMap。
在工作負載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 位為基礎。 如果您使用自己的 Fluent-bit 型記錄收集解決方案搭配 Kubernetes 外掛程式篩選和註釋型排除,它會停止從 Container Insights 和您的解決方案收集記錄。
以下是 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 型記錄篩選 (系統 Kubernetes 命名空間)
- 下載 configmap 並修改 與 相關的
collect_system_pod_logs
exclude_namespaces
設定。
例如,若要在 kube-system 命名空間中收集 coredns 容器的 stdout 和 stderr 記錄,請確定 kube-system 命名空間不在 中 exclude_namespaces
,此功能僅限於下列系統命名空間:kube-system、gatekeeper-system、calico-system、azure-arc、kube-public 和 kube-node-lease 命名空間。
- 套用 ConfigMap。 請參閱 設定 configmap 以深入瞭解部署和設定 ConfigMap。
容器深入解析的多行記錄
啟用多行記錄后,先前分割的容器記錄會合併在一起,並以單一項目傳送至 ContainerLogV2 表格。 如果合併的記錄行大於 64 KB,則會因為 Log Analytics 工作區限制而遭到截斷。 這項功能也支援 .NET、Go、Python 和 Java 堆疊追蹤,其會顯示為 ContainerLogV2 表格中的單一項目。 使用 ConfigMap 啟用多行記錄,如使用 ConfigMap 在容器深入解析中設定資料收集中所述。
注意
configmap 現在具有語言規格選項,其中客戶只能選取他們感興趣的語言。 在 configmap 的 [stacktrace_languages] 選項中編輯語言,即可啟用此功能。
下列螢幕擷取畫面會顯示 Go 例外狀況堆疊追蹤的多行記錄:
多行記錄已停用
多行記錄已啟用
Java 堆疊追蹤
Python 堆疊追蹤