COMMENT METTRE EN PLACE UNE INFRASTRUCTURE SUPDEVOPS AVEC ZABBIX, ANSIBLE ET JENKINS ?

Contexte et Objectif

   I.  Devops et supervision

Le Devops décrit un ensemble de pratiques permettant de faciliter la collaboration entre développeurs et opérationnels dans le but de pouvoir améliorer les phases de développement et de déploiement des applications. 

Dans une chaine CI/CD, on a bien une phase de monitoring. Seulement, celle-ci tend à être négligée. Afin de mieux comprendre la pertinence d’un outil de supervision, supposons qu’une application ait été déployée et quelques jours plus tard devient « down ». Comment les équipes seront informées de cette panne ? Les applications que nous déployons fonctionnent sur des serveurs. Savez vous que celles-ci peuvent cracher du fait d’une insuffisance de mémoire, cpu, disque, ce qui rendra l’application indisponible ?  A travers ces questions, on comprend très vite la nécessité d’un système de supervision efficace et puissant.

Plusieurs solutions sont proposées sur le marché : zabbix, centreon, nagios, prometheus, etc… Le choix d’une solution dépendra de l’infrastructure. Dans cet article, nous nous intéressons à zabbix car il est flexible, puissant, open source et facile à prendre en main. De plus, on peut facilement l’intégrer à slack pour la gestion des alertes.

Dans le but d’éviter au maximum l’intervention humaine dans notre infrastructure, un playbook d’installation et de configuration du serveur zabbix a été mis en place, grâce à Ansible. Jenkins nous a permis d’orchestrer cette installation.

   II.  Infrastructure

Outils utilisés

  • AWS
  • docker
  • Zabbix
  • Jenkins
  • Ansible
  • Serveurs de build(construire les images docker), pré-production et production

Le but de cet article n’est pas de présenter le déploiement d’une application mais d’intégrer de façon automatique un outil de supervision à notre chaine CI/CD existante.

   III.  Installation et configuration du serveur Zabbix

Un playbook d’installation du serveur zabbix a été réalisé. Il est constitué d’un rôle adaptable et des Template flexibles.

Je vous invite à le télécharger sur mon référentiel : https://github.com/franck-art/zabbix-server-playbook

      1.  Configuration de Jenkins

Plugins

  • Github intégration afin de récupérer le code du SCM,
  • Docker pipeline afin de réaliser le pipeline,
  • Embeddable build status afin de faire un badge.

Configuration

  • credentials : ajouter la clé privée générée par AWS afin de ce connecté sur les VMs
  • webhook : administrer jenkins configurer le système github servers
      2.  Création du pipeline de déploiement du serveur zabbix
  • Git clonez le projet du serveur zabbix présenté plus haut : https://github.com/franck-art/zabbix-server-playbook
  • Modifiez le fichier hosts afin d’indiquer l’adresse du serveur zabbix
  • Modifier le fichier le playbook “zabbix_playbook.yml” et indiquer l’adresse du serveur zabbix.
  • Créez un repository sur github
  • Poussez le projet sur votre repository
  • Sur jenkins, créez un projet « pipeline » et indiquez votre repository
  • Lancez le deploiement

Une fois le déploiement terminé, zabbix pourra être disponible via son interface web. Cliquez sur « Next » jusqu’à cette interface :

C:\Users\Fujitsu\Downloads\zabbix-ser.PNG

L’installation de zabbix est terminée et dans la suite, je prendrai un exemple avec le déploiement d’une application « phonebook »

   IV.   Ajout d’un projet de déploiement d’une application « phonebook »

Creation des hotes build, preprod, prod sur zabbix

  • Dans le menu « configuration », aller dans le sous menu « hosts » et cliquez sur « create host »
  • Indiquez les informations propres à l’hôte telles que indiquées sur la figure suivante :

C:\Users\Fujitsu\Desktop\hote.PNG

Dans l’onglet « templates », ajoutez le template « Template OS Linux ».

Une fois les trois serveurs ajoutés, vous aurez cette interface et les serveurs seront marqués en « rouge » sauf celui du serveur zabbix.

C:\Users\Fujitsu\Desktop\hote_rouge.PNG

NB : Ouvrez le port 10050 sur tous les serveurs au niveau du security group d’AWS. Ce port permet la communication entre les agents et le serveur.

D’après notre figure, le serveur zabbix n’arrive pas à détecter les différents serveurs, les agents ne sont pas installés.

Dans la suite, nous verrons comment installer les agents et comment l’intégration s’est faite avec mon projet.

   1.  Déploiement de l’application phonebook sur Jenkins

le but ici n’est pas d’expliquer le déploiement d’une application mais de voir l’intérêt de la supervision dans un projet CI/CD.

Vous pouvez retrouver le projet de l’application sur mon repository :

https://github.com/franck-art/phonebook-project-ansible

Il contient une phase de déploiement automatique des agents zabbix sur les différents serveurs de build, preprod et prod.

Vous pouvez adapter mon playbook de déploiement du serveur zabbix afin de déployer également les agents et ainsi intégrer à votre projet.

Il contient également le déploiement d’une private registry « artifactory ». Je ferai un article spécial afin de présenter le déploiement de artifactory. Mais, vous pouvez retrouver le projet artifactory via ce lien https://github.com/franck-art/artifactory

   2.  Installation des agents zabbix sur les serveurs build, preprod et prod

Dans mon projet, j’ai utilisé ansible pour déployer les agents zabbix. Ici, je présente comment installer et configurer les agents manuellement.

  • Installation
sudo rpm -ivh https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm

sudo yum install zabbix-agent

sudo service zabbix-agent start
  • Editez le fichier /etc/zabbix/zabbix_agentd.conf et indiquez l’adresse du server :

C:\Users\Fujitsu\Downloads\agent.PNG

  • Redémarrez l’agent sur tous les serveurs : sudo service zabbix-agent restart

Sur l’interface du serveur zabbix, on peut voir que les agents ont été détectés et les voyants sont passés au « vert ».

C:\Users\Fujitsu\Desktop\host-up.PNG

NB : les ports de l’application et  le port 10050 doivent être ouverts.

Nous pouvons ainsi visualiser les informations remontées et la disponibilité de notre application.

  • Mémoire

C:\Users\Fujitsu\Desktop\memoire.PNG

  • Disk

C:\Users\Fujitsu\Desktop\disk.PNG

  • Interface réseau

C:\Users\Fujitsu\Desktop\eth0.PNG

  • Disponibilité de l’application déployée

C:\Users\Fujitsu\Desktop\http_dispo.PNG

Conclusion

Au vue de tout ce qui précède, l’intégration d’un serveur de supervision à une chaine CI/CD est primordiale afin d’être informer en temps réel des éventuelles pannes dans l’infrastructure. Cela permettra de prévenir et ainsi réagir rapidement aux pannes. Apres un déploiement continu d’une application, celle-ci peut rester indisponible du fait de plusieurs raisons liées aux systèmes, d’où la nécessité d’un outil de supervision afin de remonter les informations comme le CPU, mémoire, disque, disponibilité de l’application, etc… Zabbix est un système de supervision puissant qui reste facile à prendre en main, flexible et performant. Si le Devops implique flexibilité, automatisation et collaboration, il implique également prévention et réactivité.

Environnement

Outils

Versions

Zabbix

4.0.1

Jenkins

2.235.3

Ansible

2.9

Docker

19.03

Git

2.28.0

Références 

https://github.com/diranetafen/cursus-devops/blob/master/stack/jenkins_vm.yml

https://www.zabbix.com/documentation/4.0/fr/manual/installation/install_from_packages/rhel_centos

Références  personnelles

https://github.com/franck-art/zabbix-server-playbook

https://github.com/franck-art/artifactory

Auteur:  Franck Junior TCHOUNZOU, Ingénieur stagiaire systèmes Devops
Linkedin:  https://www.linkedin.com/in/franck-junior-tchounzou-696512184/