Trasformazioni dei dati in Container Insights
Questo articolo descrive come implementare le trasformazioni dei dati in Container Insights. Le trasformazioni in Monitoraggio di Azure consentono di modificare o filtrare i dati prima di inserirli in un’area di lavoro Log Analytics. Consentono di eseguire azioni come il filtro dei dati raccolti dal cluster per risparmiare sui costi o l'elaborazione dei dati in ingresso per facilitare le query sui dati.
Importante
Gli articoli Configurare una raccolta di log in Container Insights e Filtro di una raccolta di log in Container Insights descrivono le impostazioni di configurazione standard per configurare e filtrare una raccolta di dati Container Insights. È consigliabile eseguire qualsiasi configurazione necessaria usando queste funzionalità prima di usare le trasformazioni. Usare una trasformazione per eseguire filtri o altre configurazioni di dati che non è possibile eseguire con le impostazioni di configurazione standard.
Regola di raccolta dei dati
Le trasformazioni vengono implementate in regole di raccolta dati (DCR) usate per configurare la raccolta dati in Monitoraggio di Azure. Configurare la raccolta dati tramite DCR descrive la DCR creata automaticamente quando si abilita Container Insights in un cluster. Per creare una trasformazione, è necessario eseguire una delle azioni seguenti:
- Nuovo cluster. Usare un modello di ARM esistente per eseguire l'onboarding di un cluster del servizio Azure Kubernetes (AKS) in Container Insights. Modificare la DCR in tale modello con la configurazione richiesta, inclusa una trasformazione simile a uno degli esempi seguenti.
- DCR esistente. Dopo aver eseguito l'onboarding di un cluster in Container Insights e aver configurato una raccolta dati, modificare la relativa DCR per includere una trasformazione usando uno dei metodi indicati in Modifica delle regole di raccolta dati.
Nota
Attualmente è disponibile un'interfaccia utente minima per la modifica di DCR, necessaria per aggiungere trasformazioni. Nella maggior parte dei casi, è necessario modificare manualmente la DCR. Questo articolo descrive la struttura di DCR da implementare. Per informazioni dettagliate su come implementare tale struttura, vedere Creare e modificare regole di raccolta dei dati (DCR) in Monitoraggio di Azure.
Origini dati
La sezione Origini dati del DCR definisce i diversi tipi di dati in ingresso che verranno elaborati dal DCR. Per Container Insights, è l'estensione Container Insights che include uno o più streams
predefiniti che iniziano con il prefisso Microsoft-.
L'elenco dei flussi di Container Insights nella DCR dipende dal Costo preimpostato selezionato per il cluster. Se si raccolgono tutte le tabelle, la DCR userà il flusso Microsoft-ContainerInsights-Group-Default
, ovvero un flusso di gruppo che include tutti i flussi elencati in Valori flusso. Se verrà usata una trasformazione, è necessario modificarla in singoli flussi. Tutte le altre impostazioni sul costo preimpostato useranno già flussi singoli.
L'esempio seguente mostra il flusso Microsoft-ContainerInsights-Group-Default
. Per esempi che usano flussi singoli, vedere DCR di esempio.
"dataSources": {
"extensions": [
{
"streams": [
"Microsoft-ContainerInsights-Group-Default"
],
"name": "ContainerInsightsExtension",
"extensionName": "ContainerInsights",
"extensionSettings": {
"dataCollectionSettings": {
"interval": "1m",
"namespaceFilteringMode": "Off",
"namespaces": null,
"enableContainerLogV2": true
}
}
}
]
}
Flussi di dati
La sezione Flussi di dati di DCR corrisponde ai flussi con le destinazioni definite nella destinations
sezione del Registro Azure Container. Non è necessario specificare nomi tabella per i flussi noti se i dati vengono inviati alla tabella predefinita. I flussi che non richiedono una trasformazione possono essere raggruppati in una singola voce che include solo la destinazione dell'area di lavoro. Ognuno verrà inviato alla relativa tabella predefinita.
Creare una voce separata per i flussi che richiedono una trasformazione. Deve includere la destinazione dell'area di lavoro e la proprietà transformKql
. Se si inviano dati a una tabella alternativa, è necessario includere la proprietà outputStream
che specifica il nome della tabella di destinazione.
L'esempio seguente illustra la sezione dataFlows
per un singolo flusso con una trasformazione. Vedere DCR di esempio per più flussi di dati in una singola DCR.
"dataFlows": [
{
"streams": [
"Microsoft-ContainerLogV2"
],
"destinations": [
"ciworkspace"
],
"transformKql": "source | where PodNamespace == 'kube-system'"
}
]
DCR di esempio
Filtro dei dati
Il primo esempio filtra i dati da ContainerLogV2
in base alla colonna LogLevel
. Verranno raccolti solo i record con LogLevel
error
o critical
, poiché queste sono le voci che è possibile usare per l'invio di avvisi e l'identificazione di problemi nel cluster. La raccolta e l'archiviazione di altri livelli, ad esempio info
e debug
generano costi senza valore significativo.
È possibile recuperare questi record usando la query di log seguente.
ContainerLogV2 | where LogLevel in ('error', 'critical')
Questa logica è illustrata nel diagramma seguente.
In una trasformazione, il nome tabella source
viene usato per rappresentare i dati in ingresso. Di seguito è riportata la query modificata da usare nella trasformazione.
source | where LogLevel in ('error', 'critical')
L'esempio seguente illustra questa trasformazione aggiunta alla DCR di Container Insights. Si noti che per Microsoft-ContainerLogV2
viene usato un flusso di dati separato, poiché questo è l'unico flusso in ingresso a cui deve essere applicata la trasformazione. Un flusso di dati separato viene usato per gli altri flussi.
{
"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')"
}
],
},
}
Inviare dati a tabelle diverse
Nell'esempio precedente vengono raccolti solo i record con LogLevel
error
o critical
. Una strategia alternativa alla raccolta di questi record consiste nel salvarli in una tabella alternativa configurata per log di base.
Per questa strategia sono necessarie due trasformazioni. La prima trasformazione invia i record con LogLevel
error
o critical
alla tabella predefinita. La seconda trasformazione invia gli altri record a una tabella personalizzata denominata ContainerLogV2_CL
. Le query per ognuna sono illustrate di seguito usando source
per i dati in ingresso, come descritto nell'esempio precedente.
# 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')
Questa logica è illustrata nel diagramma seguente.
Importante
Prima di installare la DCR in questo esempio, è necessario creare una nuova tabella con lo stesso schema di ContainerLogV2
. Denominarla ContainerLogV2_CL
e configurarla per log di base.
L'esempio seguente illustra questa trasformazione aggiunta alla DCR di Container Insights. In questa DCR esistono due flussi di dati per Microsoft-ContainerLogV2
, uno per ogni trasformazione. Il primo invia alla tabella predefinita, per cui non è necessario specificare un nome di tabella. Il secondo richiede la proprietà outputStream
per specificare la tabella di destinazione.
{
"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"
}
],
},
}
Passaggi successivi
- Altre informazioni sulle trasformazioni e sulle regole di raccolta dati in Monitoraggio di Azure.