La supervision décentralisée avec Monit

Rédigé par P3ter - - Aucun commentaire

Monit est une application de supervision décentralisée. A l'heure ou les Nagios, Centreon et autre Shinken, ont une approche centralisée, Monit est un outil standalone qui s'installe directement sur chacunes de vos machines. Fonctionnant de manière isolée, nous verront comment déployer autant d'instance de Monit que nous avons de serveur grâce à un playbook Ansible.

Monit est un logiciel libre développé en C. Vous trouverez toute la documentation nécessaire à son utilisation sur le site officiel.

Installation

Monit est disponible dans les dépôts de la plupart des distributions Linux, ce qui en simplifie l'installation.

Sous Debian :

printf "%sn" "deb http://ftp.de.debian.org/debian buster-backports main" | sudo tee /etc/apt/sources.list.d/buster-backports.list
sudo apt update

sudo apt install -t buster-backports monit

Sous Ubuntu et Raspbian :

sudo apt install monit

Sous CentOS, Red Hat, Fedora :

sudo dnf install monit

Vérifions l'installation de Monit en lançant la commande ci-dessous :

monit -V

Enfin, activons Monit au démarrage :

sudo systemctl enable monit

Configuration et usage

Lancez la commande ci-dessous pour obtenir un rapport sur l'état du système :

sudo monit status

Si vous obtenez l'erreur ci-dessous, alors il est nécessaire de modifier la configuration de Monit, afin d'activer l'interface web. En effet, celle-ci est nécessaire pour utiliser monit status, car le client monit utilise l'interface http pour communiquer avec le démon Monit.

Monit: the monit HTTP interface is not enabled, please add the 'set httpd' statement and use the 'allow' option to allow monit to connect

Le fichier de configuration de Monit étant /etc/monit/monitrc, vous pouvez directement modifier ce fichier, mais dans le cadre de l'utilisation d'Ansible, nous allons plutôt créer un fichier /etc/monit/conf.d/monit.conf. Ainsi nous ne seront pas impactés par les mises à jours de Monit et nous pourront gérer nos différents fichiers .conf dans un outil de versionning de code tel que Git. Vérifiez au préalable la présence d'une ligne include dans le fichier monitrc qui permettra de charger tous les fichiers présents dans le répertoire /etc/monit/conf.d/.

set httpd port 2812 and
    allow localhost

Puis, relancez Monit pour prendre en compte le changement de configuration.

sudo monit reload
sudo monit status

Configurer des alertes

Pour chaque alerte que l'on souhaite configurer nous allons créer un fichier spécifique dans le répertoire /etc/monit/conf.d/, ce qui nous permettra de déployer uniquement les alertes nécessaires en fonction du type de service que l'on souhaite monitorer. Je vous propose deux exemples simples dans cet article, mais je vous invite à aller sur le site officiel de Monit qui regorge d'exemples : https://mmonit.com/wiki/Monit/ConfigurationExamples.

Les alertes s'affichent en rouge avec la commande : sudo monit status.

Surveiller l'espace disque

Ajouter les lignes ci-dessous dans le fichier /etc/monit/conf.d/disk.conf

check filesystem disk with path /
    if space usage > 80 then alert

Monit va ainsi surveiller le chemin / et provoquer une alerte si l'espace occupé dépasse les 80%.

Surveiller un service distant

Ajouter les lignes ci-dessous au fichier /etc/monit/conf.d/monsiteweb.conf

check host pluxml.org address www.monsiteweb.fr
    if failed ping timeout 15 seconds then alert

Dans cet exemple, Monit va surveiller que l'adresse www.monsiteweb.fr répond au travers du protocole HTTP. En cas d'erreur, Monit lancera un ping et au délà des 15 secondes de timeout une alerte sera créée.

Activer les notifications par e-mail

Monit permet également d'envoyer les alertes par e-mail. Vous pouvez utiliser le service mail présent en local (postfix, exim4, ...), en ajouter les lignes ci-dessous dans /etc/monit/conf.d/monit.conf :

set mailserver localhost

Si vous n'avez pas ce type de service, vous pouvez utiliser un serveur mail tiers. Pour cela ajouter les lignes ci-dessous dans le fichier /etc/monit/conf.d/monit.conf (à adapter en fonction du service tiers utilisé) :

set mailserver mail.domain.net port 465
    username noreply@domain.net password "PassWord"
    using SSL with timeout 30 seconds

Il est également possible de modifier le template de mail ainsi :

set mail-format {
  from:    Monit <monit@domain.net>
  subject: monit alert --  $EVENT $SERVICE
  message: $EVENT Service $SERVICE
                Date:        $DATE
                Action:      $ACTION
                Host:        $HOST
                Description: $DESCRIPTION

           Your faithful employee,
           Monit
}

Enfin, définissez le destinataire des alertes avec la ligne ci-dessous :

set alert alert@domain.net

Puis, relancez Monit pour prendre en compte le changement de configuration.

sudo monit reload

Déploiement de Monit avec Ansible

Comme nous l'avons vu, la configuration de Monit se réalisant au travers de simples fichiers, le déploiement de Monit sur d'autres serveurs peux se faire facilement en copiant ces fichiers directement sur la machine distante. Vous trouverez ci-dessous un exemple de playbook Ansible pour Debian permettant d'installer, puis de copier les fichiers de configuration. Pensez seulement à remplacer <username> par le nom d'utilisateur à utiliser pour la connexion SSH sur l'hôte distant, ainsi que </chemin/vers/fichiers/monit/> par le chemin contenant vos fichiers de configuration pour Monit.

- name: Install Monit for web servers on Debian
  hosts: all
  remote_user: <username>
  become: true
  become_method: sudo
 
  tasks:
  - name: Add backports repository
    apt_repository:
      repo: deb http://ftp.de.debian.org/debian buster-backports main
      state: present
      filename: buster-backports
  - name: Monit installation
    apt:
      name: monit
      autoclean: yes
  - name : Monit configuration files deploy
    copy:
      src: </chemin/vers/fichiers/monit/>
      dest: /etc/monit/conf.d/
      owner: root
      group: root
      mode: '0644'
  - name: Restart Monit
    service:
      name: monit
      state: restarted

 

Fil RSS des commentaires de cet article

Écrire un commentaire

Quelle est le dernier caractère du mot izmjdh ?