GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Surveillance de serveur avec Munin et Monit sur Ubuntu 16.04 LTS (Xenial Xerus)

Ce tutoriel vous montrera comment surveiller un serveur Ubuntu 16.04 avec Munin et Monit. Munin produit de jolis graphiques sur presque tous les aspects de votre serveur, tandis que Monit vérifie la disponibilité de services tels qu'Apache, MySQL, Postfix et prend les mesures appropriées, telles qu'un redémarrage, s'il détecte qu'un service ne se comporte pas comme prévu. La combinaison des deux vous offre une surveillance complète :des graphiques qui vous permettent de reconnaître les problèmes actuels ou à venir, et un chien de garde qui assure la disponibilité des services surveillés. Ce tutoriel contient deux chapitres (facultatifs) sur l'intégration de Munin et Monit dans ISPConfig 3.1.

1 Remarque préliminaire

Le nom d'hôte de notre système est server1.example.com, et nous avons un site Web www.example.com dessus avec la racine du document /var/www/www.example.com/web.

Les étapes suivantes doivent être effectuées en tant qu'utilisateur root. Pour devenir utilisateur root sur votre serveur, exécutez cette commande :

sudo -s

Assurez-vous que le système est à jour avant de commencer à installer Munin, exécutez :

apt-get update
apt-get upgrade

Apache est utilisé pour afficher les pages Munin, le module apache fcgid est requis pour la fonction de zoom du graphique Munin. Je vais installer apache et le module libapache2-mod-fcgid avec apt.

apt-get -y install apache2 libcgi-fast-perl libapache2-mod-fcgid

Activez le module fcgid dans apache.

a2enmod fcgid

2 Installer et configurer Munin

Pour installer Munin sur Ubuntu 16.04, exécutez les commandes ci-dessous :

apt-get -y install munin munin-node munin-plugins-extra

Lorsque le serveur exécute MySQL ou MariaDB, activez les quelques plugins Munin supplémentaires pour surveiller MySQL :

cd /etc/munin/plugins
ln -s /usr/share/munin/plugins/mysql_ mysql_
ln -s /usr/share/munin/plugins/mysql_bytes mysql_bytes
ln -s /usr/share/munin/plugins/mysql_queries mysql_queries
ln -s /usr/share/munin/plugins/mysql_slowqueries mysql_slowqueries
ln -s /usr/share/munin/plugins/mysql_threads mysql_threads

Ensuite, nous devons éditer le fichier de configuration Munin /etc/munin/munin.conf. Décommentez les lignes dbdir, htmldir, logdir, rundir et tmpldir (les valeurs par défaut conviennent). Nous voulons que Munin utilise le nom server1.example.com au lieu de localhost.localdomain dans la sortie HTML, par conséquent, nous remplaçons localhost.localdomain par server1.example.com dans la section d'arborescence d'hôtes simple. Sans les commentaires, le fichier modifié ressemble à ceci :

nano /etc/munin/munin.conf
# Example configuration file for Munin, generated by 'make build'

# The next three variables specifies where the location of the RRD
# databases, the HTML output, logs and the lock/pid files. They all
# must be writable by the user running munin-cron. They are all
# defaulted to the values you see here.
#
dbdir /var/lib/munin
htmldir /var/cache/munin/www
logdir /var/log/munin
rundir /var/run/munin

# Where to look for the HTML templates
#
tmpldir /etc/munin/templates

# Where to look for the static www files
#
#staticdir /etc/munin/static

# temporary cgi files are here. note that it has to be writable by
# the cgi user (usually nobody or httpd).
#
# cgitmpdir /var/lib/munin/cgi-tmp # (Exactly one) directory to include all files from. includedir /etc/munin/munin-conf.d [...] # a simple host tree
[server1.example.com]
address 127.0.0.1
use_node_name yes [...]

Nous devrions trouver le fichier de configuration Apache pour Munin /etc/munin/apache.conf - il définit un alias appelé munin dans le répertoire de sortie HTML de munin /var/cache/munin/www, ce qui signifie que nous pouvons accéder à munin à partir de tous les sites Web de ce serveur en utilisant le chemin relatif /munin (par exemple http://www.example.com /munin).

Nous allons maintenant modifier le fichier munin.conf pour Apache afin d'autoriser l'accès à partir d'adresses IP externes. Créez une sauvegarde du fichier d'origine :

mv /etc/munin/apache24.conf /etc/munin/apache24.conf_bak

Ouvrez le nouveau fichier avec un éditeur :

nano /etc/munin/apache24.conf

Et collez le contenu ci-dessous :

Alias /munin /var/cache/munin/www
<Directory /var/cache/munin/www>
# Require local
Require all granted
Options FollowSymLinks SymLinksIfOwnerMatch
Options None
</Directory>

ScriptAlias /munin-cgi/munin-cgi-graph /usr/lib/munin/cgi/munin-cgi-graph
<Location /munin-cgi/munin-cgi-graph>
# Require local
Require all granted
Options FollowSymLinks SymLinksIfOwnerMatch
<IfModule mod_fcgid.c>
SetHandler fcgid-script
</IfModule>
<IfModule !mod_fcgid.c>
SetHandler cgi-script
</IfModule>
</Location>

Redémarrez Apache :

service apache2 restart

Redémarrez ensuite Munin :

service munin-node restart

Attendez maintenant quelques minutes pour que Munin puisse produire sa première sortie, puis allez sur http://www.example.com/munin/ dans votre navigateur, et vous verrez les premières statistiques :

(Ceci n'est qu'un petit extrait des nombreux graphiques que munin produit...)

Maintenant, c'est une bonne idée de protéger par mot de passe le répertoire de sortie munin à moins que vous ne vouliez que tout le monde puisse voir toutes les petites statistiques sur votre serveur.

Pour ce faire, nous devons créer le fichier de mots de passe /etc/munin/munin-htpasswd. Nous voulons nous connecter avec le nom d'utilisateur admin, nous faisons donc ceci :

htpasswd -c /etc/munin/munin-htpasswd admin

Saisissez un mot de passe pour l'administrateur. Puis ouvrez à nouveau /etc/munin/apache.conf ...

nano /etc/munin/apache24.conf

... commentez "Exigez tous accordés et ajoutez les lignes que j'ai marquées en rouge :

Alias /munin /var/cache/munin/www
<Directory /var/cache/munin/www>
# Require local
# Require all granted
AuthUserFile /etc/munin/munin-htpasswd
AuthName "Munin"
AuthType Basic
Require valid-user
Options None
</Directory>

ScriptAlias /munin-cgi/munin-cgi-graph /usr/lib/munin/cgi/munin-cgi-graph
<Location /munin-cgi/munin-cgi-graph>
# Require local
# Require all granted
AuthUserFile /etc/munin/munin-htpasswd
AuthName "Munin"
AuthType Basic
Require valid-user
<IfModule mod_fcgid.c>
SetHandler fcgid-script
</IfModule>
<IfModule !mod_fcgid.c>
SetHandler cgi-script
</IfModule>
</Location>

Redémarrez ensuite Apache :

service apache2 restart

4 Activer des modules supplémentaires dans Munin

La commande Munin "munin-node-configure --suggest" peut être utilisée pour obtenir des recommandations pour des modules Munin supplémentaires qui peuvent être activés sur le serveur. Exécuter :

munin-node-configure --suggest

Le résultat devrait ressembler à ceci :

La colonne "utilisé" indique si un module est activé, la colonne "Suggestions" indique si le serveur exécute un service qui peut être surveillé par ce module. Créez un lien symbolique pour le module dans /etc/munin/plugins pour l'activer.

Ici je vais activer les modules apache_* par exemple :

cd /etc/munin/plugins
ln -s /usr/share/munin/plugins/apache_accesses
ln -s /usr/share/munin/plugins/apache_processes
ln -s /usr/share/munin/plugins/apache_volume

Redémarrez Munin pour charger la nouvelle configuration.

service munin-node restart

5 Configurer Munin dans ISPConfig (facultatif)

Le panneau de contrôle d'hébergement ISPConfig a une option pour afficher les données Munin dans le module ISPConfig Monitor. Les données Munin sont chargées dans une iframe, comme la plupart des navigateurs bloquent le chargement du contenu depuis http dans un site https, nous devrons trouver un moyen d'accéder aux statistiques Munin via SSL. Le moyen le plus simple consiste à utiliser le vhost ISPConfig compatible SSL pour cela en créant un lien symbolique dans le répertoire Web ISPConfig vers le répertoire de données Munin www.

ln -s /var/cache/munin/www /usr/local/ispconfig/interface/web/munin

Nous pouvons maintenant accéder à Munin dans un navigateur avec https://server1.example.com:8080/munin via le vhost apache ISPConfig.

L'étape suivante consiste à ajouter la configuration dans ISPConfig.

Connectez-vous à ISPConfig en tant qu'utilisateur administrateur (admin) et accédez à Système > Configuration du serveur, remplissez l'URL, le nom d'utilisateur et le mot de passe pour Munin comme indiqué ci-dessous.

Assurez-vous d'utiliser https:// et le port 8080 dans l'URL munin.

6 Installer et configurer Monit

Pour installer Monit, nous procédons comme suit :

apt-get -y install monit

Maintenant, nous devons éditer /etc/monit/monitrc. Le fichier /etc/monit/monitrc par défaut contient de nombreux exemples et vous pouvez trouver d'autres exemples de configuration sur http://mmonit.com/monit/documentation/. Cependant, dans mon cas, je veux surveiller proftpd, sshd, mysql, apache et postfix, je veux activer l'interface Web Monit sur le port 2812, je veux une interface Web https, je veux me connecter à l'interface Web avec le nom d'utilisateur admin et le mot de passe howtoforge, et je veux que Monit envoie des alertes par e-mail à [email protected], donc mon fichier ressemble à ceci (j'ai ajouté des exemples pour d'autres démons à la configuration afin que vous puissiez ajuster le fichier à vos besoins) :

cp /etc/monit/monitrc /etc/monit/monitrc_orig
cat /dev/null > /etc/monit/monitrc
nano /etc/monit/monitrc
set daemon 60
set logfile syslog facility log_daemon
set mailserver localhost
set mail-format { from: [email protected] }
set alert [email protected]
set httpd port 2812 and
SSL ENABLE
PEMFILE /var/certs/monit.pem
allow admin:howtoforge

check process sshd with pidfile /var/run/sshd.pid
start program "/usr/sbin/service ssh start"
stop program "/usr/sbin/service ssh stop"
if failed port 22 protocol ssh then restart
if 5 restarts within 5 cycles then timeout

check process apache with pidfile /var/run/apache2/apache2.pid
group www
start program = "/usr/sbin/service apache2 start"
stop program = "/usr/sbin/service apache2 stop"
if failed host localhost port 80 protocol http
and request "/monit/token" then restart
if cpu is greater than 60% for 2 cycles then alert
if cpu > 80% for 5 cycles then restart
if totalmem > 500 MB for 5 cycles then restart
if children > 250 then restart
if loadavg(5min) greater than 10 for 8 cycles then stop
if 3 restarts within 5 cycles then timeout

#check process mysql with pidfile /var/run/mysqld/mysqld.pid
# group database
# start program = "/usr/sbin/service mysql start"
# stop program = "/usr/sbin/service mysql stop"
# if failed host 127.0.0.1 port 3306 then restart
# if 5 restarts within 5 cycles then timeout

#check process proftpd with pidfile /var/run/proftpd.pid
# start program = "/usr/sbin/service proftpd start"
# stop program = "/usr/sbin/service proftpd stop"
# if failed port 21 protocol ftp then restart
# if 5 restarts within 5 cycles then timeout
#
#check process postfix with pidfile /var/spool/postfix/pid/master.pid
# group mail
# start program = "/usr/sbin/service postfix start"
# stop program = "/usr/sbin/service postfix stop"
# if failed port 25 protocol smtp then restart
# if 5 restarts within 5 cycles then timeout
#
#check process nginx with pidfile /var/run/nginx.pid
# start program = "/usr/sbin/service nginx start"
# stop program = "/usr/sbin/service nginx stop"
# if failed host 127.0.0.1 port 80 then restart
#
#check process memcached with pidfile /var/run/memcached.pid
# start program = "/usr/sbin/service memcached start"
# stop program = "/usr/sbin/service memcached stop"
# if failed host 127.0.0.1 port 11211 then restart
#
#check process pureftpd with pidfile /var/run/pure-ftpd/pure-ftpd.pid
# start program = "/usr/sbin/service pure-ftpd-mysql start"
# stop program = "/usr/sbin/service pure-ftpd-mysql stop"
# if failed port 21 protocol ftp then restart
# if 5 restarts within 5 cycles then timeout
#
#check process named with pidfile /var/run/named/named.pid
# start program = "/usr/sbin/service bind9 start"
# stop program = "/usr/sbin/service bind9 stop"
# if failed host 127.0.0.1 port 53 type tcp protocol dns then restart
# if failed host 127.0.0.1 port 53 type udp protocol dns then restart
# if 5 restarts within 5 cycles then timeout
#
#check process ntpd with pidfile /var/run/ntpd.pid
# start program = "/usr/sbin/service ntp start"
# stop program = "/usr/sbin/service ntp stop"
# if failed host 127.0.0.1 port 123 type udp then restart
# if 5 restarts within 5 cycles then timeout
#
#check process mailman with pidfile /var/run/mailman/mailman.pid
# group mail
# start program = "/usr/sbin/service mailman start"
# stop program = "/usr/sbin/service mailman stop"
#
#check process amavisd with pidfile /var/run/amavis/amavisd.pid
# group mail
# start program = "/usr/sbin/service amavis start"
# stop program = "/usr/sbin/service amavis stop"
# if failed port 10024 protocol smtp then restart
# if 5 restarts within 5 cycles then timeout
#
#check process courier-imap with pidfile /var/run/courier/imapd.pid
# group mail
# start program = "/usr/sbin/service courier-imap start"
# stop program = "/usr/sbin/service courier-imap stop"
# if failed host localhost port 143 type tcp protocol imap then restart
# if 5 restarts within 5 cycles then timeout
#
#check process courier-imap-ssl with pidfile /var/run/courier/imapd-ssl.pid
# group mail
# start program = "/usr/sbin/service courier-imap-ssl start"
# stop program = "/usr/sbin/service courier-imap-ssl stop"
# if failed host localhost port 993 type tcpssl sslauto protocol imap then restart
# if 5 restarts within 5 cycles then timeout
#
#check process courier-pop3 with pidfile /var/run/courier/pop3d.pid
# group mail
# start program = "/usr/sbin/service courier-pop start"
# stop program = "/usr/sbin/service courier-pop stop"
# if failed host localhost port 110 type tcp protocol pop then restart
# if 5 restarts within 5 cycles then timeout
#
#check process courier-pop3-ssl with pidfile /var/run/courier/pop3d-ssl.pid
# group mail
# start program = "/usr/sbin/service courier-pop-ssl start"
# stop program = "/usr/sbin/service courier-pop-ssl stop"
# if failed host localhost port 995 type tcpssl sslauto protocol pop then restart
# if 5 restarts within 5 cycles then timeout
#
#check process dovecot with pidfile /var/run/dovecot/master.pid
# group mail
# start program = "/usr/sbin/service dovecot start"
# stop program = "/usr/sbin/service dovecot stop"
# if failed host localhost port 143 type tcp protocol imap then restart
# if 5 restarts within 5 cycles then timeout

Le fichier de configuration est assez explicite; si vous n'êtes pas sûr d'une option, consultez la documentation de Monit :http://mmonit.com/monit/documentation/monit.html

Dans la partie apache de la configuration de Monit vous trouvez ceci :

   if failed host localhost port 80 protocol http
      and request "/monit/token" then restart

ce qui signifie que Monit essaie de se connecter à localhost sur le port 80 et essaie d'accéder au fichier /monit/token qui est /var/www/html/monit/token car la racine du document de notre site Web est /var/www/html. Si Monit ne réussit pas, cela signifie qu'Apache n'est pas en cours d'exécution et que Monit va le redémarrer. Nous devons maintenant créer le fichier /var/www/html/monit/token et y écrire une chaîne aléatoire :

mkdir /var/www/html/monit
echo "hello" > /var/www/html/monit/token

Ensuite, nous créons le certificat pem (/var/certs/monit.pem) dont nous avons besoin pour l'interface Web Monit cryptée SSL :

mkdir /var/certs
cd /var/certs

Nous avons besoin d'un fichier de configuration OpenSSL pour créer notre certificat. Cela peut ressembler à ceci :

nano /var/certs/monit.cnf
# create RSA certs - Server

RANDFILE = ./openssl.rnd

[ req ]
default_bits = 2048
encrypt_key = yes
distinguished_name = req_dn
x509_extensions = cert_type

[ req_dn ]
countryName = Country Name (2 letter code)
countryName_default = MO

stateOrProvinceName             = State or Province Name (full name)
stateOrProvinceName_default     = Monitoria

localityName                    = Locality Name (eg, city)
localityName_default            = Monittown

organizationName                = Organization Name (eg, company)
organizationName_default        = Monit Inc.

organizationalUnitName          = Organizational Unit Name (eg, section)
organizationalUnitName_default  = Dept. of Monitoring Technologies

commonName                      = Common Name (FQDN of your server)
commonName_default              = server.monit.mo

emailAddress                    = Email Address
emailAddress_default            = [email protected]

[ cert_type ]
nsCertType = server

Maintenant, nous créons le certificat comme ceci :

openssl req -new -x509 -days 365 -nodes -config ./monit.cnf -out /var/certs/monit.pem -keyout /var/certs/monit.pem
openssl gendh 1024 >> /var/certs/monit.pem
openssl x509 -subject -dates -fingerprint -noout -in /var/certs/monit.pem
chmod 600 /var/certs/monit.pem

Enfin, nous pouvons démarrer Monit :

service monit restart

Pointez maintenant votre navigateur sur https://www.example.com:2812/ (assurez-vous que le port 2812 n'est pas bloqué par votre pare-feu), connectez-vous avec admin et howtoforge, et vous devriez voir l'interface Web Monit. Cela devrait ressembler à ceci :

(Écran principal)

(Page d'état du système)

En fonction de votre configuration dans /etc/monit/monitrc, monit redémarrera vos services en cas d'échec et enverra des e-mails de notification si les ID de processus des services changent, etc.

Pour obtenir le statut de Monit sur le shell, exécutez la commande "monit status" :

monit status

La commande affichera l'état de tous les services surveillés.

7 Configurer Monit dans ISPConfig 

Le panneau de configuration du serveur ISPConfig peut afficher les données Monit dans son module Monitor. Pour activer cette fonction dans ISPConfig, connectez-vous à ISPConfig en tant qu'utilisateur administrateur (admin), accédez à Système > Configuration du serveur, remplissez l'URL, le nom d'utilisateur et le mot de passe pour Monit, comme indiqué ci-dessous.

  • munin :http://munin-monitoring.org/
  • moniteur :http://mmonit.com/monit/

Ubuntu
  1. Comment installer Node.js sur le serveur Ubuntu 16.04 Xenial Xerus Linux

  2. Étapes pour installer Ubuntu 16.04 LTS (Xenial Xerus) avec des captures d'écran

  3. Comment configurer le serveur et le client Kerberos sur Ubuntu 18.04 LTS

  4. Présentation d'Ubuntu 16.04 LTS (Xenial Xerus)

  5. Surveillance de serveur avec Shinken sur Ubuntu 16.04

Surveillance de serveur avec Munin et Monit sur Debian 8 (Jessie)

Surveillance du serveur avec munin et monit sur CentOS 5.2

Surveillance de serveur avec Munin et Monit sur CentOS 7

Surveillance de serveur avec Munin et Monit sur CentOS 7.2

Surveillance du serveur avec munin et monit sur Fedora 7

Comment installer et configurer Monit Monitoring Server sur Ubuntu 20.04 LTS