最近线上pg 频繁出现性能问题,而zabbix和grafana 上的监控又不够详细。最后结合前期自己写了很多监控脚本,把问题解决了。虽然自己用起来没问题,但是只能在出问题的时候现场抓。抓到后研发又一种不信任的表情。但是还是感觉缺点什么。于是在网上搜索了一下有没有更好的解决方法(研发喜欢曲线。哈哈)。于是发现 pgcluu。
source安装
wget https://github.com/darold/pgcluu/archive/v2.9.zip
unzip v2.9.zip
[root@vlnx107002 ~]# cd pgcluu-2.9/
[root@vlnx107002 ~]#perl Makefile.PL
[root@vlnx107002 ~]#make && make install
用 postgres账号安装如下:
[zhaowz@vlnx000129 ~]$ pgcluu_collectd -D -Q -i 60 /tmp/stat_db1/ -h vlnx050001.xxxx.cn -Uzhaowz -d postgres
pgcluu_collectd -D -i 60 /tmp/stat_db1/ -h vlnx050001.xxxx.cn -Uzhaowz -d postgres --disable-sar --exclude-time "10:00-11:00"
mkdir /tmp/stat_db1/
pgcluu_collectd -D -i 10 /tmp/stat_db1/
pgcluu_collectd -k
mkdir /tmp/report_db1/
pgcluu -o /tmp/report_db1/ /tmp/stat_db1/
====================================================================================
如果安装时报错
-bash-4.2$ perl Makefile.PL
Can't locate ExtUtils/MakeMaker.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at Makefile.PL line 1.
BEGIN failed--compilation aborted at Makefile.PL line 1.
解决方法
yum install perl-ExtUtils-MakeMaker -y
pgcluu_collectd用法
用法:pgcluu_collectd [options] output_dir
output_dir:pgcluu_collectd所在目录的完整路径统计。
选项:
-B, - enable-buffercache启用buffakache统计信息,如果pg_buffercache扩展已安装。
-c, - capture创建PostgreSQL安装的快照进入tmp / pgcluu_capture.tar.gz。
-C, - end-counter = NUM??报告后终止程序。
-d, - dbname =要连接的DATABASE数据库名称。默认为当前用户。
-D, - damonmonize从控制台分离并进入守护进程模式。
-E, - end-after =在给定的秒数后自动终止程序。
可以写成:7200或120M或2H,连续几天使用7D七天后停止收集数据的示例。
-f, - pid-file = pid文件的FILE路径。默认值:/tmp/pgcluu_collectd.pid。
-h, - host = HOSTNAME数据库服务器主机或套接字目录
-i, - interval =运行之间等待的NUM次
-k, - kill停止当前运行守护进程的pgcluu_collectd。
-m, - metric = METRIC设置要执行的指定的逗号分隔列表。
-M, - max-size = SIZE自动终止程序时输出dir的大小超过给定的大小。可写:2GB或2000MB。
-p, - port =要连接的PORT数据库端口。默认为5432。
-P, - psql = psql命令的BIN路径。默认值:psql。
-Q, - no-statement 不从pg_stat_statements收集查询统计信息。
-r, - rotate-daily 强制数据文件的每日轮换。
-R, - rotate-hourly强制每小时旋转数据文件。
-s, - sar = sar sysstat命令的BIN路径。默认值:sar。
-S, - disable-sar禁用使用sar收集系统统计信息。
-T, - notablespace禁用在连接用户时在表空间查找不是超级用户,以避免打印错误消息。
-U, - dbser = USERNAME数据库用户连接为。默认为当前用户。
-v, - verbose打印出调试信息。
-V, - version显示pgcluu_collectd版本并退出。
-W, - password =传递数据库密码。
-z, - 压缩旋转数据文件的压缩。
--included-db = DATABASE仅收集存在的数据库的统计信息在逗号分隔的数据库名称列表中。
--list-metric列表可以执行的度量标准操作。
--sysinfo获取操作系统信息并退出(sysinfo.txt)。
--no-sysinfo根本不收集操作系统信息。
--no-database根本不收集数据库统计信息。
--pgbouncer-args = OPTIONS用于连接到pgbouncer系统的选项
数据库。例如:-p 6432 -U postgres -h 192.168.1.100
您必须至少提供一个参数才能启用pgbouncer监控。
--sar-file = sysstat stats的sar输出数据文件的FILE路径默认为output_dir / sar_stats.dat。
--stat-type all | user设置要读取的统计表。值:'all'或'user'to看看pg_stat_(所有用户)表。默认值:用户。
--pgversion XY强制PostgreSQL版本为给定值。
--pgservice NAME pg_service.conf文件中的服务名称。
--exclude-time RANGE通过给出开始和结束排除一段时间小时。
--package-list = CMD命令列出PostgreSQL包。默认是
自动检测包类型并使用命令'rpm -qa'或'dpkg -l'。如果你有其他系统,你可以
设置自定义命令。关键字'postgres'的过滤器附加到命令:'| grep postgres'。
- 保留NDAYS保存在数据目录中的滚动天数增量模式。默认是无限期存储。
使用这些选项在-h定义的远程主机上执行sar选项,否则将在本地执行:
--enable-ssh激活使用ssh远程运行sysstat。
--ssh-program ssh要使用的ssh程序的路径。默认值:ssh。
--ssh-user用户名连接登录名。默认为运行用户。
--ssh-identity要使用的标识文件的文件路径。
--ssh-timeout ssh连接失败的第二次超时。默认10秒。
--ssh-options选项用于ssh连接的-o选项列表。选项
总是使用:
-o ConnectTimeout = $ ssh_timeout
-o PreferredAuthentications = hostbased,publickey
pgcluu
旋转和压缩
使用--rotate-daily或--rotate-hourly命令行选项时将强制pgcluu_collectd每天或每小时轮换所有统计信息文件。在这种情况下,统计文件将在子目录中创建基于旋转频率,output_dir /年/月/日[/小时]。这是称为增量模式。
为了节省文件系统空间,可以启用所有压缩在旋转过程中旋转文件。只需激活-z或-compress命令行选项。您还可以使用--retention选项以天为单位设置存储时间限制。
增量模式
当--rotate-daily或--rotate-hourly命令行启用此模式使用选项。它允许pgcluu按天递增地构建报告或小时。在此模式下,您无需每天或每小时构建报告pgcluu会自动完成工作,只需给它顶级统计数据目录。
pgcluu -o / var / www / pgcluu / reports / / var / lib / pgcluu / data /
pgcluu将检测到--rotate-daily或--rotate-hourly已被使用 收集数据并生成存储的每一天或每小时的报告。已处理的先前目录不会再次处理除非这是最后一个。
每日或每小时的统计存储也允许使用CGI脚本pgcluu.cgi具有动态报告和时间搜索。看到“使用动态模式”一章。
使用--rotate-daily或--rotate-hourly命令行选项时将强制pgcluu_collectd每天或每小时轮换所有统计信息文件。在这种情况下,统计文件将在子目录中创建基于旋转频率,output_dir /年/月/日[/小时]。这是称为增量模式。
为了节省文件系统空间,可以启用所有压缩在旋转过程中旋转文件。只需激活-z或--compress命令行选项。您还可以使用--retention选项以天为单位设置存储时间限制。
捕捉模式
此模式的目标是能够获得有关的简单报告PostgreSQL安装没有收集其他指标而不是数据库和表空间大小。IT可以使用此报告来更好地理解配置和需要调整的事情。
要启用此模式,只需使用单个选项-c运行pgcluu_collectd或 - 捕获。其他命令行选项将不会被考虑在内。pgcluu_collectd将创建一个临时目录/ tmp / pgcluu_capture存储临时数据,如果构建压缩tar后将被删除
存档:/tmp/pgcluu_capture.tar.gz。这可以是这个档案与pgcluu一起使用来构建实例的快照报告。pgcluu会自动检测此模式。
生成报告
静态HTML报告
要生成有关PostgreSQL群集的pgCluu报告,您必须在至少,有一个包含生成的所有数据文件的目录pgcluu_collectd或pgstats。在此目录中,如果您有一个名为的文件sar_stats.dat或sadc_stats.dat用于二进制sadc数据文件,它将是用于构建有关系统利用率的报告。如果你只是想做来自sar文件的报告使用-i或-I选项。
用法:pgcluu [options] [-i sar_file | -I sadc_file] [input_dir]
input_dir:pgcluu_collectd或pgstats和sar数据的目录文件存储。
options:
-b, --begin datetime start date/time for the data to be parsed.
开始日期/时间,用于解析数据。
-C, --cache generate cache files only (.bin), no html output.
只生成缓存文件(.bin),没有html输出。
-d, --db-only dbname only report for the whole cluster and the given database name. You can use it multiple time orgive a comma separated list of database name.
only报告整个群集和给定的数据库名称。您可以多次使用它或分隔逗号数据库名称列表。
-D, --device-only dev only report I/O stats for a particular device You can use it multiple time or give a commaseparated list of device name, ex: sda,sdc.
仅报告的I / O统计信息特定设备您可以多次使用它或分隔逗号设备名称列表,例如:sda,sdc
-e, --end datetime end date/time for the data to be parsed.
结束日期/时间 要解析的数据。
-i, --sar-file=FILE path to the sar text data file to read to generate system reports. Default to input_dir/sar_stats.dat.
sar文本数据的FILE路径要读取的文件以生成系统报告。默认为input_dir / sar_stats.dat。
-I, --sadc-file=FILE sadc binary data file to read to generate system reports. Default to input_dir/sadc_stats.dat.
sadc二进制数据文件到读取以生成系统报告。默认为input_dir / sadc_stats.dat。
-n, --top-number Top number of tables or indexes I/O stats to show. Default is set to top 10. Set it to 0 to show all.
要显示的表或索引I / O统计信息的最大数量。默认设置为顶部10.将其设置为0以显示全部。
-N, --network-only iface only report stats for a particular network interface. You can use it multiple times or give a comma separatedlist of network interfaces, ex: eth0,eth1.
仅限网络iface仅报告特定网络接口的统计信息。您可以使用它多次或给出逗号分隔的网络接口列表, 例如:eth0,eth1。
-o, --output=DIR output directory
DIR输出目录
-r, --reverse-date By default pgcluu look at mm/dd/yy format in sar file.When enabled pgcluu will look at dd/mm/yy format.
By默认pgcluu在sar文件中查看mm / dd / yy格式。启用pgcluu时将看dd / mm / yy格式。
-s, --sadf=BIN path to the sadf sysstat command used to read the sadc binary data file. Default: /usr/bin/sadf.
sadf sysstat的BIN路径用于读取sadc二进制数据文件的命令。默认值:/ usr / bin / sadf。
-S, --disable-sar disable collect of system statistics with sar.
禁用使用sar收集系统统计信息
-t, --with-table table Only report for the whole tables and the giventable name. You can use it multiple time orgive a comma separa ted list of database name.
仅报告整个表和给定的表名称。您可以多次使用它或者以逗号分隔列表数据库名称。
-T, --no-table Do not report statistics related to tables.
不报告与之相关的统计信息表
-z, --timezone +/-XX Set the number of hour(s) from GMT of the timezone. Use this to adjust date/time from the sar output,pgcluu use GMT time to draw charts.
设定小时数来自时区的GMT。用它来调整sar的日期/时间输出,pgcluu使用GMT时间绘制图表。
-Z, --stats-timezone +/-XX Set the number of hour(s) from GMT of the timezone. Use this to adjust date/time from the cluster andsystem stats output, pgcluu use GMT time.
设置时区GMT的小时数。用它来调整 从集群和系统统计信息输出的日期/时间,pgcluu使用GMT时间
--from-sa-file instruct pgcluu that file specified by the -i optionuses the standard system activity daily data file.
设置时区GMT的小时数。用它来调整 从集群和系统统计信息输出的日期/时间,pgcluu使用GMT时间
--charset used to set the HTML charset to be used.Default: utf-8.
用于设置要使用的HTML字符集。默认值:utf-8
例如,您可以从存储的数据文件生成所有HTML报告 使用以下命令进入/ tmp / stat_db1 /:
mkdir / tmp / report_db1 /
pgcluu -o / tmp / report_db1 // tmp / stat_db1 /
如果您只想要某些数据库的报告,请使用以下命令:
pgcluu -o / tmp / report_db1 // tmp / stat_db1 / --db-only“db1,db2,db3”
如果您只想从sar输出文件创建报告:
sar -p -A 10 60> /root/my_sar_file.txt
pgcluu -o / tmp / report_sar / -i /root/my_sar_file.txt
或者来自每日sa文件:
sar -p -A -f / var / log / sa / sa18> /root/my_sar_file.txt
pgcluu -o / tmp / report_sar / -i /root/my_sar_file.txt --from-sa-file
从一个二进制文件:
pgcluu -o / tmp / report_sar / -i / var / log / sysstat / sa22
如果您没有相同版本的sysstat,请使用sa文本文件:
pgcluu -o / tmp / report_sar / -i / var / log / sysstat / sar23 --from-sa-file
如果pgcluu_collectd已在增量模式下运行,则可以限制报告使用的保留天数:
pgcluu -o / tmp / report_sar / / tmp / stat_db1 / --retention 30
将在每天或每小时之后构建静态报告与pgcluu_collectd一起使用的旋转。
动态报告(CGI)
动态报告由名为pgcluu.cgi的CGI脚本构建,可以是在源代码的cgi-bin存储库中找到。它允许你选择构建报告的时间段并查看所有不同的时间段与静态HTML报告一样,报告此期间。后
从源代码或二进制包安装CGI可能会找到/usr/lib/cgi-bin/pgcluu.cgi或/var/www/cgi-bin/pgcluu.cgi以下你的发行。
要在CGI模式下使用pgCluu,您需要一个Web服务器(这里我们使用Apache)以及定期构建缓存的cron任务。
首先启用CGI模式。
sudo a2enmod cgi
sudo service apache2 restart
然后CGI需要找到pgcluu_collectd所在的统计目录主要是/ var / lib / pgcluu / data /。该存储库的内容必须是可由Apache用户读取(www-data)。
注意限制对服务器和CGI的访问作为信息关于您的数据库和服务器在报告中公开。
CGI脚本pgcluu.cgi使用资源文件(CSS和javascript)。它们存储在源的cgi-bin / rsc /目录中分配。将此存储库安装到Web的DocumentRoot上服务器,例如:
sudo mkdir / var / www / pgcluu /
sudo cp -rf cgi-bin / rsc / var / www / pgcluu /
然后编辑/etc/pgcluu.conf,从cgi-bin / pgcluu.conf来源复制它它不存在。更改RSC_BASE和INPUT_DIR配置指令以匹配您的安装。在我们的示例中:
RSC_BASE / pgcluu / rsc /
INPUT_DIR / var / lib / pgcluu / data
现在我们可以开始数据收集了。目前pgcluu.conf只是由CGI pgcluu.cgi阅读,但这可能在将来发生变化。
要让pgCluu开始收集数据,您可以使用以下命令(你可以随意更改它)。我们需要postgres用户这个。
sudo su - postgres
/ usr / local / bin / pgcluu_collectd -D -i 60 --rotate-daily / var / lib / pgcluu / data
这将每天轮换您的数据。这也是systemd中的默认值服务文件。
将CGI直接插入CSV统计文件将导致非常缓慢的一代报道。为了提高速度,必须使用缓存必须在缓存模式下定期执行pgcluu。手动运行它第一次
/ usr / local / bin / pgcluu --cache / var / lib / pgcluu / data
然后添加一个cron任务,每隔五或十分钟执行一次命令:
* / 5 * * * * / usr / local / bin / pgcluu --cache / var / lib / pgcluu / data
如果您使用的是systemd pgcluu.timer服务,则可以使用缓存使用STATS_REPORT_CACHING指令启用。启用此模式在statistics目录中生成缓存文件(* .bin)并禁用静态HTML报告生成。
要查看报告,请转到以下网址:
HTTP://localhost/cgi-bin/pgcluu.cgi
或者使用您的fqdn服务器名称更改localhost。请注意,这里有pgcluu_collectd和pgcluu脚本 / usr / local / bin /这是源安装的默认设置但是从二进制包安装后你可能会发现它们在/ usr / bin /中。
CGI模式允许您选择用于生成的时间段统计报告。使用默认的pgcluu_collectd 60秒间隔,a每日图表将有1440点。有太多的时间序列来渲染对于表演不是一个好点,所以我们限制第一个
选定期限的七天。这意味着最多10080点一个星期,这似乎是一个安全的限制。随意增加或减少服务器和客户端资源之后的限制。这是受控制的通过
MAX_RENDERED_DAYS 7
pgcluu.conf中的配置指令