Arquivos de log do banco de dados do Aurora PostgreSQL - Amazon Aurora

Arquivos de log do banco de dados do Aurora PostgreSQL

O Aurora PostgreSQL registra as atividades do banco de dados no arquivo de log padrão do PostgreSQL. Para uma instância de banco de dados PostgreSQL on-premises, essas mensagens são armazenadas localmente em log/postgresql.log. Para um cluster de banco de dados do Aurora PostgreSQL, o arquivo de log está disponível no cluster do Aurora. Além disso, você deve usar o console do Amazon RDS para visualizar ou baixar seu conteúdo. O nível de registro em log padrão captura falhas de login, erros fatais do servidor, deadlocks e falhas de consulta.

Para ter mais informações sobre a visualização, o download e os logs de banco de dados baseados no monitoramento de arquivos, consulte Monitorar arquivos de log do Amazon Aurora. Para saber mais sobre logs do PostgreSQL, consulte Working with Amazon RDS and Aurora PostgreSQL logs: Part 1 (Trabalhar com o Amazon RDS e logs do Aurora PostgreSQL: parte 1) e Working with RDS and Aurora PostgreSQL logs: Part 2 (Trabalhar com o Amazon RDS e logs do Aurora PostgreSQL: parte 2).

Além dos logs padrão do PostgreSQL abordados neste tópico, o Aurora PostgreSQL também é compatível com a extensão Audit do PostgreSQL (pgAudit). A maioria dos setores regulamentados e agências governamentais precisa manter um log de auditoria ou uma trilha de auditoria das alterações feitas nos dados para cumprir os requisitos legais. Para obter informações sobre a instalação e o uso de pgAudit, consulte Usar pgAudit para registrar a atividade do banco de dados.

Parâmetros que afetam o comportamento do registro em log

Você pode personalizar o comportamento do registro em log do cluster de banco de dados do Aurora PostgreSQLda instância de banco de dados do RDS para PostgreSQL modificando vários parâmetros. Na tabela a seguir, você encontra os parâmetros que afetam por quanto tempo os logs são armazenados, quando alternar o log e se ele deve ser gerado no formato CSV (valor separado por vírgula). Você também pode encontrar a saída de texto enviada para STDERR, entre outras configurações. Para alterar as configurações dos parâmetros que podem ser modificados, use um grupo de parâmetros de cluster de banco de dados para o cluster de banco de dados do Aurora PostgreSQL. Para ter mais informações, consulte Trabalhar com grupos de parâmetros. Conforme observado na tabela, o log_line_prefix não pode ser alterado.

Parâmetro Padrão Descrição

log_destination

stderr

Define o formato de saída para o log. O padrão é stderr, mas você também pode especificar valores separados por vírgula (CSV) adicionando csvlog à configuração. Para ter mais informações, consulte Definir o destino dos logs (stderr, csvlog)

log_filename

postgresql.log.%Y-%m-%d-%H%M

Especifica o padrão para o nome do arquivo de log. Além do padrão, esse parâmetro é compatível com postgresql.log.%Y-%m-%d e postgresql.log.%Y-%m-%d-%H para o padrão de nome de arquivo.

log_line_prefix

%t:%r:%u@%d:[%p]:

Define o prefixo para cada linha de log que é gravada em stderr, para anotar a hora (%t), o host remoto (%r), o usuário (%u), o banco de dados (%d) e o ID do processo (%p). Não é possível modificar esse parâmetro.

log_rotation_age

60

Minutos após os quais o arquivo de log é alternado automaticamente. Você pode alterar esse valor para qualquer número entre 1 e 1.440 minutos. Para ter mais informações, consulte Configurar a alternância do arquivo de log.

log_rotation_size

O tamanho (kB) no qual o log é alternado automaticamente. Por padrão, esse parâmetro não é usado porque os logs são alternados com base no parâmetro log_rotation_age. Para saber mais, consulte Configurar a alternância do arquivo de log.

rds.log_retention_period

4320

Os logs do PostgreSQL mais antigos que o número especificado de minutos são excluídos. O valor padrão de 4.320 minutos exclui os arquivos de log após três dias. Para ter mais informações, consulte Definir o período de retenção de log.

Para identificar problemas de aplicações, você pode procurar falhas de consulta, falhas de login, deadlocks e erros fatais de servidor no log. Por exemplo, suponha que você converta uma aplicação herdada do Oracle no Aurora PostgreSQL, mas nem todas as consultas foram convertidas corretamente. Essas consultas formatadas incorretamente geram mensagens de erro nos logs, que você pode usar para identificar problemas. Para ter mais informações sobre o registro em log de consultas, consulte Ativar o registro em log de consultas para seu cluster de banco de dados do Aurora PostgreSQL.

Nos tópicos a seguir, você encontrará informações sobre como definir vários parâmetros que controlam os detalhes básicos de seus logs do PostgreSQL.

Definir o período de retenção de log

O parâmetro rds.log_retention_period especifica por quanto tempo seu cluster de banco de dados do Aurora PostgreSQL mantém seus arquivos de log. A configuração padrão é de três dias (4.320 minutos), mas você pode definir esse valor de um dia (1.440 minutos) a sete dias (10.080 minutos). Seu cluster de banco de dados do Aurora PostgreSQL deve ter armazenamento suficiente para armazenar os arquivos de log durante o período.

Recomendamos que você publique habitualmente seus logs no Amazon CloudWatch Logs para que possa visualizar e analisar os dados do sistema muito tempo depois que os logs tiverem sido removidos do cluster de banco de dados do Aurora PostgreSQL. Para ter mais informações, consulte Publicar logs do Aurora PostgreSQL no Amazon CloudWatch Logs. Depois que você configura a publicação do CloudWatch, o Aurora não exclui um log enquanto ele não for publicado no CloudWatch Logs.

O Amazon Aurora compacta logs do PostgreSQL mais antigos quando o armazenamento para a instância de banco de dados atinge um limite. O Aurora compacta os arquivos usando o utilitário de compactação gzip. Para ter mais informações, consulte o site do gzip.

Quando a instância de banco de dados estiver com pouco espaço de armazenamento e todos os logs disponíveis estiverem compactados, você receberá um aviso como o seguinte:

Warning: local storage for PostgreSQL log files is critically low for this Aurora PostgreSQL instance, and could lead to a database outage.

Se não houver armazenamento suficiente, o Aurora poderá excluir os logs compactados do PostgreSQL antes do final do período de retenção especificado. Se isso ocorrer, será exibida uma mensagem semelhante à seguinte:

The oldest PostgreSQL log files were deleted due to local storage constraints.

Configurar a alternância do arquivo de log

Por padrão, o Aurora cria arquivos de log a cada hora. O tempo é controlado pelo parâmetro log_rotation_age. Esse parâmetro tem um valor padrão de 60 (minutos), mas você pode definir qualquer valor entre 1 minuto e 24 horas (1.440 minutos). Quando chegar o momento da alternância, será criado um novo arquivo de log distinto. O arquivo é nomeado de acordo com o padrão especificado pelo parâmetro log_filename.

Também é possível alternar os arquivos de log de acordo com o tamanho, conforme especificado no parâmetro log_rotation_size. Esse parâmetro especifica que o log deva ser alternado quando atingir o tamanho determinado (em kilobytes). O valor padrão log_rotation_size é 100 mil kB (kilobytes) para um cluster de banco de dados do Aurora PostgreSQL, mas é possível definir esse valor entre 50 mil e 1 milhão de kilobytes.

Os nomes dos arquivos de log são baseados no padrão de nome do arquivo do parâmetro log_filename. As configurações disponíveis para esse parâmetro são as seguintes:

  • postgresql.log.%Y-%m-%d: formato padrão do nome do arquivo de log. Inclui o ano, o mês e a data no nome do arquivo de log.

  • postgresql.log.%Y-%m-%d-%H: inclui a hora no formato do nome do arquivo de log.

  • postgresql.log.%Y-%m-%d-%H%M: inclui hora:minuto no formato do nome do arquivo de log.

Se você definir o parâmetro log_rotation_age como menos de 60 minutos, defina o parâmetro log_filename como o formato em minutos.

Para ter mais informações, consulte log_rotation_age e log_rotation_size na documentação do PostgreSQL.

Definir o destino dos logs (stderr, csvlog)

Por padrão, o Aurora PostgreSQL gera logs no formato de erro padrão (stderr). Esse formato é a configuração padrão do parâmetro log_destination. Cada mensagem é prefixada usando o padrão especificado no parâmetro log_line_prefix. Para ter mais informações, consulte Noções básicas sobre o parâmetro log_line_prefix.

O Aurora PostgreSQL também pode gerar os registros no formato csvlog. O csvlog é útil para analisar os dados de log como dados de valores separados por vírgula (CSV). Por exemplo, digamos que você use a extensão log_fdw para trabalhar com seus logs como tabelas externas. A tabela externa criada nos arquivos de log do stderr contém uma única coluna com dados de eventos de log. Ao adicionar csvlog ao parâmetro log_destination, você obtém o arquivo de log no formato CSV com demarcações para as várias colunas da tabela externa. Agora você pode classificar e analisar os logs com maior facilidade.

Se você especificar csvlog para esse parâmetro, lembre-se de que os arquivos stderr e csvlog são gerados. Monitore o armazenamento consumido pelos logs, levando em consideração o rds.log_retention_period e outras configurações que afetam o armazenamento e a rotatividade dos logs. O uso de stderr e csvlog mais do que dobra o armazenamento consumido pelos logs.

Se você adicionar csvlog a log_destination e quiser reverter para o stderr, precisará redefinir o parâmetro. Para fazer isso, use o console do Amazon RDS e, depois, abra o grupo de parâmetros do cluster de banco de dados para sua instância. Selecione o parâmetro log_destination, Edit parameter (Editar parâmetro) e depois Reset (Redefinir).

Para ter mais informações sobre como configurar o registro em log, consulte Trabalhar com logs do Amazon RDS e do Aurora PostgreSQL: parte 1.

Noções básicas sobre o parâmetro log_line_prefix

O formato de log stderr prefixa cada mensagem de log com os detalhes especificados pelo parâmetro log_line_prefix, da seguinte forma.

%t:%r:%u@%d:[%p]:t

Você não pode alterar essa configuração. Cada entrada de log enviada a stderr inclui as informações a seguir.

  • %t: hora da entrada do log.

  • %r: endereço do host remoto.

  • %u@%d: nome de usuário no nome do banco de dados.

  • [%p]: ID do processo, se disponível.

Ativar o registro em log de consultas para seu cluster de banco de dados do Aurora PostgreSQL

Você pode coletar informações mais detalhadas sobre suas atividades de banco de dados, inclusive consultas, consultas à espera de bloqueios, pontos de verificação e muitos outros detalhes definindo alguns dos parâmetros listados na tabela a seguir. Este tópico se concentra no registro em log de consultas.

Parâmetro Padrão Descrição

log_connections

Registra cada conexão bem-sucedida. Para saber como usar esse parâmetro com log_disconnections para detectar a interrupção da conexão, consulte Gerenciar a rotatividade de conexão do Aurora PostgreSQL com agrupamento .

log_disconnections

Registra o final de cada sessão e sua duração. Para saber como usar esse parâmetro com log_connections para detectar a interrupção da conexão, consulte Gerenciar a rotatividade de conexão do Aurora PostgreSQL com agrupamento .

log_checkpoints

1

Registra cada verificação.

log_lock_waits

Registra esperas de bloqueio longas. Por padrão, esse parâmetro não está definido.

log_min_duration_sample

(ms) Define o tempo de execução mínimo acima do qual uma amostra de declarações será registrada. O tamanho da amostra é definido usando o parâmetro log_statement_sample_rate.

log_min_duration_statement

Todas as instruções SQL executadas pelo menos por um período especificado ou mais é registrada. Por padrão, esse parâmetro não está definido. Ativar esse parâmetro pode ajudar a encontrar consultas não otimizadas.

log_statement

Define o tipo de instruções registradas. Por padrão, esse parâmetro não está definido, mas você pode alterá-lo para all, ddl ou mod para especificar os tipos de declaração SQL que você deseja registrar. Se você especificar algo diferente de none para esse parâmetro, você também deve tomar medidas adicionais para evitar a exposição de senhas nos arquivos de log. Para ter mais informações, consulte Reduzir o risco de exposição de senhas ao usar o registro em log de consultas.

log_statement_sample_rate

A porcentagem de declarações que excedem o tempo especificado em log_min_duration_sample para serem registradas, expressa como um valor de ponto flutuante entre 0,0 e 1,0.

log_statement_stats

Grava estatísticas de performance cumulativas no log do servidor.

Usar o registro em log para encontrar consultas de baixa performance

Você pode registrar consultas e declarações SQL para ajudar a encontrar consultas com a performance lenta. Você ativa esse recurso modificando as configurações dos parâmetros log_statement e log_min_duration conforme descrito nesta seção. Antes de ativar o registro em log de consultas para seu cluster de banco de dados do Aurora PostgreSQL, você deve estar ciente da possível exposição de senhas nos logs e de como reduzir os riscos. Para ter mais informações, consulte Reduzir o risco de exposição de senhas ao usar o registro em log de consultas.

A seguir, você encontrará informações de referência sobre os parâmetros log_statement e log_min_duration.

log_statement

Esse parâmetro especifica o tipo de declarações SQL que devem ser enviadas ao log. O valor padrão é none. Se você alterar esse parâmetro para all, ddl ou mod, realize algumas das ações recomendadas para reduzir o risco de expor senhas nos logs. Para ter mais informações, consulte Reduzir o risco de exposição de senhas ao usar o registro em log de consultas.

tudo

Registra todas as declarações. Essa configuração é recomendada para fins de depuração.

ddl

Registra todas as declarações de linguagem de definição de dados (DDL), como CREATE, ALTER, DROP etc.

mod

Registra todas as declarações DDL e declarações de linguagem de manipulação de dados (INSERT, UPDATE e DELETE) que modificam os dados.

nenhum

Nenhuma declaração SQL é registrada. Recomendamos essa configuração para evitar o risco de expor senhas nos logs.

log_min_duration_statement

Todas as instruções SQL executadas pelo menos por um período especificado ou mais é registrada. Por padrão, esse parâmetro não está definido. Ativar esse parâmetro pode ajudar a encontrar consultas não otimizadas.

–1–2147483647

O número de milissegundos (ms) de tempo de execução durante o qual uma declaração é registrada.

Como configurar o registro em log de consultas

Essas etapas pressupõem que o cluster de banco de dados do Aurora PostgreSQL use um grupo de parâmetros de cluster de banco de dados personalizado.

  1. Defina o parâmetro log_statement como all. O exemplo a seguir mostra a informação gravada no arquivo postgresql.logcom essa configuração de parâmetro.

    2022-10-05 22:05:52 UTC:52.95.4.1(11335):postgres@labdb:[3639]:LOG: statement: SELECT feedback, s.sentiment,s.confidence FROM support,aws_comprehend.detect_sentiment(feedback, 'en') s ORDER BY s.confidence DESC; 2022-10-05 22:05:52 UTC:52.95.4.1(11335):postgres@labdb:[3639]:LOG: QUERY STATISTICS 2022-10-05 22:05:52 UTC:52.95.4.1(11335):postgres@labdb:[3639]:DETAIL: ! system usage stats: ! 0.017355 s user, 0.000000 s system, 0.168593 s elapsed ! [0.025146 s user, 0.000000 s system total] ! 36644 kB max resident size ! 0/8 [0/8] filesystem blocks in/out ! 0/733 [0/1364] page faults/reclaims, 0 [0] swaps ! 0 [0] signals rcvd, 0/0 [0/0] messages rcvd/sent ! 19/0 [27/0] voluntary/involuntary context switches 2022-10-05 22:05:52 UTC:52.95.4.1(11335):postgres@labdb:[3639]:STATEMENT: SELECT feedback, s.sentiment,s.confidence FROM support,aws_comprehend.detect_sentiment(feedback, 'en') s ORDER BY s.confidence DESC; 2022-10-05 22:05:56 UTC:52.95.4.1(11335):postgres@labdb:[3639]:ERROR: syntax error at or near "ORDER" at character 1 2022-10-05 22:05:56 UTC:52.95.4.1(11335):postgres@labdb:[3639]:STATEMENT: ORDER BY s.confidence DESC; ----------------------- END OF LOG ----------------------
  2. Defina o parâmetro log_min_duration_statement. O exemplo a seguir mostra a informação gravada no arquivo postgresql.log quando o parâmetro estiver definido como 1.

    As consultas que excedem a duração especificada no parâmetro log_min_duration_statement são registradas. Por exemplo: Você pode visualizar o arquivo de log de seu cluster de banco de dados do Aurora PostgreSQL no console do Amazon RDS.

    2022-10-05 19:05:19 UTC:52.95.4.1(6461):postgres@labdb:[6144]:LOG: statement: DROP table comments; 2022-10-05 19:05:19 UTC:52.95.4.1(6461):postgres@labdb:[6144]:LOG: duration: 167.754 ms 2022-10-05 19:08:07 UTC::@:[355]:LOG: checkpoint starting: time 2022-10-05 19:08:08 UTC::@:[355]:LOG: checkpoint complete: wrote 11 buffers (0.0%); 0 WAL file(s) added, 0 removed, 0 recycled; write=1.013 s, sync=0.006 s, total=1.033 s; sync files=8, longest=0.004 s, average=0.001 s; distance=131028 kB, estimate=131028 kB ----------------------- END OF LOG ----------------------

Reduzir o risco de exposição de senhas ao usar o registro em log de consultas

Recomendamos manter log_statement definido como none para evitar a exposição de senhas. Se você definir log_statement como all, ddl oumod, recomendamos que você siga uma ou mais destas etapas.

  • Para o cliente, criptografe informações confidenciais. Para ter mais informações consulte Encryption Options (Opções de criptografia) na documentação do PostgreSQL. Use as opções ENCRYPTED (e UNENCRYPTED) das declarações CREATE e ALTER. Para ter mais informações, consulte CREATE USER na documentação do PostgreSQL.

  • Para seu cluster de banco de dados do Aurora PostgreSQL, configure e use a extensão de auditoria do PostgreSQL (pgAudit). Essa extensão remove informações confidenciais das declarações CREATE e ALTER enviadas ao log. Para ter mais informações, consulte Usar pgAudit para registrar a atividade do banco de dados.

  • Restringir o acesso aos logs CloudWatch.

  • Use mecanismos de autenticação mais fortes, como IAM.