Ceci est une ancienne révision du document !
Superviser un système avec Monit
Introduction
Ce manuel a pour but d'aider à la configuration de la supervision avec Monit. Pour plus d'infos sur Monit, voir Monit
Installation
Sur la machine
Installer le paquet monit de façon traditionnelle avec le gestionnaire de paquets inclus dans la distribution utilisée. Pour RHEL/CentOS, il faut installer le paquet supplémentaire epel-release.
Sous forme de conteneur Docker
On peut utiliser l'image docker de Monit conçue par linuxserver (attention encore en béta), facile à déployer avec docker-compose :
version: "2.1"
services:
monit:
image: lscr.io/linuxserver-labs/monit:latest
container_name: monit
environment:
- PUID=1000 #id de l'utilisateur qui mappe les volumes docker (machine hôte)
- PGID=1000 #id du groupe qui mappe les volumes docker (machine hôte)
- TZ=Europe/Paris #timezone
- APPRISE_TARGETS= #cible des alertes, optionnel
volumes:
- /path/to/config:/config #mappage du répertoire de configuration de monit
ports:
- 2812:2812 #port d'écoute de la WebUI intégrée
restart: unless-stopped
Plus d'infos sur l'image ici : 📖 linuxserver-labs : Monit sur GitHub
Configuration de Monit
La configuration de Monit est inclue dans le fichier /etc/monit/monitrc ou /etc/monitrc.
Néanmoins, il est possible de changer le fichier de configuration à utiliser avec la commande suivante :
monit -c /etc/monit.conf
Pour vérifier que la configuration est valide utiliser :
monit -t
Cela fonctionne aussi pour les installations de Monit conteneurisées.
Redémarrer monit après une modification de la configuration (en mode daemon, en mode service utiliser la commande systemctl classique) :
monit quit monit -c /etc/monit.conf
Délai de rafraichissement des checks
Par défaut, Monit lance ses checks tous les 120 secondes (2min), mais il est possible de modifier cela en changeant la directive set daemon :
set daemon 60
Dans l'exemple ci-dessus, les checks ont été paramétrés à toutes les 60 secondes.
Logging
Activer le logging de Monit, grâce à la directive suivante :
set logfile /var/log/monit
Configuration SMTP
Renseigner les paramètres SMTP pour permettre l'envoi d'alertes par mail :
set mailserver smtp.votre.serveur port 25
S'il y a besoin d'une authentification (facultatif), ajouter :
username julien password azerty1234
Et enfin pour choisir le protocole de connexion (facultatif) :
using TLSV1
Protocoles de chiffrement compatibles : SSL, SSLV2, SSLV3, TLSV1 (pour STARTTLS utiliser SSL).
Personnalisation des alertes par mail
On peut mettre en forme les alertes par mail grâce à la directive set mail-format :
set mail-format {
from: monit@mail.fr
reply-to: support@mail.fr
subject: Alerte : $EVENT - $DATE
message: Monit $ACTION $SERVICE le $DATE sur le serveur $HOST: $DESCRIPTION.
}
Ici, le “from” correspond à l'adresse qui envoie les mails d'alerte, le “reply-to” à l'adresse de réponse (pas très utile), “subject” à l'objet du “message” et message au contenu.
Définition des variables :
- $SERVICE : Nom du service indiqué dans monitrc.
- $EVENT : Type d’événement.
- $DATE : La date en cours.
- $ACTION : Le nom de l’action effectuée, qui correspondra à l’action définie dans monitrc pour ce service.
- $HOST : Le nom de l’hôte où est installé monit.
Pour définir les destinataires des alertes mail, utiliser la directive set alert :
set alert admin@mail.fr
Stockage des alertes
Il est possible de stocker les alertes dans une file pour les réutiliser dans une autre application de monitoring. Pour cela, activer la mise en cache avec set eventqueue, spécifier le chemin de stockage sur la machine avec basedir, et définir la taille de la pile (en nb d'events) avec slots :
set eventqueue basedir /var/lib/monit/events slots 100
Activation de l'interface web
Activation du serveur web sur le port 8080 :
set httpd port 8080
Autoriser les connexions depuis une adresse IP spécifique :
allow 192.168.1.2
Définir l'utilisateur et le mot de passe d'accès à l'interface web (identifiant:mot de passe) :
allow admin:password
Autoriser la connexion de tous les membres d'un groupe d'utilisateurs du système :
allow @groupe
⇒ On peut aussi ajouter “readonly” après le nom d'un groupe pour restreindre ses droits en lecture seule.
Configuration des contrôles et des services
Les contrôles sont les actions effectuées par Monit afin de surveiller le système et de réagir aux alertes.
Il y a plusieurs types d'actions possibles :
- alert : Envoie un message d’alerte
- start : Démarrer le service et envoie un message d’alerte
- stop : Stoppe le service et envoie un message d’alerte
- restart : Redémarre le service et envoie un message d’alerte
- exec : Exécute un script et envoie un message d’alerte
- unmonitor : Désactive la surveillance du service et envoie un message d’alerte
- monitor : Active la surveillance
Les contrôles ont une syntaxe normalisée, qui repose toujours sur un test conditionnel du type « Si <test=resultat> alors <action> ».
Par exemple : « Si la charge CPU est supérieur à 90% alors on envoie une alerte »
Les services sont des ensembles de contrôles qui définissent un service à surveiller (serveur web, système de fichiers, etc…), dont la syntaxe commence toujours par “check”.
Checks systèmes de base
CHECK SYSTEM #Vérification de la charge CPU moyenne sur une durée IF loadavg (15min) > 4 THEN ALERT #Vérification de la charge CPU utilisateur IF cpu usage (user) > 80% THEN ALERT #Vérification de la charge mémoire IF memory usage > 90% THEN ALERT #Vérification de la charge de la mémoire SWAP IF swap usage > 50% THEN ALERT
Etat des disques
Check simple de l'espace disque avec alerte si dépassement du seuil :
CHECK DEVICE DISK WITH PATH /dev/sda1
IF space usage > 80%
THEN ALERT
Test de fichiers/répertoires
Tester l'existence/état d'un répertoire ou d'un fichier :
CHECK <file|directory> /path/file.txt
IF ... THEN ALERT
Vérifier si un hôte distant est joignable
Vérifier qu'une machine est bien joignable (ici on teste le ping puis le SMTP, puis le SSH) :
CHECK HOST host1 ADDRESS 1.1.1.1
IF FAILED icmp type echo count 3 with timeout 35 seconds THEN ALERT
IF FAILED port 25 protocol smtp with timeout 35 seconds THEN ALERT
IF FAILED port **** protocol ssh with timeout 35 seconds for 2 cycles THEN ALERT
Vérifier si un site web est joignable
Ce contrôle permet de vérifier si un site web est bien accessible (ici en https port 443) :
CHECK HOST site1 WITH ADDRESS site1.fr
IF FAILED
port 443
protocol https
THEN ALERT