Delen via


Containerlogboekverzameling filteren met ConfigMap

Kubernetes-clusters genereren een grote hoeveelheid gegevens die worden verzameld door Azure Monitor. Omdat er kosten in rekening worden gebracht voor de opname en retentie van deze gegevens, kunt u de bewakingskosten aanzienlijk verlagen door gegevens te filteren die u niet nodig hebt. In dit artikel wordt beschreven hoe u een ConfigMap gebruikt om de verzameling containerlogboeken en omgevingsvariabelen van uw cluster te configureren en filteren. U kunt ook een ConfigMap gebruiken om het verzamelen van platformlogboeken van systeem-Kubernetes-naamruimten in te schakelen en om annotatiefilters in te schakelen voor workloads.

Aanbeveling

Voordat u een van de filteropties implementeert die in dit artikel worden beschreven, moet u ervoor zorgen dat u een logboekverzamelingsprofiel selecteert dat overeenkomt met uw vereisten. Gebruik de informatie in dit artikel om de instellingen voor gegevensverzameling voor uw cluster verder te verfijnen.

Vereiste voorwaarden

  • De minimaal ondersteunde agentversie om stdout, stderr en omgevingsvariabelen vanuit containerworkloads te verzamelen is ciprod06142019 of hoger.

ConfigMap configureren en implementeren

Gebruik de volgende procedure om het configuratiebestand ConfigMap in uw cluster te configureren en te implementeren:

  1. Download de configuratiesjabloon ConfigMap van de agent op https://aka.ms/container-azm-ms-agentconfig en open deze in een editor.

  2. Bewerk het YAML-bestand ConfigMap met uw aanpassingen. De sjabloon bevat alle geldige instellingen met beschrijvingen. Als u een instelling wilt inschakelen, verwijdert u het opmerkingsteken (#) en stelt u de waarde ervan in.

  3. Maak een ConfigMap door de volgende kubectl-opdracht uit te voeren:

    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
    

    Het kan enkele minuten duren voordat de configuratiewijziging is voltooid. Vervolgens worden alle Azure Monitor Agent-pods in het cluster opnieuw opgestart. Het opnieuw opstarten is een doorlopende herstart voor alle Azure Monitor Agent-pods, dus niet allemaal tegelijk opnieuw opstarten. Wanneer de herstart is voltooid, ontvangt u een bericht dat vergelijkbaar is met het volgende resultaat:

    configmap "container-azm-ms-agentconfig" created`.
    

Configuratie controleren

Als u wilt controleren of de configuratie is toegepast op een cluster, gebruikt u de volgende opdracht om de logboeken van een agentpod te controleren.

kubectl logs ama-logs-fdf58 -n kube-system -c ama-logs

Als er configuratiefouten zijn van de Azure Monitor Agent-pods, worden in de uitvoer fouten weergegeven die vergelijkbaar zijn met de volgende:

***************Start Config Processing******************** 
config::unsupported/missing config schema version - 'v21' , using defaults

Gebruik de volgende opties om verdere probleemoplossing van configuratiewijzigingen uit te voeren:

  • Gebruik dezelfde kubectl logs opdracht vanuit een agent-pod.

  • Bekijk livelogboeken op fouten die vergelijkbaar zijn met de volgende:

    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
    

Gegevens worden elk uur naar de KubeMonAgentEvents tabel in uw Log Analytics-werkruimte verzonden met fout ernst voor configuratiefouten. Als er geen fouten zijn, bevat de vermelding in de tabel gegevens over ernst, dat meldt dat er geen fouten zijn. De Tags kolom bevat meer informatie over de pod en container-id waarop de fout is opgetreden, evenals de eerste keer, de laatste keer en het aantal in de afgelopen uur.

Schemaversie controleren

Ondersteunde configuratieschemaversies zijn beschikbaar als podannotatie (schemaversies) op de Azure Monitor Agent-pod. U kunt deze zien met de volgende kubectl-opdracht.

kubectl describe pod ama-logs-fdf58 -n=kube-system.

Containerlogboeken filteren

Containerlogboeken zijn stderr- en stdout-logboeken die worden gegenereerd door containers in uw Kubernetes-cluster. Deze logboeken worden opgeslagen in de ContainerLogV2-tabel in uw Log Analytics-werkruimte. Standaard worden alle containerlogboeken verzameld, maar u kunt logboeken uit specifieke naamruimten filteren of het verzamelen van containerlogboeken volledig uitschakelen.

Bewerk de log_collection_settings sectie van de ConfigMap om de verzameling en stderrstdout logboeken afzonderlijk voor het cluster te configureren. In het volgende voorbeeld ziet u de ConfigMap-instellingen voor het verzamelen van stdout en stderr, met uitzondering van de kube-system en gatekeeper-system naamruimten.

[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

Notitie

U kunt ook naamruimtefilters configureren in het logboekprofiel voor het cluster, maar dit geldt niet voor gegevens die naar ContainerLogV2 worden verzonden. Deze gegevens kunnen alleen worden gefilterd met behulp van de ConfigMap.

Platformlogboekfilters (Systeem Kubernetes-naamruimten)

Containerlogboeken van de systeemnaamruimte worden standaard uitgesloten van verzameling om de Kosten van Log Analytics te minimaliseren. Containerlogboeken van systeemcontainers kunnen echter essentieel zijn in specifieke scenario's voor probleemoplossing. Deze functie is beperkt tot de volgende systeemnaamruimten:

  • kube-system
  • gatekeeper-system
  • calico-system
  • azure-arc
  • kube-public
  • kube-node-lease.

Bewerk de collect_system_pod_logs instelling in de log_collection_settings sectie van de ConfigMap om platformlogboeken voor het cluster in te schakelen. U moet er ook voor zorgen dat de systeemnaamruimte zich niet in de exclude_namespaces instelling bevindt.

In het volgende voorbeeld ziet u de ConfigMap-instellingen voor het verzamelen van stdout- en stderr-logboeken van coredns de container in de kube-system naamruimte.

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

Filteren op basis van aantekeningen voor workloads

Met filteren op basis van aantekeningen kunt u logboekverzameling uitsluiten voor bepaalde pods en containers door aantekeningen te maken voor de pod. Dit kan de opnamekosten van uw logboeken aanzienlijk verminderen en u kunt zich richten op relevante informatie zonder ruis te doorzoeken.

Bewerk de filter_using_annotations instelling in de sectie van de log_collection_settings ConfigMap om annotatiegebaseerde filters in te schakelen.

[log_collection_settings.filter_using_annotations]
   enabled = true

U moet ook de vereiste aantekeningen toevoegen aan de specificatie van uw workloadpod. In de volgende tabel worden verschillende mogelijke podaantekeningen gemarkeerd.

Annotatie Beschrijving
fluentbit.io/exclude: "true" Sluit beide stdout- en stderr-streams uit op alle containers in de Pod
fluentbit.io/exclude_stdout: "true" Sluit alleen stdout-stream uit voor alle containers in de pod
fluentbit.io/exclude_stderr: "true" Sluit alleen stderr-stream uit op alle containers in de pod
fluentbit.io/exclude_container1: "true" Sluit beide stdout- en stderr-streams alleen uit voor de container1 in de pod
fluentbit.io/exclude_stdout_container1: "true" Alleen stdout uitsluiten voor de container1 in de pod

Notitie

Deze aantekeningen zijn vloeiend op basis van bit. Als u uw eigen fluent-bit-oplossing voor logboekverzameling gebruikt met het Filter van de Kubernetes-invoegtoepassing en uitsluiting op basis van aantekeningen, wordt het verzamelen van logboeken van zowel Container Insights als uw oplossing gestopt.

Hieronder volgt een voorbeeld van fluentbit.io/exclude: "true" aantekeningen in een podspecificatie:

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 

Omgevingsvariabelen filteren

Bewerk de log_collection_settings.env_var instelling in de log_collection_settings sectie van de ConfigMap om het verzamelen van omgevingsvariabelen in alle pods en knooppunten in te schakelen.

[log_collection_settings.env_var]
    enabled = true

Als het verzamelen van omgevingsvariabelen globaal is ingeschakeld, kunt u deze uitschakelen voor een specifieke container door de omgevingsvariabele AZMON_COLLECT_ENV in te False stellen op een Dockerfile-instelling of in het configuratiebestand voor de pod onder de env: sectie. Als het verzamelen van omgevingsvariabelen globaal is uitgeschakeld, kunt u verzameling niet inschakelen voor een specifieke container. De enige onderdrukking die op containerniveau kan worden toegepast, is het uitschakelen van verzameling wanneer deze al wereldwijd is ingeschakeld.

ConfigMap-instellingen

In de volgende tabel worden de instellingen beschreven die u kunt configureren om het verzamelen van gegevens te beheren met de ConfigMap voor agentconfiguratie.

Configuratie Gegevenstype Waarde Beschrijving
schema-version Tekenreeks (hoofdlettergevoelig) v1 Wordt door de agent gebruikt bij het parseren van deze ConfigMap. De momenteel ondersteunde schemaversie is v1. Het wijzigen van deze waarde wordt niet ondersteund en wordt geweigerd wanneer de ConfigMap wordt geƫvalueerd.
config-version Snaar / Touwtje Hiermee kunt u de versie van dit configuratiebestand bijhouden in uw broncodebeheersysteem/opslagplaats. Maximaal toegestane tekens zijn 10 en alle andere tekens worden afgekapt.
[logverzamelingsinstellingen]
[stdout]
enabled
Booleaan true
false
Hiermee bepaalt u of het verzamelen van stdout-containerlogboeken is ingeschakeld. Als true is ingesteld en er geen naamruimten worden uitgesloten voor het verzamelen van stdout-logs, worden stdout-logs verzameld van alle containers van alle pods en knooppunten binnen het cluster. Als deze niet is opgegeven in de ConfigMap, is truede standaardwaarde .
[stdout]
exclude_namespaces
Snaar / Touwtje Door komma's gescheiden reeks Matrix van Kubernetes-naamruimten waarvoor stdout-logboeken niet worden verzameld. Deze instelling werkt alleen als enabled is ingesteld op true. Als deze niet is opgegeven in de ConfigMap, is de standaardwaarde
["kube-system","gatekeeper-system"].
[stderr]
enabled
Booleaan true
false
Hiermee bepaalt u of de verzameling containerlogboeken van stderr is ingeschakeld. Wanneer ingesteld op true en geen namespaces worden uitgesloten voor het verzamelen van stderr-logboeken, worden stderr-logboeken verzameld van alle containers in alle pods en knooppunten in het cluster. Als deze niet is opgegeven in de ConfigMap, is truede standaardwaarde .
[stderr]
exclude_namespaces
Snaar / Touwtje Door komma's gescheiden reeks Matrix van Kubernetes-naamruimten waarvoor stderr-logboeken niet worden verzameld. Deze instelling werkt alleen als enabled is ingesteld op true. Als deze niet is opgegeven in de ConfigMap, is de standaardwaarde
["kube-system","gatekeeper-system"].
[env_var]
enabled
Booleaan true
false
Hiermee bepaalt u de verzameling omgevingsvariabelen voor alle pods en knooppunten in het cluster. Als deze niet is opgegeven in de ConfigMap, is truede standaardwaarde .
[enrich_container_logs]
enabled
Booleaan true
false
Hiermee bepaalt u de verrijking van containerlogboeken om de Name en Image eigenschapswaarden te vullen voor elke logboekrecord die naar de ContainerLog-tabel is geschreven voor alle containerlogboeken in het cluster. Als deze niet is opgegeven in de ConfigMap, is falsede standaardwaarde .
[collect_all_kube_events]
enabled
Booleaan true
false
Hiermee bepaalt u of Kube-gebeurtenissen van alle typen worden verzameld. Standaard worden de Kube-gebeurtenissen met het type Normaal niet verzameld. Als deze instelling is trueingesteld, worden de normale gebeurtenissen niet meer gefilterd en worden alle gebeurtenissen verzameld. Als deze niet is opgegeven in de ConfigMap, is falsede standaardwaarde .
[schema]
containerlog_schema_version
Tekenreeks (hoofdlettergevoelig) v2
v1
Hiermee stelt u de indeling voor logverwerking in. Als v2 geldt, wordt de ContainerLogV2-tabel gebruikt. Wanneer v1 de ContainerLog tabel wordt gebruikt (deze tabel is verouderd). Voor clusters die containerinzichten inschakelen met azure CLI versie 2.54.0 of hoger, is v2de standaardinstelling. Zie het Container Insights-logboekschema voor meer informatie.
[enable_multiline_logs]
enabled
Booleaan true
false
Hiermee bepaalt u of containerlogboeken met meerdere regels zijn ingeschakeld. Zie Logboekregistratie met meerdere regels in Container Insights voor meer informatie. Als deze niet is opgegeven in de ConfigMap, is falsede standaardwaarde . Hiervoor moet de schema instelling zijn v2.
[metadata_collection]
enabled
Booleaan true
false
Hiermee bepaalt u of metagegevens worden verzameld in de KubernetesMetadata kolom van de ContainerLogV2 tabel.
[metadata_collection]
include_fields
Snaar / Touwtje Door komma's gescheiden reeks Lijst met metagegevensvelden die moeten worden opgenomen. Als de instelling niet wordt gebruikt, worden alle velden verzameld. Geldige waarden zijn ["podLabels","podAnnotations","podUid","image","imageID","imageRepo","imageTag"]
[log_collection_settings.multi_tenancy]
enabled
Booleaan true
false
Hiermee bepaalt u of multitenancy is ingeschakeld. Zie Beheerde logboekregistratie voor meerdere tenants voor meer informatie. Als deze niet is opgegeven in de ConfigMap, is falsede standaardwaarde .
[instellingen_voor_metriekverzameling]
[collect_kube_system_pv_metrics]
enabled
Booleaan true
false
Hiermee kunnen metrische gegevens over persistent volumegebruik (PV) worden verzameld in de kube-system-naamruimte. Standaard worden metrische gegevens over gebruik voor permanente volumes met permanente volumeclaims in de kube-system-naamruimte niet verzameld. Wanneer deze instelling is ingesteld op true, worden gebruiksstatistieken voor PV voor alle naamruimten verzameld. Als deze niet is opgegeven in de ConfigMap, is falsede standaardwaarde .
[agent_settings]
[proxy_config]
ignore_proxy_settings
Booleaan true
false
Wanneer trueworden proxy-instellingen genegeerd. Voor kubernetes-omgevingen met AKS en Arc worden proxy-instellingen automatisch toegepast en gebruikt voor de agent als uw cluster is geconfigureerd met een doorstuurproxy. Voor bepaalde configuraties, zoals met AMPLS + Proxy, wilt u mogelijk dat de proxyconfiguratie wordt genegeerd. Als deze niet is opgegeven in de ConfigMap, is falsede standaardwaarde .
[agent_settings.fbit_config]
enable_internal_metrics Booleaan true
false
Hiermee bepaalt u of het verzamelen van interne metrische gegevens is ingeschakeld. Als deze niet is opgegeven in de ConfigMap, is falsede standaardwaarde .

Gevolgen voor visualisaties en waarschuwingen

Als u aangepaste waarschuwingen of werkmappen hebt met containerinzichtgegevens, kan het wijzigen van uw instellingen voor gegevensverzameling deze ervaringen verminderen. Als u naamruimten uitsluit of de frequentie van gegevensverzameling verlaagt, controleert u uw bestaande waarschuwingen, dashboards en werkmappen met behulp van deze gegevens.

Als u wilt scannen op waarschuwingen die naar deze tabellen verwijzen, voert u de volgende Azure Resource Graph-query uit:

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

Volgende stappen