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查询日志 logminduration_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