Usar a extensão log_fdw para acessar o log de banco de dados usando SQL - Amazon Aurora

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
  1. Instale a extensão log_fdw.

    postgres=> CREATE EXTENSION log_fdw; CREATE EXTENSION
  2. Crie o servidor de log como um wrapper externo de dados.

    postgres=> CREATE SERVER log_server FOREIGN DATA WRAPPER log_fdw; CREATE SERVER
  3. 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)
  4. 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)
  5. 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)