容器深入解析中的資料轉換
本文說明如何在容器深入解析中實作資料轉換。 Azure 監視器中的轉換可讓您在資料擷取到 Log Analytics 工作區之前修改或篩選資料。 這可讓您執行的動作包含篩選從叢集收集的資料來節省成本,或處理傳入資料以協助資料查詢。
重要
在容器深入解析中設定記錄收集 (英文) 和 在容器深入解析中篩選記錄收集 (英文) 等文章描述標準組態設定,以設定及篩選容器深入解析的資料收集。 使用轉換之前,您應該先利用這些功能執行任何必要的設定。 使用轉換來執行篩選,或其他您無法使用標準組態設定執行的資料組態。
資料收集規則
轉換會在資料收集規則 (DCR) 中實作,此規則用來在 Azure 監視器中設定資料收集。 使用 DCR 設定資料收集 (英文) 描述當您在叢集上啟用容器深入解析時所自動建立的 DCR。 若要建立轉換,您必須執行下列其中一個動作:
- 新增叢集。 使用現有的 ARM 範本 將 AKS 叢集上線至容器深入解析。 使用必要的設定來修改該範本中的 DCR,包括類似下列其中一個範例的轉換。
- 現有的 DCR。 在叢集上線至容器深入解析和資料收集設定之後,請編輯其 DCR,以使用編輯資料收集規則中的任何方法包含轉換。
注意
目前編輯 DCR 只有最少的 UI,這是新增轉換的必要項目。 在大部分情況下,您必須手動編輯 DCR。 本文說明要實作的 DCR 結構。 如需如何實作該結構的指引,請參閱建立和編輯 Azure 監視器中的資料收集規則 (DCR) (英文)。
資料來源
DCR 的 [數據源] 區段會定義 DCR 將處理的不同傳入資料類型。 針對容器深入解析,這是容器深入解析延伸模組,其中包含一個或多個以 Microsoft- 開頭的預先定義 streams
。
DCR 中的容器深入解析串流清單取決於您為叢集選取的成本預設值。 如果您收集所有資料表,則 DCR 會使用 Microsoft-ContainerInsights-Group-Default
串流,這是一個群組串流,其中包含串流值中列出的所有串流。 如果您要使用轉換,您必須將此變更為個別串流。 任何其他成本預設設定都會使用個別串流。
下列範例顯示 Microsoft-ContainerInsights-Group-Default
串流。 如需使用個別串流的範例,請參閱範例 DCR。
"dataSources": {
"extensions": [
{
"streams": [
"Microsoft-ContainerInsights-Group-Default"
],
"name": "ContainerInsightsExtension",
"extensionName": "ContainerInsights",
"extensionSettings": {
"dataCollectionSettings": {
"interval": "1m",
"namespaceFilteringMode": "Off",
"namespaces": null,
"enableContainerLogV2": true
}
}
}
]
}
資料流程
DCR 的 [數據流] 區段會比對數據流與 DCR 區段中定義的destinations
目的地。 如果要將資料傳送至預設資料表,則不必針對已知的串流指定資料表名稱。 不需要轉換的串流可以在只包含工作區目的地的單一項目中群組在一起。 每個都會傳送至其預設資料表。
針對需要轉換的串流建立個別項目。 這應該包含工作區目的地和 transformKql
屬性。 如果您要將資料傳送至替代資料表,則必須包含指定目的地資料表名稱的 outputStream
屬性。
下列範例針對具有轉換的單一串流顯示 dataFlows
區段。 請參閱範例 DCR,查看單一 DCR 中的多個資料流程。
"dataFlows": [
{
"streams": [
"Microsoft-ContainerLogV2"
],
"destinations": [
"ciworkspace"
],
"transformKql": "source | where PodNamespace == 'kube-system'"
}
]
範例 DCR
篩選資料
第一個範例會根據 LogLevel
資料行篩選出 ContainerLogV2
中的資料。 只會收集具有 error
或 critical
LogLevel
的記錄,因為這些記錄是您可能用於警示及識別叢集中問題的項目。 收集及儲存其他層級 (例如 info
和 debug
) 會產生成本,卻不會產生顯著價值。
您可以使用下列記錄查詢來擷取這些記錄。
ContainerLogV2 | where LogLevel in ('error', 'critical')
下圖中顯示此邏輯。
在轉換中,表格名稱 source
是用來表示傳入資料。 以下是要在轉換中使用的修改查詢。
source | where LogLevel in ('error', 'critical')
下列範例顯示此轉換已新增至容器深入解析 DCR。 請注意,會針對 Microsoft-ContainerLogV2
使用個別資料流程,因為這是應該套用轉換的唯一傳入串流。 針對其他串流則會使用不同的資料流程。
{
"properties": {
"location": "eastus2",
"kind": "Linux",
"dataSources": {
"syslog": [],
"extensions": [
{
"streams": [
"Microsoft-ContainerLogV2",
"Microsoft-KubeEvents",
"Microsoft-KubePodInventory"
],
"extensionName": "ContainerInsights",
"extensionSettings": {
"dataCollectionSettings": {
"interval": "1m",
"namespaceFilteringMode": "Off",
"enableContainerLogV2": true
}
},
"name": "ContainerInsightsExtension"
}
]
},
"destinations": {
"logAnalytics": [
{
"workspaceResourceId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/my-resource-group/providers/microsoft.operationalinsights/workspaces/my-workspace",
"workspaceId": "00000000-0000-0000-0000-000000000000",
"name": "ciworkspace"
}
]
},
"dataFlows": [
{
"streams": [
"Microsoft-KubeEvents",
"Microsoft-KubePodInventory"
],
"destinations": [
"ciworkspace"
],
},
{
"streams": [
"Microsoft-ContainerLogV2"
],
"destinations": [
"ciworkspace"
],
"transformKql": "source | where LogLevel in ('error', 'critical')"
}
],
},
}
將資料傳送至不同的資料表
在上述範例中,只會收集具有 error
或 critical
LogLevel
的記錄。 並非完全不收集這些記錄,替代策略是將記錄儲存到針對基本記錄設定的替代資料表。
針對此策略,需要兩個轉換。 第一個轉換會將具有 error
或 critical
LogLevel
的記錄傳送至預設資料表。 第二個轉換會將其他記錄傳送至名為 ContainerLogV2_CL
的自訂表格。 每個轉換的查詢如下所示,並針對傳入資料使用 source
,如上一個範例中所述。
# Return error and critical logs
source | where LogLevel in ('error', 'critical')
# Return logs that aren't error or critical
source | where LogLevel !in ('error', 'critical')
下圖中顯示此邏輯。
重要
在此範例中安裝 DCR 之前,您必須先建立與 ContainerLogV2
相同結構描述的新資料表。 將其命名為 ContainerLogV2_CL
,並將其針對基本記錄進行設定。
下列範例顯示此轉換已新增至容器深入解析 DCR。 此 DCR 中有兩個 Microsoft-ContainerLogV2
的資料流,每個轉換各有一個。 第一個會傳送至您不必指定表格名稱的預設資料表。 第二個則要求 outputStream
屬性指定目的地資料表。
{
"properties": {
"location": "eastus2",
"kind": "Linux",
"dataSources": {
"syslog": [],
"extensions": [
{
"streams": [
"Microsoft-ContainerLogV2",
"Microsoft-KubeEvents",
"Microsoft-KubePodInventory"
],
"extensionName": "ContainerInsights",
"extensionSettings": {
"dataCollectionSettings": {
"interval": "1m",
"namespaceFilteringMode": "Off",
"enableContainerLogV2": true
}
},
"name": "ContainerInsightsExtension"
}
]
},
"destinations": {
"logAnalytics": [
{
"workspaceResourceId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/my-resource-group/providers/microsoft.operationalinsights/workspaces/my-workspace",
"workspaceId": "00000000-0000-0000-0000-000000000000",
"name": "ciworkspace"
}
]
},
"dataFlows": [
{
"streams": [
"Microsoft-KubeEvents",
"Microsoft-KubePodInventory"
],
"destinations": [
"ciworkspace"
],
},
{
"streams": [
"Microsoft-ContainerLogV2"
],
"destinations": [
"ciworkspace"
],
"transformKql": "source | where LogLevel in ('error', 'critical')"
},
{
"streams": [
"Microsoft-ContainerLogV2"
],
"destinations": [
"ciworkspace"
],
"transformKql": "source | where LogLevel !in ('error','critical')",
"outputStream": "Custom-ContainerLogV2_CL"
}
],
},
}