Archivos de registro de bases de datos de Aurora PostgreSQL - Amazon Aurora

Archivos de registro de bases de datos de Aurora PostgreSQL

Aurora PostgreSQL registra las actividades de la base de datos en el archivo de registro de PostgreSQL predeterminado. En el caso de una instancia de base de datos de PostgreSQL en las instalaciones, estos mensajes se almacenan localmente en log/postgresql.log. Para un clúster de base de datos de Aurora PostgreSQL, el archivo de registro está disponible en el clúster de Aurora, . Además, debe utilizar la consola de Amazon RDS para ver o descargar su contenido. El nivel de registro predeterminado captura los errores de inicio de sesión, los errores graves del servidor, los bloqueos y los errores de consulta.

Para obtener más información sobre cómo puede ver, descargar y observar los registros de la base de datos basados en archivos, consulte Supervisión de archivos de registro de Amazon Aurora. Para saber más sobre los registros de PostgreSQL, consulte Trabajo con registros de Amazon RDS y Aurora PostgreSQL: parte 1 y Trabajo con registros de Amazon RDS y Aurora PostgreSQL: parte 2.

Además de los registros estándar de PostgreSQL que se describen en este tema, Aurora PostgreSQL también admite la extensión de auditoría de PostgreSQL (pgAudit). La mayoría de los sectores regulados y las agencias gubernamentales necesitan mantener un registro de auditoría o registro de auditoría de los cambios realizados en los datos para cumplir con los requisitos legales. Para obtener información acerca del modo de instalar y usar pgAudit, consulte Uso de pgAudit para registrar la actividad de la base de datos.

Parámetros que afectan al comportamiento de registro

Puede personalizar el comportamiento de registro de su clúster de base de datos de Aurora PostgreSQL modificando varios parámetros. En la siguiente tabla, puede encontrar los parámetros que afectan al tiempo que se almacenan los registros, cuándo se debe rotar el registro y si se debe generar el registro en formato CSV (valor separado por comas). También puede encontrar la salida de texto enviada a STDERR, entre otras configuraciones. Para cambiar la configuración de los parámetros que se pueden modificar, use un grupo de parámetros de clúster de base de datos personalizado para su clúster de base de datos de Aurora PostgreSQL. Para obtener más información, consulte Working with parameter groups (Trabajar con grupos de parámetros). Como se indica en la tabla, log_line_prefix no se puede cambiar.

Parámetro Predeterminado Descripción

log_destination

stderr

Establece el formato de salida para el registro. El valor predeterminado es stderr, pero también puede especificar un valor separado por comas (CSV) agregándolo csvlog al ajuste. Para obtener más información, consulte Configuración del destino del registro (stderr, csvlog).

log_filename

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

Especifica el patrón del nombre del archivo de registro. Además del valor predeterminado, este parámetro admite postgresql.log.%Y-%m-%d y postgresql.log.%Y-%m-%d-%H para el patrón del nombre de archivo.

log_line_prefix

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

Define el prefijo de cada línea de registro que se escribe en stderr, para anotar la hora (%t), el host remoto (%r), el usuario (%u), la base de datos (%d) y el ID del proceso (%p). No puede modificar este parámetro.

log_rotation_age

60

Minutos después de los cuales el archivo de registro rota automáticamente. Puede cambiarlo entre 1 y 1440 minutos. Para obtener más información, consulte Configuración de la rotación del archivo de registro.

log_rotation_size

El tamaño (kB) con el que se rota automáticamente el registro. De forma predeterminada, este parámetro no se usa porque los registros rotan en función del parámetro log_rotation_age. Para obtener más información, consulte Configuración de la rotación del archivo de registro.

rds.log_retention_period

4320

Los registros de PostgreSQL que superan el número de minutos especificado se eliminarán. El valor predeterminado de 4320 minutos elimina los archivos de registro transcurridos 3 días. Para obtener más información, consulte Configuración de periodo de retención de registros.

Para identificar problemas de aplicaciones, puede buscar errores de consulta, errores de inicio de sesión, interbloqueos y errores de servidor graves en el registro. Por ejemplo, suponga que ha convertido una aplicación heredada de Oracle a Aurora PostgreSQL, pero no todas las consultas se han convertido correctamente. Estas consultas con formato incorrecto generan mensajes de error que se pueden encontrar en los registros para ayudar a identificar los problemas. Para más información sobre el registro de consultas, consulte Activación de registro de consultas para su clúster de base de datos de Aurora PostgreSQL.

En los temas siguientes, encontrará información sobre cómo configurar varios parámetros que controlan los detalles básicos de sus registros de PostgreSQL.

Configuración de periodo de retención de registros

El parámetro rds.log_retention_period especifica cuánto tiempo su clúster de base de datos de Aurora PostgreSQL mantiene sus archivos de registro. La configuración predeterminada es de 3 días (4320 minutos), pero puede configurarla entre 1 día (1440 minutos) y 7 días (10 080 minutos). Asegúrese de que su clúster de base de datos de Aurora PostgreSQL tenga suficiente almacenamiento para almacenar los archivos de registro durante ese período de tiempo.

Le recomendamos que publique sus registros de forma rutinaria en Registros de Amazon CloudWatch, de modo que pueda ver y analizar los datos del sistema mucho tiempo después de que los registros se hayan eliminado de su clúster de base de datos de Aurora PostgreSQL. Para obtener más información, consulte Publicación de registros de Aurora PostgreSQL en Amazon CloudWatch Logs. Después de configurar la publicación en CloudWatch, Aurora no elimina un registro hasta que se publique en CloudWatch Logs.

Amazon Aurora comprime los registros de PostgreSQL más antiguos cuando el almacenamiento de la instancia de base de datos alcanza un umbral. Aurora comprime los archivos mediante la utilidad de compresión gzip. Para obtener más información, consulte el sitio web de gzip.

Cuando el almacenamiento para la instancia de base de datos es bajo y se comprimen todos los registros disponibles, se obtiene una advertencia como la siguiente:

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

Si no hay suficiente almacenamiento, Aurora podría eliminar los registros comprimidos de PostgreSQL antes de que finalice el período de retención especificado. Si eso sucede, verá un mensaje parecido al siguiente:

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

Configuración de la rotación del archivo de registro

Aurora crea los nuevos archivos de registro cada hora de forma predeterminada. El tiempo lo controla el parámetro log_rotation_age. Este parámetro tiene un valor predeterminado de 60 (minutos), pero puede configurarlo entre 1 minuto y 24 horas (1440 minutos). Cuando llega el momento de la rotación, se crea un nuevo archivo de registro distinto. Al archivo se le asigna un nombre de conformidad con el patrón especificado por el parámetro log_filename.

Los archivos de registro también se pueden rotar según su tamaño, tal y como se especifica en el parámetro log_rotation_size. Este parámetro especifica que el registro debe rotarse cuando alcance el tamaño especificado (en kilobytes). El log_rotation_size predeterminado es de 100 000 kB (kilobytes) para un clúster de base de datos de Aurora PostgreSQL, pero puede establecer en cualquier valor desde 50 000 hasta 1 000 000 de kilobytes.

Los nombres de archivo de registro se basan en el patrón de nombre de archivo especificado en el parámetro log_filename. La configuración disponible para este parámetro es la siguiente:

  • postgresql.log.%Y-%m-%d: formato predeterminado para el nombre del archivo de registro. Incluye el año, el mes y la fecha en el nombre del archivo de registro.

  • postgresql.log.%Y-%m-%d-%H: incluye la hora en el formato del nombre del archivo de registro.

  • postgresql.log.%Y-%m-%d-%H%M: incluye la hora:minuto en el formato del nombre del archivo de registro.

Si establece el parámetro log_rotation_age en menos de 60 minutos, establezca el parámetro log_filename en el formato de minutos.

Para obtener más información, consulte log_rotation_age y log_rotation_size en la documentación de PostgreSQL.

Configuración del destino del registro (stderr, csvlog)

De forma predeterminada, Aurora PostgreSQL genera registros en formato de error estándar (stderr). Esta es la configuración predeterminada del parámetro log_destination. Cada mensaje lleva el prefijo según el patrón especificado en el parámetro log_line_prefix. Para obtener más información, consulte Descripción del parámetro log_line_prefix.

Aurora PostgreSQL también puede generar los registros con el formato csvlog. csvlog resulta útil para analizar los datos de registro como valores separados con coma (CSV). Por ejemplo, supongamos que utiliza la extensión log_fdw para trabajar con los registros como tablas extranjeras. La tabla extranjera creada en los archivos de registro stderr contienen una sola columna con datos de eventos de registro. Al añadir csvlog al parámetro log_destination, se obtiene el archivo de registro en formato CSV con demarcaciones para las múltiples columnas de la tabla externa. Esto le permite ordenar y analizar los registros con mayor facilidad.

Si especifica csvlog para este parámetro, tenga en cuenta que se generan los archivos stderr y csvlog. Asegúrese de supervisar el almacenamiento consumido por los registros, teniendo en cuenta rds.log_retention_period y otras configuraciones que afectan al almacenamiento de registros y a los análisis. Usar stderr y csvlog duplica de sobra el almacenamiento consumido por los registros.

Si añade csvlog a log_destination y quiere volver solo a stderr solo, debe restablecer el parámetro. Para ello, utilice la consola de Amazon RDS y abra el grupo de parámetros del clúster de base de datos personalizado para su instancia. Elija el parámetro log_destination, elija Edit parameter (Editar parámetro) y, a continuación, seleccione Reset (Restablecer).

Para obtener más información acerca de la configuración de los registros, consulte la entrada del blog sobre trabajar con registros de Amazon RDS y Aurora PostgreSQL: parte 1.

Descripción del parámetro log_line_prefix

El formato de registro de stderr prefija cada mensaje de registro con los detalles especificados por el parámetro log_line_prefix, de la siguiente manera.

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

No se puede cambiar esta configuración. Cada entrada de registro enviada a stderr incluye la siguiente información.

  • %t: hora de entrada del registro.

  • %r: dirección del host remoto.

  • %u@%d: nombre de usuario @ nombre de base de datos.

  • [%p]: ID del proceso si está disponible.

Activación de registro de consultas para su clúster de base de datos de Aurora PostgreSQL

Puede recopilar información más detallada sobre las actividades de la base de datos, incluidas las consultas, las consultas en espera de bloqueos, los puntos de control y muchos otros detalles configurando algunos de los parámetros que se enumeran en la tabla siguiente. Este tema se centra en el registro de consultas.

Parámetro Predeterminado Descripción

log_connections

Registra cada conexión realizada correctamente. Para obtener información sobre cómo utilizar este parámetro con log_disconnections para detectar la pérdida de conexiones, consulte Administración de la pérdida de conexión de Aurora PostgreSQL con agrupación .

log_disconnections

Registra el final de cada sesión y su duración. Para obtener información sobre cómo utilizar este parámetro con log_connections para detectar la pérdida de conexiones, consulte Administración de la pérdida de conexión de Aurora PostgreSQL con agrupación .

log_checkpoints

1

Registra cada punto de comprobación.

log_lock_waits

Registra las esperas de bloqueo largas. Por defecto, este parámetro no está configurado.

log_min_duration_sample

(ms) Establece el tiempo mínimo de ejecución a partir del cual se registra una muestra de instrucciones. El tamaño de la muestra se establece mediante el parámetro log_statement_sample_rate.

log_min_duration_statement

Se registra cualquier instrucción SQL que se ejecute al menos durante el período de tiempo especificado o durante más tiempo. Por defecto, este parámetro no está configurado. Si se activa este parámetro, puede resultar más sencillo encontrar consultas no optimizadas.

log_statement

Define el tipo de declaraciones que se deben registrar. De forma predeterminada, este parámetro no está configurado, pero puede cambiarlo a all, ddl o mod para especificar los tipos de instrucciones SQL que desea que se registren. Si especifica algo que no sea none para este parámetro, también debe adoptar medidas adicionales para evitar que las contraseñas aparezcan en los archivos de registro. Para obtener más información, consulte Mitigar el riesgo de exposición de contraseñas al utilizar el registro de consultas.

log_statement_sample_rate

El porcentaje de sentencias que superan el tiempo especificado en log_min_duration_sample se registrarán, expresado como un valor de coma flotante entre 0.0 y 1.0.

log_statement_stats

Escribe las estadísticas de rendimiento acumulativas en el registro del servidor.

Uso del registro para encontrar consultas con un rendimiento lento

Puede registrar instrucciones y consultas SQL para ayudar a encontrar consultas que se den con resultados lentos. Para activar esta función, modifique la configuración de los parámetros log_statement y log_min_duration, tal como se describe en esta sección. Antes de activar el registro de consultas para su clúster de base de datos de Aurora PostgreSQL, debe conocer la posible exposición de contraseñas en los registros y cómo mitigar los riesgos. Para obtener más información, consulte Mitigar el riesgo de exposición de contraseñas al utilizar el registro de consultas.

A continuación, encontrará información de referencia sobre los parámetros log_statement y log_min_duration.

log_statement

Este parámetro especifica el tipo de instrucciones SQL que deben enviarse al registro. El valor predeterminado es none. Si cambia este parámetro a all, ddl o mod, asegúrese de aplicar algunas de las medidas recomendadas para reducir el riesgo de exponer las contraseñas en los registros. Para obtener más información, consulte Mitigar el riesgo de exposición de contraseñas al utilizar el registro de consultas.

Todos

Registra todas las instrucciones. Para depuración, se recomienda esta configuración.

ddl

Registra todas las instrucciones del lenguaje de definición de datos (DDL), como CREATE, ALTER, DROP, etc.

MOD

Registra todas las instrucciones DDL y las instrucciones de lenguaje de manipulación de datos (DML), como INSERT, UPDATE y DELETE, que modifican los datos.

Ninguno

No se registra ninguna instrucción SQL. Recomendamos esta configuración para evitar el riesgo de exponer las contraseñas en los registros.

log_min_duration_statement

Se registra cualquier instrucción SQL que se ejecute al menos durante el período de tiempo especificado o durante más tiempo. Por defecto, este parámetro no está configurado. Si se activa este parámetro, puede resultar más sencillo encontrar consultas no optimizadas.

–1–2147483647

El número de milisegundos (ms) de tiempo de ejecución durante los cuales se registra una instrucción.

Para configurar el registro de consultas

Estos pasos suponen que su clúster de base de datos de Aurora PostgreSQL utiliza un grupo de parámetros del clúster de base de datos personalizado.

  1. Establezca el parámetro log_statement como all. En el siguiente ejemplo se muestra la información que se escribe en el archivo con esta configuración de parámetros.

    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. Establezca el parámetro log_min_duration_statement. En el siguiente ejemplo se muestra la información que se escribe en el archivo postgresql.logcuando se establece el parámetro en 1:

    Se registran las consultas que superan la duración especificada en el parámetro log_min_duration_statement. A continuación se muestra un ejemplo. Puede ver el archivo de registro de su clúster de base de datos de Aurora PostgreSQL en la consola de 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 ----------------------

Mitigar el riesgo de exposición de contraseñas al utilizar el registro de consultas

Le recomendamos que mantenga log_statement establecido en none para evitar exponer las contraseñas. Si establece log_statement en all, ddl o mod, le recomendamos que siga uno o más de los siguientes pasos.

  • Para el cliente, cifre la información confidencial. Para obtener más información, consulte Encryption Options en la documentación de PostgreSQL. Utilice las opciones ENCRYPTED (y UNENCRYPTED) de las instrucciones CREATE y ALTER. Para obtener más información, consulte CREATE USER en la documentación de PostgreSQL.

  • Para su clúster de base de datos de Aurora PostgreSQL, configure y utilice la extensión de auditoría de PostgreSQL (pgAudit). Esta extensión redacta la información confidencial de las instrucciones CREATE y ALTER enviadas al registro. Para obtener más información, consulte Uso de pgAudit para registrar la actividad de la base de datos.

  • Restrinja el acceso a los registros CloudWatch.

  • Utilice mecanismos de autenticación más sólidos como IAM.