Monitorar o Openflow

Este tópico descreve como monitorar o estado do Openflow e solucionar problemas.

Acesso aos logs do Openflow

O Snowflake envia logs do Openflow para a tabela de eventos que você definiu ao configurar o Openflow.

O Snowflake recomenda que você inclua um carimbo de data/hora na cláusula WHERE das consultas da tabela de eventos. Isso é especialmente importante devido ao volume potencial de dados gerados por vários componentes do Snowflake. Ao aplicar filtros, você pode recuperar um subconjunto menor de dados, o que melhora o desempenho da consulta.

Para começar rapidamente a usar a telemetria do Openflow, consulte Consultas de exemplo abaixo.

Esquema de telemetria do Openflow

Para obter mais informações sobre as colunas da tabela de eventos, consulte Colunas da tabela de eventos.

As seções a seguir descrevem como o Openflow estrutura a telemetria em uma tabela de eventos.

Atributos de recursos

Descreve os metadados de evento definidos pelo Openflow. Para obter informações gerais sobre outros tipos de atributos de recurso, consulte Coluna RESOURCE_ATTRIBUTES na documentação das colunas da tabela de eventos.

Nome

Tipo

Descrição

aplicativo

Cadeia de caracteres

O valor fixo openflow

cloud.service.provider

Cadeia de caracteres

Um de aws, azure, gcp, spcs

container.id

Cadeia de caracteres

Identificador exclusivo do contêiner

container.image.name

Cadeia de caracteres

Nome totalmente qualificado da imagem do contêiner. Os contêineres de tempo de execução do Openflow incluirão o caminho para o registro de contêineres local.

Por exemplo, $accountid.dkr.ecr.$region.amazonaws.com/snowflake-openflow/runtime-server

container.image.tag

Cadeia de caracteres

Versão da imagem do contêiner

k8s.container.name

Cadeia de caracteres

O nome do contêiner K8s. Os contêineres de tempo de execução do Openflow começarão com a «Chave de tempo de execução» e terminarão com -gateway ou -server.

Por exemplo, um tempo de execução do Openflow chamado «PostgreSQL CDC» com uma Chave de tempo de execução postgresql-cdc, portanto, teria nomes de contêineres como:

  • postgresql-cdc-gateway

  • postgresql-cdc-server

k8s.container.restart_count

Cadeia de caracteres numérica

O número de vezes que esse contêiner foi reiniciado desde que foi criado.

k8s.namespace.name

Cadeia de caracteres

Namespace K8s do pod ou contêiner, começando com runtime- para tempos de execução do Openflow. Os valores também incluem kube-system e openflow-runtime-infra.

k8s.node.name

Cadeia de caracteres

O nome de domínio interno do nó EKS que hospeda o pod/contêiner ou o próprio nó EKS.

Por exemplo, ip-10-12-13-144.us-west-2.compute.internal

k8s.pod.name

Cadeia de caracteres

O nome do pod K8s. Os pods de tempo de execução do Openflow começarão com a «Chave de tempo de execução» e terminarão com um identificador numérico para cada réplica de pod. Este número pode aumentar até o «Máximo de nós» definido para o tempo de execução, indexado em 0.

Por exemplo, um tempo de execução do Openflow denominado «PostgreSQL CDC» com uma Chave de tempo de execução postgresql-cdc e 3 nós teria nomes de pod como:

  • postgresql-cdc-0

  • postgresql-cdc-1

  • postgresql-cdc-2

k8s.pod.start_time

Cadeia de caracteres de data ISO 8601

Carimbo de data/hora em que o pod foi iniciado

k8s.pod.uid

Cadeia de caracteres UUID

Identificador exclusivo do pod no cluster

openflow.dataplane.id

Cadeia de caracteres UUID

O identificador exclusivo da implantação do Openflow, correspondente ao «ID» mostrado na UI do Snowflake Openflow em Deployment > View Details.

Exemplo de atributos de recursos:
{
  "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

Escopo

Nome

Tipo

Descrição

nome

Cadeia de caracteres

Provedor da métrica. Uma das opções:

  • runtime para métricas do Conector Openflow

  • github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kubeletstatsreceiver para métricas em nível de sistema

Exemplo de escopo:
{
  "name": "runtime"
}
Copy

Tipo de registro

Dependendo do tipo de telemetria Openflow representada por essa linha, este será um dos seguintes:

  • LOG

  • METRIC

O Openflow não coleta registros TRACE, mas este também é um tipo válido para esta coluna nas tabelas de eventos do Snowflake.

Registro

Opcional. Este objeto JSON descreve o tipo de métrica representada por essa linha.

Nome

Tipo

Descrição

métrica

Objeto

Contém dois campos:

  • name para a métrica exclusiva produzida, normalmente usando namespaces delimitados por pontos

  • unit para o valor representado pelo tipo, como byte, nanossegundo e thread

Os valores de nome e unidade variam muito. Para ver a lista completa, consulte Métricas do aplicativo abaixo.

metric_type

Cadeia de caracteres

Uma das opções:

  • gauge para a maioria das métricas do Openflow, um valor instantâneo que pode aumentar ou diminuir

  • sum para métricas cumulativas, como tempo de CPU do pod e IO de rede

value_type

Cadeia de caracteres

O tipo primitivo do valor produzido por essa métrica. Uma das opções:

  • INT

  • DOUBLE

aggregation_temporality

Cadeia de caracteres

Opcional. Definido como cumulativo para métricas que são estritamente crescentes e dependem de valores anteriores, como tempo de CPU do pod e IO de rede.

is_monotonic

Booleano

Opcional. Para métricas cumulativas, isso é verdadeiro para mostrar que está estritamente crescente dentro da série temporal.

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

Atributos de registro

Logs

Os atributos de registro para logs normalmente indicam a origem desse log. Por exemplo, logs de um tempo de execução do Openflow denominado testruntime podem ter atributos de registro de:

{
  "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étricas do sistema

Métricas do sistema, como uso da CPU, normalmente não definem atributos de registro, portanto, serão null.

Métricas de aplicativos Openflow

Atributos de registro para métricas de aplicativo ou «fluxo» fornecem detalhes sobre o componente no pipeline de dados que produziu a métrica. Isso varia de acordo com o tipo de componente. Consulte Métricas de aplicativos

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

Valor

Esta coluna contém o valor bruto da telemetria. Para métricas, será um valor numérico (inteiro ou duplo). Para logs, será um valor de cadeia de caracteres semiestruturado ou uma cadeia de caracteres JSON bem formatada.

Logs de tempo de execução do Openflow

Os tempos de execução do Openflow emitem a maioria dos logs como JSON; portanto, aplicar o TRY_PARSE_JSON do Snowflake à coluna VALUE permite que você divida ainda mais esse valor nos seguintes campos estruturados:

Nome

Tipo

Descrição

formattedMessage

Cadeia de caracteres

A mensagem de log real emitida pelo registrador de tempo de execução.

nível

Cadeia de caracteres

Uma das opções:

  • ERROR

  • WARN

  • INFO

  • DEBUG

  • TRACE

loggerName

Cadeia de caracteres

O nome de classe totalmente qualificado para o registrador. Os processadores Openflow normalmente usam nomes de registradores que começam com com.snowflake.openflow.runtime.processors.

Isso é útil para visualizar logs de um serviço de controlador, biblioteca agrupada ou processador específico.

nanossegundos

Inteiro

Tempo em nível de nanossegundo em que esta mensagem de log foi criada, começando em milissegundos.

Por exemplo, um valor de nanossegundo de 111222333 pode corresponder a um valor de carimbo de data/hora de 1749180210111, com os três dígitos mais à esquerda do nanossegundo correspondendo aos três dígitos mais à direita do carimbo de data/hora.

threadName

Cadeia de caracteres

Nome do thread que manipula esta chamada. Por exemplo, Timer-Driven Process Thread-7

throwable

Objeto JSON

null quando não há exceção ou stacktrace para essa mensagem de log. Caso contrário, ele registra o stacktrace como uma cadeia de caracteres JSON com campos:

  • className – a exceção gerada

  • message – qualquer mensagem registrada com a exceção

  • stepArray – matriz de chamadas de método para o stacktrace, incluindo:

    • className

    • fileName

    • lineNumber

    • methodName

timestamp

Inteiro

Hora em que esta mensagem de log foi criada, representada em milissegundos desde a era UNIX.

Por exemplo, 1749180210044 indica que o log foi criado em 05/06/2025 03:23:30.044 UTC

Métricas do aplicativo

Nota

A lista a seguir abrange todas as métricas do aplicativo disponíveis para tempos de execução do Openflow. Os tempos de execução emitem apenas um subconjunto de métricas relevantes para os conectores Openflow para persistir em uma tabela de eventos do Snowflake.

A tarefa de relatório OpenTelemetry do Snowflake pode enviar algumas ou todas as métricas para qualquer destino OTLP.

Métricas de conexão

Nome da métrica

Unidade

Descrição

connection.input.bytes

bytes

Tamanho da entrada de itens

connection.input.count

itens

Contagem da entrada de itens

connection.output.bytes

bytes

Tamanho da saída de itens

connection.output.count

itens

Contagem da saída de itens

connection.queued.bytes

bytes

Tamanho dos itens em fila

connection.queued.bytes.max

bytes

Tamanho máximo de itens em fila

connection.queued.count

itens

Contagem dos itens em fila

connection.queued.count.max

itens

Contagem máxima dos itens em fila

connection.queued.duration.total

milissegundos

Duração total dos itens em fila

connection.queued.duration.max

milissegundos

Duração máxima dos itens em fila

connection.backpressure.threshold.bytes

bytes

O tamanho máximo de dados em bytes que podem ser enfileirados nesta conexão antes que ela aplique a pressão de retorno.

connection.backpressure.threshold.objects

itens

O número máximo configurado de FlowFiles que podem ser enfileirados nesta conexão antes de aplicar a pressão de retorno.

connection.loadbalance.status.load_balance_not_configured

binário, 0 ou 1

1 se a conexão não tiver uma configuração de balanceamento de carga. Caso contrário, 0.

connection.loadbalance.status.load_balance_active

binário, 0 ou 1

1 se a conexão estiver realizando balanceamento de carga no cluster. Caso contrário, 0.

connection.loadbalance.status.load_balance_inactive

binário, 0 ou 1

1 se a conexão não estiver realizando balanceamento de carga no cluster. Caso contrário, 0.

Atributos do registro de conexão

Cada métrica de conexão inclui os seguintes atributos de registro:

Atributo

Descrição

id

O identificador exclusivo da conexão

nome

O nome visível para o usuário da conexão

tipo

O valor fixo connection

source.id

O identificador exclusivo do componente que está enviando FlowFiles para essa conexão

source.name

O nome visível ao usuário do componente que está enviando FlowFiles para essa conexão

destination.id

O identificador exclusivo do componente que está recebendo FlowFiles dessa conexão

destination.name

O nome visível ao usuário do componente que está recebendo FlowFiles dessa conexão

group.id

O identificador exclusivo do grupo de processos que contém essa conexão

Métricas de porta de entrada e saída

Porta de entrada e portas de saída são tecnicamente dois tipos distintos de componentes. Para fins de consistência, as métricas e os atributos para portas de entrada e saída são os mesmos, com exceção do atributo type, que indica se é uma porta de entrada ou de saída.

Nome da métrica

Unidade

Descrição

port.thread.count.active

threads

Número de threads ativos

port.bytes.received

bytes

Número de bytes recebidos

port.bytes.sent

bytes

Número de bytes enviados

port.flowfiles.received

flowfiles

Número de FlowFiles recebidos

port.flowfiles.sent

flowfiles

Número de FlowFiles enviados

port.input.bytes

bytes

Tamanho da entrada de itens

port.input.count

itens

Contagem da entrada de itens

port.output.bytes

bytes

Tamanho da saída de itens

port.output.count

itens

Contagem da saída de itens

Atributos de registro da porta de entrada e saída

Cada métrica de porta inclui os seguintes atributos de registro:

Atributo

Descrição

id

O identificador exclusivo da porta

nome

O nome da porta visível para o usuário

tipo

Um destes: port-input ou port-output

group.id

O identificador exclusivo do grupo de processos que contém essa porta

Métricas do grupo de processos

Nome da métrica

Unidade

Descrição

processgroup.thread.count.active

threads

Número de threads ativos

processgroup.thread.count.stateless

threads

Número de threads sem estado

processgroup.thread.count.terminated

threads

Número de threads encerrados

processgroup.bytes.read

bytes

Número de bytes lidos

processgroup.bytes.received

bytes

Número de bytes recebidos

processgroup.bytes.transferred

bytes

Número de bytes transferidos

processgroup.bytes.sent

bytes

Número de bytes enviados

processgroup.bytes.written

bytes

Número de bytes gravados

processgroup.flowfiles.received

flowfiles

Número de FlowFiles recebidos

processgroup.flowfiles.sent

flowfiles

Número de FlowFiles enviados

processgroup.flowfiles.transferred

flowfiles

Número de FlowFiles transferidos

processgroup.input.count

itens

Número de entrada de itens

processgroup.input.content.size

bytes

Tamanho da entrada de itens

processgroup.output.count

itens

Número de saída de itens

processgroup.output.content.size

bytes

Tamanho da saída de itens

processgroup.queued.count

itens

Número de itens em fila

processgroup.queued.content.size

bytes

Tamanho dos itens em fila

processgroup.time.processing

nanossegundos

Tempo gasto no processamento

Atributos do registro do grupo de processos

Cada métrica do grupo de processos inclui os seguintes atributos de registro:

Atributo

Descrição

id

O identificador exclusivo do grupo de processos

nome

O nome visível ao usuário do grupo de processos

tipo

O valor fixo process-group

tree.level

A profundidade do grupo de processos, em relação ao grupo de processos raiz do fluxo. Os grupos de processos no nível mais alto do fluxo terão tree.level 1

Métricas do processador

Nome da métrica

Unidade

Descrição

processor.thread.count.active

thread

Número de threads ativos

processor.thread.count.terminated

thread

Número de threads encerrados

processor.time.lineage.average

nanossegundo

Duração média da linhagem

processor.invocations

invocações

Número de invocações

processor.bytes.read

byte

Número de bytes lidos

processor.bytes.received

byte

Número de bytes recebidos

processor.bytes.sent

byte

Número de bytes enviados

processor.bytes.written

byte

Número de bytes gravados

processor.flowfiles.received

flowfiles

Número de FlowFiles recebidos

processor.flowfiles.removed

flowfiles

Número de FlowFiles removidos

processor.flowfiles.sent

flowfiles

Número de FlowFiles enviados

processor.input.count

item

Número de entrada de itens

processor.input.content.size

bytes

Tamanho da entrada de itens

processor.output.count

item

Número de saída de itens

processor.output.content.size

byte

Tamanho da saída de itens

processor.time.processing

nanossegundo

Tempo gasto no processamento

processor.run.status.running

binário, 0 ou 1

1 se em execução; 0 caso contrário

processor.run.status.stopped

binário, 0 ou 1

1 se parado; 0 caso contrário

processor.run.status.validating

binário, 0 ou 1

1 se validando; 0 caso contrário

processor.run.status.invalid

binário, 0 ou 1

1 se inválido; 0 caso contrário

processor.run.status.disabled

binário, 0 ou 1

1 se desativado; 0 caso contrário

processor.counter

contagem

Valor do contador

Atributos do registro do processador

Cada métrica do processador inclui os seguintes atributos de registro:

Atributo

Descrição

id

O identificador único do processador

nome

O nome do processador visível e editável pelo usuário

tipo

O valor fixo processor

component

O nome da classe imutável do processador.

execution.node

ALL ou PRIMARY, dependendo de como esse processador está configurado para ser executado

group.id

O identificador exclusivo do grupo de processos que contém esse processador

Atributos adicionais para contadores

Além dos atributos padrão do processador acima, as métricas processor.counter incluem o seguinte:

Atributo

Descrição

tipo

O valor fixo counter

counter

O nome do contador gerado pelo usuário ou pelo sistema

Métricas do grupo de processos remotos

Nome da métrica

Unidade

Descrição

remoteprocessgroup.thread.count.active

threads

Número de threads ativos

remoteprocessgroup.remote.port.count.active

portas

Número de portas remotas ativas

remoteprocessgroup.remote.port.count.inactive

portas

Número de portas remotas inativas

remoteprocessgroup.duration.lineage.average

nanossegundos

Duração média da linhagem

remoteprocessgroup.refresh.age

milissegundos

Tempo desde a última atualização

remoteprocessgroup.received.count

itens

Número de itens recebidos

remoteprocessgroup.received.content.size

bytes

Tamanho dos itens recebidos

remoteprocessgroup.sent.count

itens

Número de itens enviados

remoteprocessgroup.sent.content.size

bytes

Tamanho dos itens enviados

remoteprocessgroup.transmission.status.transmitting

binário, 0 ou 1

1 se o grupo de processos remoto estiver transmitindo. Caso contrário, 0.

remoteprocessgroup.transmission.status.nottransmitting

binário, 0 ou 1

0 se o grupo de processos remoto estiver transmitindo. Caso contrário, 1.

Atributos do registro de grupo de processos remoto

Cada métrica do grupo de processos remoto inclui os seguintes atributos de registro:

Atributo

Descrição

id

O identificador exclusivo do grupo de processos remoto

nome

O nome visível ao usuário do grupo de processos remoto

group.id

O identificador exclusivo do grupo de processos que contém esse grupo de processos remoto

authorization.issue

A autorização usada para acessar o grupo de processos remoto

target.uri

O URI do grupo de processos remoto

tipo

O valor fixo remote-process-group

Métricas JVM

Nome da métrica

Unidade

Descrição

jvm.memory.heap.used

bytes

A quantidade de memória atualmente ocupada por objetos no heap JVM

jvm.memory.heap.committed

bytes

A quantidade de memória garantida como disponível para uso pelo heap JVM

jvm.memory.heap.max

bytes

Quantidade máxima de memória alocada para o heap JVM

jvm.memory.heap.init

bytes

Quantidade inicial de memória alocada para o heap JVM

jvm.memory.heap.usage

porcentagem

Uso de heap JVM

jvm.memory.non-heap.usage

porcentagem

Uso de não heap JVM

jvm.memory.total.init

bytes

Quantidade inicial de memória alocada para o JVM

jvm.memory.total.used

bytes

Quantidade atual de memória usada pelo JVM

jvm.memory.total.max

bytes

Quantidade máxima de memória que pode ser usada pelo JVM

jvm.memory.total.committed

bytes

A quantidade de memória que deve estar disponível para uso pelo JVM

jvm.threads.count

threads

Número de threads ativos

jvm.threads.deadlocks

threads

Deadlocks de threads JVM

jvm.threads.daemon.count

threads

Número de threads daemon ativos

jvm.uptime

segundos

Número de segundos que o processo JVM está em execução

jvm.file.descriptor.usage

porcentagem

Porcentagem de descritores de arquivo disponíveis em uso no momento.

jvm.gc.G1-Concurrent-GC.runs

execuções

Número total de vezes que a G1 Concurrent Garbage Collection foi executada

jvm.gc.G1-Concurrent-GC.time

milissegundos

Tempo total de execução da G1 Concurrent Garbage Collection

jvm.gc.G1-Young-Generation.runs

execuções

Número total de vezes que a G1 Young Generation foi executada

jvm.gc.G1-Young-Generation.time

milissegundos

Tempo total de execução da G1 Young Generation

jvm.gc.G1-Old-Generation.runs

execuções

Número total de vezes que a G1 Old Generation foi executada

jvm.gc.G1-Old-Generation.time

milissegundos

Tempo total de execução da G1 Old Generation

Atributos do registro JVM

As métricas JVM não fornecem atributos de registro.

Métricas CPU

Nome da métrica

Unidade

Descrição

cores.available

núcleos

O número de núcleos disponíveis para o tempo de execução

cores.load

porcentagem

A média de carga do sistema ou -1 se não estiver disponível

Atributos do registro CPU

Atributo

Descrição

id

O valor fixo cpu

nome

O nome do sistema operacional

architecture

A arquitetura do sistema operacional

version

A versão do sistema operacional

Métricas de armazenamento

Nome da métrica

Unidade

Descrição

storage.free

bytes

A quantidade de armazenamento livre para um determinado repositório

storage.used

bytes

A quantidade de armazenamento usado para um determinado repositório

Atributos do registro de armazenamento

Atributo

Descrição

id

O identificador exclusivo do repositório de armazenamento

nome

Igual ao id e fornecido para consistência

storage.type

Um dos seguintes: flowfile, content ou provenance

Consultas de exemplo

As consultas a seguir são exemplos para você começar a usar a telemetria do Openflow.

Todas as consultas pressupõem que o Openflow esteja configurado para enviar telemetria para a tabela de eventos padrão de SNOWFLAKE.TELEMETRY.EVENTS. Se a sua conta Snowflake ou implantação do Openflow estiver configurada com uma tabela de eventos diferente, substitua o nome dessa tabela onde você vê SNOWFLAKE.TELEMETRY.EVENTS.

Localizar FlowFiles travados

Esta consulta retorna conexões com FlowFiles que foram enfileiradas por mais tempo do que um limite, indicando que podem estar travadas e exigir intervenção. Ajuste o limite de 30 minutos conforme necessário para o seu caso de uso.

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

Localizar logs de erros para tempos de execução do 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

Localizar processadores em execução e não em execução

Alguns fluxos esperam que todos os processadores estejam em estado «em execução», mesmo que não estejam processando dados ativamente.

Esta consulta ajuda a encontrar processadores em execução ou em outro estado, como:

  • parado

  • invalid

  • desativado

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

Encontrar alto uso de CPU para tempos de execução do Openflow

Fluxos de dados lentos ou taxa de transferência reduzida podem ser resultado de um gargalo no CPU. Os tempos de execução do Openflow aumentam automaticamente com base no número mínimo e máximo de nós configurados.

Se um tempo de execução do Openflow estiver usando o número máximo de nós e, ainda assim, o uso de CPU permanecer alto, considere:

  1. Aumentar o número máximo de nós alocados para o tempo de execução

  2. Solucionar problemas do conector ou fluxo para identificar o gargalo

Os gráficos do Snowsight fornecem uma maneira fácil de visualizar os resultados da consulta para o uso da CPU ao longo do tempo.

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