Protokollierung für Cluster
Sie können die Protokollierungsfunktionalität in IBM Cloud® Kubernetes Service einrichten, um Unterstützung bei der Fehlerbehebung zu erhalten und um die Leistung Ihrer Kubernetes-Cluster und Apps zu verbessern.
Die kontinuierliche Überwachung und Protokollierung ist der Schlüssel, um Angriffe auf Ihren Cluster zu erkennen und Probleme zu lösen, sobald diese auftreten. Wenn Sie Ihren Cluster kontinuierlich überwachen, können Sie die Clusterkapazität und Verfügbarkeit von Ressourcen für Ihre App besser verstehen. Mit diesen Erkenntnissen können Sie sich darauf vorbereiten, Ihre Apps gegen Ausfallzeiten zu schützen.
Protokollierungslösung auswählen
Standardmäßig werden Protokolle für die folgenden IBM Cloud Kubernetes Service-Clusterkomponenten lokal generiert und geschrieben: Workerknoten, Container, Anwendungen, persistenter Speicher, Ingress-Lastausgleichsfunktion für Anwendungen, Kubernetes-API
und Namensbereich kube-system. Zum Erfassen, Weiterleiten und Anzeigen dieser Protokolle sind verschiedene Protokollierungslösungen verfügbar.
- IBM Cloud Logs
- Verwalten Sie Protokolle für Pod-Container, indem Sie eine Instanz von IBM Cloud Logs bereitstellen und diese Instanz für Ihren Cluster in Kubernetes Service konfigurieren. Ein Protokollierungsagent erfasst Protokolle mit der Erweiterung
*.logsowie Dateien ohne Erweiterung, die im Verzeichnis/var/logIhres Pods gespeichert sind, aus allen Namensbereichen, einschließlichkube-system. Der Agent leitet die Protokolle anschließend an Ihre Service-Instanz weiter. Sie können auch von Benutzern initiierte administrative Aktivitäten in Ihrem Cluster nachverfolgen. Kubernetes Service generiert automatisch Cluster-Management-Ereignisse und leitet diese Ereignisprotokolle an IBM Cloud Logs weiter. Weitere Informationen finden Sie in Einführung in IBM Cloud Logs. Informationen zum Bereitstellen eines Protokollierungsagenten für Ihren Cluster finden Sie unter "Verwalten des Protokollierungsagenten für Red Hat OpenShift on IBM Cloud " oder "Verwalten des Protokollierungsagenten für IBM Cloud Kubernetes Service ". - Fluentd mit einem externen Server
- Zum Erfassen, Weiterleiten und Anzeigen von Protokollen für eine Clusterkomponente können Sie eine Protokollierungskonfiguration unter Verwendung von Fluentd erstellen. Wenn Sie eine Protokollierungskonfiguration erstellen, sammelt die
Fluentd Clusterkomponente sammelt Protokolle aus den Pfaden einer angegebenen Quelle. Fluentd kann diese Protokolle dann an einen externen Server weiterleiten, der das „
syslog“-Protokoll unterstützt. Weitere Informationen finden Sie unter "Weiterleitung von Protokollen an einen externen Server verstehen ".
Migration von Protokollierungs- und Überwachungsagenten zu Cloud Logs
Das Observability-CLI-Plug-in ibmcloud ob und die Endpunkte v2/observe werden nicht mehr unterstützt. Es gibt keinen direkten Ersatz, aber Sie können jetzt Ihre Protokollierungs- und Überwachungsintegrationen über die
Erweiterung IBM Cloud Kubernetes Service oder durch Senden von IBM Cloud Kubernetes Service Protokolldaten an IBM Cloud Logs verwalten.
Sie können das ob Plug-in, Terraform oder die API nicht mehr verwenden, um Observability-Agenten auf einem Cluster zu installieren oder Ihre bestehende Konfiguration zu ändern. Sysdig-Agenten senden weiterhin Metriken an die angegebene
IBM Cloud Monitoring-Instanz. LogDNA agenten können keine Protokolle mehr senden, da IBM Cloud Log Analysis durch IBM Cloud Logs ersetzt wird.
Entfernen der Beobachtbarkeits-Plug-in-Agenten
-
Wenn der Support für
ob pluginendet, müssen Sie jede Komponente einzeln löschen.- Bereinigen Sie die Daemonsets und Configmaps.
kubectl delete daemonset logdna-agent -n ibm-observe kubectl delete daemonset sysdig-agent -n ibm-observe kubectl delete configmap <logdna-configmap> -n ibm-observe kubectl delete configmap <sysdig-configmap> -n ibm-observe ``` 1. Optional: Löschen Sie den Namespace. Nachdem keine anderen Ressourcen im Namensraum ausgeführt werden. ```sh {: pre} kubectl delete namespace ibm-observe ```
Nachdem das Plug-in entfernt wurde, installieren Sie die Logging- und Monitoring-Agenten in Ihrem Cluster erneut – entweder über das Cluster-Dashboard, mit Terraform oder manuell.
Weitere Informationen erhalten Sie nach Auswahl der folgenden Links.
Cluster- und App-Protokolle an einen externen Server weiterleiten
Konfigurieren Sie für IBM Cloud Kubernetes Service-Standardcluster die Protokollweiterleitung an einen externen Server.
Erläuterungen zur Protokollweiterleitung an einen externen Server
Wenn Sie eine Protokollierungskonfiguration für eine Quelle in Ihrem Cluster erstellen, um Daten an einen externen Server weiterzuleiten, wird eine Fluentd wird in Ihrem Cluster eine Komponente erstellt. Fluentd erfasst die Protokolle aus den Pfaden dieser Quelle und leitet die Protokolle an einen externen Server weiter. Der Datenverkehr von der Quelle an den Protokollierungsservice am Einpflegeport wird verschlüsselt.
- Für welche Quellen kann ich die Protokollweiterleitung konfigurieren?
- In der folgenden Abbildung sehen Sie den Bereich der Quellen, für die Sie die Protokollierung konfigurieren können.
-
worker: Informationen, die für die Infrastrukturkonfiguration spezifisch sind, die Sie für Ihren Workerknoten konfiguriert haben. Die Mitarbeiterprotokolle werden in „syslog“ erfasst und enthalten Betriebssystemereignisse. In der Dateiauth.logfinden Sie Informationen zu den Authentifizierungsanforderungen, die an das Betriebssystem gestellt werden.Pfade
/var/log/syslog/var/log/auth.log
-
container: Informationen, die von einem laufenden Container protokolliert werden. Pfade: Alles, was in die Dateien „STDOUT“ oder „STDERR“ geschrieben wird. -
application: Informationen zu Ereignissen, die auf Anwendungsebene auftreten. Dies kann eine Benachrichtigung über ein Ereignis sein, beispielsweise eine erfolgreiche Anmeldung, eine Warnung bezüglich des Speicherplatzes oder andere Vorgänge, die auf App-Ebene durchgeführt werden können. Pfade: Sie können die Pfade festlegen, an die Ihre Protokolle weitergeleitet werden sollen. Damit Protokolle gesendet werden, müssen Sie jedoch einen absoluten Pfad in Ihrer Protokollierungskonfiguration angeben. Andernfalls können die Protokolle nicht gelesen werden. Falls Ihr Verzeichnis auf Ihrem Worker-Knoten eingebunden ist, wurde möglicherweise ein symbolischer Link erstellt. Beispiel: Wenn der angegebene Pfad „/usr/local/spark/work/app-0546/0/stderr“ lautet, die Protokolle jedoch tatsächlich unter „/usr/local/spark-1.0-hadoop-1.2/work/app-0546/0/stderr“ gespeichert werden, können die Protokolle nicht gelesen werden. -
storage: Informationen zum persistenten Speicher, der in Ihrem Cluster konfiguriert ist. Mit Hilfe von Speicherprotokollen können Sie Problembestimmungsdashboards und Alerts als Teil Ihrer DevOps-Pipeline und der Produktionsreleases konfigurieren. Hinweis: Die Pfade/var/log/kubelet.logund/var/log/syslogenthalten ebenfalls Speicherprotokolle, aber diese Protokolle werden von den Protokollquellenkubernetesundworkergesammelt.- Pfade
-
/var/log/ibmc-s3fs.log/var/log/ibmc-block.log
- Pods
-
portworx-***ibmcloud-block-storage-attacher-***ibmcloud-block-storage-driver-***ibmcloud-block-storage-plugin-***ibmcloud-object-storage-plugin-***
-
kubernetes: Informationen von 'kubelet', 'kube-proxy' und anderen Kubernetes-Ereignissen, die im Namensbereich 'kube-system' auftreten können.- Pfade
-
/var/log/kubelet.log/var/log/kube-proxy.log/var/log/event-exporter/1..log
-
ingress: Informationen zum Netzdatenverkehr, der über die Ingress-ALB in einen Cluster eingeht.- Pfade
-
/var/log/alb/ids/*.log/var/log/alb/ids/*.err/var/log/alb/customerlogs/*.log/var/log/alb/customerlogs/*.err
-
kube-audit: Informationen zu clusterbezogenen Aktionen, die an den Kubernetes-API-Server gesendet werden, einschließlich der Zeit, des Benutzers und der betroffenen Ressource. Diekube-audit-Quelle kann mit einem Webhook konfiguriert werden. Weitere Informationen finden Sie in Prüfprotokolle der Kubernetes-API an einen externen Server weiterleiten.
- Bin ich dafür verantwortlich, Fluentd auf dem neuesten Stand zu halten?
- Zum Ändern Ihrer Protokollierungs- oder Filterkonfiguration muss die Fluentd-Protokollierungskomponente die neueste Version aufweisen. Standardmäßig sind automatische Aktualisierungen für das Add-on aktiviert. Informationen zum Inaktivieren automatischer Aktualisierungen finden Sie im Abschnitt Clusterkomponenten aktualisieren; Fluentd für die Protokollierung.
- Kann ich bestimmte Protokolle aus einer Quelle in meinem Cluster weiterleiten, andere jedoch nicht?
- Ja. Wenn Sie zum Beispiel einen besonders datenintensiven Pod haben, kann es wünschenswert sein, zu verhindern, dass Protokolle aus diesem Pod Protokollspeicherplatz belegen, und gleichzeitig die Weiterleitung von Protokollen anderer Pods weiterhin zuzulassen. Informationen dazu, wie die Weiterleitung eines bestimmten Pods verhindert wird, finden Sie unter Protokolle filtern.
Weiterleitung von Cluster- und App-Protokollen
Erstellen Sie eine Konfiguration für die Cluster- und App-Protokollierung. Mithilfe der Optionen können Sie zwischen den verschiedenen Protokollierungsoptionen unterscheiden.
In der folgenden Tabelle sind die verschiedenen Optionen aufgeführt, die Ihnen bei der Konfiguration der Protokollierung und ihrer Beschreibungen zur Verfügung stehen.
| Parameter | Beschreibung |
|---|---|
<cluster_name_or_ID> |
Der Name oder die ID des Clusters. |
--logsource |
Die Quelle, von der die Protokolle weitergeleitet werden sollen. Gültige Werte sind container, application, worker, kubernetes, ingress, und storage. Diese
Option unterstützt eine durch Kommas getrennte Liste von Protokollquellen, die auf die Konfiguration angewendet werden sollen. Wenn Sie keine Protokollquelle angeben, werden Protokollierungskonfigurationen für container-
und ingress -Protokollquellen erstellt. |
--type syslog |
Bei Angabe des Werts syslog werden Ihre Protokolle an einen externen Server weitergeleitet. |
--namespace |
Optional: Der Kubernetes-Namensbereich, von dem aus Sie Protokolle weiterleiten möchten. Die Weiterleitung von Protokollen wird für die Kubernetes-Namensbereiche ibm-system und kube-system nicht unterstützt.
Dieser Wert ist nur für die Protokollquelle container gültig. Wenn Sie keinen Namensbereich angeben, verwenden alle Namensbereiche im Cluster diese Konfiguration. |
--hostname |
Geben Sie den Hostnamen oder die IP-Adresse des Protokollcollector-Service an. |
--port |
Der Aufnahmeport. Wenn Sie keinen Port angeben, wird der Standardport 9091 verwendet. Geben Sie für das Systemprotokoll den Port des Protokollcollector-Servers an. Wenn Sie keinen Port angeben, wird der Standardport 514 verwendet. |
--app-containers |
Optional: Zum Weiterleiten von Protokollen von Apps können Sie den Namen des Containers angeben, der Ihre App enthält. Sie können mehr als einen Container angeben, indem Sie eine durch Kommas getrennte Liste verwenden. Wenn keine Container angegeben sind, werden Protokolle von allen Containern weitergeleitet, die die angegebenen Pfade enthalten. |
--app-paths |
Der Pfad zu einem Container, an den die Anwendungen Protokolle senden. Wenn Sie Protokolle mit dem Quellentyp application weiterleiten möchten, müssen Sie einen Pfad angeben. Verwenden Sie zum Angeben mehrerer Pfade eine
durch Kommas unterteilte Auflistung, z. B. /var/log/myApp1/*,/var/log/myApp2/* |
--syslog-protocol |
Wenn der Protokollierungstyp syslog< ist, das Protokoll der Transportschicht. Sie können die folgenden Protokolle verwenden: udp, tls oder tcp. Bei der Weiterleitung an einen „ rsyslog “-Server über das „ udp “-Protokoll werden Protokolle, die länger als 1KB sind, gekürzt. |
--ca-cert |
Erforderlich: Wenn der Protokollierungstyp syslog und das Protokoll tls ist, ist dies der Name des geheimen Kubernetes-Schlüssels, der das Zertifikat einer Zertifizierungsstelle enthält. |
--verify-mode |
Wenn der Protokollierungstyp syslog und das Protokoll tls ist, ist dies der Prüfmodus. Unterstützte Werte sind verify-peer und der Standardwert verify-none. |
--skip-validation |
Optional: Überspringen Sie die Validierung der Organisations- und Bereichsnamen, wenn sie angegeben sind. Das Überspringen der Validierung verringert die Bearbeitungszeit. Eine ungültige Protokollierungskonfiguration aber führt dazu, dass Protokolle nicht ordnungsgemäß weitergeleitet werden. |
Protokolle an Ihren eigenen Server über die Protokolle udp oder tcp weiterleiten
-
Stellen Sie sicher, dass Sie über die Zugriffsrolle „Editor“ oder „Administrator“ IBM Cloud auf der IAM-Plattform verfügen.
-
Für den Cluster, in dem sich die Protokollquelle befindet: Melden Sie sich bei Ihrem Konto an. If applicable, target the appropriate resource group. Legen Sie den Kontext für den Cluster fest.
-
Richten Sie einen Server ein, der das „
syslog“-Protokoll auf eine von zwei Arten akzeptiert: : Richten Sie einen eigenen Server ein und verwalten Sie diesen oder lassen Sie diese Aufgaben von einem Provider durchführen. Wenn ein Provider den Server für Sie verwaltet, dann rufen Sie den Protokollierungsendpunkt vom Protokollierungsprovider ab.: Führen Sie „
syslog“ in einem Container aus. Sie können beispielsweise diese .yaml-Datei für die Bereitstellung verwenden, um ein öffentliches Image von Docker abzurufen, mit dem ein Container in Ihrem Cluster ausgeführt wird. Das Image veröffentlicht den Port514auf der öffentlichen Cluster-IP-Adresse und verwendet diese öffentliche Cluster-IP-Adresse zum Konfigurieren des Systemprotokollhosts.Sie können Ihre Protokolle als gültiges JSON anzeigen, indem Sie die Präfixe „
syslog“ entfernen. Fügen Sie dazu den folgenden Code am Anfang Ihrer Datei „etc/rsyslog.conf“ ein, auf dem Ihr Server „rsyslog“ läuft:$template customFormat,"%msg%\n"$ActionFileDefaultTemplate customFormat -
Konfiguration für die Protokollweiterleitung erstellen. Weitere Informationen zu den Parametern finden Sie in der Tabelle mit den Konfigurationsoptionen für die Protokollierung.
ibmcloud ks logging config create --cluster CLUSTER_NAME_OR_ID --logsource LOG_SOURCE --namespace KUBERNETES_NAMESPACE --hostname LOG_SERVER_HOSTNAME_OR_IP --port LOG_SERVER_PORT --type syslog --app-containers CONTAINER1,2 --app-paths PATHS_TO_LOGS --syslog-protocol PROTOCOL
Protokolle auf Ihrem eigenen Server über das Protokoll tls weiterleiten
-
Stellen Sie sicher, dass Sie die folgenden IBM Cloud IAM-Rollen innehaben:
- Plattformzugriffsrolle Editor oder Administrator für den Cluster
- Servicezugriffsrolle Schreibberechtigter oder Manager für den Namensbereich
kube-system
-
Für den Cluster, in dem sich die Protokollquelle befindet: Melden Sie sich bei Ihrem Konto an. If applicable, target the appropriate resource group. Legen Sie den Kontext für den Cluster fest.
-
Richten Sie einen Server ein, der das „
syslog“-Protokoll auf eine von zwei Arten akzeptiert:-
Richten Sie einen eigenen Server ein und verwalten Sie diesen oder lassen Sie diese Aufgaben von einem Provider durchführen. Wenn ein Provider den Server für Sie verwaltet, dann rufen Sie den Protokollierungsendpunkt vom Protokollierungsprovider ab.
-
Führen Sie „
syslog“ in einem Container aus. Sie können beispielsweise diese .yaml-Datei für die Bereitstellung verwenden, um ein öffentliches Image von Docker abzurufen, mit dem ein Container in Ihrem Cluster ausgeführt wird. Das Image veröffentlicht den Port514unter der öffentlichen Cluster-IP-Adresse und verwendet diese öffentliche Cluster-IP-Adresse zur Konfiguration des Hostssyslog. Sie müssen die entsprechenden Zertifikate einer Zertifizierungsstelle und serverseitigen Zertifikate einfügen und die Dateisyslog.confaktualisieren, damittlsauf Ihrem Server aktiviert werden kann.
-
-
Speichern Sie das Zertifikat Ihrer Zertifizierungsstelle in einer Datei mit dem Namen
ca-cert. Es muss genau dieser Name sein. -
Erstellen Sie im Namensbereich
kube-systemeinen geheimen Schlüssel für die Dateica-cert. Verwenden Sie bei der Erstellung Ihrer Protokollierungskonfiguration den Secret-Namen für die Option „--ca-cert“.kubectl -n kube-system create secret generic --from-file=ca-cert -
Konfiguration für die Protokollweiterleitung erstellen. Weitere Informationen zu den Parametern finden Sie in der Tabelle mit den Konfigurationsoptionen für die Protokollierung.
ibmcloud ks logging config create --cluster <cluster name or id> --logsource <log source> --type syslog --syslog-protocol tls --hostname <ip address of syslog server> --port <port for syslog server, 514 is default> --ca-cert <secret name> --verify-mode <defaults to verify-none>
Weitergeleitete Protokolle filtern
Sie können auswählen, welche Protokolle an den externen Server weitergeleitet werden, indem Sie bestimmte Protokolle für einen bestimmten Zeitraum herausfiltern. Mithilfe der Optionen können Sie zwischen den verschiedenen Filteroptionen unterscheiden.
| Parameter | Beschreibung |
|---|---|
<cluster_name_or_ID> |
Erforderlich: Der Name oder die ID des Clusters, für den die Protokolle gefiltert werden sollen. |
<log_type> |
Der Typ von Protokollen, auf die Sie den Filter anwenden möchten. Momentan werden all, container und host unterstützt. |
<configs> |
Optional: Eine durch Kommas getrennte Liste Ihrer Protokollierungskonfigurations-IDs. Erfolgt keine Angabe, wird der Filter auf alle Clusterprotokollierungskonfigurationen angewendet, die an den Filter übergeben werden. Sie können die
Protokollkonfigurationen anzeigen, die mit dem Filter übereinstimmen, indem Sie die Option --show-matching-configs verwenden. |
<kubernetes_namespace> |
Optional: Der Kubernetes-Namensbereich, von dem aus Sie Protokolle weiterleiten möchten. Diese Option gilt nur, wenn Sie den Protokolltyp „ container “ verwenden. |
<container_name> |
Optional: Der Name des Containers, in dem Sie Protokolle filtern möchten. |
<logging_level> |
Optional: Filtert Protokolle auf einer angegebenen Stufe oder den darunterliegenden Stufen heraus. Zulässige Werte in ihrer kanonischen Reihenfolge sind fatal, error, warn/warning, info,
debug und trace. Beispiel: Wenn Sie Protokolle auf der Stufe info filtern, wird auch auf den Stufen debug und trace gefiltert. Hinweis: Diese Option
kann nur verwendet werden, wenn die Protokollmeldungen im JSON-Format vorliegen und ein Feld „level“ enthalten. Um Ihre Meldungen im JSON-Format anzuzeigen, fügen Sie dem Befehl die Option „ --output json “ hinzu. |
<message> |
Optional: Filtert Protokolle heraus, die eine angegebene Nachricht enthalten, die als regulärer Ausdruck geschrieben wird. |
<filter_ID> |
Optional: Die ID des Protokollfilters. |
--show-matching-configs |
Optional: Zeigen Sie die Protokollierungskonfigurationen an, für die die einzelnen Filter gelten. |
--all |
Optional: Löscht alle Ihre Protokollweiterleitungsfilter. |
-
Erstellen Sie einen Protokollierungsfilter.
ibmcloud ks logging filter create --cluster CLUSTER_NAME_OR_ID --type LOG_TYPE --logging-configs CONFIGS --namespace KUBERNETES_NAMESPACE --container CONTAINER_NAME --level LOGGING_LEVEL --regex-message MESSAGE -
Zeigen Sie die erstellten Protokollfilter an.
ibmcloud ks logging filter get --cluster CLUSTER_NAME_OR_ID --id FILTER_ID --show-matching-configs -
Aktualisieren Sie den erstellten Protokollfilter.
ibmcloud ks logging filter update --cluster CLUSTER_NAME_OR_ID --id FILTER_ID --type SERVER_TYPE --logging-configs CONFIGS --namespace KUBERNETES_NAMESPACE --container CONTAINER_NAME --level LOGGING_LEVEL --regex-message MESSAGE -
Löschen Sie einen erstellten Protokollfilter.
ibmcloud ks logging filter rm --cluster CLUSTER_NAME_OR_ID --id FILTER_ID [--all]
Protokollweiterleitung überprüfen, aktualisieren und löschen
Protokollweiterleitung überprüfen
Es gibt 2 Möglichkeiten zu bestätigen, dass Ihre Konfiguration korrekt eingerichtet ist:
- So listen Sie alle Protokollierungskonfigurationen in einem Cluster auf:
ibmcloud ks logging config get --cluster CLUSTER_NAME_OR_ID - Gehen Sie wie folgt vor, um die Protokollierungskonfiguration für einen Protokollquellentyp aufzulisten:
ibmcloud ks logging config get --cluster CLUSTER_NAME_OR_ID --logsource SOURCE
Protokollweiterleitung aktualisieren
Sie können die bereits von Ihnen erstellte Protokollierungskonfiguration aktualisieren:
ibmcloud ks logging config update --cluster CLUSTER_NAME_OR_ID --id LOG_CONFIG_ID --namespace NAMESPACE --type SERVER_TYPE --syslog-protocol PROTOCOL --logsource SOURCE --hostname HOSTNAME_OR_INGESTION_URL --port PORT --app-containers CONTAINER1,2 --app-paths PATHS_TO_LOGS
Protokollweiterleitung löschen
Sie können die Weiterleitung von Protokollen stoppen, indem Sie eine oder alle Protokollierungskonfigurationen für einen Cluster löschen:
- Gehen Sie wie folgt vor, um eine Protokollierungskonfiguration zu löschen:
ibmcloud ks logging config rm --cluster CLUSTER_NAME_OR_ID --id LOG_CONFIG_ID - So löschen Sie alle Protokollierungskonfigurationen für einen Namensraum:
ibmcloud ks logging config rm --cluster MY_CLUSTER --namespace KUBERNETES_NAMESPACE