PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como girar os logs do PgBouncer no Linux/Windows?


Antes de nos aprofundarmos no assunto, um breve resumo sobre o PgBouncer, um pooler de conexões leve para PostgreSQL que reduz drasticamente o tempo de processamento e os recursos para manter um grande número de conexões de clientes com um ou mais bancos de dados. Normalmente usado para aumentar o número de conexões de usuário que podem ser tratadas em um ambiente de alto desempenho. Para obter mais detalhes sobre como instalar/configurar o PgBouncer, consulte a documentação aqui.
Como outras ferramentas, o PgBouncer tem uma arquitetura de registro  stderr/syslog para registrar conexão, desconexão e  pooler_errors com diferentes níveis de detalhamento. A partir de agora, a maior parte do registro vai para um único arquivo “pgbouncer.log” e cresce sem parar. Às vezes, pode haver um risco potencial de deixar um sistema sem resposta devido à falta de espaço em disco no local do arquivo de log. Atualmente, o log do PgBouncer não possui configuração interna para girar os logs com base na idade ou no tamanho, portanto, força os usuários a escolher métodos alternativos. IMO, existem duas abordagens para lidar com isso:-
  1. Configure o PgBouncer no método "syslog" para confiar na rotação do log do SO ou
  2. Configure a rotação de logs usando os utilitários do SO no arquivo “pgbouncer.log”.

Método 1:


É bem simples configurar o syslog no PgBouncer, defina “syslog” para 1 (padrão 0); dê um nome para iniciar a linha de log nos logs do SO em “syslog_ident” (padrão 'pgbouncer') e especifique os detalhes do recurso em “syslog_facility” (daemon padrão). Uma saída de amostra dos logs do meu sistema operacional (/var/log/messages):
5 de agosto 16:54:27 raghavt pgbouncer[62549]:C-0x1cdfe60:postgres/postgres@unix(62621):6432 tentativa de login:db=postgres user=postgres tls=não
5 de agosto 16:54:27 raghavt pgbouncer[62549]:S-0x1ce4b10:postgres/[email protected]:5432 nova conexão com o servidor (de 127.0.0.1:38947)
5 de agosto 16 :54:27 raghavt pgbouncer[62549]:C-0x1cdfe60:postgres/postgres@unix(62621):6432 fechando porque:solicitação de fechamento do cliente (idade=0)

Nota:Se “syslog” estiver habilitado, comente ou deixe em branco o parâmetro “logfile”, senão será um registro adicional.

Método 2:


Logrotate é um dos utilitários do sistema operacional que tem a capacidade de girar logs sistematicamente e arquivar para reduzir o requisito de espaço em disco de um sistema operacional. Cada arquivo de log pode ser tratado diariamente, semanalmente, mensalmente ou quando fica muito grande. Um arquivo de configuração padrão “/etc/logrotate.conf” define a idade/tamanho/intervalo de rotação do log. Usando esta ferramenta, os logs podem ser mantidos por mais tempo com menos espaço em disco. Muitas pessoas falaram sobre o uso do utilitário que você pode descobrir na rede de qualquer maneira, portanto estou pulando diretamente para a fase de implementação.
Primeiro, crie um arquivo de configuração no diretório /etc/logrotate.d/ para os logs do pgbouncer . Eu o nomeei como “/etc/logrotate.d/pgbouncer” com os detalhes abaixo:
/var/log/pgbouncer/pgbouncer.log {
girar 10
missingok
scripts compartilhados
notifempty
nocompress
tamanho 10m
diariamente
criar 0640 postgres postgres
postrotate
/bin/kill -HUP `cat /var/pgbouncer-postgres/pgbouncer.pid 2> /dev/ null` 2>/dev/null ||true
endscript
}

Sobre o arquivo de configuração, a primeira linha indica a localização do arquivo de log do pgbouncer(valores do parâmetro “logfile” no arquivo pgbouncer.ini) e a seguir estão os parâmetros que funcionam nos limites de rotação como; quantos arquivos de log manter (girar); não emita nenhum erro e vá para o próximo log (missingok); qual script deve ser executado antes/pós rotação (prerotate/postrotate); executar scripts pré/pós uma ou várias vezes (scripts compartilhados); não gire o log se estiver vazio (notifempty); após a rotação, um arquivo de log antigo deve ser compactado com o utilitário gzip (compress/nocompress); em quanto tamanho a rotação do log deve ser executada (tamanho); com que frequência girar um determinado log (diariamente); e qual permissão o novo arquivo de log deve ter (criar).

Agora podemos ver novos arquivos de registro alternados com tamanho de 10 milhões. (Podemos até forçar a rotação com o comando “logrotate -f /etc/logrotate.conf”)


[[email protected] pgbouncer]# ls -lrth
total 16K
-rw-r—–. 1 postgres postgres 10M 27 de julho 15:30 pgbouncer.log-20160727
-rw-r—–. 1 postgres postgres 11K 27 de julho 18:32 pgbouncer.log

Isso foi simples né , agora vamos verificar o mesmo no ambiente Windows.

No Windows:


Eu sei muito menos sobre os utilitários do Windows, consequentemente pesquisei e encontrei um utilitário de versão do Windows chamado “LogRotateWin” que funciona da mesma forma que a versão Linux do logrotate. Para obter mais detalhes, consulte a documentação detalhada disponível em Instalação/Configuração/Uso aqui.
Vamos ver como funciona, primeiro baixe a versão “.msi” do LogRotateWin disponível no site como arquivo “logrotateSetup*.zip”. Extraia e execute o arquivo “.msi”, ele instalará o utilitário no local “c:Program Files (x86)LogRotate”. Você pode encontrar o arquivo de configuração padrão (logrotate.conf) em “c:Program Files (x86)LogRotateContent”.
Em seguida, edite o arquivo “c:Program Files (x86)LogRotateContentlogrotate.conf” e especifique o caminho completo do arquivo “pgbouncer.log” com os mesmos parâmetros de rotação. Uma cópia de amostra do meu arquivo de configuração testado no Windows 10. (Observação:os valores de parâmetro abaixo são usados ​​para testar o utilitário)
c:Arquivos de Programas (x86)LogRotateContent>mais logrotate.conf
“c:Arquivos de Programas (x86)PgBouncerlogpgbouncer.log” {
girar 10
copytruncate
criar
missingok
scripts compartilhados
nocompress
tamanho 200k
diariamente
}

Para verificar, forcei a rotação do log com a opção “-f”
c:Arquivos de Programas (x86)LogRotate>logrotate.exe -f Contentlogrotate.conf
logrotate:Força a opção definida como verdadeira

Aqui está o resultado:
C:Program Files (x86)PgBouncerlog>dir
O volume na unidade C não tem rótulo.
O número de série do volume é F226-9FFB

Diretório de C:Arquivos de Programas (x86)PgBouncerlog

08/08/2016 01:31 PM .
08/08/2016 01:31 PM ..
08/08/2016 01:31 PM 0 pgbouncer.log
08/08/2016 13:31 PM 6.626 pgbouncer.log.1
08/08/2016 13:31 PM 13.252 pgbouncer.log.2
3 Arquivo(s) 19.878 bytes
2 Dir(s) 26.905.051.136 bytes livres

Legal !!!.
Na maioria das distribuições Linux, o logrotate é executado diariamente usando “logrotate.conf” como parte do cronjob, da mesma forma no Windows, podemos agendar uma tarefa no Agendador de Tarefas do Windows para girar os logs diariamente. Para sua informação, não explorei muito o utilitário “LogRotateWin” apenas um nível básico. Caso encontre algum problema, poste-o no fórum de discussão geral do logrotate.
Obrigado por ler.
–Raghav