DEV Community

Cover image for Analyze PostgreSQL log using pgBadger and scheduling using crontab
Sihar Simbolon
Sihar Simbolon

Posted on

Analyze PostgreSQL log using pgBadger and scheduling using crontab

pgBadger can help us analyze PostgreSQL log with fully detailed reports and graphs.

Step by Step
Prepare your PostgreSQL log format

...
# pgbadger settings
log_line_prefix = '%t [%p]: [%l-1] user=%u,db=%d,app=%a,client=%h '
log_checkpoints = on
log_connections = on
log_disconnections = on
log_lock_waits = on
log_temp_files = 0
log_autovacuum_min_duration = 0
log_error_verbosity = default
log_min_duration_statement = 0
...
Enter fullscreen mode Exit fullscreen mode

Apply PostgreSQL settings

postgres=# select pg_reload_conf();
Enter fullscreen mode Exit fullscreen mode

Install pgBadger
Better using other server/vps to install pgBadger and save pgBadger report there.
To install pgBadger you can use this instruction

Create folder for output directory pgBadger

mkdir /var/www/postgresql-reports
Enter fullscreen mode Exit fullscreen mode

Create folder for save PostgreSQL log

mkdir /home/xxxx/postgresql-log
Enter fullscreen mode Exit fullscreen mode

Create bash script

touch /home/xxx/script/building-report.sh
Enter fullscreen mode Exit fullscreen mode

Fill the script using this

#!/bin/bash

filename="postgresql-"$(date -d "1 day ago" +%Y-%m-%d)

#copy h-1 postgresql log from remote server
scp your_username@your_server_address:/var/log/postgresql/$filename".log" /home/xxxx/postgresql-log/

#building report using pgbadger
pgbadger -p "%t [%p]: [%l-1] user=%u,db=%d,app=%a,client=%h " /home/xxxx/postgresql-log/$filename".log" -O /var/www/postgresql-reports/ -o $filename".html" --no-progressbar
Enter fullscreen mode Exit fullscreen mode

Open crontab

crontab -e
Enter fullscreen mode Exit fullscreen mode

Add pgBadger command

0 1 * * * /bin/bash /home/xxx/script/building-report.sh 2>&1 | logger -t pgbadger-cmd
Enter fullscreen mode Exit fullscreen mode

Finish!!!

Reference:
pgBadger documentation

Top comments (0)