Usar a extensão log_fdw para acessar o log de banco de dados usando SQL
O RDS for PostgreSQL é compatível com a extensão , que permite acessar o log do mecanismo de banco de dados usando uma interface SQL. A extensão log_fdw
apresenta duas novas funções que facilitam a criação de tabelas externas para logs de banco de dados:
-
list_postgres_log_files
– lista os arquivos no diretório do log do banco de dados e o tamanho do arquivo em bytes. -
create_foreign_table_for_log_file(table_name text, server_name text, log_file_name text)
– cria uma tabela externa para o arquivo especificado no banco de dados atual.
Todas as funções criadas por log_fdw
são de propriedade do rds_superuser
. Os membros da função rds_superuser
podem conceder acesso a essas funções para outros usuários do banco de dados.
Por padrão, os arquivos de log são gerados pelo Amazon Aurora no formato (erro padrão) stderr
, conforme especificado no parâmetro log_destination
. Existem apenas duas opções para esse parâmetro, stderr
e csvlog
(valores separados por vírgula, CSV). Se você adicionar a opção csvlog
ao parâmetro, o Amazon Aurora gerará os dois logs, stderr
e csvlog
. Isso pode afetar a capacidade de armazenamento em seu cluster de banco de dados. Portanto, você precisa estar ciente dos outros parâmetros que afetam o processamento de logs. Para ter mais informações, consulte Definir o destino dos logs (stderr, csvlog).
Um benefício de gerar logs do csvlog
é que a extensão log_fdw
permite criar tabelas externas com dados divididos ordenadamente em várias colunas. Para fazer isso, sua instância precisa estar associada a um grupo de parâmetros de banco de dados personalizado para que você possa alterar a configuração para log_destination
. Para obter mais informações sobre como fazer isso, consulte Grupos de parâmetros para Amazon Aurora.
O exemplo a seguir pressupõe que o parâmetro log_destination
inclua cvslog
.
Para usar a extensão log_fdw
-
Instale a extensão
log_fdw
.postgres=>
CREATE EXTENSION log_fdw;
CREATE EXTENSION
-
Crie o servidor de log como um wrapper externo de dados.
postgres=>
CREATE SERVER log_server FOREIGN DATA WRAPPER log_fdw;
CREATE SERVER
-
Selecione todos os arquivos de log na lista.
postgres=>
SELECT * FROM list_postgres_log_files() ORDER BY 1;
A seguir você encontra um exemplo de resposta.
file_name | file_size_bytes ------------------------------+----------------- postgresql.log.2023-08-09-22.csv | 1111 postgresql.log.2023-08-09-23.csv | 1172 postgresql.log.2023-08-10-00.csv | 1744 postgresql.log.2023-08-10-01.csv | 1102 (4 rows)
-
Crie uma tabela com uma única coluna "log_entry" para o arquivo selecionado.
postgres=>
SELECT create_foreign_table_for_log_file('my_postgres_error_log', 'log_server', 'postgresql.log.2023-08-09-22.csv');
A resposta não fornece nenhum detalhe além de que a tabela agora existe.
----------------------------------- (1 row)
-
Selecione um exemplo de arquivo de log. O código a seguir recupera o horário do log e a descrição da mensagem de erro.
postgres=>
SELECT log_time, message FROM my_postgres_error_log ORDER BY 1;
A seguir você encontra um exemplo de resposta.
log_time | message ----------------------------------+--------------------------------------------------------------------------- Tue Aug 09 15:45:18.172 2023 PDT | ending log output to stderr Tue Aug 09 15:45:18.175 2023 PDT | database system was interrupted; last known up at 2023-08-09 22:43:34 UTC Tue Aug 09 15:45:18.223 2023 PDT | checkpoint record is at 0/90002E0 Tue Aug 09 15:45:18.223 2023 PDT | redo record is at 0/90002A8; shutdown FALSE Tue Aug 09 15:45:18.223 2023 PDT | next transaction ID: 0/1879; next OID: 24578 Tue Aug 09 15:45:18.223 2023 PDT | next MultiXactId: 1; next MultiXactOffset: 0 Tue Aug 09 15:45:18.223 2023 PDT | oldest unfrozen transaction ID: 1822, in database 1 (7 rows)