Delen via


Kubernetes-containerlogboeken filteren en transformeren met behulp van gegevenstransformaties in Azure Monitor

In dit artikel wordt beschreven hoe u gegevenstransformaties implementeert met containerlogboekgegevens uit uw Kubernetes-cluster. Met transformaties in Azure Monitor kunt u gegevens wijzigen of filteren voordat deze worden opgenomen in uw Log Analytics-werkruimte. Hiermee kunt u acties uitvoeren zoals het filteren van gegevens die zijn verzameld uit uw cluster om kosten te besparen of binnenkomende gegevens te verwerken om u te helpen bij uw gegevensquery's.

Belangrijk

In het artikel Containerlogboekverzameling filteren met ConfigMap worden standaardconfiguratie-instellingen beschreven voor het configureren en filteren van containerlogboekverzameling. U moet alle vereiste configuraties uitvoeren met behulp van deze functies voordat u transformaties gebruikt. Gebruik een transformatie om filters of andere gegevensconfiguraties uit te voeren die u niet kunt uitvoeren met de standaardconfiguratie-instellingen.

Gegevensverzamelingsregels

Transformaties worden geïmplementeerd in regels voor gegevensverzameling (DCR's) die worden gebruikt voor het configureren van gegevensverzameling in Azure Monitor. Wanneer u bewaking van metrische gegevens en containerlogboeken van Prometheus inschakelt voor uw Kubernetes-clusters in Azure Monitor, worden afzonderlijke DCR's gemaakt voor elk type gegevens. Transformaties kunnen worden toegevoegd aan de DCR die containerlogboeken verzamelt.

Voer een van de volgende acties uit om een transformatie te maken:

  • Nieuw cluster. Gebruik een bestaande ARM-sjabloon om een AKS-cluster te onboarden naar Container Insights. Wijzig de DCR in die sjabloon met uw vereiste configuratie, inclusief een transformatie die vergelijkbaar is met een van de onderstaande voorbeelden.
  • Bestaande DCR. Nadat een cluster is toegevoegd aan Container Insights en de configuratie van gegevensverzameling is ingesteld, bewerkt u de DCR om een transformatie op te nemen met behulp van een van de methoden in Regels voor het bewerken van gegevensverzameling.

Notitie

Er is momenteel een minimale gebruikersinterface voor het bewerken van DCR's. Dit is vereist om transformaties toe te voegen. In de meeste gevallen moet u de DCR handmatig bewerken. In dit artikel wordt de DCR-structuur beschreven die moet worden geïmplementeerd. Zie Regels voor gegevensverzameling (DCR's) maken en bewerken in Azure Monitor voor hulp bij het implementeren van die structuur.

De resources die worden gemaakt wanneer u Prometheus-metrieken en containerlogboekregistratie voor uw Kubernetes-clusters in Azure Monitor inschakelt, worden beschreven in de volgende tabellen.

Logboekverzameling

Resourcenaam Type bron Resourcegroep Regio/locatie Description
MSCI-<aksclusterregion>-<clustername> Gegevensverzamelingsregel Hetzelfde als cluster Hetzelfde als Log Analytics-werkruimte Gekoppeld aan de AKS-clusterresource definieert u de configuratie van logboekverzamelingen door de Azure Monitor-agent. Dit is de DCR om de transformatie toe te voegen.

Managed Prometheus-service

Resourcenaam Type bron Resourcegroep Regio/locatie Description
MSPROM-<aksclusterregion>-<clustername> Gegevensverzamelingsregel Hetzelfde als cluster Hetzelfde als azure Monitor-werkruimte Gekoppeld aan de AKS-clusterresource definieert u de configuratie van prometheus-verzameling metrische gegevens per invoegtoepassing voor metrische gegevens.
MSPROM-<aksclusterregion>-<clustername> Eindpunt voor gegevensverzameling Hetzelfde als cluster Hetzelfde als azure Monitor-werkruimte Wordt gebruikt door de DCR voor het opnemen van Prometheus-metrieken uit de metrics addon.

Wanneer u een nieuwe Azure Monitor-werkruimte maakt, worden de volgende aanvullende resources gemaakt.

Resourcenaam Type bron Resourcegroep Regio/locatie Description
<azuremonitor-workspace-name> Gegevensverzamelingsregel <MA_azuremonitor-workspace-name>_<azuremonitor-workspace-region>_managed Hetzelfde als Azure Monitor-werkruimte DCR moet worden gebruikt als u Remote Write vanaf een Prometheus-server gebruikt.
<azuremonitor-workspace-name> Eindpunt voor gegevensverzameling <MA_azuremonitor-workspace-name>_<azuremonitor-workspace-region>_managed Hetzelfde als Azure Monitor-werkruimte DCE moet worden gebruikt als je Remote Write vanaf een Prometheus-server gebruikt.

Gegevensbronnen

De sectie Gegevensbronnen van de DCR definieert de verschillende typen binnenkomende gegevens die door de DCR worden verwerkt. Voor containerinzichten is dit de Container Insights-extensie, die een of meer vooraf gedefinieerde streams bestanden bevat die beginnen met het voorvoegsel Microsoft-.

De lijst met Container Insights-streams in de DCR is afhankelijk van de vooraf ingestelde kosten die u voor het cluster hebt geselecteerd. Als u alle tabellen verzamelt, gebruikt de DCR de Microsoft-ContainerInsights-Group-Default stream. Dit is een groepsstroom die alle streams bevat die worden vermeld in Stream-waarden. U moet dit wijzigen in afzonderlijke streams als u een transformatie gaat gebruiken. Voor alle andere vooraf ingestelde kosteninstellingen worden al afzonderlijke streams gebruikt.

In het onderstaande voorbeeld ziet u de Microsoft-ContainerInsights-Group-Default stream. Zie de voorbeeld-DCR's voor voorbeelden met behulp van afzonderlijke streams.

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

Gegevensstromen

De sectie Gegevensstromen van de DCR komt overeen met streams met bestemmingen die zijn gedefinieerd in de destinations sectie van de DCR. Tabelnamen hoeven niet te worden opgegeven voor bekende streams als de gegevens naar de standaardtabel worden verzonden. De streams waarvoor geen transformatie is vereist, kunnen worden gegroepeerd in één vermelding die alleen het doel van de werkruimte bevat. Elk wordt verzonden naar de standaardtabel.

Maak een afzonderlijke vermelding voor streams waarvoor een transformatie is vereist. Dit moet het doel van de werkruimte en de transformKql eigenschap bevatten. Als u gegevens naar een alternatieve tabel verzendt, moet u de outputStream eigenschap opnemen waarmee de naam van de doeltabel wordt opgegeven.

In het onderstaande voorbeeld ziet u de dataFlows sectie voor één stream met een transformatie. Zie de voorbeeld-DCR's voor meerdere gegevensstromen in één DCR.

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

Voorbeeld DCR's

Gegevens filteren

In het eerste voorbeeld worden gegevens uit de ContainerLogV2 kolom gefilterd op basis van de LogLevel kolom. Alleen records met een LogLevel van error of critical worden verzameld omdat dit de vermeldingen zijn die u kunt gebruiken voor waarschuwingen en het identificeren van problemen in het cluster. Het verzamelen en opslaan van andere niveaus, zoals info en debug, veroorzaken kosten zonder aanzienlijke waarde.

U kunt deze records ophalen met behulp van de volgende logboekquery.

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

Deze logica wordt weergegeven in het volgende diagram.

Diagram met het filteren van containerlogboeken met behulp van een transformatie.

In een transformatie wordt de tabelnaam source gebruikt om de binnenkomende gegevens weer te geven. Hier volgt de gewijzigde query die in de transformatie moet worden gebruikt.

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

In het volgende voorbeeld ziet u deze transformatie die is toegevoegd aan de DCR van Container Insights. Houd er rekening mee dat er een afzonderlijke gegevensstroom wordt gebruikt Microsoft-ContainerLogV2 omdat dit de enige binnenkomende stroom is waarop de transformatie moet worden toegepast. Er wordt een afzonderlijke gegevensstroom gebruikt voor de andere stromen.

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

Gegevens verzenden naar verschillende tabellen

In het bovenstaande voorbeeld worden alleen bestanden verzameld die een LogLevel van error of critical hebben. Een alternatieve strategie in plaats van deze records helemaal niet te verzamelen, is het configureren van ContainerLogV2 voor basislogboeken en het verzenden van deze records naar een alternatieve tabel.

Voor deze strategie zijn twee transformaties nodig. Met de eerste transformatie worden de records met LogLevelerror of critical naar een aangepaste tabel met de naam verzonden ContainerLogV2_CL. De tweede transformatie verzendt de andere records naar de standaard ContainerLogV2. De queries voor ieder worden hieronder weergegeven met behulp van de binnenkomende gegevens source, zoals beschreven in het vorige voorbeeld.

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

Deze logica wordt weergegeven in het volgende diagram.

Diagram met het filteren van containerlogboeken met behulp van een transformatie waarmee sommige gegevens worden verzonden naar een analysetabel en andere gegevens naar basislogboeken.

Belangrijk

Voordat u de DCR in dit voorbeeld installeert, moet u een nieuwe tabel maken met hetzelfde schema als ContainerLogV2. Geef deze de naam ContainerLogV2_CL.

In het volgende voorbeeld ziet u deze transformatie die is toegevoegd aan de DCR van Container Insights. Er zijn twee gegevensstromen voor Microsoft-ContainerLogV2 in deze DCR, één voor elke transformatie. De eerste wordt naar de standaardtabel verzonden, waarbij u geen tabelnaam hoeft op te geven. Voor de tweede moet de eigenschap de outputStream doeltabel opgeven.

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

Volgende stappen