Ce tutoriel vous montrera comment surveiller un serveur Ubuntu 14.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 didacticiel contient deux chapitres (facultatifs) sur l'intégration de Munin et Monit dans ISPConfig.
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 su
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 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 14.04, exécutez les commandes ci-dessous :
apt-get 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).
Le fichier apache.conf fourni avec Ubuntu 14.04 contient toujours l'ancienne syntaxe apache 2.2 qui n'est pas correcte pour apache 2.4, nous remplaçons donc ce fichier par un nouveau. Nous faisons d'abord une sauvegarde de l'ancien fichier.
mv /etc/munin/apache.conf /etc/munin/apache.conf_bak
Ouvrez le nouveau fichier avec un éditeur :
nano /etc/munin/apache.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...)
3 Protéger par mot de passe le répertoire de sortie Munin (facultatif mais fortement recommandé)
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/apache.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 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 start
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 SSHd)
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.
8 liens
- munin :http://munin-monitoring.org/
- moniteur :http://mmonit.com/monit/