La supervision décentralisée avec Monit
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 :
Sous CentOS, Red Hat, Fedora :
Vérifions l'installation de Monit en lançant la commande ci-dessous :
Enfin, activons Monit au démarrage :
Configuration et usage
Lancez la commande ci-dessous pour obtenir un rapport sur l'état du système :
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.
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/
.
allow localhost
Puis, relancez Monit pour prendre en compte le changement de configuration.
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
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
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
:
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 :
Puis, relancez Monit pour prendre en compte le changement de configuration.
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.
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
Un article à retrouver sur P3ter.fr