Dela via


Datatransformeringar i Container Insights

Den här artikeln beskriver hur du implementerar datatransformeringar i Container Insights. Med transformeringar i Azure Monitor kan du ändra eller filtrera data innan de matas in på Din Log Analytics-arbetsyta. De gör att du kan utföra sådana åtgärder som att filtrera bort data som samlats in från klustret för att spara kostnader eller bearbeta inkommande data som hjälp i dina datafrågor.

Viktigt!

I artiklarna Konfigurera logginsamling i Container insights och filtreringsloggsamling i Container Insights beskrivs standardkonfigurationsinställningar för att konfigurera och filtrera datainsamling för Container Insights. Du bör utföra alla nödvändiga konfigurationer med hjälp av dessa funktioner innan du använder transformeringar. Använd en transformering för att utföra filtrering eller annan datakonfiguration som du inte kan utföra med standardkonfigurationsinställningarna.

Datainsamlingsregel

Transformeringar implementeras i datainsamlingsregler (DCR) som används för att konfigurera datainsamling i Azure Monitor. Konfigurera datainsamling med DCR beskriver den DCR som skapas automatiskt när du aktiverar Containerinsikter i ett kluster. Om du vill skapa en transformering måste du utföra någon av följande åtgärder:

  • Nytt kluster. Använd en befintlig ARM-mall för att registrera ett AKS-kluster till Container Insights. Ändra domänkontrollanten i mallen med den konfiguration som krävs, inklusive en transformering som liknar ett av exemplen nedan.
  • Befintlig DCR. När ett kluster har registrerats för containerinsikter och konfigurerad datainsamling redigerar du dess DCR för att inkludera en transformering med någon av metoderna i Redigera datainsamlingsregler.

Kommentar

Det finns för närvarande minimalt användargränssnitt för redigering av domänkontrollanter, vilket krävs för att lägga till transformeringar. I de flesta fall måste du redigera domänkontrollanten manuellt. Den här artikeln beskriver DCR-strukturen som ska implementeras. Se Skapa och redigera regler för datainsamling (DCR) i Azure Monitor för vägledning om hur du implementerar den strukturen.

Datakällor

Avsnittet Datakällor i DCR definierar de olika typer av inkommande data som DCR ska bearbeta. För Container Insights är det här containerinsiktstillägget, som innehåller en eller flera fördefinierade streams start med prefixet Microsoft-.

Listan över Container Insights-strömmar i DCR beror på den kostnadsförinställning som du har valt för klustret. Om du samlar in alla tabeller använder Microsoft-ContainerInsights-Group-Default DCR strömmen, som är en gruppström som innehåller alla strömmar som anges i Stream-värden. Du måste ändra detta till enskilda strömmar om du ska använda en transformering. Andra inställningar för förinställda kostnader använder redan enskilda strömmar.

Exemplet nedan visar Microsoft-ContainerInsights-Group-Default strömmen. Se exempel-DCR :er för exempel som använder enskilda strömmar.

"dataSources": {
    "extensions": [
        {
            "streams": [
                "Microsoft-ContainerInsights-Group-Default"
            ],
            "name": "ContainerInsightsExtension",
            "extensionName": "ContainerInsights",
            "extensionSettings": { 
                "dataCollectionSettings": {
                    "interval": "1m",
                    "namespaceFilteringMode": "Off",
                    "namespaces": null,
                    "enableContainerLogV2": true
                }
            }
        }
    ]
}

Dataflöden

Avsnittet Dataflöden i DCR matchar strömmar med mål som definieras i destinations avsnittet i DCR. Tabellnamn behöver inte anges för kända strömmar om data skickas till standardtabellen. Strömmar som inte kräver en transformering kan grupperas tillsammans i en enda post som endast innehåller arbetsytans mål. Var och en skickas till standardtabellen.

Skapa en separat post för strömmar som kräver en transformering. Detta bör omfatta arbetsytans mål och transformKql egenskapen. Om du skickar data till en alternativ tabell måste du inkludera egenskapen outputStream som anger namnet på måltabellen.

Exemplet nedan visar avsnittet dataFlows för en enda ström med en transformering. Se exempel-DCR för flera dataflöden i en enda DCR.

"dataFlows": [
    {
        "streams": [
            "Microsoft-ContainerLogV2"
        ],
        "destinations": [
            "ciworkspace"
        ],
        "transformKql": "source | where PodNamespace == 'kube-system'"
    }
]

Exempel på domänkontrollanter

Filtrera data

Det första exemplet filtrerar bort data från ContainerLogV2 baserat på LogLevel kolumnen. Endast poster med en LogLevel av error eller critical samlas in eftersom det här är de poster som du kan använda för aviseringar och identifiering av problem i klustret. Samla in och lagra andra nivåer, till exempel info och debug generera kostnader utan betydande värde.

Du kan hämta dessa poster med hjälp av följande loggfråga.

ContainerLogV2 | where LogLevel in ('error', 'critical')

Den här logiken visas i följande diagram.

Diagram som visar filtrering av containerloggar med hjälp av en transformering.

I en transformering används tabellnamnet source för att representera inkommande data. Följande är den ändrade fråga som ska användas i omvandlingen.

source | where LogLevel in ('error', 'critical')

Följande exempel visar den här omvandlingen som lagts till i CONTAINER INSIGHTS DCR. Observera att ett separat dataflöde används för Microsoft-ContainerLogV2 eftersom det här är den enda inkommande dataströmmen som omvandlingen ska tillämpas på. Ett separat dataflöde används för de andra strömmarna.

{
    "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')"
            }
        ],
    },
}

Skicka data till olika tabeller

I exemplet ovan samlas endast poster med en LogLevel av error eller critical in. En alternativ strategi i stället för att inte samla in dessa poster alls är att spara dem i en alternativ tabell som konfigurerats för grundläggande loggar.

För den här strategin krävs två omvandlingar. Den första omvandlingen skickar posterna med LogLevel eller critical error till standardtabellen. Den andra omvandlingen skickar de andra posterna till en anpassad tabell med namnet ContainerLogV2_CL. Frågorna för var och en visas nedan med hjälp av source för inkommande data enligt beskrivningen i föregående exempel.

# 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')

Den här logiken visas i följande diagram.

Diagram som visar filtrering av containerloggar med hjälp av en transformering som skickar vissa data till analystabellen och andra data till grundläggande loggar.

Viktigt!

Innan du installerar DCR i det här exemplet måste du skapa en ny tabell med samma schema som ContainerLogV2. Namnge den ContainerLogV2_CL och konfigurera den för grundläggande loggar.

Följande exempel visar den här omvandlingen som lagts till i CONTAINER INSIGHTS DCR. Det finns två dataflöden för Microsoft-ContainerLogV2 i denna DCR, en för varje transformering. Den första skickar till standardtabellen som du inte behöver ange ett tabellnamn. Den andra kräver att outputStream egenskapen anger måltabellen.

{
    "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"
            }
        ],
    },
}

Nästa steg