Auf dieser Seite wird beschrieben, wie Sie Logs aus Ihren Workflows in Google Distributed Cloud (GDC) mit Air Gap erfassen, um die Protokollierung und Datenbeobachtbarkeit zu erleichtern.
In Protokollen werden Bedingungen und Aktionen aufgezeichnet, während Sie Vorgänge in GDC verwalten. Sie können Logs, die von Ihren Komponenten erstellt werden, abrufen, um Ereignisse und Aktivitäten aufzuzeichnen. Die Protokollierungsplattform bietet eine benutzerdefinierte API zum Erfassen von Protokollen auf Projektebene, die von Ihren Workflows über Protokollierungsziele generiert werden.
Wenn Sie mit dem Erfassen von Logdaten beginnen möchten, stellen Sie eine benutzerdefinierte LoggingTarget-Ressource im Namespace Ihres Projekts auf dem Management API-Server bereit. Nachdem der Log-Collector Daten aus Ihren Workflows abgerufen hat, werden die Logs von der Logging-Plattform aus allen Log-Quellen zusammengefasst, es werden Indexe hinzugefügt und Logs werden gemäß der Konfiguration aus der benutzerdefinierten Ressource LoggingTarget mit Labels verknüpft.
Sie können auf Ihre erfassten Logs über die Grafana-Benutzeroberfläche oder die Log Query API zugreifen, wie unter Logs abfragen und ansehen beschrieben.
Best Practices für die Implementierung von Logging für die Datenbeobachtbarkeit finden Sie in den Kubernetes-Community-Richtlinien:
Hinweis
Wenn Sie die Berechtigungen zum Verwalten von benutzerdefinierten LoggingTarget-Ressourcen benötigen, bitten Sie Ihren IAM-Administrator der Organisation oder Ihren IAM-Administrator des Projekts, Ihnen eine der zugehörigen LoggingTarget-Rollen zuzuweisen.
Je nach erforderlicher Zugriffsebene und Berechtigungen können Sie für diese Ressource in einer Organisation oder einem Projekt Creator-, Editor- oder Viewer-Rollen erhalten. Weitere Informationen finden Sie unter IAM-Berechtigungen vorbereiten.
Benutzerdefinierte LoggingTarget-Ressource konfigurieren
Die benutzerdefinierte Ressource LoggingTarget weist die Logging-Pipeline an, Logs in Ihrem GDC-Projekt zu erfassen. Sie können die Ziele angeben, für die Sie Logs erfassen, einen Logparser, Zugriffsebenen und alle zusätzlichen Einstellungen.
Diese Ressource definiert die folgenden Konfigurationen:
- Ziele: Die Kriterien zum Auswählen der Pods und Container, aus denen Sie Logs erfassen möchten. Sie können Clusternamen, Pod-Namenspräfixe und Containernamenspräfixe angeben.
- Log-Analysetool: Ein vordefinierter Parser zum Interpretieren von Logeinträgen, Zuordnen von Logausgaben zu Labels und Extrahieren relevanter Felder.
- Dienstidentifizierung: Der Dienstname, der als Label auf die Logeinträge angewendet wird, um die Identifizierung und Filterung zu erleichtern.
Autorisierung: Die Zugriffsebene für Logeinträge, mit der gesteuert wird, wer die erfassten Logs ansehen kann.
Wenn Sie diese Parameter in der benutzerdefinierten Ressource LoggingTarget konfigurieren, können Sie die Erfassung und Organisation von Logs genau steuern.
So erfassen Sie Betriebslogs:
- Legen Sie das GDC-Projekt fest, aus dem Sie Logs erfassen möchten.
Geben Sie in Ihrer
LoggingTarget-Konfiguration die Pods zum Erfassen Ihrer Betriebslogs, den Projektnamespace und alle zusätzlichen Einstellungen an.Die folgende YAML-Datei zeigt ein Beispiel für eine
LoggingTarget-Konfiguration inmy-project-namespace, wobei das Präfix des Pod-Namens, aus dem Logs erfasst werden sollen,my-pod-prefixist, die Zugriffsebene für Logeinträge Anwendungsoperatoren (ao) gewährt wird, der Dienstnamemy-service-nameist und das Logformat JSON ist:# Configures a log scraping job apiVersion: logging.gdc.goog/v1 kind: LoggingTarget metadata: # Choose a namespace that matches the namespace of the workload pods. namespace: my-project-namespace name: my-logging-target spec: selector: matchPodNames: - my-pod-prefix parser: json logAccessLevel: ao serviceName: my-service-nameWeitere Felder und Optionen finden Sie in der vollständigen
LoggingTarget-Spezifikation und in der API-Referenzdokumentation.Wenden Sie die
LoggingTarget-Konfiguration auf den Management API-Server im selben Namespace wie Ihre Ziel-Pods an:kubectl --kubeconfig KUBECONFIG_PATH apply -f LOGGING_TARGET_NAME.yamlErsetzen Sie Folgendes:
KUBECONFIG_PATH: der Pfad zur kubeconfig-Datei für den Management API-Server.LOGGING_TARGET_NAME: der Name derLoggingTarget-Definitionsdatei, z. B.my-logging-target.
Die Logging-Pipeline beginnt mit dem Erfassen von Logs aus den zusätzlichen Komponenten Ihres Projekts.
Sie können Ihre erfassten Logs über die Grafana-Benutzeroberfläche oder die Log Query API abfragen. Weitere Informationen finden Sie unter Logs abfragen und ansehen.
Wenn Sie Grafana zum Abfragen Ihrer Logs verwenden, können Sie die integrierte Farbcodierungsfunktion für verschiedene Logebenen nutzen. Weitere Informationen zum Festlegen von Log-Level-Werten finden Sie unter https://grafana.com/docs/grafana/latest/explore/logs-integration/.
Vollständige LoggingTarget-Spezifikation
Die folgende YAML-Datei zeigt ein Beispiel für die vollständige Spezifikation der benutzerdefinierten Ressource LoggingTarget. Weitere Informationen und eine vollständige Beschreibung der Felder finden Sie in der API-Referenzdokumentation.
# Configures a log scraping job
apiVersion: logging.gdc.goog/v1
kind: LoggingTarget
metadata:
# Choose a namespace that matches the namespace of the workload pods.
namespace: PROJECT_NAMESPACE
name: LOGGING_TARGET_NAME
spec:
# Choose a matching pattern that identifies the pods for this job.
# Optional.
# Relationship between different selectors: 'AND'
selector:
# The clusters to collect logs from.
# The default configuration is to collect logs from all clusters.
# The relationship between different clusters is an 'OR' relationship.
# Optional
matchClusters:
- my-cluster
- another-cluster
# The pod name prefixes to collect logs from.
# The logging platform scrapes all pods with names
# that start with the specified prefixes.
# The values must contain '[a-z0-9-]' characters only.
# The relationship between different list elements is an 'OR' relationship.
# Optional.
matchPodNames:
- my-pod-prefix
- another-pod-prefix
# The container name prefixes to collect logs from.
# The logging platform scrapes all containers with names
# that start with the specified prefixes.
# The values must contain '[a-z0-9-]' characters only.
# The relationship between different list elements is an 'OR' relationship.
# Optional.
matchContainerNames:
- my-container-prefix
- another-container-prefix
# Choose the predefined parser for log entries.
# Use parsers to map the log output to labels and extract fields.
# Specify the log format.
# Optional.
# Options: klog_text, klog_json, klogr, gdch_json, json
parser: klog_text
# Specify an access level for log entries.
# The default value is 'ao'.
# Optional.
# Options: ao, pa, io
logAccessLevel: ao
# Specify a service name to be applied as a label.
# For user workloads consider this field as a workload name.
# Required.
serviceName: my-service-name
# The additional static fields to apply to log entries.
# The field is a key-value pair, where the field name is the key and
# the field value is the value.
# Optional.
additionalFields:
app: workload2
key: value
Ersetzen Sie Folgendes:
PROJECT_NAMESPACE: Ihr Projekt-Namespace.LOGGING_TARGET_NAME: der Name derLoggingTarget-Definitionsdatei.