Filtrera loggsamling i Container Insights
Den här artikeln beskriver de olika filtreringsalternativen som är tillgängliga i Container Insights. Kubernetes-kluster genererar en stor mängd data som samlas in av Container Insights. Eftersom du debiteras för inmatning och kvarhållning av dessa data kan du avsevärt minska dina övervakningskostnader genom att filtrera bort data som du inte behöver.
Viktigt!
Den här artikeln beskriver olika filtreringsalternativ som kräver att du ändrar DCR eller ConfigMap för ett övervakat kluster. Mer information om hur du utför den här konfigurationen finns i Konfigurera loggsamling i Container Insights .
Filtrera containerloggar
Containerloggar är stderr- och stdout-loggar som genereras av containrar i kubernetes-klustret. Dessa loggar lagras i tabellen ContainerLogV2 på Log Analytics-arbetsytan. Som standard samlas alla containerloggar in, men du kan filtrera bort loggar från specifika namnområden eller inaktivera insamling av containerloggar helt.
Med hjälp av datainsamlingsregeln (DCR) kan du aktivera eller inaktivera stdout- och stderr-loggar och filtrera specifika namnområden från var och en. Inställningar för containerloggar och namnområdesfiltrering ingår i de kostnadsförinställningar som konfigurerats i Azure Portal, och du kan ange dessa värden individuellt med hjälp av de andra DCR-konfigurationsmetoderna.
Med ConfigMap kan du konfigurera samlingen av stderr
och stdout
loggarna separat för klustrade, så att du kan välja att aktivera den ena och inte den andra.
I följande exempel visas ConfigMap-inställningarna för att samla in stdout och stderr exklusive kube-system
namnrymderna och gatekeeper-system
.
[log_collection_settings]
[log_collection_settings.stdout]
enabled = true
exclude_namespaces = ["kube-system","gatekeeper-system"]
[log_collection_settings.stderr]
enabled = true
exclude_namespaces = ["kube-system","gatekeeper-system"]
[log_collection_settings.enrich_container_logs]
enabled = true
Plattformsloggfiltrering (System Kubernetes-namnområden)
Som standard undantas containerloggar från systemnamnområdet från samlingen för att minimera Log Analytics-kostnaden. Containerloggar för systemcontainrar kan dock vara kritiska i specifika felsökningsscenarier. Den här funktionen är begränsad till följande systemnamnområden: , , , , och kube-public
kube-node-lease
. azure-arc
calico-system
gatekeeper-system
kube-system
Aktivera plattformsloggar med hjälp av ConfigMap med inställningen collect_system_pod_logs
. Du måste också se till att systemnamnområdet inte finns i inställningen exclude_namespaces
.
I följande exempel visas ConfigMap-inställningarna för att samla in stdout- och stderr-loggar coredns
för containern kube-system
i namnområdet.
[log_collection_settings]
[log_collection_settings.stdout]
enabled = true
exclude_namespaces = ["gatekeeper-system"]
collect_system_pod_logs = ["kube-system:coredns"]
[log_collection_settings.stderr]
enabled = true
exclude_namespaces = ["kube-system","gatekeeper-system"]
collect_system_pod_logs = ["kube-system:coredns"]
Anteckningsbaserad filtrering för arbetsbelastningar
Med anteckningsbaserad filtrering kan du exkludera logginsamling för vissa poddar och containrar genom att kommentera podden. Detta kan minska kostnaderna för logginmatning avsevärt och göra att du kan fokusera på relevant information utan att söka igenom brus.
Aktivera anteckningsbaserad filtrering med hjälp av ConfigMap med följande inställningar.
[log_collection_settings.filter_using_annotations]
enabled = true
Du måste också lägga till de anteckningar som krävs i arbetsbelastningspoddens specifikation. I följande tabell visas olika möjliga poddanteckningar.
Anteckning | beskrivning |
---|---|
fluentbit.io/exclude: "true" |
Undantar både stdout- och stderr-strömmar på alla containrar i podden |
fluentbit.io/exclude_stdout: "true" |
Exkluderar endast stdout-dataström på alla containrar i podden |
fluentbit.io/exclude_stderr: "true" |
Exkluderar endast stderr-ström på alla containrar i podden |
fluentbit.io/exclude_container1: "true" |
Undanta både stdout- och stderr-strömmar endast för container1 i podden |
fluentbit.io/exclude_stdout_container1: "true" |
Undanta endast stdout för container1 i podden |
Kommentar
Dessa anteckningar är flytande bitbaserade. Om du använder din egen fluent-bit-baserade loggsamlingslösning med Kubernetes-plugin-filtret och anteckningsbaserad exkludering slutar den att samla in loggar från både Container Insights och din lösning.
Följande är ett exempel på fluentbit.io/exclude: "true"
anteckningar i en poddspecifikation:
apiVersion: v1
kind: Pod
metadata:
name: apache-logs
labels:
app: apache-logs
annotations:
fluentbit.io/exclude: "true"
spec:
containers:
- name: apache
image: edsiper/apache_logs
Filtrera miljövariabler
Aktivera insamling av miljövariabler för alla poddar och noder i klustret med hjälp av ConfigMap med följande inställningar.
[log_collection_settings.env_var]
enabled = true
Om en samling miljövariabler är globalt aktiverad kan du inaktivera den för en specifik container genom att ange miljövariabeln AZMON_COLLECT_ENV
till False
antingen med en Dockerfile-inställning eller i konfigurationsfilen för podden under env:
avsnittet . Om en samling miljövariabler är globalt inaktiverad kan du inte aktivera insamling för en specifik container. Den enda åsidosättning som kan tillämpas på containernivå är att inaktivera samlingen när den redan är aktiverad globalt.
Påverkan på visualiseringar och aviseringar
Om du har några anpassade aviseringar eller arbetsböcker med hjälp av Container Insights-data kan det försämra dessa funktioner om du ändrar inställningarna för datainsamlingen. Om du utesluter namnområden eller minskar datainsamlingsfrekvensen granskar du dina befintliga aviseringar, instrumentpaneler och arbetsböcker med hjälp av dessa data.
Om du vill söka efter aviseringar som refererar till dessa tabeller kör du följande Azure Resource Graph-fråga:
resources
| where type in~ ('microsoft.insights/scheduledqueryrules') and ['kind'] !in~ ('LogToMetric')
| extend severity = strcat("Sev", properties["severity"])
| extend enabled = tobool(properties["enabled"])
| where enabled in~ ('true')
| where tolower(properties["targetResourceTypes"]) matches regex 'microsoft.operationalinsights/workspaces($|/.*)?' or tolower(properties["targetResourceType"]) matches regex 'microsoft.operationalinsights/workspaces($|/.*)?' or tolower(properties["scopes"]) matches regex 'providers/microsoft.operationalinsights/workspaces($|/.*)?'
| where properties contains "Perf" or properties contains "InsightsMetrics" or properties contains "ContainerInventory" or properties contains "ContainerNodeInventory" or properties contains "KubeNodeInventory" or properties contains"KubePodInventory" or properties contains "KubePVInventory" or properties contains "KubeServices" or properties contains "KubeEvents"
| project id,name,type,properties,enabled,severity,subscriptionId
| order by tolower(name) asc
Nästa steg
- Se Datatransformeringar i Container insights för att lägga till transformeringar i DCR som ytterligare filtrerar data baserat på detaljerade kriterier.