pgBadger postgresql 数据库日志分析工具
环境
因为大量的非window系统使用perl语言,所以很多周边小工具是perl编写的,配置linux环境难免会用到。
pgBadger 就是perl写的,所以需要perl 和依赖模块CSV_XS
安装模块
yum -y install perl-CSV_XS
测试CSV_XS 模块
#!/usr/bin/env perl
use strict;
use warnings;
use Text::CSV_XS;
my $string = <<'END';
a,b,c,d
e,f,g,h
i,j,k,l
m,n,o,p
END
my $csv = Text::CSV_XS->new;
open my $fh, '<', \$string;
while (my $row = $csv->getline($fh)) {
print join('-', @$row), "\n";
}
print "version:",Text::CSV_XS->VERSION,"\n";
pgBadger安装
tar -zxvf pgbadger-x.tar.gz
cd pgbadger-x
perl Makefile.PL
make && make install
PostgreSQL 配置
CSV日志方式 必须必须确保 perl Text::CSV_XS 模块已经安装
如果要压缩,确保 一下压缩程序可用
--zcat="/usr/local/bin/gunzip -c" or --zcat="/usr/local/bin/bzip2 -dc"
--zcat="C:\tools\unzip -p"
*postgresql.conf *
开启SQL查询日志
log
minduration_statement 不要设置为all 这样会太多的日志,影响性能
stderr日志格式:
log_line_prefix = '%t [%p]: [%l-1] user=%u,db=%d '
syslog日志格式:
log_line_prefix = 'user=%u,db=%d '
stderr日志格式也可以配合prefix 命令参数:
log_line_prefix = '%t [%p]: [%l-1] db=%d,user=%u,client=%h '
< code >
syslog日志格式也可以是:
log_line_prefix = 'db=%d,user=%u '
你配置参数开启更多日志信息,配置例子:
log_checkpoints = on
log_connections = on
log_disconnections = on
log_lock_waits = on
log_temp_files = 0
log_duration = on
log_statement = 'all'
log_line_prefix = '%t [%p]: [%l-1] db=%d,user=%u,client=%h '
log_min_duration_statement = 0
lc_messages='C'
最终分析命令
pgbadger --log-duration -f csv -p '%t [%p]: [%l-1] db=%d,user=%u,client=%h ' /database/pgsql/data/pg_log/*.csv -o /var/tmp/pgsql.html