Condividi tramite


Raccolta dei log di filtro in Informazioni dettagliate contenitore

Questo articolo descrive le diverse opzioni di filtro disponibili in Informazioni dettagliate contenitore. I cluster Kubernetes generano una grande quantità di dati raccolti da Informazioni dettagliate contenitore. Poiché vengono addebitati costi per l'inserimento e la conservazione di questi dati, è possibile ridurre significativamente i costi di monitoraggio escludendo tramite filtro i dati non necessari.

Importante

Questo articolo descrive diverse opzioni di filtro che richiedono la modifica della regola di raccolta dati o di ConfigMap per un cluster monitorato. Per informazioni dettagliate sull'esecuzione di questa configurazione, vedere Configurare la raccolta di log in Informazioni dettagliate contenitore.

Filtrare i log dei contenitori

I log dei contenitori sono log stderr e stdout generati dai contenitori nel cluster Kubernetes. Questi log vengono archiviati nella tabella ContainerLogV2 nell'area di lavoro Log Analytics. Per impostazione predefinita, vengono raccolti tutti i log dei contenitori, ma è possibile escludere tramite filtro i log da spazi dei nomi specifici o disabilitare completamente la raccolta dei log dei contenitori.

Usando la regola di raccolta dati, è possibile abilitare o disabilitare i log stdout e stderr e filtrare spazi dei nomi specifici da ognuno di essi. Le impostazioni per i log dei contenitori e il filtro degli spazi dei nomi sono incluse nei set di impostazioni dei costi configurati nel portale di Azure ed è possibile impostare questi valori singolarmente usando gli altri metodi di configurazione della regola di raccolta dati.

Usando ConfigMap, è possibile configurare la raccolta dei log stderr e stdout separatamente per il cluster, in modo da poter scegliere di abilitare uno e non l'altro.

L'esempio seguente mostra le impostazioni di ConfigMap per raccogliere stdout e stderr escludendo gli spazi dei nomi kube-system e 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

Filtro dei log della piattaforma (spazi dei nomi Kubernetes di sistema)

Per impostazione predefinita, i log dei contenitori dello spazio dei nomi di sistema vengono esclusi dalla raccolta per ridurre al minimo il costo di Log Analytics. I log dei contenitori di sistema possono essere tuttavia critici in scenari di risoluzione dei problemi specifici. Questa funzionalità è limitata agli spazi dei nomi di sistema seguenti: kube-system, gatekeeper-system, calico-system, azure-arc, kube-public e kube-node-lease.

Abilitare i log della piattaforma usando ConfigMap con l'impostazione collect_system_pod_logs. È inoltre necessario assicurarsi che lo spazio dei nomi di sistema non sia incluso nell'impostazione exclude_namespaces.

L'esempio seguente mostra le impostazioni di ConfigMap per raccogliere i log stdout e stderr del contenitore coredns nello spazio dei nomi kube-system.

[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"]

Filtro basato sulle annotazioni per i carichi di lavoro

Il filtro basato sulle annotazioni consente di escludere la raccolta di log per determinati pod e contenitori annotando il pod. Ciò consente di ridurre in modo significativo i costi di inserimento dei log e di concentrarsi sulle informazioni pertinenti senza esaminare gli elementi non significativi.

Abilitare il filtro basato sulle annotazioni usando ConfigMap con le impostazioni seguenti.

[log_collection_settings.filter_using_annotations]
   enabled = true

È anche necessario aggiungere le annotazioni richieste nella specifica del pod del carico di lavoro. Nella tabella seguente vengono evidenziate diverse annotazioni di pod possibili.

Annotazione Descrizione
fluentbit.io/exclude: "true" Esclude entrambi i flussi stdout e stderr in tutti i contenitori nel pod
fluentbit.io/exclude_stdout: "true" Esclude solo il flusso stdout in tutti i contenitori nel pod
fluentbit.io/exclude_stderr: "true" Esclude solo il flusso stderr in tutti i contenitori nel pod
fluentbit.io/exclude_container1: "true" Escludere entrambi i flussi stdout e stderr solo per il contenitore1 nel pod
fluentbit.io/exclude_stdout_container1: "true" Escludere solo stdout per il contenitore1 nel pod

Nota

Queste annotazioni sono basate su bit fluent. Se si usa la propria soluzione di raccolta log basata su fluent bit con il filtro del plug-in Kubernetes e l'esclusione basata su annotazione, la raccolta dei log da Container Insights e dalla soluzione verrà interrotta.

Di seguito è riportato un esempio di annotazione fluentbit.io/exclude: "true" in una specifica pod:

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 

Filtrare le variabili di ambiente

Abilitare la raccolta di variabili di ambiente in tutti i pod e i nodi del cluster usando ConfigMap con le impostazioni seguenti.

[log_collection_settings.env_var]
    enabled = true

Se la raccolta di variabili di ambiente è abilitata a livello globale, è possibile disabilitarla per un contenitore specifico impostando la variabile di ambiente AZMON_COLLECT_ENV su False con un'impostazione Dockerfile o nel file di configurazione per il pod nella sezione env:. Se la raccolta di variabili di ambiente è disabilitata a livello globale, non è possibile abilitare la raccolta per un contenitore specifico. L'unico override che può essere applicato a livello di contenitore consiste nel disabilitare la raccolta quando è già abilitata a livello globale.

Impatto sulle visualizzazioni e sugli avvisi

Se sono presenti cartelle di lavoro o avvisi personalizzati che usano i dati di Informazioni dettagliate contenitore, la modifica delle impostazioni di raccolta dati potrebbe compromettere tali esperienze. Se si escludono spazi dei nomi o si riduce la frequenza di raccolta dei dati, esaminare gli avvisi, i dashboard e le cartelle di lavoro esistenti usando questi dati.

Per analizzare gli avvisi che fanno riferimento a queste tabelle, eseguire la query di Azure Resource Graph seguente:

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

Passaggi successivi