Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Kubernetes-kluster genererar en stor mängd data som samlas in av Azure Monitor. 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. Den här artikeln beskriver hur du använder en ConfigMap för att konfigurera och filtrera samlingen med containerloggar och miljövariabler från klustret. Du kan också använda en ConfigMap för att aktivera insamling av plattformsloggar från System Kubernetes-namnområden och för att aktivera anteckningsbaserad filtrering för arbetsbelastningar.
Tips/Råd
Innan du implementerar något av de filtreringsalternativ som beskrivs i den här artikeln ska du se till att du väljer en loggsamlingsprofil som matchar dina krav. Använd informationen i den här artikeln för att ytterligare förfina datainsamlingsinställningarna för klustret.
Förutsättningar
- Den lägsta agentversion som stöds för att samla in stdout-, stderr- och miljövariabler från containerarbetsbelastningar är ciprod06142019 eller senare.
Konfigurera och distribuera ConfigMap
Använd följande procedur för att konfigurera och distribuera konfigurationsfilen ConfigMap till klustret:
- Ladda ned agentkonfigurationens ConfigMap-mall på https://aka.ms/container-azm-ms-agentconfig och öppna den i ett redigeringsprogram. 
- Redigera YAML-filen ConfigMap med dina anpassningar. Mallen innehåller alla giltiga inställningar med beskrivningar. Om du vill aktivera en inställning tar du bort kommentarstecknet (#) och anger dess värde. 
- Skapa en ConfigMap genom att köra följande kubectl-kommando: - 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.yaml- Konfigurationsändringen kan ta några minuter innan den börjar gälla. Sedan startas alla Azure Monitor Agent-poddar i klustret om. Omstarten är en löpande omstart för alla Azure Monitor Agent-poddar, så alla startas inte om samtidigt. När omstarterna är klara får du ett meddelande som liknar följande resultat: - configmap "container-azm-ms-agentconfig" created`.
Verifiera konfiguration
Om du vill kontrollera att konfigurationen har tillämpats på ett kluster använder du följande kommando för att granska loggarna från en agentpodd.
kubectl logs ama-logs-fdf58 -n kube-system -c ama-logs
Om det finns konfigurationsfel från Azure Monitor Agent-poddarna visar utdata fel som liknar följande:
***************Start Config Processing******************** 
config::unsupported/missing config schema version - 'v21' , using defaults
Använd följande alternativ för att utföra mer felsökning av konfigurationsändringar:
- Använd samma - kubectl logskommando från ett agentkluster.
- Granska liveloggar efter fel som liknar följande: - 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
Data skickas varje timme till tabellen KubeMonAgentEvents i din Log Analytics-arbetsyta med felallvarlighetsgrad för konfigurationsfel. Om det inte finns några fel kommer posten i tabellen att innehålla data med information om allvarlighetsgrad, som rapporterar att det inte finns några fel. Kolumnen Tags innehåller mer information om podden och container-ID:t där felet inträffade och även den första förekomsten, den senaste förekomsten och antalet under den senaste timmen.
Verifiera schemaversionen
Konfigurationsschemaversioner som stöds är tillgängliga som poddanteckning (schemaversioner) i Azure Monitor Agent-podden. Du kan se dem med följande kubectl-kommando.
kubectl describe pod ama-logs-fdf58 -n=kube-system.
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.
              log_collection_settings Redigera avsnittet i ConfigMap för att konfigurera samlingen av stderr och stdout loggarna separat för klustret. I följande exempel visas ConfigMap-inställningarna för att samla in stdout och stderr exklusive namnrymderna kube-system 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
Kommentar
Du kan också konfigurera namnområdesfiltrering i loggprofilen för klustret, men detta gäller inte för data som skickas till ContainerLogV2. Dessa data kan bara filtreras med hjälp av ConfigMap.
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:
- kube-system
- gatekeeper-system
- calico-system
- azure-arc
- kube-public
- 
              kube-node-lease.
Redigera inställningen collect_system_pod_logs i log_collection_settings avsnittet i ConfigMap för att aktivera plattformsloggar för klustret. 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 för coredns containern i kube-system 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.
Redigera inställningen filter_using_annotations i log_collection_settings avsnittet i ConfigMap för att aktivera anteckningsbaserad filtrering.
[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 från 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-flöde på alla containrar i podden | 
| fluentbit.io/exclude_container1: "true" | Uteslut både stdout- och stderr-strömmarna endast för container1 i podden | 
| fluentbit.io/exclude_stdout_container1: "true" | Inaktivera endast stdout för container1 i den podden | 
Kommentar
Dessa anteckningar är baserade på ett flytande bit-format. 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
Redigera inställningen log_collection_settings.env_var i log_collection_settings avsnittet i ConfigMap för att aktivera en samling miljövariabler över alla poddar och noder.
[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.
Inställningar för ConfigMap
I följande tabell beskrivs de inställningar som du kan konfigurera för att styra datainsamling med agentkonfigurationen ConfigMap.
| Inställning | Datatyp | Värde | beskrivning | 
|---|---|---|---|
| schema-version | Sträng (skiftlägeskänslig) | v1 | Används av agenten när den parsar den här ConfigMap. Schemaversionen som stöds för närvarande är v1. Det går inte att ändra det här värdet och avvisas när ConfigMap utvärderas. | 
| config-version | String | Gör att du kan hålla reda på den här konfigurationsfilens version i källkontrollsystemet/lagringsplatsen. Maximalt antal tillåtna tecken är 10 och alla andra tecken trunkeras. | |
| [logginsamling_inställningar] | |||
| [stdout]enabled | Boolean | true false | Styr om stdout-containerloggsamling är aktiverad. När det är inställt på trueoch inga namnrymder undantas för stdout-loggsamling samlas stdout-loggar in från alla containrar över alla poddar och noder i klustret. Om det inte anges i ConfigMap ärtruestandardvärdet . | 
| [stdout]exclude_namespaces | String | Kommaavgränsad matris | Matris med Kubernetes-namnområden för vilka stdout-loggar inte samlas in. Den här inställningen gäller endast om enabledär inställd påtrue. Om det inte anges i ConfigMap är standardvärdet["kube-system","gatekeeper-system"]. | 
| [stderr]enabled | Boolean | true false | Styr om stderr-containerloggsamlingen är aktiverad. När det är inställt på trueoch inga namnområden undantas för stderr-loggsamlingen samlas stderr-loggar in från alla containrar över alla poddar och noder i klustret. Om det inte anges i ConfigMap ärtruestandardvärdet . | 
| [stderr]exclude_namespaces | String | Kommaavgränsad matris | Matris med Kubernetes-namnområden för vilka stderr-loggar inte samlas in. Den här inställningen gäller endast om enabledär inställd påtrue. Om det inte anges i ConfigMap är standardvärdet["kube-system","gatekeeper-system"]. | 
| [env_var]enabled | Boolean | true false | Styr miljövariabelsamlingen för alla poddar och noder i klustret. Om det inte anges i ConfigMap är truestandardvärdet . | 
| [enrich_container_logs]enabled | Boolean | true false | Styr berikning av containerloggar för att fylla i NameochImageegenskapsvärden för varje loggpost som skrivs till ContainerLog-tabellen för alla containerloggar i klustret. Om det inte anges i ConfigMap ärfalsestandardvärdet . | 
| [collect_all_kube_events]enabled | Boolean | true false | Styr om Kube-händelser av alla typer samlas in. Som standard samlas inte Kube-händelser med typen Normal in. När den här inställningen är truefiltreras inte längre normalhändelserna och alla händelser samlas in. Om det inte anges i ConfigMap ärfalsestandardvärdet . | 
| [schema]containerlog_schema_version | Sträng (skiftlägeskänslig) | v2 v1 | Ställer in formatet för logginsamling. Om v2används tabellen ContainerLogV2 . Omv1används tabellen ContainerLog (den här tabellen har föråldrats). För kluster som aktiverar containerinsikter med azure CLI version 2.54.0 eller senare ärv2standardinställningen . Mer information finns i Loggschema för Container Insights . | 
| [enable_multiline_logs]enabled | Boolean | true false | Styr om flerradscontainerloggar är aktiverade. Mer information finns i Flerradsloggning i Container Insights . Om det inte anges i ConfigMap är falsestandardvärdet . Detta kräver att inställningenschemaärv2. | 
| [metadata_collection]enabled | Boolean | true false | Styr om metadata samlas in i KubernetesMetadatakolumnen iContainerLogV2tabellen. | 
| [metadata_collection]include_fields | String | Kommaavgränsad matris | Lista över metadatafält som ska inkluderas. Om inställningen inte används samlas alla fält in. Giltiga värden är ["podLabels","podAnnotations","podUid","image","imageID","imageRepo","imageTag"] | 
| [log_collection_settings.multi_tenancy]enabled | Boolean | true false | Kontrollerar om multitenancy är aktiverat. Mer information finns i Hanterad loggning för flera klientorganisationer . Om det inte anges i ConfigMap är falsestandardvärdet . | 
| [metric_collection_settings] | |||
| [collect_kube_system_pv_metrics]enabled | Boolean | true false | Möjliggör insamling av användningsmått för beständiga volymer (PV) i kube-system-namnområdet. Som standardinställning samlas inte användningsstatistik för persistenta volymer med beständiga volymanspråk i kube-system-namnområdet in. När den här inställningen är inställd truepå samlas PV-användningsstatistik för alla namnområden in. Om det inte anges i ConfigMap ärfalsestandardvärdet . | 
| [agent_settings] | |||
| [proxy_config]ignore_proxy_settings | Boolean | true false | När trueignoreras proxyinställningarna. För både AKS- och Arc-aktiverade Kubernetes-miljöer, om klustret har konfigurerats med vidarebefordrad proxy, tillämpas proxyinställningarna automatiskt och används för agenten. För vissa konfigurationer, till exempel med AMPLS + Proxy, kanske du vill att proxykonfigurationen ska ignoreras. Om det inte anges i ConfigMap ärfalsestandardvärdet . | 
| [agent_settings.fbit_config] | |||
| enable_internal_metrics | Boolean | true false | Styr om insamling av interna mått är aktiverat. Om det inte anges i ConfigMap är falsestandardvärdet . | 
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 reducerar datainsamlingsfrekvensen granskar du dina befintliga aviseringar, instrumentpaneler och arbetsböcker med hjälp av denna 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.