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 |
cloud.service.provider |
String |
Entweder |
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: |
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 Beispielsweise eine Openflow-Laufzeitumgebung mit dem Namen „PostgreSQL CDC“ mit dem Laufzeitschlüssel postgresql-cdc, sodass die Containernamen wie folgt wären:
|
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 |
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:
|
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" }
Bereich¶
Name |
Typ |
Beschreibung |
---|---|---|
name |
String |
Anbieter der Metrik. Eine der folgenden Optionen:
|
- Bereichsbeispiel:
{ "name": "runtime" }
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:
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:
|
value_type |
String |
Der primitive Typ des Wertes, der von dieser Metrik erzeugt wird. Eine der folgenden Optionen:
|
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" }
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" }
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" }
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:
|
loggerName |
String |
Der vollqualifizierte Klassenname für den Logger. Openflow-Prozessoren verwenden normalerweise Loggernamen, die mit 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: |
throwable |
JSON-Objekt |
|
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 |
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 |
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 |
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 |
Komponente |
Der unveränderliche Klassenname des Prozessors. |
execution.node |
Entweder |
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 |
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 |
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 |
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 |
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;
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';
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());
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:
Erhöhen Sie die maximalen Anzahl von Knoten, die der Laufzeitumgebung zugewiesen sind
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;