Premiers pas avec Monit for Server Monitoring
Monit est un programme de surveillance de serveur qui peut vérifier les processus en cours d'exécution sur votre système pour s'assurer qu'ils sont toujours en ligne et fonctionnent dans des limites raisonnables de CPU et de mémoire. Il est également livré avec une interface Web pour surveiller votre système.
Sommaire
Que fait Monit?
Essentiellement, Monit vérifiera un processus donné toutes les deux minutes (par défaut) pour voir comment il fonctionne. Il conserve un journal de l'utilisation des ressources et peut prendre des mesures en cas d'erreur. Cela inclut la relance des processus en panne et le redémarrage des processus en utilisant trop de ressources.
Monit définit entièrement son comportement via des fichiers de configuration. Voici la configuration par défaut pour MySQL à titre d'exemple:
check process mysql with pidfile /var/run/mysqld/mysqld.pid start program = "/usr/sbin/service mysql start" with timeout 60 seconds stop program = "/usr/sbin/service mysql stop" with timeout 60 seconds if totalmem > 400 MB for 5 cycles then alert if totalmem > 600 MB for 5 cycles then restart if cpu > 50% for 5 cycles then alert if cpu > 90% for 5 cycles then restart if 3 restarts within 5 cycles then timeout
Monit est configuré pour surveiller le processus MySQL en cours d'exécution. S'il tombe en panne, il peut le redémarrer à l'aide du start program =
config. Si MySQL commence à utiliser trop de ressources, il peut être redémarré automatiquement, mais vous serez d'abord averti par e-mail.
Il peut également être configuré pour surveiller votre système dans son ensemble et peut vous alerter si votre serveur subit une charge inhabituelle.
check system wp01 if loadavg(5min) > 1 then alert if memory usage > 90% for 5 cycles then alert if cpu usage (user) > 90% for 5 cycles then alert
Tout ce que Monit surveille est visible depuis l'interface Web, qui s'exécute sur le port 2812 par défaut.
De plus, vous pouvez afficher les données de plusieurs hôtes en un seul endroit avec l'utilitaire M / Monit, qui nécessite une licence mais est libre d'essayer.
Installation et configuration de Monit
Installez Monit depuis le gestionnaire de paquets de votre distribution; pour les systèmes basés sur Debian comme Ubuntu, ce serait:
sudo apt-get install monit
Monit doit être fourni avec une configuration par défaut, généralement située à ~/.monitrc
. Si ce n'est pas le cas (comme c'était le cas avec une installation macOS), vous pouvez trouver les fichiers de configuration par défaut ici.
L’interface Web de Monit est configurée pour s’exécuter sur le port 2812. C’est bien, mais elle est entièrement ouverte par défaut avec un mot de passe par défaut. Nous voulons le verrouiller sur une adresse IP autorisée et
set httpd port 2812 allow your_ip allow admin:password
Modifiez ce mot de passe, bien sûr. Il existe quelques options de configuration supplémentaires pour l'interface Web, mais c'est bon pour l'instant.
Monit peut ensuite être configuré pour surveiller les processus individuels. Habituellement, cela se fait avec le fichier PID du processus (souvent trouvé dans /var/run/
) qui stocke le PID actuel de l'instance en cours d'exécution de ce processus, car le PID changera à chaque redémarrage du processus.
check process nginx with pidfile /var/run/nginx.pid start program = "/etc/init.d/nginx start" stop program = "/etc/init.d/nginx stop"
Vous devrez passer une commande Monit pour démarrer et arrêter votre processus. Il devrait redémarrer automatiquement si le processus s'arrête, sans configuration supplémentaire, mais si vous souhaitez redémarrer en fonction de l'utilisation des ressources, vous devrez le spécifier vous-même avec quelques if
déclarations:
check process nginx with pidfile /var/run/nginx.pid start program = "/etc/init.d/nginx start" stop program = "/etc/init.d/nginx stop" if totalmem > 600 MB for 5 cycles then restart if cpu > 90% for 5 cycles then restart if 3 restarts within 5 cycles then timeout
Monit enverra des alertes à chaque redémarrage. Vous serez donc averti lorsque quelque chose ne va pas.
Une fois la configuration terminée, rechargez le démon monit avec:
monit reload
Et commencez la surveillance avec:
monit start all
Cela devrait également démarrer l'interface Web, que vous pouvez utiliser pour vérifier que Monit fonctionne correctement, généralement sur le port 2812.
Il s'agit de la configuration de base pour que Monit sorte de la boîte, mais Monit a beaucoup plus de syntaxe. Vous pouvez lire le manuel complet sur tout ce que Monit peut faire pour en savoir plus.
Configuration des alertes
Monit peut être configuré pour envoyer des alertes par e-mail chaque fois que des problèmes majeurs se produisent ou lorsque les processus sont redémarrés. Vous devrez ajouter la configuration de votre serveur de messagerie:
set mailserver smtp.gmail.com port 587 username "yourserver@gmail.com" password "secret" with timeout 60 seconds set eventqueue basedir /var/lib/monit/events slots 100
Le premier bloc définit le serveur de messagerie à utiliser. La méthode la plus simple serait de simplement utiliser smtp.gmail.com
avec un compte Gmail, bien que vous puissiez installer Postfix sur votre serveur pour l'exécuter localement, ou utiliser un service de messagerie d'entreprise.
La deuxième ligne indique à Monit de mettre les alertes en file d'attente, si le serveur de messagerie n'est pas accessible pour une raison quelconque.
De toute évidence, vous devrez également définir l'adresse e-mail à laquelle il envoie:
set alert youremail@gmail.com
En outre, étant donné que Monit a la possibilité d'exécuter des scripts avec le exec
, vous pouvez configurer des alertes personnalisées comme vous le souhaitez. Par exemple, vous pouvez configurer un script pour vous envoyer des notifications Slack, le stocker sous /usr/local/bin/slack-webhook.sh
et l'exécutez chaque fois que nginx change de PID ou est redémarré par Monit:
check process nginx with pidfile /var/run/nginx.pid start program = "/etc/init.d/nginx start" stop program = "/etc/init.d/nginx stop" if changed pid then exec "/bin/bash -c 'PROCESS=Nginx /usr/local/bin/slack-webhook.sh'" if 1 restart within 1 cycle then exec "/bin/bash -c 'PROCESS=Nginx /usr/local/bin/slack-webhook.sh'"
Notez que tous les chemins doivent être pleinement qualifiés, y compris /bin/bash
et les chemins d'accès aux exécutables dans votre section locale bin
. Et une fois que vous avez terminé de modifier les fichiers de configuration, vous devrez recharger à nouveau Monit.