-
Notifications
You must be signed in to change notification settings - Fork 44
/
README
743 lines (587 loc) · 34 KB
/
README
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
NAME
pgCluu - PostgreSQL Cluster utilization
DESCRIPTION
pgCluu is a PostgreSQL performance monitoring and auditing tool.
It is a Perl program used to perform a full audit of a PostgreSQL
Cluster and System performance. It is divided in two parts:
- A collector used to grab statistics on the PostgreSQL cluster using
the psql command line utility and sar from the sysstat package.
- A pure Perl grapher that will generate all HTML and charts output
without any requirements.
If you don't need system utilization reports or don't want to install
the sysstat package, you can disable it at command line. You will only
have reports about your PostgreSQL Cluster. If you are running pgCluu
from a central server using option -h to monitor remotely a PostgreSQL
Cluster, the call to sar is automatically disabled.
If you just want to have system utilization reports or generate graphs
from a sar data file, it's also possible.
SYNOPSIS
PostgreSQL and System metrics collector.
pgcluu_collectd [options] output_dir
Report generator.
pgcluu [options] -o report_dir input_dir
REQUIREMENT
pgCluu comes with two Perl scripts. You need a modern Perl distribution,
the psql client and the sar command line utility (sysstat). The sysstat
package is optional, you can still use pgCluu to generate reports about
your PostgreSQL Cluster without it.
Charts are rendered using a Javascript library so you don't need
anything else. Your browser will do all the work.
INSTALLATION
Installation from package
Installation of pgCluu can be done through the PostgreSQL Global
Development Group (PGDG) repositories. See how to install the PGDG
repositories at the following URLs for Debian and Ubuntu:
https://wiki.postgresql.org/wiki/Apt
and Redhat, CentOs, Fedora, Scientific Linux and Oracle Enterprise
Linux:
https://yum.postgresql.org/
Once it is done you can simply install pgCluu with commands:
sudo apt install pgcluu
sudo yum install pgcluu
Look at the package information to know where files are specifically
installed. See next two chapters to see which default installation paths
are used.
Installation from sources
Download the tarball from GitHub and unpack the archive:
tar xzf pgcluu-3.x.tar.gz
cd pgcluu-3.x/
perl Makefile.PL
make && sudo make install
This will copy the Perl scripts pgcluu_collectd and pgcluu into
/usr/local/bin directory and the man page to
/usr/local/share/man/man1/pgcluu.1p.gz. Those are the default
installation directories for 'site' install on some well-known
distribution but the path could change.
If you want to install all under /usr location, use INSTALLDIRS='vendor'
as an argument of Makefile.PL. The script will be installed into
/usr/bin/pgcluu and the manpage into /usr/share/man/man1/pgcluu.1p.gz.
For example, to install everything just like Debian does, proceed as
follows:
perl Makefile.PL INSTALLDIRS=vendor
By default INSTALLDIRS is set to site.
The directory where statistics will be saved is /var/lib/pgcluu/data and
the default directory for reports is /var/lib/pgcluu/report.
The CGI script is installed into /var/lib/cgi-bin/pgcluu.cgi and the
Apache configuration file into /etc/apache/conf-available/pgcluu.conf.
This file allow acces to resources files (CSS and JS files) from
installation directory /usr/local/share/pgcluu/rsc/. Access is granted
to local user only by default.
All scripts (pgcluu_collectd, pgcluu and pgcluu.cgi) are reading
configuration file from /usr/local/etc/pgcluu.conf. This file is mainly
use by the CGI script but some directives are dedicated to
pgcluu_collectd and pgcluu script to define the retention days for
example.
Custom installation
The installation of pgCluu can be fully customized through environment
variables (RSCDIR,CGIDIR,CONFDIR,PIDDIR,STATDIR,APACHECONF,MANDIR,
DOCDIR,SYSTEMDDIR,RETENTION). These variables are passed to Makefile.PL
as command line arguments or can be exported as environment variables
before running "perl Makefile.PL".
The default values for these variables are:
DESTDIR => /usr/local
INSTALLDIRS => site
CONFDIR => DESTDIR/etc
PIDDIR => /var/run/postgres
STATDIR => /var/lib/pgcluu/data
REPORTDIR => /var/lib/pgcluu/data
RSCDIR => DESTDIR/share/pgcluu
CGIDIR => /usr/lib/cgi-bin
APACHECONF => /etc/apache2/conf-available
MANDIR => DESTDIR/share/man
DOCDIR => DESTDIR/share/doc
SYSTEMDIR => DESTDIR/lib/systemd/system
RETENTION => 0
If INSTALLDIRS is set to 'vendor':
CONFDIR => /etc
DESTDIR => /usr
The configuration file is auto-generated by the Makefile.PL script and
saved into CONFDIR/pgcluu.conf. If the destination file exists it is not
overridden. The file is also saved as example in the directory
DOCDIR/pgcluu/examples/pgcluu.conf.dist
The directory where pgcluu_collectd will store statistics is defined
with STATDIR which is by default /var/lib/pgcluu/data. The directory
where pgcluu will generate static html reports is defined by REPORTDIR.
The default is /var/lib/pgcluu/report. Both directory must be owned by
the postgres user.
The man page is saved as DESTDIR/share/man/pgcluu.1p.gz and a symbolic
link pgcluu_collectd.1p.gz is created to this file. The documentation,
README, changelog.gz, LICENSE files are saved under DESTDIR/share/doc/.
For the CGI mode, the resources (css and js files from the cgi-bin/rsc)
are saved under the DESTDIR/share/pgcluu/rsc directory. The CGI script
is saved under /usr/lib/cgi-bin/pgcluu.cgi. The Apache configuration
file under /etc/apache2/conf-available/pgcluu.conf with a symbolic link
/etc/apache2/conf-enabled/pgcluu.conf created to this file. Its content:
Alias /pgcluu RSCDIR/
<Directory RSCDIR/>
Options FollowSymLinks MultiViews
AllowOverride None
Require local
#Require ip 192.1.168.0/24
</Directory>
The systemd files (pgcluu_collectd.service,pgcluu.service,pgcluu.timer)
are saved as examples into DOCDIR/pgcluu/examples/ and into the systemd
directory SYSTEMDDIR/
The right path to the configuration file is set into all scripts pgcluu,
pgcluu_collectd and pgcluu.cgi. The path where the pid file must be
saved is replaced into pgcluu_collectd with the value of PIDFILE
variable.
Paths to scripts, pid directory, statistics and reports are replaced in
all systemd service files following the values of the environment
variable explain here.
USAGE
Manually
See next two chapters for a complete description of the command line
options. For the impatient, here some simple commands that could be run
as postgres user:
mkdir /tmp/stat_db1/
pgcluu_collectd -D -i 60 /tmp/stat_db1/
LOG: Detach from terminal with pid: 11323
or with more options
pgcluu_collectd -D -i 60 /tmp/stat_db1/ -h 10.10.1.1 -U postgres -d mydb
LOG: Detach from terminal with pid: 14671
wait some time and activity on your PostgreSQL Cluster... Then stop the
pgcluu_collectd daemon and generate the report:
pgcluu_collectd -k
LOG: Received terminating signal.
mkdir /tmp/report_db1/
pgcluu -o /tmp/report_db1/ /tmp/stat_db1/
You should obtain something like example at
http://pgcluu.darold.net/example/
By default all javascript, css and the webfont fontawesome are
automatically generated into the output directory if those files does
not already exits.
Using systemd unit files
pgcluu comes with systemd service files:
- pgcluu_collectd.service: execute pgcluu_collectd as a daemon to collect statistics.
- pgcluu.service: execute pgcluu to generate reports.
- pgcluu.timer: run periodically pgcluu.service
These files are installed automatically by the install script or the
package into /lib/systemd/system/. To activate these services proceed as
follow:
systemctl daemon-reload
systemctl enable pgcluu_collectd.service
systemctl enable pgcluu.service
systemctl enable pgcluu.timer
systemctl start pgcluu_collectd.service
systemctl start pgcluu.timer
Be warn that storing indefinitely statistics with pgcluu_collectd can
fill you disk space in the short or medium term. You have to remove
obsolete statistics manually using a cron job or using the embedded
retention feature by adding option '--retention ndays' to
pgcluu_collectd call or by changing the value of
STATS_COLLECTD_RETENTION configuration directive in file
/usr/local/etc/pgcluu.conf or /etc/pgcluu.conf file following your
installation. You can also set STATS_REPORT_RETENTION to limit the
retention of reports directories or use option '--retention ndays' with
pgcluu. Default is to preserve collected data for the past 30 days.
If you want to use the CGI mode you also have activate pgcluu caching by
enabling value STATS_REPORT_CACHING in the configuration file and using
pgcluu.service+pgcluu.timer. If you don"t want to use systemd you can
simply run pgcluu script with the -C option and execute it periodically
through a cron job.
Note that the systemd service files set the privilege to the data and
report directory to user postgres and group www-data. By this way
reports are readable through an httpd server for static reports and data
are readable through the CGI if enabled. Command executed by the
pgcluu_collectd.service file (daemon part) are:
/bin/mkdir -p $STATDIR
/bin/chown postgres:www-data $STATDIR
/bin/chmod u=rwX,g=rsX,o= $STATDIR
The pgcluu.service file (client part) execute commands:
/bin/mkdir -p $REPORTDIR
/bin/chown postgres:www-data $REPORTDIR
/bin/chmod u=rwX,g=rsX,o= $REPORTDIR
In case you don't want to use systemd service files you will have to
execute these commands manually before tunning pgCluu.
For pgcluu reports, the output directory can be defined in the
configuration file using the STATS_REPORT_OUTDIR directive.
COLLECTING STATISTICS
To generate reports about your PostgreSQL Cluster Utilization you must
collect statistics before. pgcluu_collectd is here for that. It can be
run in a daemon mode (option -D) or in interactive mode for debugging
purpose. All you need is to provide a directory where data will be
stored. Statistics will be pooled at a default interval of 60 seconds,
using option -i you can customize it. See below for a complete list of
command line options.
pgcluu_collectd usage
usage: pgcluu_collectd [options] output_dir
output_dir: full path to directory where pgcluu_collectd will
store statistics.
options:
-B, --enable-buffercache enable buffercache statistics if pg_buffercache
extension is installed.
-c, --capture create a snapshot of the PostgreSQL installation
into tmp/pgcluu_capture.tar.gz.
-C, --end-counter=NUM terminate program after NUM reports.
-d, --dbname=DATABASE database name to connect to. Default to current user.
-D, --daemonize detach from console and enter in daemon mode.
-E, --end-after=NUM self terminate the program after a given number of
seconds. Can be written: 7200 or 120M or 2H, for
days use 7D for example to stop collecting data
after seven days.
-f, --pid-file=FILE path to pid file. Default: /var/run/postgresql/pgcluu_collectd.pid.
-h, --host=HOSTNAME database server host or socket directory
-i, --interval=NUM time to wait between runs
-k, --kill stop current pgcluu_collectd running daemon.
-m, --metric=METRIC set a coma separated list of metrics to perform.
-M, --max-size=SIZE self terminate program when the size of the output
directory exceed a given size. Can be written: 2GB
or 2000MB.
-n, --no-pg_stats-dump don't collect statistics from the pg_stats view.
-p, --port=PORT database port(s) to connect to. Defaults to 5432.
-P, --psql=BIN path to the psql command. Default: psql.
-Q, --no-statement do not collect statistics from pg_stat_statements.
-r, --rotate-daily force daily rotation of data files.
-R, --rotate-hourly force hourly rotation of data files.
-s, --sar=BIN path to sar sysstat command. Default: sar.
-S, --disable-sar disable collect of system statistics with sar.
-t, --lock-timeout=NUM terminate metric SQL query after N second in case it
wait too much time because of a lock. Default: 3
-T, --no-tablespace disable lookup at tablespace when the connect user
is not superuser to avoid printing an error message.
-U, --dbuser=USERNAME database user to connect as. Default to current user.
-v, --verbose Print out debug informations.
-V, --version Show pgcluu_collectd version and exit.
-w, --no-waitevent don't collect wait event stats from pg_wait_sampling.
-W, --password=pass database password.
-z, --compress force compression of rotated data files.
--included-db=DATABASE collect statistics only for those databases present
in a comma separated list of database names.
--list-metric list available metrics actions that can be performed.
--sysinfo get operating system infos and exit (sysinfo.txt).
--no-sysinfo do not collect operating system information at all.
--no-database do not collect database statistics at all.
--pgbouncer-args=OPTIONS Option to used to connect to the pgbouncer system
database. Ex: -p 6432 -U postgres -h 192.168.1.100
You must at least give one parameter to enable
pgbouncer monitoring.
--sar-file=FILE path to sar output data file for sysstat stats
Default to output_dir/sar_stats.dat.
--stat-type all|user Set stats tables to read. Values: 'all' or 'user' to
look at pg_stat_(all|user) tables. Default: user.
--pgversion X.Y force the PostgreSQL version to the given value.
--pgservice NAME Name of service inside of the pg_service.conf file.
--exclude-time RANGE exclude a laps of time by giving the start and end
hours.
--cron-user=USERNAME collect crontab settings for the given username (in
this case pgcluu_collectd need to be run as root).
Default is to use USERNAME environment variable or
postgres when it is not defined.
--package-list=CMD command to list PostgreSQL packages. Default is to
autodetect package type and using command 'rpm -qa'
or 'dpkg -l'. If you have an other system you can
set a custom command. A filter on keyword 'postgres'
is appended to the command: ' | grep postgres'.
--retention NDAYS number of rolling days to keep in data directory in
incremental mode. Default is to store indefinitely.
--disable-pidstat do not collect metrics from pidstat command.
--help print usage
Use those options to execute sar on the remote host defined by the -h
option, otherwise it will be executed locally:
--enable-ssh activate the use of ssh to run sysstat remotely.
--ssh-program ssh path to the ssh program to use. Default: ssh.
--ssh-user username connection login name. Default to running user.
--ssh-identity file path to the identity file to use.
--ssh-timeout second timeout to ssh connection failure. Default 10.
--ssh-options options list of -o options to use for the ssh connection.
Options always used:
-o ConnectTimeout=$ssh_timeout
-o PreferredAuthentications=hostbased,publickey
For example, as postgres user to monitor locally a full PostgreSQL
cluster:
mkdir /tmp/stat_db1/
pgcluu_collectd -D -i 60 /tmp/stat_db1/
to collect statistics from pgbouncer too, and limit database statistics
to a single database:
pgcluu_collectd -D -i 60 /tmp/stat_db1/ -h 10.10.1.1 -U postgres -d mydb
--pgbouncer-args='-p 5342'
to disable statistics collect between 22:30 and 06:30 the next day:
pgcluu_collectd -D -i 60 /tmp/stat_db1/ --exclude-time "22:30-06:30"
to collect statistics from a remote server:
pgcluu_collectd -D -i 60 /tmp/statdb1/ -h 10.0.0.1 -U postgres --disable-sar
the same but with collecting system statistics using remote sar calls:
pgcluu_collectd -D -i 60 /tmp/statdb1/ -h 10.0.0.1 -U postgres --enable-ssh
--ssh-user postgres --ssh-identity /var/lib/postgresql/.ssh/id_rsa.pub
You may need a .pgpass and be able to establish passwordless ssh
connections to be able to collect statistics from remote hosts.
Then after some time and activities on the database, stop the daemon as
follow:
pgcluu_collectd -k
or by sending sigterm to the pgcluu_collectd's pid.
You can run the collector in incremental mode using a daily or a hourly
statistics rotation:
pgcluu_collectd -D -i 60 /tmp/stat_db1/ --rotate-daily
On a server with huge activity you may want to use --rotate-hourly and
compression mode with --compress option. If you have limited disk space
you can restrict the retention time of statistics files using option
--retention with the storage day limit.
Statistics files
The output directory with all statistics collected should look likes:
/tmp/stat_db1/
|-- commit_memory.csv
|-- end-pg_statio_user_indexes.csv
|-- end-pg_statio_user_sequences.csv
|-- end-pg_statio_user_tables.csv
|-- end-pg_stat_user_functions.csv
|-- end-pg_stat_user_indexes.csv
|-- end-pg_stat_user_tables.csv
|-- end-pg_stat_xact_user_functions.csv
|-- end-pg_stat_xact_user_tables.csv
|-- fs_stat_use.csv
|-- pg_class_size.csv
|-- pg_database_size.csv
|-- pg_db_role_setting.csv
|-- pg_hba.conf
|-- pg_ident.conf
|-- pg_nondefault_settings.csv
|-- pg_prepared_xact.csv
|-- pg_settings.csv
|-- pg_stat_archiver.csv
|-- pg_stat_bgwriter.csv
|-- pg_stat_connections.csv
|-- pg_stat_count_indexes.csv
|-- pg_stat_database_conflicts.csv
|-- pg_stat_database.csv
|-- pg_stat_hash_indexes.csv
|-- pg_stat_invalid_indexes.csv
|-- pg_statio_user_indexes.csv
|-- pg_statio_user_sequences.csv
|-- pg_statio_user_tables.csv
|-- pg_stat_locks.csv
|-- pg_stat_missing_fkindexes.csv
|-- pg_stat_redundant_indexes.csv
|-- pg_stat_replication.csv
|-- pg_stat_unlogged.csv
|-- pg_stat_unused_indexes.csv
|-- pg_stat_user_functions.csv
|-- pg_stat_user_indexes.csv
|-- pg_stat_user_tables.csv
|-- pg_stat_xact_user_functions.csv
|-- pg_stat_xact_user_tables.csv
|-- pg_tablespace_size.csv
|-- pg_xlog_stat.csv
|-- postgresql.auto.conf
|-- postgresql.conf
|-- sar_stats.dat
|-- sysinfo.txt
Then now you can proceed with pgcluu to generate reports.
Additional statistics from extensions
To be able to report top statements, wait events and subxact statistics
you need to create the related extensions into a single database and use
this database for primary connection to pgcluu_collectd using the -d
option.
The related extension are pg_stat_statements, pg_wait_sampling and
pg_subxact_counters.
Rotation and compression
When used the --rotate-daily or --rotate-hourly commands line option
will force pgcluu_collectd to rotate daily or hourly all statistic's
files. In this case, statistics files will be created in a subdirectory
based on rotation frequency, output_dir/year/month/day[/hour]. This is
called the incremental mode.
To save filesystem space it is possible to enable compression of all
rotated files during the rotation process. Just activate the -z or
--compress command line option. You can also use the --retention option
to set the storage time limit in days.
Incremental mode
This mode is enabled when --rotate-daily or --rotate-hourly command line
options are used. It allow pgcluu to build reports incrementally by days
or hours. In this mode you don't have to build reports per day or hour
pgcluu will do the work automatically, just give it the top statistics
directory.
pgcluu -o /var/www/pgcluu/reports/ /var/lib/pgcluu/data/
pgcluu will detect that --rotate-daily or --rotate-hourly have been used
to collect data and generate reports for each day or hours stored.
Previous directories already processed will not be processed again
unless this was the the last one.
The daily or hourly basis statistic storage also allow the use of the
CGI script pgcluu.cgi to have dynamic reports and temporal search. See
"Using dynamic mode" chapter.
When used the --rotate-daily or --rotate-hourly commands line option
will force pgcluu_collectd to rotate daily or hourly all statistic's
files. In this case, statistics files will be created in a subdirectory
based on rotation frequency, output_dir/year/month/day[/hour]. This is
called the incremental mode.
To save filesystem space it is possible to enable compression of all
rotated files during the rotation process. Just activate the -z or
--compress command line option. You can also use the --retention option
to set the storage time limit in days.
Capture mode
The goal of this mode is to be able to obtain a simple report about the
PostgreSQL installation without collected metrics others than database
and tablespace size. This report can be use by ITs to better understand
the configuration and things that need to be tuned.
To enable this mode, just run pgcluu_collectd with the single option -c
or --capture. Other command line options will not be taken in account.
pgcluu_collectd will create e temporary directory /tmp/pgcluu_capture to
store temporary data and will removed if after building a compressed tar
archive: /tmp/pgcluu_capture.tar.gz. This is this archive that can be
used with pgcluu to build a snapshot report of the instance. pgcluu will
automatically detect this mode.
GENERATING REPORTS
Static HTML reports
To generate a pgCluu report about a PostgreSQL Cluster you must, at
least, have a directory that contains all data files generated by
pgcluu_collectd or pgstats. In this directory, if you have a file named
sar_stats.dat or sadc_stats.dat for binary sadc data file, it will be
taken to build report about system utilization. If you just want to make
a report from a sar file use the -i or -I options.
usage: pgcluu [options] [-i sar_file | -I sadc_file] [input_dir]
input_dir: directory where pgcluu_collectd or pgstats and sar data
files are stored.
options: -b, --begin datetime start date/time for the data to be parsed
(time of current timezone). -C, --cache generate cache files only
(.bin), no html output. -d, --db-only dbname only report for the whole
cluster and the given database name. You can use it multiple time or
give a comma separated list of database name. -D, --device-only dev only
report I/O stats for a particular device You can use it multiple time or
give a comma separated list of device name, ex: sda,sdc. -e, --end
datetime end date/time for the data to be parsed (time of current
timezone). -i, --sar-file=FILE path to the sar text data file to read to
generate system reports. Default to 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. -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. -N, --network-only iface only report stats for
a particular network interface. You can use it multiple times or give a
comma separated list of network interfaces, ex: eth0,eth1. -o,
--output=DIR output directory -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. -s, --sadf=BIN path to the sadf sysstat command used to
read the sadc binary data file. Default: /usr/bin/sadf. -S,
--disable-sar disable collect of system statistics with sar. -t,
--with-table table Only report for the whole tables and the given table
name. You can use it multiple time or give a comma separated list of
database name. -T, --no-table Do not report statistics related to
tables. -v, --verbose Print out debug informations. -V, --version Show
pgcluu version and exit. -x, --external-menu Save menu in menu.html and
load it into each report using w3-include-html attribut from w3.js. This
will only work if acces to HTML reports is through a Web server, not
using the file:// protocol. -z, --timezone +/-XX Set the number of
hour(s) from GMT of the timezone, Eg: -z +02 Usually autodetected. Use
this to adjust date/time from the sar output, pgcluu use GMT time to
draw charts. -Z, --stats-timezone +/-XX Set the number of hour(s) from
GMT of the timezone. Eg: -Z +02 Usually autodetected. Use this to adjust
date/time from the cluster and system stats output, pgcluu use GMT time.
--from-sa-file instruct pgcluu that file specified by the -i option uses
the standard system activity daily data file. --charset used to set the
HTML charset to be used. Default: utf-8. --retention NDAYS number of
rolling days to keep in report directory. Default is to store
indefinitely. --help print usage
For example, you can generate all HTML reports from data files stored
into /tmp/stat_db1/ with the following commands:
mkdir /tmp/report_db1/
pgcluu -o /tmp/report_db1/ /tmp/stat_db1/
If you just want reports of some databases, use the following:
pgcluu -o /tmp/report_db1/ /tmp/stat_db1/ --db-only "db1,db2,db3"
If you just want to create a report from a sar output file:
sar -p -A 10 60 > /root/my_sar_file.txt
pgcluu -o /tmp/report_sar/ -i /root/my_sar_file.txt
or from a daily sa file:
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
and from a sa binary file:
pgcluu -o /tmp/report_sar/ -i /var/log/sysstat/sa22
or the sa text file if you don't have the same version of sysstat:
pgcluu -o /tmp/report_sar/ -i /var/log/sysstat/sar23 --from-sa-file
If pgcluu_collectd have been run in incremental mode you can limit the
number of retention days used for the reports:
pgcluu -o /tmp/report_sar/ /tmp/stat_db1/ --retention 30
A static report will be built for each day or hour following the
rotation used with pgcluu_collectd.
Dynamic reports (CGI)
Dynamics reports are build by a CGI script named pgcluu.cgi that can be
found in the cgi-bin repository of the source code. It allow you to
select the time period to build reports and to look at all differents
reports for this period just as with static HTML reports. After
installation from sources or binary packages the CGI might be found in
/usr/lib/cgi-bin/pgcluu.cgi or /var/www/cgi-bin/pgcluu.cgi following
your distribution.
To use pgCluu in CGI mode, you need a Web server (here we use Apache)
and a cron task to build the cache periodically.
First enable CGI mode.
sudo a2enmod cgi
sudo service apache2 restart
Then the CGI need to find the statistics directory where pgcluu_collectd
mostly /var/lib/pgcluu/data/. The content of this repository must be
readable by the Apache user (www-data).
Take care to restrict access to your server and the CGI as information
about your database and server are exposed in the reports.
The CGI script, pgcluu.cgi, use resources files (CSS and javascript).
They are stored in the cgi-bin/rsc/ directory of the source
distribution. Install this repository onto the DocumentRoot of your Web
server, for example:
sudo mkdir /var/www/pgcluu/
sudo cp -rf cgi-bin/rsc /var/www/pgcluu/
Then edit /etc/pgcluu.conf, copy it from sources cgi-bin/pgcluu.conf if
it doesn't exists. Change the RSC_BASE and INPUT_DIR configuration
directive to match your installation. Here in our example:
RSC_BASE /pgcluu/rsc/
INPUT_DIR /var/lib/pgcluu/data
Now we can start the data collection. For the moment pgcluu.conf is only
read by the CGI pgcluu.cgi but this might change in the future.
To let pgCluu start collecting data, you can use the following command
(you can change it to however you like). We will need postgres user for
this.
sudo su - postgres
/usr/local/bin/pgcluu_collectd -D -i 60 --rotate-daily /var/lib/pgcluu/data
This will rotate you data daily. This is also the default in the systemd
service file.
Plugging the CGI directly to the CSV statistics files will result in
very slow generation reports. To improve speed caching must be used, you
must execute periodically pgcluu in cache mode. Run it manually the
first time
/usr/local/bin/pgcluu --cache /var/lib/pgcluu/data
then add a cron task to execute the command each five or ten minutes:
*/5 * * * * /usr/local/bin/pgcluu --cache /var/lib/pgcluu/data
If you are using systemd pgcluu.timer service then caching can be
enabled using STATS_REPORT_CACHING directive. Enabling this mode
generate cache files (*.bin) in the statistics directory and disable
static HTML reports generation.
To see your reports, go to the following URL:
http://localhost/cgi-bin/pgcluu.cgi
Or change localhost by your fqdn server name.
Note that here pgcluu_collectd and pgcluu scripts are found in
/usr/local/bin/ which is the default for an installation from sources
but with an installation from binary package you might find them into
/usr/bin/.
The CGI mode allow you to select the period of time used to generate the
statistics reports. Using default pgcluu_collectd 60 seconds interval, a
daily graph will have 1440 points. Having too much timeseries to render
is not a good point for performances so we are limiting to the first
seven days of the selected period. This mean a maximum of 10080 points
for one week, this seems a safe limit. Feel free to increase or reduce
the limit following the server and client resources. This is controlled
by
MAX_RENDERED_DAYS 7
configuration directive in pgcluu.conf
LICENSE
Copyright (c) 2012-2024, Gilles Darold
pgCluu is licenced under the PostgreSQL Licence a liberal Open Source
license, similar to the BSD or MIT licenses. That mean that all parts of
the program are open source and free of charge.
Permission to use, copy, modify, and distribute this software and its
documentation for any purpose, without fee, and without a written agreement
is hereby granted, provided that the above copyright notice and this
paragraph and the following two paragraphs appear in all copies.
IN NO EVENT SHALL Dalibo BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT,
SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS,
ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF
Dalibo HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Gilles Darold SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS,
AND Gilles Darold HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT,
UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
This is the case for both, pgcluu_collectd and the grapher pgcluu
programs.
AUTHORS
pgCluu is an original development of Gilles Darold.
Some parts of the collector are taken from pgstats a C program writen by
Guillaume Lelarge and especially the SQL queries including the
compatibility with all PostgreSQL versions. See
https://github.com/gleu/pgstats
Btw pgCluu grapher is compatible with files generated by pgstats, sar
and sadc so you can use it independantly to graph those data. Some part
of the sar output parser are taken from SysUsage. See
http://sysusage.darold.net/