Registro em log do Snowflake Postgres¶
Recuperando dados de log do Postgres¶
Todos os servidores Postgres em instâncias do Snowflake Postgres fazem o registro localmente no syslog. Os dados de log são coletados dele e enviados para a tabela de eventos ativos da sua conta.
Para visualizar os logs do Postgres de uma determinada instância, consulte a tabela de eventos do campo TIMESTAMP e a parte MESSAGE do campo VALUE dos registros com o comando record_type = 'LOG', usando a parte inicial do nome de host da instância, também conhecida como ID da instância (ou cluster_id). Por exemplo, o comando abaixo extrairá os últimos 10 minutos de entradas de log da instância com ID oyrpb2cwtvbu5al5vtbyrsnkgy:
SELECT TIMESTAMP, VALUE:MESSAGE as log_line
FROM SNOWFLAKE.TELEMETRY.EVENTS
WHERE resource_attributes['snowflake.o11y.logtype'] = 'postgres-otelcol-vm-agent'
AND resource_attributes['instance.id'] = 'oyrpb2cwtvbu5al5vtbyrsnkgy'
AND record_type = 'LOG'
AND TIMESTAMP > CURRENT_TIMESTAMP() - INTERVAL '10 MINUTES'
LIMIT 100;
Nota
A consulta acima usa a tabela de eventos padrão da conta, SNOWFLAKE.TELEMETRY.EVENTS. Se você configurou uma tabela de eventos personalizada, deve ajustar a consulta adequadamente.
Cada linha da saída conterá uma única entrada de linha de log que foi registrada pelo servidor Postgres na instância do Snowflake Postgres fornecida com o carimbo de data/hora de quando ela foi originalmente registrada. Observe que pode levar alguns minutos entre o momento em que o Postgres faz uma entrada de log até ela ficar disponível na tabela de eventos.
Explicando a intercalação de linhas de log do Postgres¶
Observe que o Postgres usa o registro em log de várias linhas e, como vários processos do servidor Postgres farão entradas de log ao mesmo tempo, as entradas completas de log de diferentes processos do servidor Postgres serão frequentemente intercaladas. Por exemplo, vamos considerar estas entradas de linha de log:
timestamp |
log_line |
2025-12-09 23:16:38.760 |
«[14-1] [1592908][client backend][27/2][0] [user=snowflake_admin,db=postgres,app=psql] [34.214.158.144] ERROR: canceling statement due to user request» |
2025-12-09 23:16:38.760 |
«[10-1] [1593992][not initialized][][0] [user=[unknown],db=[unknown],app=[unknown]] [34.214.158.144] LOG: connection received: host=34.214.158.144 port=46114» |
2025-12-09 23:16:38.760 |
«[14-2] [1592908][client backend][27/2][0] [user=snowflake_admin,db=postgres,app=psql] [34.214.158.144] STATEMENT: select pg_sleep(10);» |
2025-12-09 23:16:43.007 |
«[15-1] [1592908][client backend][27/3][0] [user=snowflake_admin,db=postgres,app=psql] [34.214.158.144] LOG: AUDIT: SESSION,2,1,MISC,SHOW,,,show log_min_duration_statement,<not logged>» |
Em cada entrada de linha de log:
Os primeiros valores entre colchetes são o número do comando da sessão que executou o comando e a linha de log desse comando separados por hífen. Por exemplo, [1-1] e [1-2] são duas linhas de log do primeiro comando executado em uma sessão.
O segundo valor entre colchetes é o ID do processo (pid) da sessão que registrou a linha. O Postgres usa um modelo de simultaneidade baseado em processo (e não baseado em thread) para que cada sessão seja executada no próprio processo de servidor.
Neste exemplo, você pode ver que:
O comando 14 foi executado pela sessão com pid
1592908como cancelamento de uma consultaselect pg_sleep(10);.O registro do comando 14 pelo pid
1592908adicionou duas linhas de log, [14-1] e [14-2].Uma única linha de log do décimo comando executado pela sessão com pid
1593992terminou entre as duas linhas do comando 14 no pid1592908.O comando seguinte executado pela sessão com pid
1592908era uma consultashow log_min_duration_statemente exigia apenas uma linha de log: [15-1].
Dica
O formato da linha de log do Postgres é determinado pela configuração de servidor log_line_prefix, que usa o padrão «[%p][%b][%v][%x] %q[user=%u,db=%d,app=%a] [%h]» nas instâncias do Snowflake Postgres.