martedì 23 dicembre 2014

Calendario dell'Avvento ITPUG: 23 Dicembre

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: