17.062015

PostgreSQL RDS mit PGBadger überwachen

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 :)

  1. PGBadger
  2. Java
  3. RDS CLI
  4. 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
Das war's auch schon. Das Script ruft alle Logs von einer RDS Instanz (RDS-ID) ab für einen Tag (gestern). Viel Spaß beim nachbauen