Monitorar o Openflow

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

Acesso aos logs do Openflow

O Snowflake envia os logs do Openflow para a tabela de eventos que você definiu ao configurar o Openflow. A 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.

A tabela de eventos inclui as seguintes colunas, que fornecem informações úteis sobre os logs coletados pelo Snowflake a partir do Openflow:

  • TIMESTAMP: mostra quando o Snowflake coletou o registro.

  • RESOURCE_ATTRIBUTES: fornece um objeto JSON que identifica o serviço Snowflake que gerou a mensagem de registro. Por exemplo, ele fornece detalhes como o aplicativo e o ID de plano de dados para o Openflow.

    {
    "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
  • RECORD_ATTRIBUTES: para um serviço Snowflake, identifica uma fonte de erro (saída padrão ou erro padrão).

    {
    "log.file.path": "/var/log/pods/runtime-pg-dev_pg-dev-0_94610175-1685-4c8f-b0a1-42898d1058e6/pg-dev-server/0.log",
    "log.iostream": "stdout",
    "logtag": "F"
    }
    
    Copy
  • VALUE: a saída padrão e o erro padrão são divididos em linhas, com cada linha gerando seu próprio registro na tabela de eventos.

    "{\"timestamp\":1746655642080,\"nanoseconds\":80591397,\"level\":\"INFO\",\"threadName\":\"Clustering Tasks Thread-2\",\"loggerName\":\"org.apache.nifi.controller.cluster.ClusterProtocolHeartbeater\",\"formattedMessage\":\"Heartbeat created at 2025-05-07T22:07:22.071Z and sent to pg-dev-0.pg-dev.runtime-pg-dev.svc.cluster.local:8445 at 2025-05-07T22:07:22.080590784Z; determining Cluster Coordinator took 7 millis; DNS lookup for coordinator took 0 millis; connecting to coordinator took 0 millis; sending heartbeat took 1 millis; receiving first byte from response took 1 millis; receiving full response took 1 millis; total time was 9 millis\",\"throwable\":null}"
    

Exemplos

Localize logs de nível de erro para tempos de execução

SELECT
    timestamp,
    resource_attributes:"k8s.namespace.name" AS runtime_key,
    parse_json(value::string):loggerName AS logger,
    parse_json(value::string):formattedMessage AS log_value
FROM openflow.telemetry.EVENTS_<account-id>
WHERE true
AND timestamp < dateadd('days', -1, sysdate())
AND record_type = 'LOG'
AND resource_attributes:"k8s.namespace.name" LIKE 'runtime-%'
AND resource_attributes:"k8s.container.name" LIKE '%-server'
AND parse_json(value::string):level = 'ERROR'
ORDER BY timestamp desc
LIMIT 5;
Copy

Localize exceções “causadas por” (caused by) nos logs

Essas exceções podem ser esperadas para problemas de conexão intermitente, incompatibilidades de dados ou causas relacionadas.

SELECT
    timestamp,
    RESOURCE_ATTRIBUTES:"k8s.namespace.name" AS Namespace,
    RESOURCE_ATTRIBUTES:"k8s.pod.name" AS Pod,
    RESOURCE_ATTRIBUTES:"k8s.container.name" AS Container,
    value
FROM openflow.telemetry.EVENTS_<account-id>
WHERE true
AND record_type = 'LOG'
AND timestamp > dateadd(minute, -5, sysdate())
AND value LIKE '%Caused By%'
ORDER BY timestamp desc
LIMIT 10;
Copy

Descubra quais processadores estão em execução, pararam ou estão em outros estados

SELECT
    timestamp,
    RECORD_ATTRIBUTES:component AS Processor,
    RECORD_ATTRIBUTES:id AS Processor_ID,
    value AS Running
FROM openflow.telemetry.EVENTS_<account-id>
WHERE true
AND RECORD:metric:name = 'processor.run.status.running'
AND RECORD_TYPE='METRIC'
AND timestamp > dateadd(minute, -5, sysdate());
Copy

Localize o uso elevado de CPU para tempos de execução

Fluxos de dados lentos ou taxa de transferência reduzida podem ser resultado de um gargalo na CPU. Os tempos de execução devem ser ampliados automaticamente, com base no número mínimo e máximo de nós que você configurou. Se os tempos de execução estiverem usando o número máximo de nós e ainda assim o uso da CPU continuar alto, aumente o número máximo de nós alocados para os tempos de execução ou solucione o problema do conector ou do fluxo.

SELECT
    timestamp,
    RESOURCE_ATTRIBUTES:"k8s.namespace.name" AS Namespace,
    RESOURCE_ATTRIBUTES:"k8s.pod.name" AS Pod,
    RESOURCE_ATTRIBUTES:"k8s.container.name" AS Container,
    value AS CPU_Usage
FROM openflow.telemetry.EVENTS_<account-id>
WHERE TIMESTAMP > dateadd(minute, -1, 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'
AND RESOURCE_ATTRIBUTES:"k8s.namespace.name" NOT IN ('runtime-infra', 'runtime-operator')
ORDER BY TIMESTAMP desc, CPU_Usage desc;
Copy

Métricas disponíveis

Métricas disponíveis em tempos de execução

A seguir, há uma lista de métricas disponíveis para tempos de execução:

Métrica

Unidade

Tipo

Descrição

cores.load

porcentagem

gauge

Carga média em todos os núcleos disponíveis para o tempo de execução. O valor máximo é 1, quando todos os núcleos disponíveis estão sendo totalmente usados.

cores.available

Núcleos de CPU

gauge

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

storage.free

bytes

gauge

Quantidade de armazenamento livre disponível por tipo de armazenamento para o tempo de execução. Há três tipos de armazenamento disponíveis:

  • flowfile

  • content

  • provenance

Você pode visualizar a métrica storage.type na coluna RECORD_ATTRIBUTES.

storage.used

bytes

gauge

Quantidade de armazenamento usada por tipo de armazenamento. Há três tipos de armazenamento disponíveis:

  • flowfile

  • content

  • provenance

Você pode visualizar a métrica storage.type na coluna RECORD_ATTRIBUTES.

Amostra de consulta para as métricas de CPU

SELECT * from events
WHERE
1 = 1
AND record_type = 'METRIC'
AND resource_attributes:application = 'openflow'
AND record:metric.name IN ('cores.load', 'cores.available')
ORDER BY timestamp desc
LIMIT 1000;
Copy

Métricas disponíveis em conectores

A seguir, há uma lista de métricas disponíveis para conectores:

Métrica

Unidade

Tipo

Descrição

processgroup.bytes.received

bytes

gauge

Número médio de bytes consumidos da fonte

processgroup.bytes.sent

bytes

gauge

Número médio de bytes gravados no destino

Para consultar essas métricas na tabela de eventos, você precisa encontrar o nome do grupo de processos e o ID na tela de tempo de execução do Openflow e, em seguida, filtrá-lo na coluna RECORD_ATTRIBUTES.