Uso de la extensión log_fdw para acceder al registro de base de datos mediante SQL - Amazon Aurora

Uso de la extensión log_fdw para acceder al registro de base de datos mediante SQL

El clúster de base de datos de Aurora PostgreSQL admite la extensión log_fdw, que se puede utilizar para el acceso al registro del motor de base de datos a través de una interfaz SQL. La extensión log_fdw proporciona dos funciones que facilitan la creación de tablas externas para los registros de la base de datos:

  • list_postgres_log_files: muestra los archivos del directorio de registro de la base de datos y el tamaño del archivo en bytes.

  • create_foreign_table_for_log_file(table_name text, server_name text, log_file_name text): crea una tabla externa para el archivo especificado en la base de datos actual.

Todas las funciones creadas por log_fdw pertenecen a rds_superuser. Los miembros del rol rds_superuser pueden conceder acceso a estas funciones a otros usuarios de la base de datos.

De forma predeterminada, Amazon Aurora genera los archivos de registro en formato stderr (error estándar), como se especifica en el parámetro log_destination. Solo hay dos opciones para este parámetro: stderr y csvlog (valores separados por comas, CSV). Si se añade la opción csvlog al parámetro, Amazon Aurora generará tanto el registro stderr como el registro csvlog. Esto puede afectar a la capacidad de almacenamiento del clúster de base de datos, por lo que debe tener en cuenta los demás parámetros que afectan a la gestión de jlos registros. Para obtener más información, consulte Configuración del destino del registro (stderr, csvlog).

Uno de los beneficios de generar registros csvlog es que la extensión log_fdw permite crear tablas externas con los datos perfectamente divididos en varias columnas. Para ello, la instancia debe asociarse a un grupo de parámetros de base de datos personalizado para que usted pueda cambiar la configuración de log_destination. Para obtener información acerca de cómo hacerlo, consulte Grupos de parámetros para Amazon Aurora.

En el ejemplo siguiente se presupone que el parámetro log_destination incluye cvslog.

Para utilizar la extensión log_fdw
  1. Instale la extensión de log_fdw.

    postgres=> CREATE EXTENSION log_fdw; CREATE EXTENSION
  2. Cree el servidor de registros como contenedor de datos externo.

    postgres=> CREATE SERVER log_server FOREIGN DATA WRAPPER log_fdw; CREATE SERVER
  3. Seleccione todos los elementos de una lista de archivos de registro.

    postgres=> SELECT * FROM list_postgres_log_files() ORDER BY 1;

    A continuación, se muestra una respuesta de ejemplo.

    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. Crear una tabla con una sola columna log_entry para el archivo seleccionado.

    postgres=> SELECT create_foreign_table_for_log_file('my_postgres_error_log', 'log_server', 'postgresql.log.2023-08-09-22.csv');

    La respuesta no proporciona más detalles que el hecho de que la tabla ya existe.

    ----------------------------------- (1 row)
  5. Seleccione una muestra del archivo de registro. El siguiente código recupera la hora del registro y la descripción del mensaje de error.

    postgres=> SELECT log_time, message FROM my_postgres_error_log ORDER BY 1;

    A continuación, se muestra una respuesta de ejemplo.

    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)