PostgreSQL : pgcluu

de | 2017-10-20

Parce que l’on est jamais trop bien outillé lorsque les machines commencent à fumer, nous vous proposons aujourd’hui un aperçu de l’outil « pgcluu« .

Écrit par Gilles Darold (également auteur de plusieurs utilitaires dont le plus connu est Ora2pg), il existe depuis 2013 et est régulièrement mis à jour. C’est un outils de suivi de performances pour PostgreSQL qui possède plusieurs avantages :

  • Relativement simple à mettre en place
  • Archive les tables de statistiques du catalogue PostgreSQL
  • Génère des rapports lisibles dans un navigateur
  • Trace des graphiques. Or, tout le monde aime les graphiques.
  • Collecte simultanément les compteurs systats (de « sar », par défaut), permettant de mettre en parallèle le performance de la base et celles du système.

Voyons ceci plus en détail, si vous le voulez bien…

Principe

PgCluu nécessite un peu plus  de préparation que pgbagder donc il est préférable de s’y essayer en période calme et non lorsque tout le monde vous crie dans les oreilles un jour d’incident. Complémentaire de pgbadger (qui permet une analyse de journaux d’évènement a posteriori, pgCluu collecte en temps réel l’activité de la base.

Conclusion : autant utiliser les deux.

L’outil est divisé en deux commandes :  « pgcluu_collected », qui peut tourner en daemon et qui collecte les informations et « pgcluu » qui génère les rapports html.

Nous allons voir comment l’installer depuis un clone du dépôt Git mais il existe des dépôts officiels pour les principales distributions Linux.

Ce qui ne veut pas dire grand chose puisque toutes les distributions Linux sont les distributions principales de quelqu’un, par définition.

 

Installation

Récupérer les sources depuis GitHub : https://github.com/darold/pgcluu

Choisissez et créez votre répertoire d’installation et copiez-y délicatement les sources.

Ensuite, c’est du classique :


unzip pgcluu-master.zip
cd pgcluu-master
perl Makefile.pl
make
sudo make install

Note: pgcluu peut vous réclamer des paquets Perl supplémentaires. C’est son droit puisqu’il est écrit en Perl.

Pour les connexions aux bases, il faut prévoir deux choses : un fichier .pgpass pour la connexion vers PostgreSQL (collecte des statistiques de la base) et une connexion SSH sans mot de passe (collecte des informations système). Ce dernier point est optionnel. Mais c’est une option type « Vous allez manquer quelque chose » donc nous vous conseillons de l’autoriser.

Si vous n’avez jamais utilisé un fichier  .pgpass, voici à quoi il ressemble :

#host:post:base:user:password
machine_cible1:5432:*:moiMoiJe:monPassword
machine_cible2:5432:*:toiToiTu:tonPassword
# etc.

Attention à bien lui donner les  permissions correctes sinon vous verrez l’erreur lors du test de connexion :

$ psql -h machine_cible1
WARNING: password file "/home/vous/.pgpass" has group or world access; permissions should be u=rw (0600) or less

A corriger comme ceci :

$ chmod 0600 /home/vous/.pgpass

Autre point d’attention : ajouter l’ip de la machine où vous exécuterez pgcluu dans le pg_hba.conf de la base cible sinon vous verrez l’erreur :

psql: FATAL:  no pg_hba.conf entry for host "10.10.10.01", user "vous", database "votre_base", SSL off

Ces deux pièges évités, voyons un exemple.

 

Exemple d’utilisation: collecte

Choisissez et créez votre répertoire de collecte. nous vous conseillons de créer un dossier au nom de la machine / de l’instance d’origine puis deux sous-dossiers : un pour les données brutes, un autre pour le rapport.

« Le rapport » au singulier car l’outil refusera d’en générer un si le dossier n’est pas vide. Donc soit vous le videz, sous vos créez un dossier par rapport.

Ci-dessous, un exemple de commande :

mkdir -p machine_cible1/rapport machine_cible1/csv
SHELL> pgcluu_collectd -D -i 60 -h machine_cible1 -U moiMoiJe -d postgres /chemin/vers/machine_cible1/csv -f /tmp/cluu_mac1.pid --enable-ssh --ssh-user postgres
LOG: Detach from terminal with pid: 21356

« -D » : place le programme en arrière plan, en mode daemon.

« -i 60 » : une mise à jour des données toutes les 60 secondes.

« -h » : la machine cible.

« -U » : le compte PostgreSQL de connexion. Celui défini dans le .pgpass.

« -d » : le nom de la base de connexion s’il est différente de celui de l’utilisateur.

« -f /chemin/vers/un/fichier.pid » : nous le mentionnons car il sera à adapter si vous désirez lancer plusieurs processus « pgcluu_collected » différents.

« –enable-ssh –ssh-user postgres »: permet la récupération des fichiers de configuration PostgreSQL (pratique) et l’utilisation de sar sur la machine distante.

Pgcluu_collectd dispose d’autres options pratiques mais nous n’allons pas toutes les détailler. sachez qu’il est possible de lancer le daemon pour un temps déterminé, de l’arrêter lorsqu’un certain volume de données a été collecté (« -M, –max-size=SIZE) », ou après un certain nombre de collecte…

Plus d’informations avec « pgcluu_collectd –help » et la documentation.

Immédiatement après le lancement, les fichiers arrivent dans le dossier de collecte machine_cible1/csv :

-rw-r--r-- 1 moi monGroupe   34220 Oct 12 17:42 pg_class_size.csv
-rw-r--r-- 1 moi monGroupe   20003 Oct 12 17:42 pg_database_size.csv
-rw-r--r-- 1 moi monGroupe       0 Oct 12 17:42 pg_db_role_setting.csv
-rw-r--r-- 1 moi monGroupe    4853 Oct 12 17:42 pg_hba.conf
-rw-r--r-- 1 moi monGroupe    1636 Oct 12 17:42 pg_ident.conf
(...)
-rw-r--r-- 1 moi monGroupe    6308 Oct 12 17:42 pg_xlog_stat.csv
-rw-r--r-- 1 moi monGroupe   20888 Oct 12 17:42 postgresql.conf
-rw-r--r-- 1 moi monGroupe 3251956 Oct 12 17:42 sar_stats.dat
-rw-r--r-- 1 moi monGroupe   22106 Oct 12 17:42 sysinfo.txt

Si sar est activé sur la machine cible, vous récupérerez  ses informations en même temps que celles de postgreSQL.

Note: malgré nos différents essais, pas de collecte sar lorsque la machine est sous Solaris. Alors que c’est automatique sur Linux.

 

Génération du rapport

Comme déjà dit plus tôt, il faut que le répertoire accueillant le rapport soit vide.  donc soit vous le videz, soit vous en créez un autre à chaque rapport. Mais du coup c’est pas cumulatif. A vous de voir.

C’est la partie la plus simple, la plus facile et la plus gratifiante. Limite immorale car elle sape le goût de l’effort chez les jeunes DBA.

Voici comment faire :

cd /chemin/vers/machine_cible1
pgcluu -o rapport* csv*

Après cela, le dossier csv va contenir un fatras de fichiers : html, javascript, etc. L’essentiel – comme c’est le cas depuis l’invention du World Wide Web – étant le « index.html ».

Ouvrez-le dans un navigateur et vous devez voir quelque chose comme ceci :

Autre exemple, dans la catégorie Cluster -> Transactions/secondes

pgCluu : écran des Tran/sec

pgCluu : écran des Tran/sec

 

Conclusion

Pgcluu fait parti de ces outils présents depuis longtemps dans le paysage PostgreSQL. Il était grand temps que nous nous penchions sur son utilisation.

N’attendez pas aussi longtemps que nous pour faire de même.

Savoir que l’on dispose d’un outil de mesure dynamique est un atout lorsque la journée s’accélère.

Pour qu’il vous soit utile, prenez le temps d’éplucher les rapports lorsque tout est calme. Cela vous épargnera une grande dose de stress le moment venu.

Des problèmes ? des questions ? Exprimez-vous ! Les commentaires sont ouverts. Coquilles et fautes de grammaires sont notre lot quotidien : signalez-les nous à m.capello@dbsqware.com