VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

pgBadger

功能描述

pgBadger是一个快速、简便的日志分析工具。

pgBadger能够基于Vastbase数据库的日志文件输出HTML页面,通过动态图的形式进行展示,利于阅读。pgBadger是了解Vastbase服务器的行为并确定需要优化哪些SQL查询的便捷工具。

使用方法

在使用pgBadger之前,需要在postgresql.conf中配置Vastbase的日志记录行为。参考重设参数表1对以下GUC参数进行设置:

步骤1: 启用SQL日志记录:log_min_duration_statement

log_min_duration_statement=0

参数值设置为0时,每个语句都将被记录。在繁忙的服务器上,调高此参数的值可以实现仅记录持续时间较长的查询。

请勿启用log_statement,因为pgBadger无法解析它的日志格式。如果将log_statement设置为'all',则不会通过log_min_duration_statement指令记录任何内容。

步骤2: 设置日志的前缀信息

pgBadger支持在postgresql.conf文件的log_line_prefix指令中设置的任何自定义格式,前提是log_line_prefix至少指定了一个时间转义序列(%t, %m或%n)和进程相关的转义序列(%p或%c)。

日志格式由参数log_destination控制,有效值为stderr、csvlog、syslog。

例如,对于“stderr”日志格式,log_line_prefix必须至少为:

log_line_prefix = '%t [%p]: '

日志行前缀可以添加用户、数据库名称、应用程序名称和客户端ip地址,如下所示:

log_line_prefix = '%t [%p]: user=%u,db=%d,app=%a,client=%h '

stderr输出的日志行前缀也可以是:

log_line_prefix = '%t [%p]: db=%d,user=%u,app=%a,client=%h '

对于“syslog”日志文件格式,log_line_prefix可以是:

log_line_prefix = 'user=%u,db=%d,app=%a,client=%h '

或者:

log_line_prefix = 'db=%d,user=%u,app=%a,client=%h '

步骤3: 开启其它日志记录

需要开启一些基础记录功能,以便pgBadger能够从日志文件中获取更多信息:

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

步骤4: 设置字符集

确保Vastbase的日志消息应该是英文,设置语言环境:

lc_messages='en_US.UTF-8'
lc_messages='C'

pgBadger解析器不支持其他语言环境,例如 'fr_FR.UTF-8' 。

附:更多日志相关参数配置说明

关于log_min_duration_statement、log_duration和log_statement配置的注意事项:

  • 如果希望查询统计信息包含实际的查询字符串,则必须将log_min_duration_statement设置为0或更多毫秒。

  • 如果只需要查看报告查询的持续时间和数量,而不想要查询的所有细节,将log_min_duration_statement设置为-1以禁用它,并在postgresql.conf文件中启用log_duration。如果要添加最常见的请求报告,可以选择将log_min_duration_statement设置为更高的值,或者选择启用log_statement。

  • 启用log_min_duration_statement将添加关于最慢查询和占用时间最多的查询的报告。注意,如果将log_statement设置为'all',则不会使用log_min_duration_statement记录任何内容。

  • 不要同时启用log_min_duration_statement、log_duration和log_statement,这将导致错误的计数器值。注意,这也会大大增加日志的大小。应该始终优先选择Log_min_duration_statement。

步骤5: 构建报告

使用pgBadger查看报告的前提是Vastbase中执行了SQL并生成了相应日志文件。

执行类似如下的操作系统命令即可构建pgBadger报告,更多用法示例请参考后文样例,各选项介绍详见参数说明

pgbadger -f stderr $OM_GAUSSLOG/postgresql-20xx-xx-xxxxx.log

步骤6: 查看报告

为指定日志文件生成的HTML报告默认存放在当前登录用户的用户主文件夹下。

cd ~
ll

查看用户目录下的文件列表,其中out.html即为pgBadger生成的详细日志报告。

参数说明

pgBadger提供了大量参数,用于控制报告生成的效果。

Vastbase暂不支持以下未介绍的参数。

  • -f | --format logtype

    指定数据库日志的输出格式,可能的取值为:syslog、stderr、csv。

  • -o | --outfile filename

    指定输出的文件名称。

    默认值取决于输出模式:out.html、out.txt、out.csv、或 out.json。此选项可多次使用以输出多种格式。

    如果使用 json 格式输出,则必须安装 Perl 模块 JSON::XS。

  • -a | --average minutes

    构建查询和连接的平均图所需的分钟数。默认为5分钟。

  • -A | --histo-average min

    构建查询直方图的分钟数。默认为60分钟。

  • -b | --begin datetime

    要在日志中解析的数据的开始日期/时间(timestamp或者time)。

  • -c | --dbclient host

    仅报告指定客户端主机的记录。

  • -C | --nocomment

    从查询SQL中移除形如/* ... */的注释内容。

  • -d | --dbname database

    分析指定的数据库。

  • -D | --dns-resolv

    将客户端IP地址替换为其DNS名称。

    指定此选项会降低pgBadger的速度。

  • -e | --end datetime

    要在日志中解析的数据的结束日期/时间。

  • -E | --explode

    通过为每个数据库生成一个报表来扩展主报告。与数据库无关的全局信息将被添加到postgres库的报告中。

  • -G | --nograph

    在HTML输出中禁用图表。默认启用图表。

  • -h | --help

    展示帮助信息并退出。

  • -H | --html-outdir path

    在增量模式下写入 HTML 报告的目录路径,二进制文件保留在用 -O, --outdir 选项定义的目录中。

  • -I | --incremental

    使用增量模式,报告将按天生成,必须设置--outdir。

  • -j | --jobs number

    并行解析日志的进程数量。

    默认情况下为单并发。

  • -J | --Jobs number

    并行执行解析的日志文件数量。

    默认情况下为单并发。

  • -L | --logfile-list file

    在文件中包含待解析的日志文件列表。

  • -m | --maxlength size

    查询的最大长度,超过指定长度将被截断。

    默认截断长度为 100000。

  • -M | --no-multiline

    不收集多行语句,以避免出现垃圾信息。

    对于会产生大量错误的报告非常有用。

  • -N | --appname name

    只报告指定应用程序名称的记录。

  • -O | --outdir path

    指定输出文件保存的目录。

  • -q | --quiet

    不向 stdout 打印任何内容,包括进度条。

  • -Q | --query-numbering

    在输出中添加查询编号。

  • -S | --select-only

    报告中只分析SELECT查询。

  • -t | --top number

    要存储/显示的查询次数。

    默认值:20。

  • -T | --title string

    指定 HTML 报告页面的标题。

  • -u | --dbuser username

    只分析给定用户的记录。

  • -U | --exclude-user username

    排除指定用户的记录。

  • -V | --version

    显示pgBadger版本号并退出。

  • -w | --watch-mode

    只显示错误报告。

  • -x | --extension

    输出格式。可能的值:txt,html,csv 或 json。

    默认值:html

  • --disable-type

    不按类型、数据库或用户生成查询报告。

  • --disable-query

    不生成查询报告(最慢查询、最频繁查询、按用户查询、按数据库查询……)。

  • --disable-session

    不生成会话报告。

  • --disable-connection

    不生成连接报告。

  • --disable-lock

    不生成锁报告。

  • --disable-temporary

    不生成临时报告。

  • --disable-checkpoint

    不生成检查点报告。

  • --disable-autovacuum

    不展示自动清理报告。

  • --csv-separator

    用于设置 CSV 字段分隔符,默认为:,

  • --exclude-db name

    从报告中排除指定数据库的记录。

    可多次使用此选项。

  • --exclude-appname name

    从报告中排除指定数据库的记录。

    可以多次使用此选项。

  • --exclude-client name

    排除指定客户端 IP 的日志记录。

    可多次使用此选项。

构建语句样例

  • 指定并发数,快速高效地分析10GB大文件:

    pgbadger -j 8 /pglog/postgresql-10.1-main.log
    
  • 指定输出文件:

    pgbadger postgresql-2022-04-13_000000.csv  -o p.html
    
  • 分析多个日志文件:

    pgbadger /var/log/postgresql/postgresql-2012-05-*
    
  • 分析多个文件、多种格式:

    pgbadger /var/log/postgres.log.2.gz /var/log/postgres.log.1.gz /var/log/postgres.log
    
  • 分析时段:

    pgbadger -b "2012-06-25 10:56:11" -e "2012-06-25 10:59:11" /var/log/postgresql.log
    
  • 分析前排除程序vb_dump:

    pgbadger --exclude-appname "vb_dump"  postgresql.log
    
  • 每周报告错误:

    30 23 * * 1 /usr/bin/pgbadger -q -w /var/log/postgresql.log  -o /var/reports/pg_errors.html
    
  • 每周使用增量行为生成报告:

    0 4 * * 1 /usr/bin/pgbadger -q `find /var/log/ -mtime -7 -name "postgresql.log*"` -o /var/reports/pg_errors-`date +\%F`.html -l /var/reports/pgbadger_incremental_file.dat
    
  • 自动产生增量报告:

    0 4 * * * /usr/bin/pgbadger -I -q /var/log/postgresql/postgresql.log.1  -O /var/www/pg_reports/
    

示例

此处给出一个简单的示例,指导用户快速使用pgBadger构建一份日志报告。

使用数据库安装用户执行以下操作。

1、设置必要的日志相关GUC参数。

echo "log_statement = 'all'
log_line_prefix = '%t [%p]: user=%u,db=%d,app=%a,client=%h '
log_destination='stderr'
log_min_duration_statement=0
log_duration = on
log_connections = on
log_disconnections = on" >>$PGDATA/postgresql.conf

2、重启数据库使设置生效。

vb_ctl restart

3、执行若干SQL,确保$OM_GAUSSLOG目录中存在用于日志分析的日志文件。

4、执行如下命令构建日志分析报告。其中postgresql-20xx-xx-xxxxx.log是数据库日志文件的名称。

pgbadger -f stderr $OM_GAUSSLOG/postgresql-20xx-xx-xxxxx.log

报告构建成功的显示信息如下:

[========================>] Parsed 217879 bytes of 217879 (100.00%), queries: 358, events: 35
LOG: Ok, generating html report...

参考链接

pgBadger官方文档