Tester du code ansible avec Molecule

Molecule n’est pas à proprement parlé un framework de test, c’est un outil pour orchester et organiser des scénari de test(s). Il a été conçu pour faciliter l’écriture de test et améliorer la qualité des rôles ansible. Il utilise (par défaut) les briques suivantes :

  • Docker pour construire rapidement des plateformes (distrib GNU+Linux) pour lancer nos tests
  • Ansible pour orchestrer la création d’un ou plusieurs hosts pour éxecuter nos tests
  • Testinfra pour tester les composants d’infra que nous configurons avec notre/nos rôles (par exemple vérifier que le port 80 écoute bien après avoir installé, activé et lancé httpd via un rôle ansible)

L’objectif de notre article est de prendre en main molecule et de voir comment lancer des tests (via testinfra). En + de l’article, vous pouvez trouver un repo git qui reprend l’exemple que nous élaborons ici.

Read More

Mise en place de monitoring Postgres avec Zabbix

Petit article pour décrire comment j’ai ajouté des sondes (répondant au doux nom de libzbxpgsql) de monitoring dans Zabbix pour collecter des informations concernant une instance postgresql. Ou plus sobrement comment j’ai configuré le module libzbxpgsql de Ryan Armstrong.

Pour collecter des données, il faut déployer ce super module Zabbix sur l’agent qui va faire remonter les données de notre service postgresql vers notre serveur Zabbix. Dans notre cas l’agent de monitoring et l’instance postgresql se trouvent sur la même VM, c’est le cas le + simple :-).

Installer le module pour monitorer postgresql

1ere étape - installer le module libzbxpgsql sur la machine ou l’agent Zabbix se trouve (sur notre serveur postgresql dans notre cas) :

1
sudo yum localinstall ./libzbxpgsql-1.1.0-1.el6.x86_64.rpm

Ensuite on relance l’agent Zabbix (pour charger le module) :

1
sudo service zabbix-agent restart

Finalement on peut vérifier que le module est bien chargé :

1
sudo -u zabbix zabbix_agentd -t pg.modver

Si c’est bon nous obtenons ce résultat :

1
2
3
zabbix_agentd [29861]: starting agent module libzbxpgsql 1.1.0
zabbix_agentd [29861]: using module configuration file: /etc/zabbix/libzbxpgsql.conf
pg.modver [s|libzbxpgsql 1.1.0, compiled for Zabbix 3.0.7]

Dans notre cas le module est bien actif :-)

Créer un rôle postgres pour le monitoring

Avec un utilisateur (un superuser fait le job) qui a le droit de créer des rôles on ajoute le rôle monitoring

1
CREATE ROLE monitoring WITH LOGIN NOSUPERUSER NOCREATEDB NOCREATEROLE;

Si on souhaite collecter des informations + fines concernant une ou plusieurs DB (utilisation des indexes, ratio lectures/écritures,…), l’ajout (grant) du droit CONNECT est nécessaire (dans notre exemple on collecte des informations à propos de ma_jolie_db).

1
GRANT CONNECT ON DATABASE ma_jolie_db TO monitoring;

Le plugin permet aussi une granularité + fine, par exemple il est possible de collecter des données pour une table ou l’ensemble des tables d’une base. Le template embarque une low level discovery rule pour configurer la collecte d’information sur les tables, perso j’ai désactivé la rêgle de découverte automatique, mon objectif était de collecter des informations au niveau de la DB dans un 1er temps.

Modifier la config de postgres

pg_hba

Après la création du rôle il faut définir comment l’utilisateur monitoring/zabbix peut se connecter. Il faut ajouter la ligne suivante à notre fichier pg_hba.conf :

1
local   all             monitoring                              ident map=monitoring

On permet à l’utilisateur monitoring de se connecter localement à toutes les DB (il est possible d’être + restrictif). On utilise ici le mode ident (valide uniquement en TCP/IP, avec bascule automatique en mode peer pour les connexions locales - non TCP/IP), dans notre cas l’utilisation du mode peer est certainement + adapté vu que l’utilisateur monitoring est utilisé exclusivement en local par l’agent Zabbix.

pg_ident

L’option map permet de faire correspondre l’utilisateur système Zabbix à l’utilisateur monitoring. Pour utiliser ce map, nous devons ajouter la ligne suivante dans le fichier pg_ident.conf:

1
monitoring      zabbix                  monitoring

Le premier élément de la ligne permet de nommer notre “mappage” (nom utilisé dans le fichier pg_hba.conf), le deuxième le nom de l’utilisateur système et le dernier le nom du rôle postgres. On fait simplement correspondre l’utilisateur zabbix au rôle postgres monitoring que nous venons de créer.

Pour activer nos modifications (pg_hba.conf et pg_ident.conf) un reload (SIGHUP) du service postgresql est requis.

Et hop on peut tester

Maintenant que nous avons configuré notre agent Zabbix et notre serveur postgres nous pouvons tester. Un moyen simple est d’utiliser zabbix_get depuis notre serveur Zabbix :

1
zabbix_get -s 192.168.201.18 10050 -k "pg.backends.count[user=monitoring,postgres]"

La commande zabbix_get (si on a pas loupé une étape) doit afficher sur stdout le nombre de backend actuellement connecté à notre serveur Postgres :-). On peut maintenant importer le template via l’interface de Zabbix et l’appliquer à notre hôte - serveur postgres. Si la config est valide, après quelques minutes nous obtenons des jolies données (et surtout des graphiques) en + dans notre Zabbix.

Conclusion

Le module permet de collecter un grand nombre d’info et de génerer des graphes pertinents, il est juste de base agressif au niveau des connections qu’il fait vers notre serveur (On peut le voir dans les logs). http://cavaliercoder.com/libzbxpgsql/documentation/connection-pooling/. Une évolution possible (et pourquoi pas un prochain article ;-)) est comme indiqué dans la doc (qui est au passage bien écrite) donc de mettre PgBouncer ou PgPool en place pour le monitoring de nos serveurs.

Comment je fais de la veille en 2019

On commence en douceur, voici un petit article qui présente les ressources que j’utilise pour m’informer à propos de l’évolution de mon métier.

Les sites

Je consulte réguliérement ces sites, à une époque j’utilisais un agrégateur de flux RSS (TinyRSS)… J’ai enevie de m’y remettre pour simplifier ma veille.

Les mailing listes

Je connais peu de liste générique, j’ai plutôt l’habitude de suivre les listes des projets ou produits que que nous exploitatons. J’utilise donc surout des mailing listes pour des thématiques ultra-spécifiques.

Voici les deux seules listes que je considére comme + transverse :

Le {You,Peer}Tube game

Les conférences

Alors la il y en a un paquet, je vais partager quelques conférences que j’essaye de suivre IRL et que j’estime d’un bon niveau.

Bien souvent les présentations sont enregistrées et diffusées sur youtube, peertube ou d’autres plateformes.