Archive

Posts Tagged ‘Rsyslog’

Comprobar Querys Lentas En PosgresQl con pgFouine

enero 28, 2010 1 comentario

Situación:

Tenemos un servidor de BD Postgresql que en algunos momentos del día va muy lento y queremos saber si hay alguna query ( consulta, actualización, etc ) que tarde demasiado y está afectando al rendimiento de la BD.

Solución:

Pgfouine es una aplicación en php sencilla, que si bajamos en tarball no necesita ni siquiera instalación.

Lo que hace es revisar el log de postgresql y presentarnos en formato html las querys que superen un umbral de segundos especificado por nosotros.

Instalación:

wget http://pgfoundry.org/frs/download.php/2178/pgfouine-1.1.tar.gz

mv pgfouine-1.1.tar.gz /opt/

cd /opt

tar xvzf pgfouine-1.1.tar.gz

rm pgfouine-1.1.tar.gz

cd /opt/pgfouine-1.1/

Para poder ejecutarlo tenemos que instalar php5 y php5-cli, ya que es un script de php.

En debian/ubuntu sería:

aptitude install php5 php5-cli

Ya tenemos pgfouine instalado y listo, así de sencillo.

Ahora sólo queda configurar postgresql y syslog para que logueen de una forma que pgfouine puede entender.

Editamos el fichero /etc/postgresql/8.4/main/postgresql.conf y cambiamos o añadimos las líneas siguientes:

log_destination = ‘syslog’

redirect_stderr = off

silent_mode = on

Para loguear sólo las querys que sean más lentas de 5 seg ( en milisegundos ):

log_min_duration_statement = 5000

log_duration = off

log_statement = ‘none’

Si tenéis syslog instalado, editamos /etc/syslog.conf y añadimos la línea:

local0.*                                         -/var/log/pgsql

Si tenéis rsyslog instalado, editamos /etc/rsyslog.d/50-default.conf y añadimos la misma línea anterior:

local0.*                                         -/var/log/pgsql

De esta forma postgresql logueará en el fichero /var/log/pgsql

Informes Html:

Para que pgfouine nos saque los informes en formato html :

/opt/pgfouine-1.1/pgfouine.php -file /var/log/pgsql > pgsql.html

Para que quede bonito podéis crear un script sencillo que almacene los logs e informes por día, por ejemplo:

#!/bin/bash

mv /var/log/pgsql /var/www/logs/$(date +%d-%m-%Y)-log    #Mueve el log /var/log/pgsql  a /var/www/logs/ nombrado el archivo con la fecha de hoy
/etc/init.d/rsyslog [syslog] restart                                                                       # Reiniciamos rsyslog para que vuelva a crear el fichero /var/log/pgsql
/etc/init.d/postgresql-8.4 reload                                                                          # Recargamos postgresql para que vuelva a loguear en /var/log/pgsql
/opt/pgfouine-1.1/pgfouine.php -file /var/www/logs/$(date +%d-%m-%Y)-log > /var/www/informes/$(date +%d-%m-%Y)-log.html                   #Realizamos el informe y lo guardamos en /var/www/informes con la fecha de hoy

Nombramos logpg al script y le damos permisos de ejecución:

chmod +x logpg

Añadimos una línea a nuestro cron para ejecutar todos los días el script a las 23:00 y así tener un log e informe por día:

crontab -e

00 23 * * *    /rutadelscript/logpg

Evidentemente, no nos podemos olvidar de crear previamente los directorios /var/www/logs y /var/www/informes:

mkdir /var/www/logs

mkdir /var/www/informes

Enlaces Externos:

Categorías:SysAdmin Etiquetas: , , , , ,