pgbadger是postgresql 三大神器之一:pg_profile、pg_badger、pgfouine
其中pgbadger用分析postgresql的警告日誌,可以帮助使用者去寻找有关性能的蛛丝马迹,分析系统瓶颈
下载地址:https://github.com/darold/pgbadger/blob/master/ChangeLog
因为我的环境是postgresql 10.16,所以这个链接是基于postgresql 10.16的下载地址,如果postgresql是其他版本,需要去寻找对应版本的pgbadger.
postgres=# select version();
version
--------------------------------------------------------------------------------------------------------------------------------------
PostgreSQL 10.16 (Ubuntu 10.16-0ubuntu0.18.04.1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0, 64-bit
下载后,放入目标主机
unzip pgbadger-master.zip ---因为我下载的是zip档
cd ./pgbadger-master ---进入解压缩后的目录
perl Makefile.PL ---会产生makefile文件
make && make install ---安装
log_checkpoints = on
log_connections = on
log_disconnections = on
log_lock_waits = on
log_temp_files = 0
log_autovacuum_min_duration = 0
log_min_duration_statement = 1000
log_error_verbosity = default
log_statement = none
lc_messages='en_US.UTF-8'
log_line_prefix = '%t [%p]: [%l-1] user=%u,db=%d,app=%a,client=%h'
log_rotation_size = 10240
log_rotation_size = 1440
log_truncate_on_rotation = off
pg_ctl -D /etc/postgresql/10/main restart
apt install apache2*
其他具体细节省略,可以参考apache的配置
sudo mkdir /var/www/html/pgbadger_reports ---在apache默认的home目录下创建一个folder用于存放pgbadger产生的报告
sudo chown postgres /var/www/html/pgbadger_reports
因为我的pg db的logfile是csv,pgbadger需要这个模组,否则它将无法解析csv格式的log
apt install libtext-csv-perl
(适用于按需求产生,这个时间范围取决于rotation参数设定)
postgres=# select name,setting,unit from pg_settings where name like '%rotation%';
name | setting | unit
--------------------------+---------+------
log_rotation_age | 1440 | min
log_rotation_size | 10240 | kB
log_truncate_on_rotation | off | ----log轮转时会保留旧的logfile
这个时间范围可以按照需求调整,这儿是分析当天的所有日志(使用了$CURRDATE*)
export CURRDATE=`date +%Y-%m-%d`
/usr/local/bin/pgbadger -q /data/pg_log/postgresql-$CURRDATE*.csv -o $REPTDIR/reports_$CURRDATE.html -j 8 -f csv --prefix '%t [%p]: [%l-1] user=%u,db=%d,app=%a,client=%h'
---注意:
1.如果logifle格式是csv,指定-f csv,如果是stderr指定-f stderr
2.--prefix,指定与log_line_prefix参数一致
##7.1脚本内容:
#脚本位置及名称:#/backup/script/pg_logrpt.sh,
CURRDATE=`date +%Y-%m-%d`
PGDATA=/data
REPTDIR=/var/www/html/pgbadger_reports
if [ ! -d $REPTDIR ]; then
mkdir -p $REPTDIR
fi
/usr/local/bin/pgbadger -q $PGDATA/pg_log/postgresql-$CURRDATE*.csv -o $REPTDIR/reports_$CURRDATE.html -j 8 -f csv --prefix '%t [%p]: [%l-1] user=%u,db=%d,app=%a,client=%h'
echo "$PGDATA/pg_log/postgresql-$CURRDATE"
find $REPTDIR -name reports_*.html -mtime +8 -exec rm -rf {} \;
sudo chmod +755 /backup/script/pg_logrpt.sh
我设定每天夜间23:00开始分析并产生一份报告,当然可以根据主机负载状况自行调整
00 23 * * * /backup/script/pg_logrpt.sh
下图链接中的pgbadger_reports就是前面apache设置中创建的存放报告的目录,访问这个目录可以看到产生的报告明细,点击即可查看