文章目录
- 前言
- 一、什么是 pgCluu
- 二、pgCluu的安装流程
- 静态模式
- 动态模式
- 三、pgCluu的用法
- pgCluu 用法
- pgCluu_collectd 用法:
- 四、pgCluu的实操分享
- 实操示例一:
- 实操示例二:
前言
PostgreSQL 的监控方法很多,数量越来越多的 PG 的监控再通过手工的方法来操作已经不切实际,所以应允而生的就是各种的工具。本期跟大家分享一个性能监控和审计的实用工具——pgCluu 。
一、什么是 pgCluu
pgCluu 是一个用于对 PostgreSQL 集群的性能进行全面审计的工具。
它分为两部分,一个用于使用 psql 和 sar 获取 PostgreSQL 服务器上的统计信息的 collector;以及一个 reports builder,用于生成所有 HTML 和图表输出
它的优点是开源免费,使用灵活,适合定期数据库信息分析,适合二次开发;缺点是非实时监控,不支持慢查询。
二、pgCluu的安装流程
pgCluu报告生成器基本操作默认输出静态html及图表,动态模式需配合Apache服务器。
静态模式
- 前置依赖
perl环境 perl -v查看当前是否有perl环境。
yum install perl-ExtUtils-MakeMaker
wget https://github.com/darold/pgcluu/archive/refs/heads/master.zip
unzip master.zip
cd pgcluu-master/
perl Makefile.PL
make
sudo make install
cp -f cgi-bin/pgcluu.cgi /var/www/cgi-bin/
动态模式
如需启用动态模式,需配置Web服务器官方样例提供 Apache的cgi 模式。
1. 前置依赖
yum install perl-CGI
2. apache 安装部署过程:
yum install httpd
systemctl enable httpd
service httpd start
3. 修改 /etc/httpd/conf/httpd.conf
LoadModule cgid_module modules/mod_cgid.so
<Directory "/var/www/cgi-bin">
AllowOverride None
Options ExecCGI
Require all granted
Allow from all
</Directory>
AddHandler cgi-script .cgi
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
//加入pgcluu相关配置,当前目录为项目根目录
sudo mkdir /var/www/html/pgcluu/
sudo cp cgi-bin/pgcluu.cgi /var/www/cgi-bin/
sudo cp -rf cgi-bin/rsc/ /var/www/html/pgcluu/
sudo chown -R apache: /var/www/html/pgcluu/
//修改文件权限
/bin/chown -R postgres:apache /var/lib/pgcluu/data/
/bin/chmod -R u=rwX,g=rsX,o= /var/lib/pgcluu/data/
//创建定时任务
crontab -e
*/5 * * * * /usr/local/bin/pgcluu --cache /var/lib/pgcluu/data
// 修改pgcluu.cgi文件17行,将此行注释(否则会报错cgi-error)
// no warnings 'redundant';
三、pgCluu的用法
pgCluu 用法
用法:pgcluu [options] -o report_dir input_dir
input_dir:存放 pgcluu_collect d或 pgstats 和 sar 数据文件的目录。
注:sar 为 Linux 系统性能分析工具
pgstats 为由 pg_statistic 系统表扩展而来的系统视图,记录的是每个表每个字段的统计信息,用于 PostgreSQL 优化器做执行计划选择的时候提供参考。
可选项较多,这边只说明常用项:
更多可选项,可执行 pgcluu --help 查看。
- 使用示范
1. 以存储的数据生成静态报告:
mkdir /tmp/report_db1/
pgcluu -o /tmp/report_db1/ /tmp/stat_db1/
2. 只想要指定数据库的报告,可使用以下方式:
pgcluu -o /tmp/report_db1/ /tmp/stat_db1/ --db-only "db1,db2,db3"
3. 从sar输出文件导出报告,可使用以下方式:
sar -p -A 10 60 > /root/my_sar_file.txt
pgcluu -o /tmp/report_sar/ -i /root/my_sar_file.txt
4. 从 pgstats 生成的 sa 二进制文件导出报告:
pgcluu -o /tmp/report_sar/ -i /var/log/sysstat/sa22
5. 报告以增量模式运行,可限制报告保留天数:
pgcluu -o /tmp/report_sar/ /tmp/stat_db1/ --retention 30
pgCluu_collectd 用法:
用法:pgcluu_collectd [options] output_dir
output_dir:pgcluu_collectd 存储统计信息的目录的完整路径
可选项较多,这边只说明常用项:
更多可选项,可执行 pgcluu_collectd --help 查看。
- 使用示范
1.作为 postgres 用户在本地监控完整的 PostgreSQL 集群;
mkdir /tmp/stat_db1/
pgcluu_collectd -D -i 60 /tmp/stat_db1/
2. 排除指定时间段(22:30到第二天06:30)内的数据收集;
pgcluu_collectd -D -i 60 /tmp/stat_db1/ --exclude-time "22:30-06:30"
3. 从远程服务器收集数据:
pgcluu_collectd -D -i 60 /tmp/statdb1/ -h 10.0.0.1 -U postgres --disable-sar
经过以上-D后台监控数据库一段时间后,通过一下方式终止程序:
pgcluu_collectd -k
可以每日或每小时,统计轮换以增量模式运行收集器:
pgcluu_collectd -D -i 60 /tmp/stat_db1/ --rotate-daily
- 在有大量活动的数据服务上,可使用:
–compress 选项的压缩模式
–rotate-hourly 强制每小时轮换数据文件
- 如果磁盘空间有限,可使用:
–retention 存储天数限制,来限制统计文件的保留时间
收集完成后的统计数据如下图:
接下来,使用pgCluu根据数据生成报告。
四、pgCluu的实操分享
实操示例一:
使用 GaussDB 用户监控 10.3.70.206 数据库服务的指定数据库 Postgres,监控200秒,30秒获取一次数据。
Mkdir -p /tmp/stat_postgres/
pgcluu_collectd -E 200 -i 30 /tmp/stat_postgres/ -h 10.3.70.206 -U gaussdb -W Enmo@123 -p15432 -d postgres
效果如下,会生成一系列监控数据 csv 文件 ⬇
# 将监控数据转换为html格式输出到指定目录
pgcluu -o /tmp/stat_postgres/ /tmp/stat_postgres/
效果如下,会根据 pgcluu_collectd 生成的 csv 数据文件,将数据转换为 html 静态文件 ⬇
通过入口文件 index.html 进入,可以查看到一系列监控指标数据。
数据库统计数据 ⬇
上述方法是针对 PostgreSQL 中收集信息,也就是说我们可以建立一个监控服务器,然后收集是所有的PG的信息到一台机器,然后开始分析,做成全面自动化的方案,具体可依据个人的需求来操作。
实操示例二:
动态CGI模式监控 10.11.xxx.xx 机器的PostgreSQL ,5432端口,并开启ssh获取机器系统信息。
/usr/local/bin/pgcluu_collectd -D -i 30 -I /var/lib/pgcluu/data/ -h 10.11.xxx.xx -U postgres -W 123456 -p5432 --enable-ssh --ssh-user postgres --ssh-identity /var/lib/pgsql/.ssh/id_rsa /var/lib/pgcluu/data
crontab -e
*/5 * * * * /usr/local/bin/pgcluu --cache /var/lib/pgcluu/data
最终效果如下 ⬇
- 注意事项
采集远程系统信息,需配置 ssh 认证免密登录,且为 Postgres 用户,参数如下:
--enable-ssh --ssh-user postgres --ssh-identity /var/lib/pgsql/.ssh/id_rsa
注意 ssh-identity 传递的是 id_rsa ,不是 id_rsa.pub 。
最终效果如下 ⬇
以上就是本期的全部内容。我们很详细的跟大家讲解了 pgCluu 的安装过程,使用方法和实际应用,有机会可以尝试操作体验一次。