原创文章,转载须注明出处。访问我的Github(地址:https://guobo507.github.io)查看最新文章列表。
pgBadger是一个基于Perl编写的PostgreSQL日志分析脚本。
pgBadger通过分析PG的日志文件,以图表的形式展现数据库的各项活动和状态信息,其愿景是:“Make your reports in seconds!”。
pgBadger的特性:
此外,它不仅收集SQL,还收集服务器日志中的错误日志等。
详细的Features列表请参见官网(http://pgbadger.darold.net/)。
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。
使用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_statement
,log_duration
和log_statement
,这将导致错误的计数器值,也会大大增加日志的大小。log_min_duration_statement
是首选启用的参数。
另外,请考虑为log_min_messages
参数设置一个合理的值,默认为warning,设置不当可能导致日志信息膨胀或日志信息不足。
我在项目中实际使用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
目录获取报告进行查看和分析了。