Konfigurieren der Datensammlung in Container-Erkenntnissen mithilfe von ConfigMap

In diesem Artikel wird beschrieben, wie Sie die Datensammlung in Container Insights mithilfe von ConfigMap konfigurieren. Eine ConfigMap ist ein Kubernetes-Mechanismus, mit dem Sie nicht vertrauliche Daten wie Konfigurationsdateien oder Umgebungsvariablen speichern können.

Die ConfigMap dient in erster Linie dazu, die Datensammlung der Containerprotokolle und Umgebungsvariablen des Clusters zu konfigurieren. Sie können die stdout- und stderr-Protokolle einzeln konfigurieren und auch die mehrzeilige Protokollierung aktivieren. l Zu den spezifischen Konfigurationen, die Sie mit der ConfigMap vornehmen können, gehören:

  • Aktivieren/Deaktivieren und Namespacefilterung für stdout- und stderr-Protokolle
  • Aktivieren/Deaktivieren der Sammlung von Umgebungsvariablen für den Cluster
  • Filtern nach normalen Kube-Ereignissen
  • Auswählen des Protokollschemas
  • Aktivieren/Deaktivieren der mehrzeiligen Protokollierung
  • Ignorieren von Proxyeinstellungen

Wichtig

Die vollständige Konfiguration der Datensammlung in Container Insights erfordert möglicherweise die Bearbeitung der ConfigMap- und der Datensammlungsregel (Data Collection Rule, DCR) für den Cluster, da jede Methode die Konfiguration einer anderen Gruppe von Einstellungen zulässt.

Siehe Konfigurieren der Datensammlung in Container Insights mithilfe der Datensammlungsregel für eine Liste der Einstellungen und des Prozesses zum Konfigurieren der Datensammlung mithilfe des DCR.

Voraussetzungen

  • Eine ConfigMap ist eine globale Liste, und es kann nur eine ConfigMap auf den Agent für Container Insights angewandt werden. Durch das Anwenden einer weiteren ConfigMap werden die vorherigen ConfigMap-Sammlungseinstellungen außer Kraft gesetzt.
  • Die Agent-Mindestversion, die zum Erfassen von „stdout“, „stderr“ und Umgebungsvariablen aus Containerworkloads unterstützt wird, ist ciprod06142019 oder höher. Um die Agent-Version zu überprüfen, wählen Sie auf der Registerkarte Knoten einen Knoten aus. Beachten Sie im Bereich Eigenschaften den Wert der Agent Image Tag-Eigenschaft. Weitere Informationen zu den Agent-Versionen und den Inhalten der jeweiligen Releases finden Sie in den Versionshinweisen zum Agent.

Konfigurieren und Bereitstellen einer ConfigMap

Führen Sie die folgenden Schritte durch, um Ihre ConfigMap-Konfigurationsdatei zu konfigurieren und in Ihrem Cluster bereitzustellen:

  1. Laden Sie die Vorlage ConfigMap-YAML-Datei herunter, und öffnen Sie sie in einem Editor. Wenn Sie bereits über eine ConfigMap-Datei verfügen, können Sie diese verwenden.

  2. Passen Sie die ConfigMap-YAML-Datei mithilfe der Einstellungen an, die in Datensammlungseinstellungen beschrieben sind.

  3. Erstellen Sie eine ConfigMap, indem Sie den folgenden kubectl-Befehl ausführen:

    kubectl apply -f <configmap_yaml_file.yaml>
    

    Beispiel:

    kubectl apply -f container-azm-ms-agentconfig.yaml
    

    Die Änderung der Konfiguration kann einige Minuten dauern, bevor sie wirksam wird. Anschließend werden alle Azure Monitor-Agent-Pods im Cluster neu gestartet. Der Neustart aller Azure Monitor-Agent-Pods erfolgt gleitend, sodass nicht alle gleichzeitig neu gestartet werden. Nach Abschluss der Neustarts wird eine Meldung mit einem Ergebnis ähnlich dem folgenden angezeigt:

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

Einstellungen für Datensammlung

In der folgenden Tabelle werden die Einstellungen beschrieben, die Sie zum Steuern der Datensammlung konfigurieren können.

Einstellung Datentyp Wert BESCHREIBUNG
schema-version Zeichenfolge (Groß-/Kleinschreibung wird berücksichtigt) v1 Wird vom Agent beim Parsen dieser ConfigMap verwendet Die derzeit unterstützte Schemaversion ist v1. Die Bearbeitung dieses Werts wird nicht unterstützt und bei der Auswertung der ConfigMap abgelehnt.
config-version String Ermöglicht die Nachverfolgung der Version dieser Konfigurationsdatei in Ihrem Quellcodeverwaltungssystem/Repository Es sind maximal 10 Zeichen zulässig, alle zusätzlichen Zeichen werden abgeschnitten.
[log_collection_settings]
[stdout] enabled Boolesch true
false
Steuert, ob die Sammlung von stdout-Containerprotokollen aktiviert wird. Wenn dieser Wert auf true festgelegt ist und keine Namespaces für die stdout-Protokollsammlung ausgeschlossen wurden, werden stdout-Protokolle von allen Containern auf allen Pods und Knoten im Cluster gesammelt. Falls in der ConfigMap nicht angegeben, lautet der Standardwert true.
[stdout] exclude_namespaces String Durch Trennzeichen getrenntes Array Array aus Kubernetes-Namespaces, für die keine stdout-Protokolle erfasst werden. Diese Einstellung gilt nur, wenn enabled auf true festgelegt ist. Falls in der ConfigMap nicht angegeben, lautet der Standardwert
["kube-system","gatekeeper-system"].
[stderr] enabled Boolesch true
false
Steuert, ob die Sammlung von stderr-Containerprotokollen aktiviert wird. Wenn dieser Wert auf true festgelegt ist und keine Namespaces für die stderr-Protokollsammlung ausgeschlossen wurden, werden stderr-Protokolle von allen Containern auf allen Pods und Knoten im Cluster gesammelt. Falls in der ConfigMap nicht angegeben, lautet der Standardwert true.
[stderr] exclude_namespaces String Durch Trennzeichen getrenntes Array Array aus Kubernetes-Namespaces, für die keine stderr-Protokolle erfasst werden. Diese Einstellung gilt nur, wenn enabled auf true festgelegt ist. Falls in der ConfigMap nicht angegeben, lautet der Standardwert
["kube-system","gatekeeper-system"].
[env_var] enabled Boolesch true
false
Diese Einstellung steuert die Sammlung von Umgebungsvariablen für alle Pods und Knoten im Cluster. Falls in der ConfigMap nicht angegeben, lautet der Standardwert 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.
[enrich_container_logs] enabled Boolesch true
false
Steuert die Anreicherung von Containerprotokollen, damit die Eigenschaftswerte Name und Image für jeden in die Tabelle ContainerLogV2 oder ContainerLog geschriebenen Protokolldatensatz für alle Containerprotokolle im Cluster ausgefüllt werden. Falls in der ConfigMap nicht angegeben, lautet der Standardwert false.
[collect_all_kube_events] enabled Boolesch true
false
Steuert, ob Kube-Ereignisse aller Typen gesammelt werden. Standardmäßig werden Kube-Ereignisse mit dem Typ Normal nicht erfasst. Wenn diese Einstellung auf true festgelegt wird, werden Ereignisse vom Typ Normal nicht mehr gefiltert, und alle Ereignisse werden gesammelt. Falls in der ConfigMap nicht angegeben, lautet der Standardwert false.
[schema] containerlog_schema_version Zeichenfolge (Groß-/Kleinschreibung wird berücksichtigt) v2
v1
Legt das Protokollerfassungsformat fest. Wenn der Wert v2 lautet, wird die Tabelle ContainerLogV2 verwendet. Wenn der Wert v1 lautet, wird die Tabelle ContainerLog verwendet (diese Tabelle ist veraltet). Für Cluster, die Container Insights mithilfe der Azure-Befehlszeilenschnittstelle Version 2.54.0 oder höher ermöglichen, lautet die Standardeinstellung v2. Weitere Details finden Sie unter Container Insights-Protokollschema.
[enable_multiline_logs] enabled Boolesch true
false
Steuert, ob mehrzeilige Containerprotokolle aktiviert sind. Weitere Informationen finden Sie unter Mehrzeilige Protokollierung in Container Insights. Falls in der ConfigMap nicht angegeben, lautet der Standardwert false. Dies erfordert, dass die Einstellung schema auf v2 festgelegt ist.
[metric_collection_settings]
[collect_kube_system_pv_metrics] enabled Boolesch true
false
Ermöglicht das Sammeln von Nutzungsmetriken für persistente Volumes (PV) im kube-system-Namespace. Standardmäßig werden Nutzungsmetriken für persistente Volumes mit Ansprüchen für persistente Volumes (Persistent Volume Claim, PVC) im kube-system-Namespace nicht erfasst. Wenn diese Einstellung auf true festgelegt ist, werden die PV-Nutzungsmetriken für alle Namespaces gesammelt. Falls in der ConfigMap nicht angegeben, lautet der Standardwert false.
[agent_settings]
[proxy_config] ignore_proxy_settings Boolesch true
false
Wenn der Wert true lautet, werden Proxyeinstellungen ignoriert. Wenn Ihr Cluster mit einem Weiterleitungsproxy in AKS- und Arc-fähigen Kubernetes-Umgebungen konfiguriert ist, werden Proxyeinstellungen automatisch angewandt und für den Agent verwendet. Bei bestimmten Konfigurationen, z. B. AMPLS und Proxy, können Sie die Proxykonfiguration ignorieren. Falls in der ConfigMap nicht angegeben, lautet der Standardwert false.

Überprüfen der Konfiguration

Verwenden Sie den folgenden Befehl zum Überprüfen der Protokolle aus einem Agent-Pod, um sich zu vergewissern, dass die Konfiguration erfolgreich auf einen Cluster angewandt wurde.

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

Bei Konfigurationsfehlern aus den Azure Monitor-Agent-Pods werden von der Ausgabe Fehler ähnlich dem folgenden Beispiel angezeigt:

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

Fehler im Zusammenhang mit der Anwendung von Konfigurationsänderungen können ebenfalls überprüft werden. Die folgenden Optionen stehen zur weiteren Problembehandlung bei Konfigurationsänderungen zur Verfügung:

  • In einem Agent-Podprotokoll mithilfe desselben kubectl logs-Befehls.

  • In Liveprotokollen. In Liveprotokollen werden ähnliche Fehler wie im folgenden Beispiel angezeigt:

    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
    
  • In der Tabelle KubeMonAgentEvents in Ihrem Log Analytics Arbeitsbereich. Für Konfigurationsfehler werden stündlich Daten mit dem Schweregrad „Fehler“ gesendet. Wenn keine Fehler vorliegen, enthält der Eintrag in der Tabelle Daten mit dem Schweregrad „Info“, der Fehlerfreiheit angibt. Die Tags-Eigenschaft enthält weitere Informationen zum Pod und der Container-ID, für die der Fehler aufgetreten ist, sowie zum ersten Vorkommen, zum letzten Vorkommen und zur Anzahl in der letzten Stunde.

Überprüfen der Schemaversion

Unterstützte Konfigurationsschemaversionen stehen als Podanmerkung (schema-versions) auf dem Azure Monitor-Agent-Pod zur Verfügung. Sie können diese mit dem folgenden kubectl-Befehl anzeigen.

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

Die Ausgabe sieht ähnlich wie im folgenden Beispiel aus und wird mit den Anmerkungsschemaversionen angezeigt:

    Name:           ama-logs-fdf58
    Namespace:      kube-system
    Node:           aks-agentpool-95673144-0/10.240.0.4
    Start Time:     Mon, 10 Jun 2019 15:01:03 -0700
    Labels:         controller-revision-hash=589cc7785d
                    dsName=ama-logs-ds
                    pod-template-generation=1
    Annotations:    agentVersion=1.10.0.1
                  dockerProviderVersion=5.0.0-0
                    schema-versions=v1 

Häufig gestellte Fragen

Wie aktiviere ich die Protokollsammlung für Container im Kube-System-Namespace über Helm?

Die Protokollsammlung von Containern im Kube-System-Namespace ist standardmäßig deaktiviert. Sie können die Protokollsammlung durch das Festlegen einer Umgebungsvariablen auf dem Azure Monitor-Agent aktivieren. Weitere Informationen finden Sie auf der GitHub-Seite zu Container Insights.

Nächste Schritte