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
- Siehe Datentransformationen in Containereinblicken, um dem DCR Transformationen hinzuzufügen, die Daten basierend auf detaillierten Kriterien weiter filtern.