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 |
cloud.service.provider |
Cadeia de caracteres |
Um de |
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, |
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 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:
|
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 |
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:
|
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" }
Escopo¶
Nome |
Tipo |
Descrição |
---|---|---|
nome |
Cadeia de caracteres |
Provedor da métrica. Uma das opções:
|
- Exemplo de escopo:
{ "name": "runtime" }
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:
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:
|
value_type |
Cadeia de caracteres |
O tipo primitivo do valor produzido por essa métrica. Uma das opções:
|
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" }
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" }
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" }
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:
|
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 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, |
throwable |
Objeto JSON |
|
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 |
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: |
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 |
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 |
component |
O nome da classe imutável do processador. |
execution.node |
|
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 |
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 |
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 |
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: |
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;
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';
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());
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:
Aumentar o número máximo de nós alocados para o tempo de execução
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;