# pgBadger日常用法(pg日志分析工具)

pgBadger日常用法(pg日志分析工具)


pgBadger是分析postgresql日志的好帮手,别再导入日志到数据库自己分析了

官方地址:https://github.com/darold/pgbadger

1 安装

yum -y  install perl-JSON-XS  perl-Text-CSV_XS
yum -y  install perl-ExtUtils-MakeMaker

VER='12.1'
cd  /usr/local/src/
wget  https://github.com/darold/pgbadger/archive/refs/tags/v${VER}.tar.gz  -O pgbadger-v${VER}.tar.gz
tar zxf  pgbadger-v${VER}.tar.gz
cd  pgbadger-${VER}
perl Makefile.PL
make && sudo make install

2 参数说明

参数太多,这里仅为摘抄一小部分

日志输出参数格式选项:
%t:表示时间戳
%p:表示进程号
%r:表示客户端的主机和端口
%d:表示数据库名
%u:表示用户名

-f,–format logtype     指定输出的格式syslog, syslog2, stderr, jsonlog,cvs, pgbouncer, logplex, rds and redshift
-d,–dbname database    分析指定的数据库
-u,–dbuser username    解析指定的用户
-c,–dbclient host      解析执行ip访问的日志信息
-b,–begin datetime     解析指定时间日志,开始时间或日期
-e,–end datetime       解析指定时间日志,结束时间或日期
-o                     指定输出的文件
-O,--outdir            指定输出目录
-C,–nocomment          移除查询中的备注信息
–exclude-query regex   排除符合正则表达式的内容不需要分析
-a,–average minutes    图表时间间隔,默认5min
-A,–histo-average      构建直方图的分钟数的查询,默认60min
-t,–top number         存储或显示查询数量,默认20
-j,–jobs number        并行解析的进程数量
-J,–Jobs number        并行执行解析的日志文件数量
-S,–select-only      只输出select查询报告
-v,–verbose          详细显示信息
-q,–quiet            不打印过程信息
-w,–watch-mode       只显示错误报告
-I|--incremental     使用增量模式,报告将由在一个单独的目录中,必须设置--outdir。【按日、周生成报告目录,按日期选择报告】
-X|--extra-files     在增量模式下,允许pgBadger编写CSS和输出目录中的JS文件作为单独的文件。【会在输出目录创建一个pgbadger版本的目录,里面放的是js文件,别用】
-E|--explode         通过生成一个报告来爆炸主报告每个数据库。与a无关的全局信息数据库被添加到postgres数据库报告中。

3 官方用法示例

# 指定输出:
pgbadger  postgresql-2022-04-13_000000.csv  -o p.html

# 分析
pgbadger  /var/log/postgresql.log
cat /var/log/postgres.log | pgbadger -

# 分析多个
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

# 分析排除时段
pgbadger --exclude-time "2013-09-.* (23|13):.*" postgresql.log

# 分析排除程序pg_dump
pgbadger --exclude-appname "pg_dump"  postgresql.log

# 分析排除sql
pgbadger --exclude-query="^(COPY|COMMIT)" /var/log/postgresql.log

# Log prefix with stderr log output
pgbadger --prefix '%t [%p]: user=%u,db=%d,client=%h'  /pglog/postgresql-2012-08-21*
pgbadger --prefix '%m %u@%d %p %r %a : '  /pglog/postgresql.log

# Log line prefix with syslog log output
pgbadger --prefix 'user=%u,db=%d,client=%h,appname=%a' /pglog/postgresql-2012-08-21*

# 使用 8颗 CPUs 分析我的大日志文件(会更快)
pgbadger -j 8 /pglog/postgresql-10.1-main.log

# 分析远程
pgbadger ssh://username@172.12.110.14:2222//var/log/postgresql/postgresql-10.1-main.log*
pgbadger http://172.12.110.1//var/log/postgresql/postgresql-10.1-main.log
pgbadger ftp://username@172.12.110.14/postgresql-10.1-main.log

# 分析本地+远程
pgbadger  /var/log/postgresql/postgresql-10.1-main.log  ssh://username@172.12.110.14/pgbouncer.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/
# 指定保持增量报告数2个
/usr/bin/pgbadger --retention 2 -I -q /var/log/postgresql/postgresql.log.1  -O /var/www/pg_reports/

4 一般用法

前面看了那么多,其实一般用不上,实际使用很简单
默认情况下,增量模式下的 pgBadger 仅计算每日和每周报告。如果你想要每月累积报告,则必须使用单独的命令来指定要构建的报告,如下:

# 生成日报与周报
# -o 可以指定文件名:index.html,-O 不需要指定文件名,默认是:index.html,其他一样
[root@v-192-168-11-75-pg ~]# pgbadger  -I  -o /root/pg_report/index.html  /usr/local/pgsql/data/log/postgresql-2023-04-25_110000.csv
[root@v-192-168-11-75-pg ~]# pgbadger  -I  -O /root/pg_report             /usr/local/pgsql/data/log/postgresql-2023-04-25_110000.csv
[========================>] Parsed 31353599 bytes of 31353599 (100.00%), queries: 137495, events: 719
LOG: Ok, generating HTML daily report into /root/pg_report/2023/04/25/...
Wide character in print at /usr/local/bin/pgbadger line 12495.
Wide character in print at /usr/local/bin/pgbadger line 12751.
LOG: Ok, generating HTML weekly report into /root/pg_report//2023/week-18/...
Wide character in print at /usr/local/bin/pgbadger line 12495.
Wide character in print at /usr/local/bin/pgbadger line 12751.
LOG: Ok, generating global index to access incremental reports...
[root@v-192-168-11-75-pg ~]# 
[root@v-192-168-11-75-pg ~]# ll  pg_report/
总用量 692
drwxr-xr-x 4 root root     31 427 21:53 2023
-rw-r--r-- 1 root root 701560 427 21:54 index.html
-rw-r--r-- 1 root root    230 427 21:53 LAST_PARSED
[root@v-192-168-11-75-pg ~]# ll  pg_report/2023/
总用量 0
drwxr-xr-x 3 root root 34 427 21:53 04
drwxr-xr-x 2 root root 24 427 21:53 week-18
[root@v-192-168-11-75-pg ~]# ll  pg_report/2023/week-18/
总用量 1844
-rw-r--r-- 1 root root 1885513 427 21:53 index.html

# 生成月报
[root@v-192-168-11-75-pg ~]# pgbadger -I --month-report 2023-04  /root/pg_report
WARNING: --rebuild require incremental mode, activating it.
LOG: Ok, generating HTML monthly report into /root/pg_report/2023/04/index.html
Wide character in print at /usr/local/bin/pgbadger line 12495, <DATA> line 122.
Wide character in print at /usr/local/bin/pgbadger line 12751, <DATA> line 122.
LOG: Ok, generating global index to access incremental reports...
[root@v-192-168-11-75-pg ~]# 
[root@v-192-168-11-75-pg ~]# ll  pg_report/2023/04/
总用量 1844
drwxr-xr-x 2 root root      52 427 21:53 25
-rw-r--r-- 1 root root 1885068 427 21:54 index.html       #-- 这是`pgbadger -I --month-report 2023-04  /root/pg_report`生成的

这样/root/pg_report目录里就生成了日报、周报、月报,将其放到网站目录,供开发等相关人员查看

5 这么用吧

# env
PGBADGER_HOME='/root/pgbadger_report'
PGBADGER_REPORT_PATH="${PGBADGER_HOME}/pg_report"
# postgresql日志文件目录(postgresql-*.csv)
PG_LOG_PATH='/usr/local/pgsql/data/log'
# 一般会把生成的报告文件拷贝到某web网站目录下,共开发人员查看
DEST_CP_PATH='root@192.168.11.77:/srv/web_sites/dev-build-log.zjlh.lan'


# 日报,周报
echo "开始时间:`date`"
${PGBADGER_CMD}  -q -I  -O ${PGBADGER_REPORT_PATH}  ${PG_LOG_PATH}/postgresql-*.csv
echo "结束时间:`date`"


# 月报
if [[ $(date +%d) == 1 ]]; then
    PRE_MONTH=$(date -d '1 months ago' +%Y-%m)
    ${PGBADGER_CMD}  -q -I  --month-report ${PRE_MONTH}  ${PGBADGER_REPORT_PATH}
    echo "月报完成:`date`"
fi

# cp
rsync -r  ${PGBADGER_REPORT_PATH}  ${DEST_CP_PATH}/

6 用不上的参数

百度翻译:

-a|--average minutes:构建的平均图形的分钟数查询和连接。默认为5分钟。
-A|--直方图平均分钟数:构建直方图的分钟数查询数。默认60分钟。
-b|--开始日期时间:日志中要解析的数据的开始日期/时间(时间戳或时间)
-c|--dbclient主机:仅报告给定客户端主机的条目。
-C|--nocomment:删除像/*…*/这样的注释来自查询。
-d|--dbname数据库:仅报告给定数据库的条目。
-D|--dns解析:客户端ip地址被其dns名称替换。请注意,这确实会减慢pgBadger的速度。
-e|--结束日期时间:日志中要解析的数据的结束日期/时间(时间戳或时间)
-E|--爆炸:通过生成一个报告来爆炸主报告每个数据库。与a无关的全局信息数据库被添加到postgres数据库报告中。
-f|--format logtype:可能的值:syslog、syslog2、stderr、jsonlog、,cvs、pgbouncer、logplex、rds和红移。使用此pgBadger无法检测日志时的选项总体安排
-G|--nograph:禁用HTML输出上的图形。默认情况下已启用。
-h|--help:显示此消息并退出。
-H|--html outdir路径:必须写入html报告的目录的路径在增量模式下,二进制文件保留在目录中使用-O,--outdir选项定义。
-i|--ident-name:用作系统日志ident的程序名。默认值:postgres
-I|--incremental:使用增量模式,报告将由在一个单独的目录中,必须设置--outdir。
-j|--作业数:要同时运行的作业数。以单身身份运行默认情况下或使用csvlog时。
-J|--作业数:要并行解析的日志文件数。流程一默认情况下或使用csvlog时的文件。
-l|--最后解析的文件:通过注册最后解析的日期时间和行。如果你想要的话很有用查看自上次运行以来的错误,或者如果需要每天报告,每周轮换一次日志。
-L|--日志文件列表文件:包含要解析的日志文件列表的文件。
-m|--maxlength size:查询的最大长度,限制为给定的大小。默认截断大小为100000。
-M|--no multiline:不收集多行语句以避免垃圾尤其是在生成大量报告的错误上。
-n|--nohighlight:禁用SQL代码高亮显示。
-N|--appname名称:仅报告给定应用程序名称的条目
-o|--outfile文件名:定义输出的文件名。默认取决于输出格式:out.html、out.txt、out.bin,out.json或out.tsung。可以使用此选项多次输出多种格式。使用json输出必须安装的Perl模块JSON::XS,要将输出转储到stdout,请使用-as文件名。
-O|--outdir路径:必须保存out文件的目录。
-p|--前缀字符串:自定义log_line_prefix的值为在postgresql.conf中定义。只有在没有使用指定的标准前缀之一在pgBadger文档中,例如如果前缀包括其他变量,如客户端ip或应用程序名称。请参阅以下示例。
-P|--no pretify:禁用SQL查询pretify格式化程序。
-q |--quiet:不要将任何内容打印到stdout,甚至不要打印进度酒吧
-Q |--查询编号:使用时将查询编号添加到输出中选项--转储所有查询或--仅规范化。
-r |--远程主机ip:设置执行cat命令的主机远程日志文件以在本地解析文件。
-R|--保留时间N:在增量模式下保留的周数。违约到0,已禁用。用于将周数设置为保存在输出目录中。较旧的周数和天数目录被自动删除。
-s|--sample number:要存储的查询样本数。默认值:3。
-S|--仅选择:仅报告select查询。
-t|--top number:要存储/显示的查询数。默认值:20。
-T|--标题字符串:更改HTML页面报表的标题。
-u |--dbuser username:仅报告给定用户的条目。
-U|--排除用户用户名:从中排除指定用户的条目汇报可以多次使用。
-v|--verbose:启用详细或调试模式。默认情况下已禁用。
-V|--version:显示pgBadger版本并退出。
-w|--watch模式:只能像logwatch那样报告错误。
-W|--wide char:将查询的html输出编码为UTF8以避免Perl消息“打印中的宽字符”。
-x|--扩展名:输出格式。值:text、html、bin、json或tsung。默认值:html
-X|--额外文件:在增量模式下,允许pgBadger编写CSS和输出目录中的JS文件作为单独的文件。
-z|--zcat exec_path:设置zcat程序的完整路径。如果zcat、bzcat或unzip不在您的路径上。
-Z|--时区+/-XX:设置时区从GMT开始的小时数。使用此选项可以调整JavaScript图形中的日期/时间。
--饼图限制num:低于num%的饼图数据将显示总和。
--排除查询正则表达式:任何与给定正则表达式匹配的查询都将被排除来自报告。例如:“^(真空|COMMIT)”您可以多次使用此选项。
--exclude file filename:包含所有正则表达式的文件的路径用于从报表中排除查询。一个正则表达式每行。
--包括查询正则表达式:任何与给定正则表达式不匹配的查询都将被排除在报告之外。你可以使用这个选项多次。例如:“(tbl1 | tbl2)”。
--include file filename:包含的所有正则表达式的文件的路径要从报告中包括的查询。一个正则表达式每行。
--禁用错误:不生成错误报告。
--禁用小时:不生成小时报告。
--禁用类型:不按类型、数据库生成查询报告或用户。
--禁用查询:不生成查询报告(最慢、最多频繁、按用户、按数据库查询…)。
--禁用会话:不生成会话报告。
--禁用连接:不生成连接报告。
--禁用锁定:不生成锁定报告。
--禁用临时:不生成临时报告。
--禁用检查点:不生成检查点/restartpoint报告。
--禁用自动真空:不生成自动真空报告。
--charset:用于设置要使用的HTML字符集。默认值:utf-8。
--csv分隔符:用于设置csv字段分隔符,默认值:,
--排除时间正则表达式:任何与给定正则表达式匹配的时间戳都将是排除在报告之外。示例:“2013-04-12.*”您可以多次使用此选项。
--包含时间正则表达式:只有与给定正则表达式匹配的时间戳才会包括在报告中。示例:“2013-04-12.*”您可以多次使用此选项。
--exclude数据库名称:从中排除指定数据库的条目汇报示例:“pg_dump”。可以多次使用时间
--exclude-appname名称:排除指定应用程序名称的条目来自报告。示例:“pg_dump”。可以使用多次。
--排除行regex:pgBadger将开始排除任何将匹配给定的正则表达式。可以多次使用时间
--排除客户端名称:排除指定客户端ip的日志条目。可以多次使用。
--匿名化:隐藏查询中的所有文字,非常有用机密数据。
--noreport:阻止pgBadger以增量方式创建报告模式
--日志持续时间:强制pgBadger关联生成的日志条目通过log_duration=on和log_statement='all'
--enable checksum:用于在每个查询报表下添加一个md5 sum。
--journalctl命令:用于替换PostgreSQL日志文件的命令对journalctl的调用。基本上可能是:日志ctl-u postgresql-9.5
--pid目录路径:设置必须存储pid文件的路径。默认/tmp
--pid文件文件:设置pid文件的名称以管理并发执行pgBadger。默认值:pgbadger.pid
--rebuild:用于以增量方式重新生成所有html报表存在二进制数据文件的输出目录。
--仅限pgbouncer:仅在标题中显示与pgbouncer相关的菜单
--星期一开始:在增量模式下,日历的星期从开始星期天。使用此选项可以在星期一开始。
--iso周数:在增量模式下,日历的周数从星期一,并遵守ISO 8601周数,范围01至53,其中第1周为在新的一年中至少有4天。
--仅规范化:仅将所有规范化查询转储到out.txt
--日志时区+/-XX:设置时区从GMT开始的小时数必须用于调整读取的日期/时间解析之前的日志文件。使用此选项使用日期/时间进行更困难的日志搜索。
--pretify-json:如果您想对json输出进行pretify,请使用它。
--月份报告YYYY-MM:在指定的时间内创建累积HTML报告月需要增量输出目录和存在所有必要的二进制数据文件
--日期报告YYYY-MM-DD:在指定的日期创建一个HTML报告。需要增量输出目录和存在所有必要的二进制数据文件
--noexplain:不处理auto_explain生成的行。
--命令CMD:要执行以检索上的日志项的命令标准输入。pgBadger将打开一个到命令的管道并解析由该命令生成的日志条目。
--无周:通知pgbadger不要在中构建周报增量模式。如果花费太多时间,会很有用。
--解释url url:使用它来覆盖图形解释的url 工具违约:http://explain.depesz.com/?is_public=0&is_anon=0&plan=
--tempdir DIR:设置写入临时文件的目录默认值:文件::Spec->tmpdir()||'/tmp'
--无进程信息:禁止更改进程标题以帮助识别pgbadger进程,有些系统不支持它。
--转储所有查询:转储在日志文件中找到的所有查询替换绑定参数包含在的查询中它们各自的占位符位置。
--保留注释:不要从规范化查询中删除注释。它如果你想区分相同的规范化查询。
--无进度条:禁用进度条。

7 最后

爱你!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值