1 前言

pgBagder 是 PostgreSQL 的新一代日志分析器, 由 Darold (也是 ora2pg 的作者, 强大的迁移工具) 创建的。pgBadger 是一种快速、简便的工具, 用于分析 SQL 通信量, 并使用动态图来创建 HTML5 报告。pgBadger 是了解 PostgreSQL 服务器的行为并确定需要优化哪些 SQL 查询的完美工具。

pgBagder 是在linux操作系统中运行的程序。

 

2 安装环境

操作系统:Linux。本文操作系统版本为 Redhat,CentOS 6.9,64位 。

数据库:PostgreSQL 10.0

依赖程序: perl,php , httpd以及它们的依赖。

本文的Httpd的版本是httpd.x86_64 2.2.15,perl的版本perl.x86_64 5.10,php.x86_64 5.3.3。

 

3 安装和使用

  1. 使用yum 安装各项依赖

安装Perl:

[root@node01 ~]# yum install -y perl perl-devel

 

安装php:

[root@node01 ~]# yum install -y php php-devel

 

安装httpd:

[root@node01 ~]# yum install -y  httpd  httpd-devel

 

2. 下载 pgbadger的安装包。

在浏览器中访问官方地址https://github.com/darold/pgbadger/releases,选择一个版本来下载。

或者在linux命令行界面,运行下载命令。例如如果希望下载pgbadge v10.0,可以执行命令:

wget https://github.com/darold/pgbadger/archive/v10.0.tar.gz

 

3. 下载完成后。在安装包所在目录里解压,编译并安装。

 

[root@node01 ~]# tar -zxvf pgbadger-10.0.tar.gz

[root@node01 ~]# cd pgbadger-10.0

[root@node01 pgbadger-10.0]# perl Makefile.PL

[root@node01 pgbadger-10.0]# make && make install

 

检测是否安装成功:

[root@node01 pgbadger-10.0]# which pgbadger

/usr/local/bin/pgbadger

 

[root@node01 pgbadger-10.0]# pgbadger -V

pgBadger version 10.0

 

 

 

4.  在“/var/www/html”下创建一个叫作pgbadger的目录。

[root@node01 pgbadger-10.0]# mkdir /var/www/html/pgbadger

 

5. 启动httpd,并验证httpd能否正常工作。

 

[root@node01 pgbadger-10.0]# service httpd start

正在启动 httpd:httpd: Could not reliably determine the server's fully qualified domain name, using 10.33.47.114 for ServerName

[确定]

 

在/var/www/html/pgbadger/下创建一个php文件,名为test.php:

[root@node01 pgbadger]# vi /var/www/html/pgbadger/test.php

内容为:

<?php

       echo "This is a test .";

?>

 

然后再浏览器中打开查看该网页:

http://10.33.47.114/pgbadger/test.php

这里10.33.47.114是本文计算机的ip地址,这里你要将它替换为自己的ip地址。

 

如图所示,http可以正常工作。

                            

 

6. 修改PostgreSQL的配置文件postgresql.conf 中的一些与日志有关的参数。

 

log_line_prefix,顾名思义是日志行的前缀

# special values:

 

#   %a = application name

                            #   %u = user name

                            #   %d = database name

                            #   %r = remote host and port

                            #   %h = remote host

                            #   %p = process ID

                            #   %t = timestamp without milliseconds

                            #   %m = timestamp with milliseconds

                            #   %n = timestamp with milliseconds (as a Unix epoch)

                            #   %i = command tag

                            #   %e = SQL state

                            #   %c = session ID

                            #   %l = session line number

                            #   %s = session start timestamp

                            #   %v = virtual transaction ID

                            #   %x = transaction ID (0 if none)

                            #   %q = stop here in non-session

 

 

我们将log_line_prefix设置如下并保存:

log_line_prefix = '%t [%p] %r %d %u '

其中,%t表示时间戳;%p表示进程号;%r表示客户端的主机和端口;%d表示数据库名;而%u 表示用户名。

 

log_min_duration_statement = 5000

表示大于5s的sql语句会被记录

 

log_connections = on

表示将连接的创建和断开记录到日志中。

 

log_lock_waits = on

表示将锁等待记录到日志中。

 

log_checkpoints

表示将检查点记录到日志中。

 

下面的参数的值是默认的。你需要了解这些参数的含义。

log_destination = 'stderr'           # Valid values are combinations of

                                   # stderr, csvlog, syslog, and eventlog,

                                   # depending on platform.  csvlog

                                   # requires logging_collector to be on.

    表示采用标准文本格式(stderr)输出日志。

 

# This is used when logging to stderr:

logging_collector = on        # Enable capturing of stderr and csvlog

                                   # into log files. Required to be on for

                                   # csvlogs.

                                   # (change requires restart)

    表示将日志收集到日志目录中。

 

# These are only used if logging_collector is on:

#log_directory = 'pg_log'           # directory where log files are written,

                                   # can be absolute or relative to PGDATA

    表示日志目录是 pg_log。

 

7.  使用pgBadger来分析pg_log目录中的日志。

在postgresql产生的一段时间(例如几个小时或者几天)的日志后。我们可以就用pgBadger来分析它了。执行命令:

[root@node01~]# pgbadger --prefix '%t [%p] %r %d %u ' /opt/postgresql10/data/pg_log/postgresql-*.log -o /var/www/html/pgbadger/out.html -f stderr -s 10

 

这里你需要将 “/opt/postgresql10/data/pg_log/postgresql-*.log” 是替换为你本地的postgresql日志文件的文件路径。

 

如果没有其他问题,pgBadger会马不停蹄地读取和分析这些日志,并最终生成一个全面的网页报表,名为out.html。你可以在浏览其中查看其中丰富的指标:http://10.33.47.114/pgbadger/out.html

                                    

 

参考文献

[1] 转身泪倾城.pgbadger监控安装和使用. 2016-05-13

Logo

更多推荐