Configurando o log do PostgreSQL – tadeubernacchi
Configurando o log do PostgreSQL
Publicado em 7 de novembro de 2015 17 de dezembro de 2017 by Tadeu Bernacchi
Como a grande maioria dos softwares e ferramentas Open Source sempre que efetuamos sua instalação precisamos configurar o seu log, com o PostgreSQL isso também não é diferente. Porém ao procurá-lo no nosso já familiarizado /var/log o mesmo não se encontrava, para gerar o log do PostgreSQL é necessário alterar seu arquivo de configuração /var/lib/pgsql/data/postgresql.conf.
O PostgreSQL suporta diversos métodos para armazenar as mensagens de log:
csvlog;
O mais utilizado é o stderr que produz uma saída mais fácil de ser visualizada. O csvlog é uma boa opção para exportá-lo para uma outra ferramenta de análise, e o syslog é o padrão dos logs de sistema.
O arquivo de configuração do PostgreSQL possui uma infinidade de paramêtros para ajustes, mas para este artigo vamos nos ater a uma configuração simples, básica e funcional.
Primeiro vamos alterar os parâmetros onde queremos registrar esses logs:
log_directory='/var/log/postgresql'
log_filename='postgresql-%a.log'
log_file_mode=0600
log_rotation_size=100MB
Aqui estamos dizendo para o PostgreSQL em que situação (quando) um log deve ser gerado.
Os parâmetros existentes são os seguintes:
DEBUG5;
DEBUG4;
DEBUG3;
DEBUG2;
DEBUG1;
DEBUG5 é a opção que gera mais log e PANIC é a que gera menos log.
client_min_messages – Diz quais mensagens serão enviadas para o usuário enquanto ele interage com o banco de dados. Um exemplo disso é quando você utiliza o psql.
log_min_messages – é o parâmetro que mede o que vai ser gravado de fato no nosso log.
log_min_error_statementconfigura especificamente quando um comando SQL com erro vai ser gravado no log.
log_min_duration_statement – é uma diretiva de log muito importante para analisar o desempenho do banco, como por exemplo quanto tempo uma determinada query está levando para ser executada. Saber quais consultas podem demorar mais que o esperado pode ser muito útil para interceptar gargalos na performance do banco.
Agora vamos definir o que queremos que seja registrado:
log_line_prefix = '%t [%p]: [%l] user=%u,db=%d,app=%a,host=%h'
Feito isso restartamos nosso banco:
[root@notebook ~]# systemctl restart postgresql.service
E já podemos observar a saída no nosso arquivo de log funcionando corretamente:
[root@notebook ~]# cat /var/log/postgresql/postgresql-Fri.log
2015-11-06 22:21:50 -03 [16552]: [1] user=,db=,app=,host=LOG: sistema de banco de dados foi desligado em 2015-11-06 22:21:49 -03
2015-11-06 22:21:50 -03 [16556]: [1] user=,db=,app=,host=LOG: inicializador do autovacuum foi iniciado
2015-11-06 22:21:50 -03 [16550]: [1] user=,db=,app=,host=LOG: sistema de banco de dados está pronto para aceitar conexões
Dropamos o banco teste para analisarmos o log:
2015-11-06 22:32:41 -03 [17185]: [1] user=postgres,db=postgres,app=psql,host=[local]LOG: comando: drop database teste1;
2015-11-06 22:32:42 -03 [17185]: [2] user=postgres,db=postgres,app=psql,host=[local]LOG: duração: 364.792 ms