pgBadger是一个基于Perl编写的PostgreSQL日志分析脚本。

pgBadger通过分析PG的日志文件,以图表的形式展现数据库的各项活动和状态信息,其愿景是:“Make your reports in seconds!”。

pgBadger的特性:

  1. 图表输出:输出的图表可单独下载为PNG文件,这个功能对于DBA来说,用于数据库巡检截图会比较管用。
  2. 并行分析:使用-j或-J可以指定日志分析的并行度。
  3. 压缩文件:可支持gzip压缩的日志文件分析。
  4. 增量报告:支持增量模式,比如按天分析,最后可以叠加为按周/月分析。

此外,它不仅收集SQL,还收集服务器日志中的错误日志等。

详细的Features列表请参见官网(http://pgbadger.darold.net/)。

安装pgBadger

pgBadger提供了源代码可以用于编译安装。在PGDG仓库中也已经包含了pgBadger的rpm安装包,针对Ubuntu系列系统,pgBadger也有对应的仓库可以使用。详细信息请看官方页面:http://pgbadger.darold.net/#download

推荐采用从软件仓库安装的方式来安装pgBadger。

从仓库安装pgBadger比较简单,以Redhat Linux为例,只需先配置好PGDG仓库,然后使用yum命令在线安装即可。Ubuntu系列Linux与此类似。

你也可以参考官方文档的说明来安装,地址是:http://pgbadger.darold.net/documentation.html

PostgreSQL参数配置

使用pgBadger来分析PostgreSQL系统日志需要对postgresql.conf参数文件做相应的配置,具体如下所示:

log_destination = 'csvlog'      # 可选
logging_collector = on
log_min_duration_statement = 0
log_line_prefix = '%t [%p]: 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
lc_messages='C'
log_filename = 'postgresql-%Y%m%d_%H%M%S.log'   # 定义日志文件的名称
log_file_mode = 0600

注意不要同时启用log_min_duration_statementlog_durationlog_statement,这将导致错误的计数器值,也会大大增加日志的大小。log_min_duration_statement是首选启用的参数。

另外,请考虑为log_min_messages参数设置一个合理的值,默认为warning,设置不当可能导致日志信息膨胀或日志信息不足。

pgBadger的使用实例

我在项目中实际使用pgBadger时,利用crontab做了计划任务,日常会每天晚上23:55自动调用pgBadger分析当天的日志并生成报告,第二天来查看检查数据库的使用情况。

我的脚本内容如下:

#!/bin/bash

CURRDATE=`date +%Y%m%d`
PGDATA=/u01/pgdata/11
REPTDIR=/home/postgres/pgbadger_reports

if [ -d $REPTDIR ]; then
    mkdir -p $REPTDIR
fi

/bin/pgbadger -q $PGDATA/log/postgresql-$CURRDATE*.csv -o $REPTDIR/reports_$CURRDATE.html -j 8 -f stderr

find $REPTDIR -name reports_*.html -mtime +8 -exec rm -rf {} \;

脚本还会自动删除8天之前的报告文件。

然后,我们就可以按时从服务器的/home/postgres/pgbadger_reports目录获取报告进行查看和分析了。