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 konfiguriert haben.

Snowflake empfiehlt, einen Zeitstempel in die WHERE-Klausel von Ereignistabellenabfragen aufzunehmen. 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.

Um schnell mit der Telemetrie von Openflow loslegen zu können, sehen Sie sich die nachfolgenden Beispielabfragen an.

Openflow-Telemetrie-Schema

Informationen zu den Spalten der Ereignistabelle finden Sie unter Spalten von Ereignistabellen.

Die folgenden Abschnitte beschreiben, wie Openflow die Telemetrie in einer Ereignistabelle strukturiert.

Ressourcenattribute

Beschreibt die von Openflow eingestellten Ereignis-Metadaten. Allgemeine Informationen zu anderen Typen von Ressourcenattributen finden Sie unter Spalte RESOURCE_ATTRIBUTES in der Dokumentation zu Ereignistabellenspalten.

Name

Typ

Beschreibung

application

String

Der feste Wert openflow

cloud.service.provider

String

Entweder aws, azure, gcp oder spcs

container.id

String

Eindeutiger Bezeichner des Containers

container.image.name

String

Vollqualifizierter Name des Container-Image. Openflow Runtime-Container enthalten den Pfad zur lokalen Container-Registry.

Beispiel: $accountid.dkr.ecr.$region.amazonaws.com/snowflake-openflow/runtime-server

container.image.tag

String

Version des Container-Image

k8s.container.name

String

Der Name des K8s-Containers. Openflow Runtime-Container beginnen mit dem „Laufzeitschlüssel“ und enden mit -gateway oder -server.

Beispielsweise eine Openflow-Laufzeitumgebung mit dem Namen „PostgreSQL CDC“ mit dem Laufzeitschlüssel postgresql-cdc, sodass die Containernamen wie folgt wären:

  • postgresql-cdc-gateway

  • postgresql-cdc-server

k8s.container.restart_count

Numerische Zeichenfolge

Häufigkeit, mit der dieser Container seit seiner Erstellung neu gestartet wurde.

k8s.namespace.name

String

K8s-Namespace des Pods oder Containers, beginnend mit runtime- für Openflow-Laufzeitumgebungen. Die Werte enthalten auch kube-system und penflow-runtime-infra.

k8s.node.name

String

Der interne Domänenname des EKS-Knotens, der den Pod/Container hostet, oder der EKS-Knoten selbst.

Beispiel: ip-10-12-13-144.us-west-2.compute.internal

k8s.pod.name

String

Der Name des K8s-Pods. Openflow Runtime-Pods beginnen mit dem „Laufzeitschlüssel“ und enden mit einem numerischen Bezeichner für jedes Pod-Replikat. Diese Anzahl kann bis zu der für die Laufzeitumgebung festgelegten maximalen Anzahl an Knoten ansteigen, die bei 0 indiziert ist.

Beispielsweise eine Openflow-Laufzeitumgebung mit dem Namen „PostgreSQL CDC“ mit dem Laufzeitschlüssel postgresql-cdc und 3 Knoten, sodass die Pod-Namen wie folgt wären:

  • postgresql-cdc-0

  • postgresql-cdc-1

  • postgresql-cdc-2

k8s.pod.start_time

ISO 8601-Datumszeichenfolge

Zeitstempel mit der Startzeit des Pods

k8s.pod.uid

UUID-Zeichenfolge

Eindeutiger Bezeichner des Pods innerhalb des Clusters

openflow.dataplane.id

UUID-Zeichenfolge

Der eindeutige Bezeichner der Openflow-Bereitstellung, die mit der „ID“ übereinstimmt, die in der Snowflake Openflow-UI unter „Deployment > View Details“ angezeigt wird.

Beispiel für Ressourcenattribute:
{
  "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"
}
Copy

Bereich

Name

Typ

Beschreibung

name

String

Anbieter der Metrik. Eine der folgenden Optionen:

  • runtime für Openflow Connector-Metriken

  • github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kubeletstatsreceiver für Metriken auf Systemebene

Bereichsbeispiel:
{
  "name": "runtime"
}
Copy

Datensatztyp

Abhängig vom Typ der Openflow-Telemetrie, die durch diese Zeile dargestellt wird, ist dies einer der folgenden:

  • LOG

  • METRIC

Openflow sammelt keine TRACE-Datensätze, aber dies ist auch ein gültiger Typ für diese Spalte in Snowflake-Ereignistabellen.

Datensatz

Optional. Dieses JSON-Objekt beschreibt den Typ der Metrik, die von dieser Zeile repräsentiert wird.

Name

Typ

Beschreibung

metric

Objekt

Enthält zwei Felder:

  • name für die erzeugte eindeutige Metrik, typischerweise unter Verwendung von durch Punkte getrennten Namespaces

  • unit für den Wert, der durch den Typ dargestellt wird, z. B. Byte, Nanosekunde und Thread

Die Werte für name und unit sind sehr unterschiedlich. Die vollständige Liste finden Sie weiter unten unter Anwendungsmetriken.

metric_type

String

Eine der folgenden Optionen:

  • gauge für die meisten Openflow-Metriken, ein Snapshot-Wert, der steigen oder fallen kann

  • sum für kumulative Metriken wie CPU-Zeit und Netzwerk-IO des Pods

value_type

String

Der primitive Typ des Wertes, der von dieser Metrik erzeugt wird. Eine der folgenden Optionen:

  • INT

  • DOUBLE

aggregation_temporality

String

Optional. Auf „cumulative“ gesetzt für Metriken, die streng ansteigend und von vorherigen Werten abhängig sind, wie CPU-Zeit und Netzwerk-IO des Pods.

is_monotonic

Boolesch

Optional. Bei kumulativen Metriken ist dieser Wert „true“, um anzuzeigen, dass er innerhalb der Zeitreihe strikt ansteigt.

Datensatzbeispiel:
{
  "metric": {
    "name": "connection.queued.duration.max",
    "unit": "millisecond"
  },
  "metric_type": "gauge",
  "value_type": "INT"
}
Copy

Datensatzattribute

Protokolle

Datensatzattribute für Protokolle geben in der Regel an, woher dieses Protokoll stammt. Beispiel: Protokolle von einer Openflow-Laufzeitumgebung namens testruntime könnten die folgenden Datensatzattribute haben:

{
  "log.file.path": "/var/log/pods/runtime-testruntime_testruntime-0_66d80cdb-9484-40a4-bdba-f92eb0af14c7/testruntime-server/0.log",
  "log.iostream": "stdout",
  "logtag": "F"
}
Copy

Systemmetriken

Systemmetriken wie CPU-Nutzung legen in der Regel keine Datensatzattribute fest, daher ist dies null.

Openflow-Anwendungsmetriken

Datensatzattribute für Anwendungs- oder „Ablauf“-Metriken liefern Details zu der Komponente in der Datenpipeline, die die Metrik erzeugt hat. Dies hängt vom Typ der Komponente ab. Siehe Anwendungsmetriken.

{
  "component": "PutSnowpipeStreaming",
  "execution.node": "ALL",
  "group.id": "c052f9d7-7f76-3013-a2c5-d3b064fa7326",
  "id": "c69e2913-22a9-36bb-a159-6a5ed1fb9d63",
  "name": "PutSnowpipeStreaming",
  "type": "processor"
}
Copy

Wert

Diese Spalte enthält den Rohwert der Telemetrie. Bei Metriken ist dies ein numerischer Wert (integer oder double). Bei Protokollen ist dies entweder ein semistrukturierter Zeichenfolgenwert oder ein gut formatierter JSON-Zeichenfolge

Openflow-Laufzeitprotokolle

Openflow-Laufzeitumgebungen geben die meisten Protokolle als JSON aus. Die Anwendung von TRY_PARSE_JSON von Snowflake auf die Spalte VALUE ermöglicht es Ihnen also, diesen Wert in die folgenden strukturierten Felder weiter zu unterteilen:

Name

Typ

Beschreibung

formattedMessage

String

Die eigentliche Protokollnachricht, die vom Runtime-Logger ausgegeben wird.

level

String

Eine der folgenden Optionen:

  • ERROR

  • WARN

  • INFO

  • DEBUG

  • TRACE

loggerName

String

Der vollqualifizierte Klassenname für den Logger. Openflow-Prozessoren verwenden normalerweise Loggernamen, die mit com.snowflake.openflow.runtime.processors beginnen.

Dies ist nützlich, um Protokolle für einen bestimmten Prozessor, einen Controller-Dienst oder eine gebündelte Bibliothek anzuzeigen.

nanoseconds

Integer

Zeit auf Nanosekundenebene, zu der diese Protokollnachricht erstellt wurde, beginnend mit Millisekunden.

Beispielsweise könnte ein Nanosekundenwert von 111222333 dem Zeitstempelwert 1749180210111 entsprechen, wobei die 3 Ziffern der Nanosekunde mit den 3 Ziffern des Zeitstempels übereinstimmen.

threadName

String

Name des Threads, der diesen Aufruf verarbeitet. Beispiel: Timer-Driven Process Thread-7

throwable

JSON-Objekt

null, wenn es keine Ausnahme oder kein Stacktrace für diese Protokollnachricht gibt. Andernfalls wird der Stacktrace als JSON-Zeichenfolge mit den folgenden Feldern protokolliert:

  • className: die ausgelöste Ausnahme

  • message: jede mit der Ausnahme protokollierte Nachricht

  • stepArray: Array von Methodenaufrufen für den Stacktrace, einschließlich:

    • className

    • fileName

    • lineNumber

    • methodName

Zeitstempel

Integer

Zeit, zu der diese Protokollnachricht erstellt wurde, dargestellt in Millisekunden seit der UNIX-Epoche

Beispiel: 1749180210044 gibt an, dass das Protokoll am 2025-06-05 03:23:30,044 UTC erstellt wurde

Anwendungsmetriken

Bemerkung

Die folgende Liste enthält alle Anwendungsmetriken, die für Openflow-Laufzeitumgebungen verfügbar sind. Laufzeiten geben nur eine Teilmenge von Metriken aus, die für Openflow-Konnektoren relevant sind, um in einer Snowflake-Ereignistabelle gespeichert zu werden.

Die OpenTelemetry-Reporting-Aufgabe kann einige oder alle Metriken an jedes beliebige OTLP-Ziel senden.

Verbindungsmetriken

Metrikname

Einheit

Beschreibung

connection.input.bytes

bytes

Größe der eingegebenen Elemente

connection.input.count

Elemente

Anzahl der eingegebenen Elemente

connection.output.bytes

bytes

Größe der ausgegebenen Elemente

connection.output.count

Elemente

Anzahl der ausgegebenen Elemente

connection.queued.bytes

bytes

Größe der Elemente in der Warteschlange

connection.queued.bytes.max

bytes

Maximale Größe der Elemente in der Warteschlange

connection.queued.count

Elemente

Anzahl der Elemente in der Warteschlange

connection.queued.count.max

Elemente

Maximale Anzahl der Elemente in der Warteschlange

connection.queued.duration.total

Millisekunden

Gesamtdauer der Elemente in der Warteschlange

connection.queued.duration.max

Millisekunden

Maximale Dauer der Elemente in der Warteschlange

connection.backpressure.threshold.bytes

bytes

Die maximale Größe der Daten in Bytes, die über diese Verbindung in die Warteschlange gestellt werden können, bevor ein Gegendruck entsteht.

connection.backpressure.threshold.objects

Elemente

Die konfigurierte maximale Anzahl von FlowFiles, die in dieser Verbindung in die Warteschlange gestellt werden können, bevor ein Gegendruck entsteht.

connection.loadbalance.status.load_balance_not_configured

Binär, 0 oder 1

1, wenn für die Verbindung keine Lastausgleichseinstellung konfiguriert ist. Ansonsten 0.

connection.loadbalance.status.load_balance_active

Binär, 0 oder 1

1, wenn die Verbindung für einen Lastenausgleich im Cluster sorgt. Ansonsten 0.

connection.loadbalance.status.load_balance_inactive

Binär, 0 oder 1

1, wenn die Verbindung nicht für einen Lastenausgleich im Cluster sorgt. Ansonsten 0.

Datensatzattribute der Verbindung

Jede Verbindungsmetrik enthält die folgenden Datensatzattribute:

Attribut

Beschreibung

id

Der eindeutige Bezeichner der Verbindung

name

Der für den Benutzer sichtbare Name der Verbindung

type

Der feste Wert connection

source.id

Der eindeutige Bezeichner der Komponente, die FlowFiles an diese Verbindung sendet

source.name

Der für den Benutzer sichtbare Name der Komponente, die FlowFiles an diese Verbindung sendet

destination.id

Der eindeutige Bezeichner der Komponente, die FlowFiles von dieser Verbindung empfängt

destination.name

Der für den Benutzer sichtbare Name der Komponente, die FlowFiles von dieser Verbindung empfängt

group.id

Der eindeutige Bezeichner der Prozessgruppe, die diese Verbindung enthält

Metriken für Eingabe- und Ausgabeports

Eingabeport und Ausgabeport sind technisch gesehen zwei getrennte Typen von Komponenten. Aus Gründen der Konsistenz sind Metriken und Attribute für Eingabe- und Ausgabeports mit Ausnahme des Attributs type gleich, das angibt, ob es sich um einen Eingabeport oder einen Ausgabeport handelt.

Metrikname

Einheit

Beschreibung

port.thread.count.active

Threads

Anzahl der aktiven Threads

port.bytes.received

bytes

Anzahl der empfangenen Byte

port.bytes.sent

bytes

Anzahl der gesendeten Byte

port.flowfiles.received

FlowFiles

Anzahl der empfangenen FlowFiles

port.flowfiles.sent

FlowFiles

Anzahl der gesendeten FlowFiles

port.input.bytes

bytes

Größe der eingegebenen Elemente

port.input.count

Elemente

Anzahl der eingegebenen Elemente

port.output.bytes

bytes

Größe der ausgegebenen Elemente

port.output.count

Elemente

Anzahl der ausgegebenen Elemente

Datensatzattribute der Eingabe- und Ausgabeports

Jede Portmetrik enthält die folgenden Datensatzattribute:

Attribut

Beschreibung

id

Der eindeutige Bezeichner des Ports

name

Der für den Benutzer sichtbare Name des Ports

type

Entweder port-input oder port-output

group.id

Der eindeutige Bezeichner der Prozessgruppe, die diesen Port enthält

Prozessgruppenmetriken

Metrikname

Einheit

Beschreibung

processgroup.thread.count.active

Threads

Anzahl der aktiven Threads

processgroup.thread.count.stateless

Threads

Anzahl der zustandslosen Threads

processgroup.thread.count.terminated

Threads

Anzahl der beendeten Threads

processgroup.bytes.read

bytes

Anzahl der gelesenen Byte

processgroup.bytes.received

bytes

Anzahl der empfangenen Byte

processgroup.bytes.transferred

bytes

Anzahl der übertragenen Byte

processgroup.bytes.sent

bytes

Anzahl der gesendeten Byte

processgroup.bytes.written

bytes

Anzahl der geschriebenen Byte

processgroup.flowfiles.received

FlowFiles

Anzahl der empfangenen FlowFiles

processgroup.flowfiles.sent

FlowFiles

Anzahl der gesendeten FlowFiles

processgroup.flowfiles.transferred

FlowFiles

Anzahl der übertragenen FlowFiles

processgroup.input.count

Elemente

Anzahl der eingegebenen Elemente

processgroup.input.content.size

bytes

Größe der eingegebenen Elemente

processgroup.output.count

Elemente

Anzahl der ausgegebenen Elemente

processgroup.output.content.size

bytes

Größe der ausgegebenen Elemente

processgroup.queued.count

Elemente

Anzahl der Elemente in der Warteschlange

processgroup.queued.content.size

bytes

Größe der Elemente in der Warteschlange

processgroup.time.processing

nanoseconds

Verarbeitungszeit

Datensatzattribute der Prozessgruppe

Jede Prozessgruppenmetrik enthält die folgenden Datensatzattribute:

Attribut

Beschreibung

id

Der eindeutige Bezeichner der Prozessgruppe

name

Der für den Benutzer sichtbare Name der Prozessgruppe

type

Der feste Wert process-group

tree.level

Die Tiefe der Prozessgruppe im Verhältnis zur Stammprozessgruppe des Ablaufs. Prozessgruppen auf der höchsten Ebene des Ablaufs haben den Wert 1 für tree.level

Prozessormetriken

Metrikname

Einheit

Beschreibung

provider.thread.count.active

Thread

Anzahl der aktiven Threads

provider.thread.count.terminated

Thread

Anzahl der beendeten Threads

process.time.lineage.overage

Nanosekunde

Durchschnittliche Dauer der Abfolge

processor.invocations

Aufrufe

Anzahl der Aufrufe

processor.bytes.read

Byte

Anzahl der gelesenen Byte

processor.bytes.received

Byte

Anzahl der empfangenen Byte

processor.bytes.sent

Byte

Anzahl der gesendeten Byte

processor.bytes.written

Byte

Anzahl der geschriebenen Byte

processor.flowfiles.received

FlowFiles

Anzahl der empfangenen FlowFiles

processor.flowfiles.removed

FlowFiles

Anzahl der entfernten FlowFiles

processor.flowfiles.sent

FlowFiles

Anzahl der gesendeten FlowFiles

processor.input.count

Element

Anzahl der eingegebenen Elemente

processor.input.content.size

bytes

Größe der eingegebenen Elemente

processor.output.count

Element

Anzahl der ausgegebenen Elemente

processor.output.content.size

Byte

Größe der ausgegebenen Elemente

processor.time.processing

Nanosekunde

Verarbeitungszeit

processor.run.status.running

Binär, 0 oder 1

1, falls aktiv; andernfalls 0

processor.run.status.stopped

Binär, 0 oder 1

1, falls angehalten; andernfalls 0

processor.run.status.validating

Binär, 0 oder 1

1 bei Validierung; andernfalls 0

processor.run.status.invalid

Binär, 0 oder 1

1, wenn ungültig; andernfalls 0

processor.run.status.disabled

Binär, 0 oder 1

1, wenn deaktiviert; andernfalls 0

processor.counter

Anzahl (count)

Wert des Zählers

Datensatzattribute des Prozessors

Jede Prozessormetrik enthält die folgenden Datensatzattribute:

Attribut

Beschreibung

id

Der eindeutige Bezeichner des Prozessors

name

Der für den Benutzer sichtbare und vom Benutzer bearbeitbare Name des Prozessors

type

Der feste Wert processor

Komponente

Der unveränderliche Klassenname des Prozessors.

execution.node

Entweder ALL oder PRIMARY, je nachdem, wie dieser Prozessor für die Ausführung konfiguriert ist

group.id

Der eindeutige Bezeichner der Prozessgruppe, die diesen Prozessor enthält

Zusätzliche Attribute für Zähler

Zusätzlich zu den oben genannten Standardattributen für Prozessoren umfassen Metriken des Typs processor.counter die folgenden Attribute:

Attribut

Beschreibung

type

Der feste Wert counter

counter

Der vom Benutzer oder vom System generierte Name des Zählers

Remoteprozessgruppenmetrik

Metrikname

Einheit

Beschreibung

remoteprocessgroup.thread.count.active

Threads

Anzahl der aktiven Threads

remoteprocessgroup.remote.port.count.active

Ports

Anzahl der aktiven Remote-Ports

remoteprocessgroup.remote.port.count.inactive

Ports

Anzahl der inaktiven Remote-Ports

remoteprocessgroup.duration.lineage.average

nanoseconds

Durchschnittliche Dauer der Abfolge

remoteprocessgroup.refresh.age

Millisekunden

Zeit seit der letzten Aktualisierung

remoteprocessgroup.received.count

Elemente

Anzahl der empfangenen Elemente

remoteprocessgroup.received.content.size

bytes

Größe der empfangenen Elemente

remoteprocessgroup.sent.count

Elemente

Anzahl der gesendeten Elemente

remoteprocessgroup.sent.content.size

bytes

Größe der gesendeten Elemente

remoteprocessgroup.transmission.status.transmitting

Binär, 0 oder 1

1, wenn die Remoteprozessgruppe übertragen wird. Ansonsten 0.

remoteprocessgroup.transmission.status.nottransmitting

Binär, 0 oder 1

0, wenn die Remoteprozessgruppe übertragen wird. Ansonsten 1.

Datensatzattribute der Remoteprozessgruppe

Jede Remoteprozessgruppenmetrik enthält die folgenden Datensatzattribute:

Attribut

Beschreibung

id

Der eindeutige Bezeichner der Remoteprozessgruppe

name

Der für den Benutzer sichtbare Name der Remoteprozessgruppe

group.id

Der eindeutige Bezeichner der Prozessgruppe, die diese Remoteprozessgruppe enthält

authorization.issue

Die Autorisierung für den Zugriff auf die Remoteprozessgruppe

target.uri

Der URI der Remoteprozessgruppe

type

Der feste Wert remote-process-group

JVM-Metriken

Metrikname

Einheit

Beschreibung

jvm.memory.heap.used

bytes

Die Menge des Arbeitsspeichers, die derzeit von Objekten auf dem JVM-Heap belegt ist

jvm.memory.heap.committed

bytes

Die Menge an Arbeitsspeicher, die garantiert für die Verwendung durch den JVM-Heap verfügbar ist

jvm.memory.heap.max

bytes

Maximale Menge an Arbeitsspeicher, die dem JVM-Heap zugeordnet ist

jvm.memory.heap.init

bytes

Ursprüngliche Menge an Arbeitsspeicher, die dem JVM-Heap zugeordnet ist

jvm.memory.heap.usage

Prozentsatz

JVM-Heap-Nutzung

jvm.memory.non-heap.usage

Prozentsatz

JVM-Nicht-Heap-Nutzung

jvm.memory.total.init

bytes

Ursprüngliche Menge an Arbeitsspeicher, die der JVM zugeordnet ist

jvm.memory.total.used

bytes

Aktuelle Menge an Arbeitsspeicher, die von der JVM verwendet wird

jvm.memory.total.max

bytes

Maximale Menge an Arbeitsspeicher, die von der JVM verwendet werden kann

jvm.memory.total.committed

bytes

Die Menge an Arbeitsspeicher, die garantiert für die Verwendung durch die JVM verfügbar ist

jvm.threads.count

Threads

Anzahl der Live-Threads

jvm.threads.deadlocks

Threads

JVM-Thread-Deadlocks

jvm.threads.daemon.count

Threads

Anzahl der Live-Daemon-Threads

jvm.uptime

Sekunden

Anzahl an Sekunden, die der JVM-Prozess ausgeführt wurde

jvm.file.descriptor.usage

Prozentsatz

Prozentsatz der verfügbaren Dateideskriptoren, die derzeit verwendet werden

jvm.gc.G1-Concurrent-GC.runs

Ausführungen

Gesamtzahl der Ausführungen der G1 Concurrent Garbage Collection

jvm.gc.G1-Concurrent-GC.time

Millisekunden

Gesamtdauer der Ausführungen der G1 Concurrent Garbage Collection

jvm.gc.G1-Young-Generation.runs

Ausführungen

Gesamtzahl der Ausführungen der G1 Young Generation

jvm.gc.G1-Young-Generation.time

Millisekunden

Gesamtdauer der Ausführungen der G1 Young Generation

jvm.gc.G1-Old-Generation.runs

Ausführungen

Gesamtzahl der Ausführungen der G1 Old Generation

jvm.gc.G1-Old-Generation.time

Millisekunden

Gesamtdauer der Ausführungen der G1 Old Generation

JVM-Datensatzattribute

JVM-Metriken liefern keine Datensatzattribute.

CPU-Metriken

Metrikname

Einheit

Beschreibung

cores.available

Kerne

Die Anzahl der verfügbaren Kerne für die Laufzeitumgebung

cores.load

Prozentsatz

Entweder der durchschnittliche Systemlastwert oder -1, wenn der Wert nicht verfügbar ist

CPU-Datensatzattribute

Attribut

Beschreibung

id

Der feste Wert cpu

name

Der Name des Betriebssystems

architecture

Die Architektur des Betriebssystems

Version

Die Version des Betriebssystems

Speichermetriken

Metrikname

Einheit

Beschreibung

storage.free

bytes

Die Menge an freiem Speicherplatz für ein bestimmtes Repository

storage.used

bytes

Die Menge an verwendetem Speicherplatz für ein bestimmtes Repository

Datensatzattribute des Speichers

Attribut

Beschreibung

id

Der eindeutige Bezeichner des Speicherrepositorys

name

Entspricht dem Wert für id und wird aus Konsistenzgründen angegeben

storage.type

Entweder flowfile, content oder provenance

Beispielabfragen

Die folgenden Abfragen sind Beispiele, um Ihnen den Einstieg in die Openflow-Telemetrie zu erleichtern.

Alle Abfragen gehen davon aus, dass Openflow so konfiguriert ist, dass es Telemetriedaten an die Standard-Ereignistabelle SNOWFLAKE.TELEMETRY.EVENTS sendet. Wenn Ihr Snowflake-Konto oder Ihre Openflow-Bereitstellung mit einer anderen Ereignistabelle konfiguriert ist, ersetzen Sie diesen Tabellennamen, wo Sie SNOWFLAKE.TELEMETRY.EVENTS sehen.

Feststeckende FlowFiles

Diese Abfrage gibt Verbindungen mit FlowFiles zurück, die länger als ein bestimmter Schwellenwert in der Warteschlange waren, was darauf hinweist, dass sie möglicherweise feststecken und ein Eingreifen erforderlich ist. Passen Sie den 30-Minuten-Schwellenwert an Ihren Anwendungsfall an.

SELECT * FROM (
  SELECT
    resource_attributes:"openflow.dataplane.id" as Deployment_ID,
    resource_attributes:"k8s.namespace.name" as Runtime_Key,
    record_attributes:name as Connection_Name,
    record_attributes:id as Connection_ID,
    MAX(TO_NUMBER(value / 60 / 1000)) as Max_Queued_File_Minutes
  FROM snowflake.telemetry.events
  WHERE true
    AND record_type = 'METRIC'
    AND record:metric:name = 'connection.queued.duration.max'
    AND timestamp > dateadd(minutes, -30, sysdate())
  GROUP BY 1, 2, 3, 4
  ORDER BY Max_Queued_File_Minutes DESC
) WHERE Max_Queued_File_Minutes > 30;
Copy

Suchen von Fehlerprotokollen für Openflow-Laufzeitumgebungen

SELECT
  timestamp,
  Deployment_ID,
  Runtime_Key,
  parsed_log:level as log_level,
  parsed_log:loggerName as logger,
  parsed_log:formattedMessage as message,
  parsed_log
FROM (
  SELECT
    timestamp,
    resource_attributes:"openflow.dataplane.id" as Deployment_ID,
    resource_attributes:"k8s.namespace.name" as Runtime_Key,
    TRY_PARSE_JSON(value) as parsed_log
  FROM snowflake.telemetry.events
  WHERE true
    AND timestamp > dateadd('minutes', -30, sysdate())
    AND record_type = 'LOG'
    AND resource_attributes:"k8s.namespace.name" like 'runtime-%'
  ORDER BY timestamp DESC
) WHERE log_level = 'ERROR';
Copy

Suchen von aktiven und nicht aktiven Prozessoren

Bei einigen Abläufen wird erwartet, dass sich alle Prozessoren in einem „aktiven“ Status befinden, auch wenn sie nicht aktiv Daten verarbeiten.

Diese Abfrage hilft Ihnen, Prozessoren zu finden, die ausgeführt werden oder sich in einem anderen Zustand befinden, wie z. B:

  • angehalten

  • invalid

  • disabled

SELECT
  timestamp,
  resource_attributes:"openflow.dataplane.id" as Deployment_ID,
  resource_attributes:"k8s.namespace.name" as Runtime_Key,
  record_attributes:component as Processor,
  record_attributes:id as Processor_ID,
  TO_NUMBER(value) as Running
FROM snowflake.telemetry.events
WHERE true
  AND record:metric:name = 'processor.run.status.running'
  AND record_type = 'METRIC'
  AND timestamp > dateadd(minutes, -30, sysdate());
Copy

Suchen von Openflow-Laufzeitumgebungen mit hoher CPU-Nutzung

Langsame Datenströme oder ein geringerer Durchsatz können das Ergebnis eines Engpasses bei der CPU sein. Openflow-Laufzeitumgebungen skalieren automatisch, basierend auf der Anzahl der minimalen und maximalen Knoten, die Sie konfiguriert haben.

Wenn eine Openflow-Laufzeitumgebung ihre maximale Anzahl von Knoten verwendet und die CPU-Nutzung weiterhin hoch bleibt, sollten Sie folgende Optionen in Betracht ziehen:

  1. Erhöhen Sie die maximalen Anzahl von Knoten, die der Laufzeitumgebung zugewiesen sind

  2. Beheben Sie die Probleme des Konnektors oder beim Ablauf, um den Engpass zu ermitteln

Snowsight-Diagramme bieten eine einfache Möglichkeit, Abfrageergebnisse für die CPU-Nutzung im Laufe der Zeit zu visualisieren.

SELECT
  timestamp,
  resource_attributes:"openflow.dataplane.id" as Deployment_ID,
  resource_attributes:"k8s.namespace.name" as Runtime_Key,
  resource_attributes:"k8s.pod.name" as Runtime_Pod,
  TO_NUMBER(value, 10, 3) * 100 as CPU_Usage_Percentage
FROM snowflake.telemetry.events
WHERE true
  AND timestamp > dateadd(minute, -30, 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'
ORDER BY timestamp desc, CPU_Usage_Percentage desc;
Copy