Saltar al contenido

Registre todas las consultas en la imagen de la ventana acoplable oficial de Postgres

Solución:

Si usa Docker Compose, puede agregar esta línea a su docker-compose.yaml expediente:

command: ["postgres", "-c", "log_statement=all"]

y todas sus consultas se escribirán en el archivo de registro del contenedor.

Configuración log_destination para stderr me hizo el truco sin crear una nueva imagen:

version: "2.2"
services:
  db:
    image: postgres:12-alpine
    command: ["postgres", "-c", "log_statement=all", "-c", "log_destination=stderr"]

Y luego pude rastrear las declaraciones usando docker-compose logs -f db.
También debería funcionar con otras versiones, pero solo lo probé con postgres:12-alpine.

Consulte esto, debe habilitar logging_collector, entonces puedes ver las consultas entrantes en log_directory‘s log_filename.

Y para habilitarlo en docker logs, tuviste que hacer algún truco para hacerlo, una solución es la siguiente:

wrapper.sh:

#!/usr/bin/env bash
mkdir /logs
touch /logs/postgresql.log
chmod -R 777 /logs
tail -f /logs/* &
/docker-entrypoint.sh "[email protected]"

Arriba usará tail para supervisar /logs/postgresql.log que luego será utilizado por postgresql‘s logging_collectory muéstralo docker logs.

Dockerfile:

FROM postgres:11.1-alpine
COPY wrapper.sh /
RUN chmod +x /wrapper.sh
ENTRYPOINT ["/wrapper.sh"]
CMD ["postgres", "-c", "logging_collector=on", "-c", "log_directory=/logs", "-c", "log_filename=postgresql.log", "-c", "log_statement=all"]

Arriba se utilizará personalizar wrapper.sh, primero monitoreará el registro de postgre, lo imprimirá y luego continuará para ejecutar el registro predeterminado docker-entrypoint.sh para iniciar el servidor postgresql.

Después del inicio del contenedor, muestre los registros antes de las consultas entrantes:

[email protected]:~/abc$ docker build -t abc:1 .
[email protected]:~/abc$ docker run -idt abc:1
[email protected]:~/abc$ docker ps
CONTAINER ID        IMAGE                  COMMAND                  CREATED             STATUS              PORTS               NAMES
c9112eb785e5        abc:1                  "/wrapper.sh postgre…"   2 seconds ago       Up 1 second         5432/tcp            loving_joliot
[email protected]:~/abc$ docker logs loving_joliot
The files belonging to this database system will be owned by user "postgres".
......
2019-07-13 03:38:14.030 UTC [46] LOG:  database system was shut down at 2019-07-13 03:38:13 UTC
2019-07-13 03:38:14.034 UTC [10] LOG:  database system is ready to accept connections

Simule algunas consultas entrantes y vuelva a ver los registros:

[email protected]:~/abc$ docker exec -it -u postgres loving_joliot psql -c "SELECT datname FROM pg_database;"
  datname
-----------
 postgres
 template1
 template0
(3 rows)
[email protected]:~/abc$ docker logs loving_joliot
The files belonging to this database system will be owned by user "postgres".
......
2019-07-13 03:38:14.030 UTC [46] LOG:  database system was shut down at 2019-07-13 03:38:13 UTC
2019-07-13 03:38:14.034 UTC [10] LOG:  database system is ready to accept connections
2019-07-13 03:41:22.859 UTC [62] LOG:  statement: SELECT datname FROM pg_database;

Puede ver arriba simulamos una ejecución SQL SELECT datname FROM pg_database;, y en docker logs ya pudimos ver este sql.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *