Analyse von Log-Files bei PostgreSQL-Cloud-Datenbanken

Beim Einrichten, Betreiben und Skalieren von PostgreSQL Open-Source-Datenbanken mittels Amazon Relational Database Service (RDS) oder Amazon Aurora fällt eine Vielzahl von Log-Files an, deren Auswertung Datenbankadministratoren weiterhelfen kann. Dazu müssen sie die Dateien regelmäßig und effektiv analysieren.

Grafik: AWS

Bei den vollständig verwalteten Diensten für relationale Datenbanken wie Amazon RDS oder Amazon Aurora für PostgreSQL-Datenbanken können Sie die Logdateien der Nutzerzugriffe abrufen und analysieren. Denn mit einer steigenden Zahl von Transaktionen ist es hilfreich, den Überblick über Zugriffe und Protokoll-Einträge (DEBUG, LOG, INFO, NOTICE, WARNING und EXCEPTION-Level) zu behalten.

Für die regelmäßige, idealerweise tägliche Überprüfung der Protokoll-Einträge können Sie den pgBadger nutzen, der über GitHub erhältlich ist. Dieses Open-Source PostgreSQL-Tool erzeugt für Amazon RDS- und Amazon Aurora-Instanzen HTML-Berichte aus Ihren PostgreSQL-Protokollen.

Zur Installation starten Sie eine Amazon EC2 Instanz mitRHEL- oder CentOS AMI über Ihre AWS Management-Konsole. Nach der Verbindung mit der Instanz installieren Sie die notwendigen Pakte (Perl, PostgreSQL Repository und pgBadger). Das ermöglicht ein einfacher Code – hier am Beispiel für RHEL 7 mit pgdg-10:

sudo yum install ftp://ftp.pbone.net/mirror/apt.sw.be/redhat/7.3/en/i386/rpmforge/RPMS/perl-Text-CSV_XS-0.65-1.rh7.rf.i386.rpm perl perl-devel

sudo yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

sudo yum install pgbadger -y

Um die Berichte über die Zugriffe auf die Datenbanken zu generieren, laden Sie die PostgreSQL Protokolle von Amazon RDS oder Aurora auf die Instanz und starten das pgBadger-Tool. Dann aktivieren Sie die Protokollierungsparameter in Ihrer DB Parameter-Gruppe. Anschließend legen Sie einen Cronjob für den weiteren automatisierten Download der Dateien an. Das Herunterladen, das Konvertieren der Informationen und das Generieren von Reports für die letzten drei Tage ermöglicht das untenstehende Bash-Skript.

Wichtig zu wissen ist, dass Amazon RDS und Amazon Aurora-Instanzen Zugriffsdaten für eine Zeit von drei bis sieben Tagen vorhalten. Wenn Sie weiter auf die Einträge zugreifen wollen, lassen diese mit benutzerdefinierten Bash-Skripts auf Amazon EC2-Instanzen oder Amazon S3-Buckets langfristig sichern.

#This Script helps to download the Postgres log files from cloud and store it on EC2.
## 1. Delete the logs and pgBadger reports older than 3 days.
## 2. Download the latest Postgres log from Amazon RDS instance: <instance_name>.
## 3. Generate the pgBadger report for newly downloaded log file.
#create pgBadger dir under /home/ec2-user mkdir -p /home/ec2-user/pgBadger,
# mkdir -p /home/ec2-user/pgBadger/logs , mkdir -p /home/ec2-user/pgBadger/reports
#Use must install pgbadger and it should be in path.
#Here is link for pgbadger installation: https://github.com/darold/pgbadger
#Install awscli on EC2 instance set the env (https://docs.aws.amazon.com/cli/latest/topic/config-vars.html)
# to download the log files.

home_dir=“/home/postgres/pgBadger”
logDir=“/home/postgres/pgBadger/logs”
rptDir=“/var/www/pgbadger”
identifier=‘<instance_identifier>’

date=$(date -d “-1 days” +%Y-%m-%d)

sudo find $logDir -name ‘*.log.*’ -type f -mtime 0 -exec rm {} \;
sudo find $rptDir -name ‘postgresql*.html’ -type f -mtime +10 -exec rm {} \;

sudo mkdir -p $logDir/$date
sudo chown -R postgres:postgres $logDir/$date

#how to generate pgbadger report
#Install pgbadger on EC2 . To install, follow the link: https://github.com/darold/pgbadger

for i in $(seq -w 00 23); do
 
sudo aws rds download-db-log-file-portion –db-instance-identifier $identifier
  –log-file-name error/postgresql.log.$date-$i –starting-token 0 –output text
  > $logDir/$date/postgresql.log.$date-$i
done

if
[ $? -eq 0 ]; then

 
sudo pgbadger –prefix ‘%t:%r:%u@%d:[%p]:’ $logDir/$date/*.log.* -o $rptDir/postgresql.$date.html
  -f stderr #-f $logDir/*.log.*
 
sudo chmod -R 777 $rptDir/postgresql.$date.html

  if [ $? -eq 0 ]; then
   
#mailx -s “Successfully Generated the pgbadger report for Date: $date”
   
echo “Successfully Generated the pgbadger report for Date: $date
 
else
   
#mailx -s “UNSUCESSFUL GENERATION of pgbadger report for Date: $date”
   
echo “Successfully Generated the pgbadger report for Date: $date
 
fi
 
gzip -r9 $logDir/$date
fi