Delen via


Gegevenstransformaties in Container Insights

In dit artikel wordt beschreven hoe u gegevenstransformaties implementeert in Container Insights. 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 de artikelen Logboekverzameling configureren in containerinzichten en het filteren van logboekverzamelingen in Container Insights worden standaardconfiguratie-instellingen beschreven voor het configureren en filteren van gegevensverzameling voor Container Insights. 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.

Regel voor gegevensverzameling

Transformaties worden geïmplementeerd in regels voor gegevensverzameling (DCR's) die worden gebruikt voor het configureren van gegevensverzameling in Azure Monitor. Gegevensverzameling configureren met DCR beschrijft de DCR die automatisch wordt gemaakt wanneer u Container Insights inschakelt in een cluster. Als u een transformatie wilt maken, moet u een van de volgende acties uitvoeren:

  • 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 containerinzichten en het verzamelen van gegevens, 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.

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 het genereren van 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 records met een LogLevel van error of critical verzameld. Een alternatieve strategie in plaats van deze records helemaal niet te verzamelen, is door ze op te slaan in een alternatieve tabel die is geconfigureerd voor basislogboeken.

Voor deze strategie zijn twee transformaties nodig. Met de eerste transformatie worden de records met LogLevel error of critical naar de standaardtabel verzonden. De tweede transformatie verzendt de andere records naar een aangepaste tabel met de naam ContainerLogV2_CL. De query's voor elke query worden hieronder weergegeven met behulp van source de binnenkomende gegevens, 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 ContainerLogV2_CL een naam en configureer deze voor basislogboeken.

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 verzonden naar de standaardtabel die u niet nodig hebt om een tabelnaam 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