Dela via


Filtrera och transformera Kubernetes-containerloggar med hjälp av datatransformeringar i Azure Monitor

Den här artikeln beskriver hur du implementerar datatransformeringar med containerloggdata från ditt Kubernetes-kluster. 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!

Artikeln Filter container log collection with ConfigMap describes standard configuration settings to configure and filter container log collection ( Filtrera containerloggsamling med ConfigMap ) beskriver standardkonfigurationsinställningar för att konfigurera och filtrera containerloggsamling. 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.

Regler för datainsamling

Transformeringar implementeras i datainsamlingsregler (DCR) som används för att konfigurera datainsamling i Azure Monitor. När du aktiverar övervakning av Prometheus-mått och containerloggning för dina Kubernetes-kluster i Azure Monitor skapas separata domänkontrollanter för varje typ av data. Transformationer kan läggas till i DCR som samlar in containerloggar.

Utför någon av följande åtgärder för att skapa en transformering:

  • Nytt kluster. Använd en befintlig ARM-mall för att registrera ett AKS-kluster till Container Insights. Ändra DCR i den mallen med den konfiguration du behöver, inklusive en transformation 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.

Anteckning

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 manuellt redigera DCR-filen. 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.

De resurser som skapas när du aktiverar övervakning av Prometheus-mått och containerloggning för dina Kubernetes-kluster i Azure Monitor beskrivs i följande tabeller.

Loggsamling

Resursnamn Resurstyp Resursgrupp Region/plats Description
MSCI-<aksclusterregion>-<clustername> Regler för datainsamling Samma som kluster Samma som Log Analytics-arbetsytan Associerad med AKS-klusterresursen definierar konfigurationen av logginsamlingen av Azure Monitor-agenten. Det här är DCR för att lägga till transformeringen.

Hanterad Prometheus

Resursnamn Resurstyp Resursgrupp Region/plats Description
MSPROM-<aksclusterregion>-<clustername> Regler för datainsamling Samma som kluster Samma som Azure Monitor-arbetsytan Associerad med AKS-klusterresursen definierar konfigurationen för insamling av Prometheus-mätvärden med hjälp av tillägget för mätvärden.
MSPROM-<aksclusterregion>-<clustername> Slutpunkt för datainsamling Samma som kluster Samma som Azure Monitor-arbetsytan Används av DCR för att mata in Prometheus-mått från måtttillägget.

När du skapar en ny Azure Monitor-arbetsyta skapas följande ytterligare resurser.

Resursnamn Resurstyp Resursgrupp Region/plats Description
<azuremonitor-workspace-name> Regler för datainsamling MA_<azuremonitor-arbetsyta-namn>_<azuremonitor-arbetsyta-region>_hanterad Samma som Azure Monitor-arbetsyta DCR som ska användas om du använder Remote Write från en Prometheus-server.
<azuremonitor-workspace-name> Slutpunkt för datainsamling MA_<azuremonitor-arbetsyta-namn>_<azuremonitor-arbetsyta-region>_hanterad Samma som Azure Monitor-arbetsyta DCE som ska användas om du använder Remote Write från en Prometheus-server.

Datakällor

Avsnittet Datakällor i DCR definierar de olika typer av inkommande data som DCR ska bearbeta. När det gäller Container Insights är detta extension för containerinsikter, som innehåller ett eller flera fördefinierade objekt streams som börjar 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 kommer DCR att använda Microsoft-ContainerInsights-Group-Default-strömmen, som är en gruppström som innehåller alla strömmar som anges i strömvä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 DCR-exempel för prov 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 behöver en transformering kan grupperas tillsammans i en enda post som endast innehåller målet för arbetsytan. Var och en kommer att skickas till sin standardtabell.

Skapa en separat post för strömmar som kräver en transformering. Detta bör omfatta målet för arbetsytan och egenskapen transformKql. 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 konfigurera ContainerLogV2 för Basic-loggar och skicka dessa poster till en alternativ tabell.

För den här strategin krävs två omvandlingar. Den första omvandlingen skickar posterna med LogLevel eller error till en anpassad tabell med namnet critical. Den andra transformeringen skickar de återstående posterna till standarden ContainerLogV2. 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. Ge den namnet ContainerLogV2_CL.

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