Letztes Jahr hatten wir ein Tutorial wo erklärt wurde, wie ihr mittels PGBadger eure PostgreSQL Datenbank überwachen könnt. In dem Zeitalter der Cloud sind aber auch wir nun dabei gewesen, unsere Datenbank als Amazon RDS zu mergen und wollten natürlich weiterhin unsere DB überwachen. Dies ist uns nun durch ein paar kleine Handgriffe gelungen, die ich euch natürlich nicht vorenthalten möchte.
Ihr benötigt (sofern noch nicht passiert) 4 Sachen auf eurem Server/PC/whatever :)
- PGBadger
- Java
- RDS CLI
- Script zum Report verschicken
PGBadger
Zuerst installiert ihr euch PGBadger auf eurem Server. https://github.com/dalibo/pgbadger.git
Java
Sollte bekannt sein :) Wir haben openJDK dafür genutzt
RDS CLI
Wir haben http://docs.aws.amazon.com/AmazonRDS/latest/CommandLineReference/StartCLI.html diese Referenz genutzt, um die RDS CLI zu installieren. Hier nochmal eine "for dummies" Guide:
mkdir /usr/rds
cd /usr/rds
wget http://s3.amazonaws.com/rds-downloads/RDSCli.zip
unzip RDSCli.zip
mv RDSCli-1.18.001/* .
rm -Rf RDSCli*
export AWS_RDS_HOME=/usr/rds
export PATH=$PATH:$AWS_RDS_HOME/bin
export EC2_REGION=eu-west-1
echo AWSAccessKeyId=????????? > /usr/rds/credential-file-path.template
echo AWSSecretKey=????????? >> /usr/rds/credential-file-path.template
chmod 600 /usr/rds/credential-file-path.template
export AWS_CREDENTIAL_FILE=/usr/rds/credential-file-path.template
Hier muss natürlich die Fragezeichen in euren Key und die ID eingetragen werden.
Script
Zum abrufen der Logs für einen einzelnen Tag der PGBadger Reports, habe ich folgendes bash Script erstellt, welches wir einmal morgens ausführen, um uns die fertigen Reports zu zu schicken.
#!/bin/bash
export AWS_RDS_HOME="/usr/rds"
export EC2_REGION="eu-west-1"
export AWS_CREDENTIAL_FILE="/usr/rds/credential-file-path.template"
export JAVA_HOME="/usr/lib/jvm/java-6-openjdk-amd64/jre/"
rm /root/rds.log
rm /root/pgbadger.html
yest=$(date --date="yesterday" +"%Y-%m-%d")
for i in $(seq 0 9); do /usr/rds/bin/rds-download-db-logfile RDS-ID --log-file-name error/postgresql.log.$yest-0$i >> /root/rds.log ; done
for i in $(seq 10 23); do /usr/rds/bin/rds-download-db-logfile RDS-ID --log-file-name error/postgresql.log.$yest-$i >> /root/rds.log ; done
/usr/local/bin/pgbadger -p '%t:%r:%u@%d:[%p]:' /root/rds.log -o /root/pgbadger.html
echo report | mail -s "pgbadger report amateurseite" -a /root/pgbadger.html -r ABSENDER@joocom.de EMPFANG@joocom.de