Surveiller Openflow

Cette rubrique décrit comment surveiller l’état d’Openflow et résoudre les problèmes.

Accès aux connexions Openflow

Snowflake envoie les journaux Openflow au tableau des événements que vous avez configuré lors de la configuration d’Openflow.

Snowflake recommande d’inclure un horodatage dans la clause WHERE des requêtes du tableau des événements. Ceci est particulièrement important en raison du volume potentiel de données générées par les différents composants de Snowflake. En appliquant des filtres, vous pouvez extraire un sous-ensemble de données plus restreint, ce qui améliore les performances de la requête.

Pour démarrer rapidement avec la télémétrie d’Openflow, consultez la section Exemples de requêtes ci-dessous.

Schéma de télémétrie Openflow

Pour plus d’informations sur les colonnes de la table d’événements, voir Colonnes de table d’événements.

Les sections suivantes décrivent comment Openflow structure la télémétrie dans un tableau des événements.

Attributs de ressources

Décrit les métadonnées d’événements définies par Openflow. Pour des informations générales sur les autres types d’attributs de ressources, voir Colonne RESOURCE_ATTRIBUTES dans la documentation des colonnes du tableau des événements.

Nom

Type

Description

application

Chaîne

La valeur fixe openflow

cloud.service.provider

Chaîne

L’un des valeurs suivantes : aws, azure, gcp, spcs

container.id

Chaîne

Identificateur unique du conteneur

container.image.name

Chaîne

Nom complet de l’image du conteneur. Les conteneurs d’environnement d’exécution Openflow incluront le chemin d’accès au registre local des conteneurs.

Par exemple, $accountid.dkr.ecr.$region.amazonaws.com/snowflake-openflow/runtime-server

container.image.tag

Chaîne

Version de l’image du conteneur

k8s.container.name

Chaîne

Le nom du conteneur K8s. Les conteneurs d’environnement d’exécution Openflow commenceront par la mention « Runtime Key » et se termineront par -gateway ou -server.

Par exemple, un environnement d’exécution Openflow nommé « PostgreSQL CDC » avec une clé d’exécution postgresql-cdc, de sorte que les conteneurs ont les noms suivants :

  • postgresql-cdc-gateway

  • postgresql-cdc-server

k8s.container.restart_count

Chaîne numérique

Le nombre de fois que ce conteneur a redémarré depuis sa création.

k8s.namespace.name

Chaîne

Espace de noms K8s du pod ou du conteneur, commençant par runtime- pour les environnements d’exécution Openflow. Les valeurs incluent également kube-system et openflow-runtime-infrra.

k8s.node.name

Chaîne

Le nom de domaine interne du nœud EKS hébergeant le pod ou le conteneur, ou le nœud EKS lui-même.

Par exemple, ip-10-12-13-144.us-west-2.compute.internal

k8s.pod.name

Chaîne

Le nom du pod K8s. Les pods d’environnement d’exécution Openflow commenceront par la mention « Runtime Key » et se termineront par un identificateur numérique pour chaque réplique du pod. Ce nombre peut augmenter jusqu’au nombre maximal de nœuds défini pour l’environnement d’exécution, indexé à 0.

Par exemple, un environnement d’exécution Openflow nommé « PostgreSQL CDC » avec une clé d’exécution postgresql-cdc et 3 nœuds aurait les noms de pods suivants :

  • postgresql-cdc-0

  • postgresql-cdc-1

  • postgresql-cdc-2

k8s.pod.start_time

Chaîne de date ISO 8601

Horodatage du démarrage du pod

k8s.pod.uid

Chaîne UUID

Identificateur unique du pod dans le cluster

openflow.dataplane.id

Chaîne UUID

L’identificateur unique du déploiement Openflow, correspondant à l”« ID » affiché dans l’UI Snowflake Openflow via Déploiement > Voir les détails.

Exemple d’attributs de ressource :
{
  "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

Portée

Nom

Type

Description

name

Chaîne

Fournisseur de la métrique. Une des options :

  • durée d'exécution pour les métriques du connecteur Openflow

  • github.com/open-telemetry/opentelemetry-collector-contlib/recevers/kubeletstatsreceiver pour les métriques au niveau du système

Exemple d’application :
{
  "name": "runtime"
}
Copy

Type d’enregistrement

En fonction du type de télémétrie Openflow représenté par cette ligne, il s’agira de l’un des éléments suivants :

  • LOG

  • METRIC

Openflow ne collecte pas d’enregistrements TRACE, mais il s’agit également d’un type valide pour cette colonne dans les tableaux des événements Snowflake.

Enregistrement

En option. Cet objet JSON décrit le type de métrique représenté par cette ligne.

Nom

Type

Description

métrique

Objet

Contient deux champs :

  • nom pour la métrique unique produite, généralement à l’aide d’espaces de noms délimités par des points

  • unité pour la valeur représentée par le type, telle que les octets, les nanosecondes et les threads

Le nom et les valeurs unitaires varient considérablement. Pour la liste complète, voir Métriques d’application ci-dessous.

metric_type

Chaîne

Une des options :

  • gauge pour la plupart des métriques Openflow, une valeur instantanée qui peut augmenter ou diminuer

  • somme pour les métriques cumulatives comme le temps de CPUdu pod et l’IO du réseau.

value_type

Chaîne

Le type primitif de la valeur produite par cette métrique. Une des options :

  • INT

  • DOUBLE

aggregation_temporality

Chaîne

En option. Définissez sur Cumulatif pour les métriques qui ne font qu’augmenter et dépendent des valeurs précédentes, telles que le temps CPU du pod et l’IO du réseau.

is_monotonic

Booléen

En option. Pour les métriques cumulatives, cela permet d’indiquer qu’elles ne font qu’augmenter au sein de la série chronologique.

Exemple d’enregistrement :
{
  "metric": {
    "name": "connection.queued.duration.max",
    "unit": "millisecond"
  },
  "metric_type": "gauge",
  "value_type": "INT"
}
Copy

Attributs d’enregistrement

Journaux

Les attributs d’enregistrement pour les journaux indiquent généralement la source de ce journal. Par exemple, les journaux d’un environnement d’exécution Openflow nommé temps d'exécution de test pourrait avoir les attributs d’enregistrement suivants :

{
  "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

Métriques système

Des métriques système comme l’utilisation du CPU ne définira généralement pas d’attributs d’enregistrement, de sorte que ce sera null.

Métriques d’application Openflow

Les attributs d’enregistrement pour les métriques d’application ou de « flux » fournissent des détails sur le composant du pipeline de données qui a produit la métrique. Cela varie en fonction du type de composant. Voir Métriques d’application

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

Valeur

Cette colonne contient la valeur brute de la télémétrie. Pour les métriques, il s’agira d’une valeur numérique (entière ou double). Pour les journaux, il s’agit soit d’une valeur de chaîne semi-structurée, soit d’une chaîne JSON bien formatée.

Journaux d’environnement d’exécution Openflow

Les environnements d’exécution Openflow émettent la pluapa de journaux sous format JSON, donc l’application de la TRY_PARSE_JSON de Snowflake à la colonne VALUE vous permet de diviser davantage cette valeur dans les champs structurés suivants :

Nom

Type

Description

formattedMessage

Chaîne

Le message du journal effectivement émis par le collecteur de l’environnement d’exécution.

level

Chaîne

Une des options :

  • ERROR

  • WARN

  • INFO

  • DEBUG

  • TRACE

loggerName

Chaîne

Le nom de classe complet du collecteur. Les processeurs Openflow utilisent généralement des noms de collecteurs commençant par com.snowflake.openflow.runtime.processors.

Cela est utile pour afficher les journaux d’un processeur, d’un service de contrôleur ou d’une bibliothèque regroupée spécifique.

nanoseconds

Entier

Temps de niveau en nanoseconde pendant lequel ce message de journal a été créé, qui commence en millisecondes.

Par exemple, une valeur en nanosecondes de 111222333 peut correspondre à une valeur d’horodatage de 1749180210111, les 3 chiffres les plus à gauche de la nanoseconde correspondant aux 3 chiffres les plus à droite de l’horodatage.

threadName

Chaîne

Nom du thread traitant cet appel. Par exemple, Processus piloté par minuterie - Thread-7

throwable

Objet JSON

null lorsqu’il n’y a pas d’exception ou de trace de pile pour ce message de journal. Sinon, il enregistre la trace d’appels en tant que chaîne JSON avec des champs :

  • className : l’exception levée

  • message : tout message enregistré avec l’exception

  • stepArray : un tableau d’appels de méthode pour la trace de la pile, notamment :

    • className

    • fileName

    • lineNumber

    • methodName

horodatage

Entier

Heure à laquelle ce message de journal a été créé, exprimée en millisecondes depuis l’époque UNIX.

Par exemple, 1749180210044 indique que le journal a été créé le 05-06-2025 à 03:23:30.044 UTC

Métriques d’application

Note

La liste suivante couvre toutes les métriques d’application disponibles pour des environnements d’exécution Openflow. Les environnements d’exécution n’émettent qu’un sous-ensemble de métriques pertinentes pour les connecteurs Openflow pour persister dans un tableau des événements Snowflake.

La tâche de reporting OpenTelemetry de Snowflake peut envoyer tout ou partie des métriques vers n’importe quelle destination OTLP.

Métriques de connexion

Nom de la métrique

Unité

Description

connection.input.bytes

bytes

Taille des éléments d’entrée

connection.input.count

éléments

Nombre d’éléments d’entrée

connection.output.bytes

bytes

Taille des éléments de sortie

connection.output.count

éléments

Nombre d’éléments de sortie

connection.queued.bytes

bytes

Taille des éléments en file d’attente

connection.queued.bytes.max

bytes

Taille maximale des éléments en file d’attente

connection.queued.count

éléments

Nombre d’éléments en file d’attente

connection.queued.count.max

éléments

Nombre maximal d’éléments en file d’attente

connection.queued.duration.total

millisecondes

Durée totale des éléments en file d’attente

connection.queued.duration.max

millisecondes

Durée maximale des éléments en file d’attente

connection.backpressure.threshold.bytes

bytes

La taille maximale des données en octets qui peuvent être mises en file d’attente dans cette connexion avant qu’elles n’appliquent une contre-pression.

connection.backpressure.threshold.objects

éléments

Le nombre maximum configuré de FlowFiles qui peuvent être mis en file d’attente dans cette connexion avant qu’ils n’appliquent une contre-pression.

connection.loadbalance.status.load_balance_not_configured

binaire, 0 ou 1

1 si la connexion n’a pas de paramètre d’équilibrage de charge configuré. Sinon, 0.

connection.loadbalance.status.load_balance_active

binaire, 0 ou 1

1 si la connexion est répartie entre les charges du cluster. Sinon, 0.

connection.loadbalance.status.load_balance_inactive

binaire, 0 ou 1

1 si la connexion n’équilibre pas la charge sur l’ensemble du cluster. Sinon, 0.

Attributs d’enregistrement de connexion

Chaque métrique de connexion comprend les attributs d’enregistrement suivants :

Attribut

Description

id

L’identificateur unique de la connexion

name

Le nom de la connexion vu par l’utilisateur

type

La valeur fixe connexion

source.id

L’identificateur unique du composant qui envoie des FlowFiles à cette connexion

source.name

Le nom du composant (vu par l’utilisateur) qui envoie des FlowFiles à cette connexion

destination.id

L’identificateur unique du composant qui reçoit des FlowFiles de cette connexion

destination.name

Le nom du composant (vu par l’utilisateur) qui reçoit des FlowFiles de cette connexion

group.id

L’identificateur unique du groupe de processus qui contient cette connexion

Métriques des ports d’entrée et de sortie

Les ports d’entrée et de sortie sont, techniquement, deux types de composants distincts. Pour des raisons de cohérence, les métriques et les attributs pour les ports d’entrée et de sortie sont les mêmes, à l’exception de l’attribut type qui indique s’il s’agit d’un port d’entrée ou d’un port de sortie.

Nom de la métrique

Unité

Description

port.thread.count.active

threads

Nombre de threads actifs

port.bytes.received

bytes

Nombre d’octets reçus

port.bytes.sent

bytes

Nombre d’octets envoyés

port.flowfiles.received

flowfiles

Nombre de FlowFiles reçus

port.flowfiles.sent

flowfiles

Nombre de FlowFiles envoyés

port.input.bytes

bytes

Taille des éléments d’entrée

port.input.count

éléments

Nombre d’éléments d’entrée

port.output.bytes

bytes

Taille des éléments de sortie

port.output.count

éléments

Nombre d’éléments de sortie

Attributs d’enregistrement des ports d’entrée et de sortie

Chaque métrique de port comprend les attributs d’enregistrement suivants :

Attribut

Description

id

L’identificateur unique du port

name

Le nom du port vu par l’utilisateur

type

Un des deux valeurs suivantes : port-input ou port-input

group.id

L’identificateur unique du groupe de processus qui contient ce port

Métriques du groupe de processus

Nom de la métrique

Unité

Description

processgroup.thread.count.active

threads

Nombre de threads actifs

processgroup.thread.count.stateless

threads

Nombre de threads sans état

processgroup.thread.count.terminated

threads

Nombre de threads terminés

processgroup.bytes.read

bytes

Nombre d’octets lus

processgroup.bytes.received

bytes

Nombre d’octets reçus

processgroup.bytes.transferred

bytes

Nombre d’octets transférés

processgroup.bytes.sent

bytes

Nombre d’octets envoyés

processgroup.bytes.written

bytes

Nombre d’octets écrits

processgroup.flowfiles.received

flowfiles

Nombre de FlowFiles reçus

processgroup.flowfiles.sent

flowfiles

Nombre de FlowFiles envoyés

processgroup.flowfiles.transferred

flowfiles

Nombre de FlowFiles transférés

processgroup.input.count

éléments

Nombre d’éléments d’entrée

processgroup.input.content.size

bytes

Taille des éléments d’entrée

processgroup.output.count

éléments

Nombre d’éléments de sortie

processgroup.output.content.size

bytes

Taille des éléments de sortie

processgroup.queued.count

éléments

Nombre d’éléments mis en file d’attente

processgroup.queued.content.size

bytes

Taille des éléments en file d’attente

processgroup.time.processing

nanoseconds

Temps de traitement

Attributs d’enregistrement de groupe de processus

Chaque métrique du groupe de processus comprend les attributs d’enregistrement suivants :

Attribut

Description

id

L’identificateur unique du groupe de processus

name

Le nom du groupe de processus vu par l’utilisateur

type

La valeur fixe process-group

tree.level

La profondeur du groupe de processus, par rapport au groupe de processus racine du flux. Les groupes de processus au niveau le plus élevé du flux auront un tree.level de 1

Métriques de processeur

Nom de la métrique

Unité

Description

processor.thread.count.active

thread

Nombre de threads actifs

processor.thread.count.terminated

thread

Nombre de threads terminés

processor.time.lineage.average

nanoseconde

Durée moyenne de lignée

processor.invocations

appels

Nombre d’appels

processor.bytes.read

byte

Nombre d’octets lus

processor.bytes.received

byte

Nombre d’octets reçus

processor.bytes.sent

byte

Nombre d’octets envoyés

processor.bytes.written

byte

Nombre d’octets écrits

processor.flowfiles.received

flowfiles

Nombre de FlowFiles reçus

processor.flowfiles.removed

flowfiles

Nombre de FlowFiles supprimés

processor.flowfiles.sent

flowfiles

Nombre de FlowFiles envoyés

processor.input.count

élément

Nombre d’éléments d’entrée

processor.input.content.size

bytes

Taille des éléments d’entrée

processor.output.count

élément

Nombre d’éléments de sortie

processor.output.content.size

byte

Taille des éléments de sortie

processor.time.processing

nanoseconde

Temps de traitement

processor.run.status.running

binaire, 0 ou 1

1 si en cours d’exécution ; sinon 0

processor.run.status.stopped

binaire, 0 ou 1

1 si arrêté ; sinon 0

processor.run.status.validating

binaire, 0 ou 1

1 si validation ; sinon 0

processor.run.status.invalid

binaire, 0 ou 1

1 si non valide ; sinon 0

processor.run.status.disabled

binaire, 0 ou 1

1 si désactivé ; sinon 0

processor.counter

count

Valeur du compteur

Attributs d’enregistrement de processeur

Chaque métrique de processeur comprend les attributs d’enregistrement suivants :

Attribut

Description

id

L’identificateur unique du processeur

name

Le nom du processeur visible et modifiable par l’utilisateur

type

La valeur fixe processor

component

Le nom de classe immuable du processeur.

execution.node

Soit ALL soit PRIMARY, selon la façon dont ce processeur est configuré pour fonctionner

group.id

L’identificateur unique du groupe de processus qui contient ce processeur

Attributs supplémentaires pour les compteurs

En plus des attributs de processeur standard ci-dessus, les métriques processor.counter comprennent les éléments suivants :

Attribut

Description

type

La valeur fixe counter

counter

Le nom du compteur généré par l’utilisateur ou par le système

Métriques du groupe de processus distant

Nom de la métrique

Unité

Description

remoteprocessgroup.thread.count.active

threads

Nombre de threads actifs

remoteprocessgroup.remote.port.count.active

ports

Nombre de ports distants actifs

remoteprocessgroup.remote.port.count.inactive

ports

Nombre de ports distants inactifs

remoteprocessgroup.duration.lineage.average

nanoseconds

Durée moyenne de lignée

remoteprocessgroup.refresh.age

millisecondes

Durée depuis la dernière actualisation

remoteprocessgroup.received.count

éléments

Nombre d’éléments reçus

remoteprocessgroup.received.content.size

bytes

Taille des éléments reçus

remoteprocessgroup.sent.count

éléments

Nombre d’éléments envoyés

remoteprocessgroup.sent.content.size

bytes

Taille des éléments envoyés

remoteprocessgroup.transmission.status.transmitting

binaire, 0 ou 1

1 si le groupe de processus à distance transmet. Sinon, 0.

remoteprocessgroup.transmission.status.nottransmitting

binaire, 0 ou 1

0 si le groupe de processus à distance transmet. Sinon, 1.

Attributs d’enregistrement de groupe de processus à distance

Chaque métrique du groupe de processus à distance comprend les attributs d’enregistrement suivants :

Attribut

Description

id

L’identificateur unique du groupe de processus à distance

name

Le nom du groupe de processus à distance vu par l’utilisateur

group.id

L’identificateur unique du groupe de processus qui contient ce groupe de processus à distance

authorization.issue

L’autorisation utilisée pour accéder au groupe de processus à distance

target.uri

L’URI du groupe de processus à distance

type

La valeur fixe remote-process-group

Métriques JVM

Nom de la métrique

Unité

Description

jvm.memory.heap.used

bytes

La quantité de mémoire actuellement occupée par les objets dans le tas JVM

jvm.memory.heap.committed

bytes

La quantité de mémoire garantie disponible pour utilisation par le tas JVM

jvm.memory.heap.max

bytes

Quantité maximale de mémoire allouée au tas JVM

jvm.memory.heap.init

bytes

Quantité initiale de mémoire allouée pour le tasJVM

jvm.memory.heap.usage

pourcentage

Utilisation du tas JVM

jvm.memory.non-heap.usage

pourcentage

Utilisation hors tas JVM

jvm.memory.total.init

bytes

Quantité initiale de mémoire allouée pour le JVM

jvm.memory.total.used

bytes

Quantité de mémoire actuellement utilisée par le JVM

jvm.memory.total.max

bytes

Quantité maximale de mémoire pouvant être utilisée par le JVM

jvm.memory.total.committed

bytes

Quantité de mémoire garantie disponible pour utilisation par le JVM

jvm.threads.count

threads

Nombre de threads actifs

jvm.threads.deadlocks

threads

Interblocages de threads JVM

jvm.threads.datemon.count

threads

Nombre de threads démon actifs

jvm.uptime

secondes

Nombre de secondes pendant lesquelles le processus JVM a été exécuté

jvm.file.descriptor.usage

pourcentage

Pourcentage de descripteurs de fichiers disponibles actuellement utilisés.

jvm.gc.G1-Concurrent-GC.runs

exécutions

Nombre total d’exécutions de la collection G1 Concurrent Garbage

jvm.gc.G1-Concurrent-GC.time

millisecondes

Durée totale d’exécution de la collection G1 Concurrent Garbage

jvm.gc.G1-Young-Generation.runs

exécutions

Nombre total d’exécutions de la G1 Young Generation

jvm.gc.G1-Young-Generation.time

millisecondes

Durée totale d’exécution de la G1 Young Generation

jvm.gc.G1-Old-Generation.runs

exécutions

Nombre total d’exécutions de la G1 Old Generation

jvm.gc.G1-Old-Generation.time

millisecondes

Durée totale d’exécution de la G1 Old Generation

Attributs d’enregistrement JVM

Les métriques JVM ne fournissent pas d’attributs d’enregistrement.

Métriques CPU

Nom de la métrique

Unité

Description

cores.available

cœurs

Le nombre de cœurs disponibles pour l’environnement d’exécution

cores.load

pourcentage

Soit la moyenne de charge du système, soit -1 si elle n’est pas disponible

Attributs d’enregistrement CPU

Attribut

Description

id

La valeur fixe cpu

name

Nom du système d’exploitation

architecture

L’architecture du système d’exploitation

version

La version du système d’exploitation

Métriques de stockage

Nom de la métrique

Unité

Description

storage.free

bytes

La quantité de stockage gratuit pour un dépôt donné

storage.used

bytes

La quantité de stockage utilisée pour un dépôt donné

Attributs d’enregistrement de stockage

Attribut

Description

id

L’identificateur unique du dépôt de stockage

name

Identique à l’identifiant et fourni par souci de cohérence

storage.type

Une des valeurs suivantes : flowfile, contenu, ou origine

Exemples de requêtes

Les requêtes suivantes sont des exemples pour vous aider à faire vos premiers pas avec la télémétrie Openflow.

Toutes les requêtes supposent qu’Openflow est configuré pour envoyer des données de télémétrie au tableau des événements par défaut de SNOWFLAKE.TELEMETRY.EVENTS. Si votre compte Snowflake ou votre déploiement Openflow est configuré avec un tableau des événements différent, remplacez ce nom de tableau où vous voyez SNOWFLAKE.TELEMETRY.EVENTS.

Rechercher des FlowFiles bloqués

Cette requête renvoie les connexions avec des FlowFiles qui ont été mis en file d’attente depuis plus d’un certain seuil, ce qui indique qu’ils peuvent être bloqués et nécessiter une intervention. Ajustez le seuil de 30 minutes en fonction de votre cas d’utilisation.

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

Rechercher les journaux des erreurs pour les environnements d’exécution Openflow

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

Trouver les processeurs en cours d’exécution et hors service

Certains flux s’attendent à ce que tous les processeurs soient dans un état « En cours d’exécution », même s’ils ne traitent pas activement les données.

Cette requête vous aide à trouver tous les processeurs qui sont en cours d’exécution ou dans un autre état, par exemple :

  • arrêté

  • 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

Trouver une utilisation CPU élevée pour les environnements d’exécution Openflow

Des flux de données lents ou un débit réduit peuvent être la conséquence d’un goulot d’étranglement dans le CPU. Les environnements d’exécution Openflow s’adaptent automatiquement en fonction du nombre minimal et maximal de nœuds que vous avez configurés.

Si un environnement d’exécution Openflow utilise son nombre maximum de nœuds et que l’utilisation du CPU reste élevée, envisagez ce qui suit :

  1. Augmentation du nombre maximal de nœuds alloués à l’environnement d’exécution

  2. Dépannage du connecteur ou du flux pour identifier le goulot d’étranglement

Les graphiques Snowsight permettent de visualiser facilement les résultats des requêtes pour l’utilisation du CPU au fil du temps.

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