Openflow überwachen¶
Unter diesem Thema wird beschreiben, wie Sie den Status von Openflow überwachen und Probleme beheben können.
Zugriff auf Openflow-Protokolle¶
Snowflake sendet Openflow-Protokolle an die Ereignistabelle, die Sie beim Einrichten von Openflow <label-openflow_event_table> konfiguriert haben. Snowflake empfiehlt, dass Sie in der WHERE-Klausel von Abfragen von Ereignistabellen einen Zeitstempel einfügen. Dies ist besonders wichtig wegen der potenziellen Datenmenge, die von verschiedenen Snowflake-Komponenten generiert wird. Durch die Anwendung von Filtern können Sie eine kleinere Teilmenge von Daten abrufen, was die Abfrageleistung verbessert.
Die Ereignistabelle enthält die folgenden Spalten, die nützliche Informationen über die von Snowflake gesammelten Protokolle von Openflow liefern:
TIMESTAMP: Zeigt an, wann Snowflake das Protokoll erfasst hat.
RESOURCE_ATTRIBUTES: Liefert ein JSON-Objekt, das den Snowflake-Dienst identifiziert, der die Protokollmeldung erzeugt hat. So finden Sie hier beispielsweise Details wie die Anwendungs- und Datenebene-ID für Openflow.
{ "application": "openflow", "cloud.service.provider": "aws", "k8s.container.name": "pg-dev-server", "k8s.container.restart_count": "0", "k8s.namespace.name": "runtime-pg-dev", "k8s.node.name": "ip-10-10-62-36.us-east-2.compute.internal", "k8s.pod.name": "pg-dev-0", "k8s.pod.start_time": "2025-04-25T22:14:29Z", "k8s.pod.uid": "94610175-1685-4c8f-b0a1-42898d1058e6", "k8s.statefulset.name": "pg-dev", "openflow.dataplane.id": "abeddb4f-95ae-45aa-95b1-b4752f30c64a" }
RECORD_ATTRIBUTES: Für einen Snowflake-Dienst identifiziert er eine Fehlerquelle (Standardausgabe oder Standardfehler).
{ "log.file.path": "/var/log/pods/runtime-pg-dev_pg-dev-0_94610175-1685-4c8f-b0a1-42898d1058e6/pg-dev-server/0.log", "log.iostream": "stdout", "logtag": "F" }
VALUE: Standardausgabe und Standardfehler werden in Zeilen aufgeteilt, wobei jede Zeile einen eigenen Eintrag in der Ereignistabelle generiert.
"{\"timestamp\":1746655642080,\"nanoseconds\":80591397,\"level\":\"INFO\",\"threadName\":\"Clustering Tasks Thread-2\",\"loggerName\":\"org.apache.nifi.controller.cluster.ClusterProtocolHeartbeater\",\"formattedMessage\":\"Heartbeat created at 2025-05-07T22:07:22.071Z and sent to pg-dev-0.pg-dev.runtime-pg-dev.svc.cluster.local:8445 at 2025-05-07T22:07:22.080590784Z; determining Cluster Coordinator took 7 millis; DNS lookup for coordinator took 0 millis; connecting to coordinator took 0 millis; sending heartbeat took 1 millis; receiving first byte from response took 1 millis; receiving full response took 1 millis; total time was 9 millis\",\"throwable\":null}"
Beispiele¶
Fehlerprotokolle für Laufzeiten suchen¶
SELECT
timestamp,
resource_attributes:"k8s.namespace.name" AS runtime_key,
parse_json(value::string):loggerName AS logger,
parse_json(value::string):formattedMessage AS log_value
FROM openflow.telemetry.EVENTS_<account-id>
WHERE true
AND timestamp < dateadd('days', -1, sysdate())
AND record_type = 'LOG'
AND resource_attributes:"k8s.namespace.name" LIKE 'runtime-%'
AND resource_attributes:"k8s.container.name" LIKE '%-server'
AND parse_json(value::string):level = 'ERROR'
ORDER BY timestamp desc
LIMIT 5;
„Caused-by“-Ausnahmen in den Protokollen finden¶
Diese Ausnahmen sind bei intermittierenden Verbindungsproblemen, Dateninkompatibilitäten oder ähnlichen Ursachen zu erwarten.
SELECT
timestamp,
RESOURCE_ATTRIBUTES:"k8s.namespace.name" AS Namespace,
RESOURCE_ATTRIBUTES:"k8s.pod.name" AS Pod,
RESOURCE_ATTRIBUTES:"k8s.container.name" AS Container,
value
FROM openflow.telemetry.EVENTS_<account-id>
WHERE true
AND record_type = 'LOG'
AND timestamp > dateadd(minute, -5, sysdate())
AND value LIKE '%Caused By%'
ORDER BY timestamp desc
LIMIT 10;
Herausfinden, welche Prozessoren laufen, angehalten wurden oder sich in einem anderen Zustand befinden.¶
SELECT
timestamp,
RECORD_ATTRIBUTES:component AS Processor,
RECORD_ATTRIBUTES:id AS Processor_ID,
value AS Running
FROM openflow.telemetry.EVENTS_<account-id>
WHERE true
AND RECORD:metric:name = 'processor.run.status.running'
AND RECORD_TYPE='METRIC'
AND timestamp > dateadd(minute, -5, sysdate());
Hohe CPU Nutzung für Laufzeiten ermitteln¶
Langsame Datenflüsse oder reduzierter Durchsatz können das Ergebnis eines Engpasses auf der CPU sein. Laufzeiten sollten automatisch skaliert werden, basierend auf der Anzahl der minimalen und maximalen Knoten, die Sie konfiguriert haben. Wenn die Laufzeiten die maximale Anzahl an Knoten verwenden und die CPU-Auslastung weiterhin hoch ist, erhöhen Sie die maximale Anzahl an Knoten, die Ihren Laufzeiten zugewiesen sind, oder beheben Sie den Fehler im Konnektor oder Fluss.
SELECT
timestamp,
RESOURCE_ATTRIBUTES:"k8s.namespace.name" AS Namespace,
RESOURCE_ATTRIBUTES:"k8s.pod.name" AS Pod,
RESOURCE_ATTRIBUTES:"k8s.container.name" AS Container,
value AS CPU_Usage
FROM openflow.telemetry.EVENTS_<account-id>
WHERE TIMESTAMP > dateadd(minute, -1, sysdate())
AND RECORD_TYPE = 'METRIC'
AND RECORD:metric:name ilike 'container.cpu.usage'
AND RESOURCE_ATTRIBUTES:"k8s.namespace.name" ilike 'runtime%'
AND RESOURCE_ATTRIBUTES:"k8s.container.name" ilike '%server'
AND RESOURCE_ATTRIBUTES:"k8s.namespace.name" NOT IN ('runtime-infra', 'runtime-operator')
ORDER BY TIMESTAMP desc, CPU_Usage desc;
Verfügbare Metriken¶
In Laufzeiten verfügbare Metriken¶
Im Folgenden finden Sie eine Liste der verfügbaren Metriken für Laufzeiten:
Kennzahl |
Einheit |
Typ |
Beschreibung |
---|---|---|---|
cores.load |
Prozentsatz |
gauge |
Durchschnittliche Auslastung aller für die Laufzeit verfügbaren Kerne. Der Maximalwert ist 1, wenn alle verfügbaren Kerne vollständig genutzt werden. |
cores.available |
CPU-Kerne |
gauge |
Anzahl der für die Laufzeit verfügbaren CPU Kerne |
storage.free |
bytes |
gauge |
Menge an freiem Speicherplatz, die der Laufzeit pro Speichertyp zur Verfügung steht. Es sind drei Speichertypen verfügbar:
Sie können die Metrik |
storage.used |
bytes |
gauge |
Menge des verwendeten Speichers pro Speichertyp. Es sind drei Speichertypen verfügbar:
Sie können die Metrik |
Musterabfrage für CPU-Metriken¶
SELECT * from events
WHERE
1 = 1
AND record_type = 'METRIC'
AND resource_attributes:application = 'openflow'
AND record:metric.name IN ('cores.load', 'cores.available')
ORDER BY timestamp desc
LIMIT 1000;
In Konnektoren verfügbare Metriken¶
Im Folgenden finden Sie eine Liste der verfügbaren Metriken für Konnektoren:
Kennzahl |
Einheit |
Typ |
Beschreibung |
---|---|---|---|
processgroup.bytes.received |
bytes |
gauge |
Durchschnittliche Anzahl der von der Quelle verbrauchten Bytes |
processgroup.bytes.sent |
bytes |
gauge |
Durchschnittliche Anzahl der an das Ziel geschriebenen Bytes |
Um diese Metriken aus der Ereignistabelle abzufragen, müssen Sie den Prozessgruppennamen und die ID aus dem Openflow-Laufzeit-Canvas finden und dann nach der Spalte RECORD_ATTRIBUTES
filtern.