Freigeben über


Filtern der Protokollsammlung in Container-Insights

In diesem Artikel werden die verschiedenen Filteroptionen beschrieben, die in Container Insights verfügbar sind. Kubernetes-Cluster generieren eine große Menge an Daten, die von Container Insights erfasst werden. Da Ihnen die Aufnahme und Speicherung dieser Daten in Rechnung gestellt wird, können Sie Ihre Überwachungskosten erheblich senken, indem Sie Daten herausfiltern, die Sie nicht benötigen.

Wichtig

In diesem Artikel werden verschiedene Filteroptionen beschrieben, bei denen Sie den DCR oder ConfigMap für einen überwachten Cluster ändern müssen. Weitere Informationen zum Ausführen dieser Konfiguration finden Sie unter Konfigurieren der Protokollsammlung in Container-Insights.

Filtern von Containerprotokollen

Containerprotokolle sind Stderr- und Stdout-Protokolle, die von Containern in Ihrem Kubernetes-Cluster generiert werden. Diese Protokolle werden in der ContainerLogV2-Tabelle in Ihrem Log Analytics-Arbeitsbereich gespeichert. Standardmäßig werden alle Containerprotokolle erfasst, Sie können jedoch Protokolle aus bestimmten Namespaces herausfiltern oder die Sammlung von Containerprotokollen vollständig deaktivieren.

Mithilfe der Datensammlungsregel (Data Collection Rule, DCR)können Sie Stderr- und Stdout-Protokolle aktivieren oder deaktivieren und bestimmte Namespaces aus jedem Namespace filtern. Einstellungen für Containerprotokolle und Namespacefilter sind in den im Azure-Portal konfigurierten Kostenvoreinstellungen enthalten, und Sie können diese Werte einzeln mithilfe der anderen DCR-Konfigurationsmethoden festlegen.

Mit ConfigMap können Sie die Sammlung von stderr und stdout Protokollen separat für den Cluster konfigurieren, sodass Sie eine und nicht die andere aktivieren können.

Das folgende Beispiel zeigt die ConfigMap-Einstellungen zum Sammeln von Stdout und Stderr mit Ausnahme der kube-system und gatekeeper-system Namespaces.

[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

Plattformprotokollfilterung (System Kubernetes-Namespaces)

Standardmäßig werden Containerprotokolle aus dem Systemnamespace aus der Sammlung ausgeschlossen, um die Log Analytics-Kosten zu minimieren. Containerprotokolle von Systemcontainern können in bestimmten Problembehandlungsszenarien kritisch sein. Dieses Feature ist auf die folgenden Systemnamespaces beschränkt: kube-system, gatekeeper-system, calico-system, azure-arc, kube-public und kube-node-lease.

Aktivieren Sie Plattformprotokolle mit ConfigMap mit der Einstellung collect_system_pod_logs. Sie müssen auch sicherstellen, dass sich der Systemnamespace nicht in der Einstellung exclude_namespaces befindet.

Das folgende Beispiel zeigt die ConfigMap-Einstellungen zum Sammeln von Stdout- und Stderr-Protokollen von coredns Container im kube-system Namespace.

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

Anmerkungsbasierte Filterung für Workloads

Die auf Anmerkungen basierende Filterung ermöglicht es Ihnen, die Protokollerfassung für bestimmte Pods und Container auszuschließen, indem Sie den Pod mit einer Anmerkung versehen. Dadurch können Sie die Kosten für die Erfassung von Protokollen erheblich senken und sich auf relevante Informationen konzentrieren, ohne Noise zu durchforsten.

Aktivieren Sie die anmerkungsbasierte Filterung mithilfe von ConfigMap mit den folgenden Einstellungen.

[log_collection_settings.filter_using_annotations]
   enabled = true

Sie müssen auch die erforderlichen Anmerkungen zu Ihrer Workload-Pod-Spezifikation hinzufügen. In der folgenden Tabelle werden verschiedene mögliche Podanmerkungen hervorgehoben.

Anmerkung Beschreibung
fluentbit.io/exclude: "true" Schließt sowohl stdout- als auch stderr-Datenströme für alle Container im Pod aus.
fluentbit.io/exclude_stdout: "true" Schließt nur den stdout-Datenstrom für alle Container im Pod aus.
fluentbit.io/exclude_stderr: "true" Schließt nur stderr-Datenstrom für alle Container im Pod aus.
fluentbit.io/exclude_container1: "true" Schließen beide stdout- und stderr-Datenströme nur für den Container1 im Pod aus.
fluentbit.io/exclude_stdout_container1: "true" Schließen nur stdout für den Container1 im Pod aus.

Hinweis

Diese Anmerkungen sind Fluent-Bit-basiert. Wenn Sie Ihre eigene, auf Fluent-Bit basierende Lösung zum Sammeln von Protokollen mit dem Kubernetes-Plugin-Filter und dem anmerkungsbasierten Ausschluss verwenden, werden keine Protokolle mehr sowohl von Container Insights als auch von Ihrer Lösung gesammelt.

Nachfolgend sehen Sie ein Beispiel für fluentbit.io/exclude: "true"-Anmerkungen in der Pod-Spezifikation:

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 

Filterumgebungsvariablen

Aktivieren Sie die Sammlung von Umgebungsvariablen auf allen Pods und Knoten im Cluster mithilfe von ConfigMap mit den folgenden Einstellungen.

[log_collection_settings.env_var]
    enabled = true

Wenn die Erfassung von Umgebungsvariablen global aktiviert ist, können Sie sie für einen bestimmten Container deaktivieren. Legen Sie dazu die Umgebungsvariable AZMON_COLLECT_ENV auf False fest, entweder mit einer Dockerfile-Einstellung oder in der Konfigurationsdatei für den Pod unter dem Abschnitt env:. Wenn die Sammlung von Umgebungsvariablen global deaktiviert ist, können Sie die Sammlung nicht für einen bestimmten Container aktivieren. Die einzige Außerkraftsetzung, die auf Containerebene angewendet werden kann, besteht darin, die Sammlung zu deaktivieren, wenn sie bereits global aktiviert ist.

Auswirkungen auf Visualisierungen und Warnungen

Wenn Sie benutzerdefinierte Warnungen oder Workbooks mit Container-Insights-Daten verwenden, kann das Ändern Ihrer Datensammlungseinstellungen diese Erfahrungen beeinträchtigen. Wenn Sie Namespaces ausschließen oder die Häufigkeit der Datenerfassung reduzieren, überprüfen Sie Ihre bestehenden Warnmeldungen, Dashboards und Arbeitsmappen, die diese Daten verwenden.

Führen Sie die folgende Azure Resource Graph-Abfrage aus, um nach Warnungen zu suchen, die auf diese Tabellen verweisen:

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ächste Schritte