Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
I cluster Kubernetes generano una grande quantità di dati che vengono raccolti da Azure Monitor. 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. Questo articolo descrive come usare un oggetto ConfigMap per configurare e filtrare la raccolta di log del contenitore e variabili di ambiente dal cluster. È anche possibile usare un oggetto ConfigMap per abilitare la raccolta di log della piattaforma dagli spazi dei nomi Kubernetes di sistema e per abilitare il filtro basato sulle annotazioni per i carichi di lavoro.
Suggerimento
Prima di implementare una delle opzioni di filtro descritte in questo articolo, assicurarsi di selezionare un profilo di raccolta log che soddisfi i requisiti. Usare le informazioni contenute in questo articolo per perfezionare ulteriormente le impostazioni di raccolta dati per il cluster.
Prerequisiti
- La versione minima dell'agente supportata per raccogliere stdout, stderr e variabili di ambiente dai carichi di lavoro del contenitore è ciprod06142019 o versione successiva.
Configurare e distribuire ConfigMap
Usare la procedura seguente per configurare e distribuire il file di configurazione ConfigMap nel cluster:
Scaricare il modello ConfigMap di configurazione dell'agente in https://aka.ms/container-azm-ms-agentconfig e aprirlo in un editor.
Modificare il file YAML ConfigMap con le personalizzazioni. Il modello include tutte le impostazioni valide con le descrizioni. Per abilitare un'impostazione, rimuovere il carattere di commento (#) e impostarne il valore.
Creare un oggetto ConfigMap eseguendo il comando kubectl seguente:
kubectl config set-context <cluster-name> kubectl apply -f <configmap_yaml_file.yaml> # Example: kubectl config set-context my-cluster kubectl apply -f container-azm-ms-agentconfig.yamlLa modifica della configurazione può richiedere alcuni minuti prima di rendere effettiva la modifica. Tutti i pod dell'agente di Monitoraggio di Azure nel cluster verranno quindi riavviati. Il riavvio è un riavvio in sequenza per tutti i pod dell'agente di Monitoraggio di Azure, quindi non tutti vengono riavviati contemporaneamente. Al termine dei riavvii, verrà visualizzato un messaggio simile al risultato seguente:
configmap "container-azm-ms-agentconfig" created`.
Verificare la configurazione
Per verificare che la configurazione sia stata applicata correttamente a un cluster, usare il comando seguente per esaminare i log da un pod agente.
kubectl logs ama-logs-fdf58 -n kube-system -c ama-logs
Se si verificano errori di configurazione dai pod dell'agente di Monitoraggio di Azure, l'output mostrerà errori simili ai seguenti:
***************Start Config Processing********************
config::unsupported/missing config schema version - 'v21' , using defaults
Usare le opzioni seguenti per eseguire altre operazioni di risoluzione dei problemi delle modifiche alla configurazione:
Usare lo stesso comando
kubectl logsda un pod agente.Esaminare i log live per individuare errori simili ai seguenti:
config::error::Exception while parsing config map for log collection/env variable settings: \nparse error on value \"$\" ($end), using defaults, please check config map for errors
I dati vengono inviati alla tabella KubeMonAgentEvents nell'area di lavoro Log Analytics ogni ora con gravità dell'errore per gli errori di configurazione. Se non sono presenti errori, la voce nella tabella includerà dati con informazioni sulla gravità che non segnalano errori. La colonna Tags contiene altre informazioni sul pod e sull'ID contenitore in cui si è verificato l'errore e anche la prima occorrenza, l'ultima occorrenza e il conteggio nell'ultima ora.
Verificare la versione dello schema
Le versioni dello schema di configurazione supportate sono disponibili come annotazione pod (versioni dello schema) nel pod agente di Monitoraggio di Azure. È possibile visualizzarli con il comando kubectl seguente.
kubectl describe pod ama-logs-fdf58 -n=kube-system.
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.
Modificare la sezione log_collection_settings della ConfigMap per configurare la raccolta di log stderr e stdout separatamente per il cluster. 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
Annotazioni
È anche possibile configurare il filtraggio dei namespace nel profilo di log per il cluster, ma non è applicabile ai dati inviati a ContainerLogV2. Questi dati possono essere filtrati solo tramite ConfigMap.
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-systemgatekeeper-systemcalico-systemazure-arckube-public-
kube-node-lease.
Modificare l'impostazione collect_system_pod_logs nella log_collection_settings sezione di ConfigMap per abilitare i log della piattaforma per il cluster. È 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.
Modificare l'impostazione filter_using_annotations nella log_collection_settings sezione di ConfigMap per abilitare il filtro basato sull'annotazione.
[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.
| Annotation | Description |
|---|---|
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 |
Annotazioni
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
Modificare l'impostazione log_collection_settings.env_var nella log_collection_settings sezione di ConfigMap per abilitare la raccolta di variabili di ambiente in tutti i pod e i nodi.
[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 AZMON_COLLECT_ENV di ambiente su False con un'impostazione Dockerfile o nel file di configurazione per il pod nella env: sezione . 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.
Impostazioni di ConfigMap
Nella tabella seguente vengono descritte le impostazioni che è possibile configurare per controllare la raccolta dati con la configurazione dell'agente ConfigMap.
| Impostazione | Tipo di dati | Value | Description |
|---|---|---|---|
schema-version |
String (con distinzione tra maiuscole e minuscole) | v1 | Usato dall'agente durante l'analisi della ConfigMap. La versione dello schema attualmente supportata è v1. La modifica di questo valore non è supportata e verrà rifiutata quando viene valutato ConfigMap. |
config-version |
String | Consente di tenere traccia della versione del file di configurazione nel sistema/repository del controllo del codice sorgente. Il numero massimo di caratteri consentiti è 10 e tutti gli altri caratteri vengono troncati. | |
| [impostazioni_raccolta_log] | |||
[stdout]enabled |
Boolean | true false |
Controlla se la raccolta di log del contenitore stdout è abilitata. Se impostato su true e nessuno spazio dei nomi viene escluso per la raccolta di log stdout, i log stdout verranno raccolti da tutti i contenitori in tutti i pod e nodi nel cluster. Se non specificato in ConfigMap, il valore predefinito è true. |
[stdout]exclude_namespaces |
String | Matrice delimitata da virgole | Matrice di spazi dei nomi Kubernetes per i quali i log stdout non verranno raccolti. Questa impostazione è valida solo se enabled è impostata su true. Se non specificato in ConfigMap, il valore predefinito è["kube-system","gatekeeper-system"]. |
[stderr]enabled |
Boolean | true false |
Controlla se la raccolta di log del contenitore stderr è abilitata. Se impostato su true e nessuno spazio dei nomi viene escluso per la raccolta di log stderr, i log di stderr verranno raccolti da tutti i contenitori in tutti i pod e nodi del cluster. Se non specificato in ConfigMap, il valore predefinito è true. |
[stderr]exclude_namespaces |
String | Matrice delimitata da virgole | Elenco dei namespace di Kubernetes per i quali i log di stderr non verranno raccolti. Questa impostazione è valida solo se enabled è impostata su true. Se non specificato in ConfigMap, il valore predefinito è["kube-system","gatekeeper-system"]. |
[env_var]enabled |
Boolean | true false |
Controlla la raccolta di variabili di ambiente in tutti i pod e i nodi del cluster. Se non specificato in ConfigMap, il valore predefinito è true. |
[enrich_container_logs]enabled |
Boolean | true false |
Controlla l'arricchimento del log del contenitore per popolare i valori delle proprietà Name e Image per ogni record di log scritto nella tabella ContainerLog per tutti i log dei contenitori nel cluster. Se non specificato in ConfigMap, il valore predefinito è false. |
[collect_all_kube_events]enabled |
Boolean | true false |
Controlla se vengono raccolti eventi Kube di tutti i tipi. Per impostazione predefinita, gli eventi Kube con tipo Normale non vengono raccolti. Quando questa impostazione è true, gli eventi Normali non vengono più filtrati e vengono raccolti tutti gli eventi. Se non specificato in ConfigMap, il valore predefinito è false. |
[schema]containerlog_schema_version |
String (con distinzione tra maiuscole e minuscole) | v2 v1 |
Imposta il formato di inserimento del log. Se v2, viene utilizzata la tabella ContainerLogV2. Se v1, viene utilizzata la tabella ContainerLog (questa tabella è stata deprecata). Per i cluster che abilitano informazioni dettagliate sui contenitori usando l'interfaccia della riga di comando di Azure versione 2.54.0 o successiva, l'impostazione predefinita è v2. Per dettagli, vedere Schema del log delle informazioni sui contenitori. |
[enable_multiline_logs]enabled |
Boolean | true false |
Controlla se i log dei contenitori su più righe sono abilitati. Per i dettagli, vedere Registrazione multi-riga in Informazioni dettagliate sui contenitori. Se non specificato in ConfigMap, il valore predefinito è false. È quindi necessario che l'impostazione schema sia v2. |
[metadata_collection]enabled |
Boolean | true false |
Controlla se i metadati vengono raccolti nella colonna KubernetesMetadata della tabella ContainerLogV2. |
[metadata_collection]include_fields |
String | Matrice delimitata da virgole | Elenco di campi di metadati da includere. Se l'impostazione non viene usata, vengono raccolti tutti i campi. I valori validi sono ["podLabels","podAnnotations","podUid","image","imageID","imageRepo","imageTag"] |
[log_collection_settings.multi_tenancy]enabled |
Boolean | true false |
Controlla se il multitenancy è abilitato. Vedere Registrazione gestita multi-tenant per maggiori dettagli. Se non specificato in ConfigMap, il valore predefinito è false. |
| [impostazioni_raccolta_metrica] | |||
[collect_kube_system_pv_metrics]enabled |
Boolean | true false |
Consente la raccolta delle metriche di utilizzo del volume persistente (PV) nello spazio dei nomi kube-system. Per impostazione predefinita, le metriche di utilizzo per volumi persistenti con attestazioni di volume persistente nello spazio dei nomi kube-system non vengono raccolte. Quando questa impostazione è impostata su true, vengono raccolte le metriche di utilizzo del volume persistente per tutti gli spazi dei nomi. Se non specificato in ConfigMap, il valore predefinito è false. |
| [agent_settings] | |||
[proxy_config]ignore_proxy_settings |
Boolean | true false |
Quando true, le impostazioni proxy vengono ignorate. Per entrambi gli ambienti Kubernetes abilitati per Arc e AKS, se il cluster è configurato con un proxy di inoltro, le impostazioni proxy vengono applicate automaticamente e utilizzate per l'agente. Per determinate configurazioni, ad esempio con AMPLS + Proxy, è possibile che la configurazione del proxy venga ignorata. Se non specificato in ConfigMap, il valore predefinito è false. |
| [agent_settings.fbit_config] | |||
enable_internal_metrics |
Boolean | true false |
Controlla se la raccolta di metriche interne è abilitata. Se non specificato in ConfigMap, il valore predefinito è false. |
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
- Vedere Trasformazioni dei dati in Informazioni dettagliate sui contenitori per aggiungere trasformazioni al DCR che filtra ulteriormente i dati in base a criteri dettagliati.