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
Nessun commento:
Posta un commento