Un'utility interessante che mi sono sempre riproposto di sperimentare è pgCluu.
Pgcluu  viene distribuito con due eseguibili: pgcluu e pgcluu_collectd. Il  secondo è la parte che si preoccupa di collezionare le statistiche e di  archiviarle su file system, in maniera simile a quanto fatto da altri  tool di monitoring (ad esempio flow-tools). Il programma pgcluu è invece  il responsabile di fare il reporting delle statistiche.
In  default la collezione delle statistiche avviene su due fronti: il  cluster e il sistema, mediante sar. E' comunque possibile disabilitare  l'uso di sar, e in particolare lo switch -h (che svolge la stessa  funzione dell'omonimo di psql) disabilita l'uso di sar.
Da notare che nonostante gli eseguibili siano due, la pagina di manuale è una sola ed è riferita a pgcluu(1).
% export STAT_DIR="/tmp/pgcluu_stats_collection";
% mkdir $STAT_DIR && pgcluu_collectd -d demodb -h localhost -M 200MB -D -i 10 -U luca --stat-type all $STAT_DIR
LOG: Detach from terminal with pid: 4442
Si  è creata una directory dove verranno collezionate le statistiche e si è  lanciato il programma di raccolta dati. Le opzioni usate fanno si che  il processo vada in background (-D), si colleghi al database "demodb"  (-d) con utente "luca" (-U) sulla macchina locale (-h). Per evitare  l'esecuzione incontrollata si fissa una soglia di raccolta dati con  tetto massimo di 200 MB (-M), si abilita la raccolta di tutte le  statistiche (--stat-type) presenti in PostgreSQL (ossia si legge  pg_stats_all) e si vuole che le statistiche siano collezionate ogni 10  secondi (-i).
Attenzione  all'opzione -D che può risultare subdola: se il database richiede una  password per l'utente il prompt per la password non viene richiesta e  pgcluu_collectd termina subito. Occorre quindi utilizzar eil file  ~/.pgpass per permettere la connessione automatica (come per psql - in  effetti si usa psql per collezionare i dati).
Nella  directory STAT_DIR si troverà un file testuale "sysinfo.txt" che  contiene un dump di svariate informazioni di sistema (spazio dischi,  dmesg, sysctl, ecc.). Altri file comprendono le statistiche di sistema  in formato CSV:
Ora generando un po' di carico sul database sotto analisi:
demodb=# CREATE TABLE baz(value int);
demodb=# insert into baz select generate_series(1, 1000);
demodb=# insert into baz select generate_series(1, 1000000);
demodb=# insert into baz select generate_series(1, 1000000);
A questo punto si può generare il report:
% export STAT_OUTPUT_DIR=/tmp/pgcluu_stat_output
% mkdir $STAT_OUTPUT_DIR && pgcluu -o $STAT_OUTPUT_DIR -v -S $STAT_DIR
...
DEBUG: Inserting menu into all html files.
E  il gioco è fatto: puntando il proprio browser alla directory di output  si avrà accesso alle statistiche collezionate in un modo un po' piu'  user-friendly.
Da notare  che il manuale di pgcluu indica di terminare esplicitamente il demone di  raccolta statistiche prima di generare il report, ma io ho provato a  farlo anche senza fermarlo e tutto pare funzionare ugualmente. Unica  pecca: non si possono generare i report sovrascrivendoli di volta in  volta, perché pgcluu si rifiuta. Ne consegue che per eseguire il tutto  in formato schedulato occorre prevedere lo svuotamento della directory  di output o almeno un qualche modo di rotazione.
Ah, ultima cosa:
% file `which pgcluu`
/usr/local/bin/pgcluu: Perl script, UTF-8 Unicode text executable