Outils personnels

Monit installation : Différence entre versions

De wikiGite

Ligne 5 : Ligne 5 :
  
 
Dans /etc/monit/monitrc, décommenter :
 
Dans /etc/monit/monitrc, décommenter :
  set daemon  120 #*** NOTE POUR DEBIAN : c'est le paramètre de /etc/default/monit CHECK_INTERVAL qui est prioritaire
+
  set daemon  120 # NOTE POUR DEBIAN : c'est le paramètre de /etc/default/monit CHECK_INTERVAL qui est prioritaire
(lancement du démon avec "-d" dans l'init.d), c'est lui qu'il faut donc modifier !
+
                # (lancement du démon avec "-d" dans l'init.d), c'est lui qu'il faut donc modifier !
 
  set logfile syslog facility log_daemon
 
  set logfile syslog facility log_daemon
 
  set mailserver  localhost            # primary mailserver
 
  set mailserver  localhost            # primary mailserver
Ligne 12 : Ligne 12 :
 
Modifier le format du mail :
 
Modifier le format du mail :
 
  set mail-format {
 
  set mail-format {
From: monit-<*** nom du serveur ****>@systea.net
+
From: monit-''<nom du serveur>''@systea.net
 
Subject: $EVENT $SERVICE
 
Subject: $EVENT $SERVICE
 
Message: $DATE
 
Message: $DATE
Ligne 21 : Ligne 21 :
  
 
Donner le destinataire :
 
Donner le destinataire :
  set alert fsoyer@systea.net                      # receive all alerts
+
  set alert ''<administrateur>''@systea.net                      # receive all alerts
  
 
'''Eventuellement''', ouvrir le "embedded webserver" au localhost pour au moins pouvoir lancer un "monit status" ou "monit summary" (voir plus bas pour redirection php si APACHE installé):
 
'''Eventuellement''', ouvrir le "embedded webserver" au localhost pour au moins pouvoir lancer un "monit status" ou "monit summary" (voir plus bas pour redirection php si APACHE installé):
Ligne 33 : Ligne 33 :
 
     SSL Enable  
 
     SSL Enable  
 
     PEMFILE /etc/apache2/ssl/apache.pem
 
     PEMFILE /etc/apache2/ssl/apache.pem
     allow admin:'cela2M!'      # require user 'admin' with password
+
     allow admin:'''<mot de passe admin>'''      # require user 'admin' with password
 +
 
 
'''Note2'''
 
'''Note2'''
 
L'ouverture du port 2812 peut être un trou de sécurité. Ne l'ouvrir qu'en connaissance de cause.
 
L'ouverture du port 2812 peut être un trou de sécurité. Ne l'ouvrir qu'en connaissance de cause.
Ligne 39 : Ligne 40 :
 
Vérifier que :
 
Vérifier que :
 
  include /etc/monit/monit.d/*
 
  include /etc/monit/monit.d/*
est décommenté (ajouter le "monit" au milieu).
+
est décommenté (ajouter le "monit" au milieu, il n'y est pas par défaut).
  
 
Créer le répertoire au besoin.
 
Créer le répertoire au besoin.
Ligne 48 : Ligne 49 :
 
Installer :
 
Installer :
 
  # rpm -i monit-4.9-2.el4.rf.i386.rpm
 
  # rpm -i monit-4.9-2.el4.rf.i386.rpm
Attention le fichier de conf est '''/etc/monit.conf'''
+
'''Attention''', le fichier de conf est '''/etc/monit.conf'''. Le répertoire /etc/monit.d est déjà créé.
 
 
  
  
 
= Configuration des services =
 
= Configuration des services =
Exemple de fichier de config /etc/monit/monit.d/isp129.systea.net, type DEBIAN, '''surveillance locale''' :
+
Exemple de fichier de config /etc/monit/monit.d/serveur.systea.net, type '''DEBIAN''', '''surveillance locale''' :
 
  ###############################################################################
 
  ###############################################################################
  ## Isp129.systea.net local
+
  ## serveur.systea.net local
 
  ###############################################################################
 
  ###############################################################################
 
  #
 
  #
  check system isp129.systea.net
+
  check system serveur.systea.net
 
     if loadavg (1min) > 6 then alert
 
     if loadavg (1min) > 6 then alert
 
     if loadavg (5min) > 4 then exec "/root/bin/top.sh"
 
     if loadavg (5min) > 4 then exec "/root/bin/top.sh"
Ligne 99 : Ligne 99 :
 
     if space usage > 90% then alert
 
     if space usage > 90% then alert
  
Exemple de fichier de config /etc/monit/monit.d/dpixnet.ephoto.fr, type CENTOS, '''surveillance locale''' :
+
Exemple de fichier de config /etc/monit/monit.d/serveur.ephoto.fr, type '''CENTOS''', '''surveillance locale''' :
 
  ###############################################################################
 
  ###############################################################################
  ## dpixnet.ephoto.fr local
+
  ## serveur.ephoto.fr local
 
  ###############################################################################
 
  ###############################################################################
 
  #
 
  #
  check system dpixnet.ephoto.fr
+
  check system serveur.ephoto.fr
 
     if loadavg (1min) > 6 then alert
 
     if loadavg (1min) > 6 then alert
 
     if loadavg (5min) > 4 then exec "/opt/systools/top.sh"
 
     if loadavg (5min) > 4 then exec "/opt/systools/top.sh"
Ligne 142 : Ligne 142 :
 
  cat $LOG | mail -s "top.log isp129" fsoyer@systea.net
 
  cat $LOG | mail -s "top.log isp129" fsoyer@systea.net
  
Exemple de /etc/monit/monit.d/isp129.systea.net sur atuin qui surveille isp129 '''en remote''' :
+
Exemple de /etc/monit/monit.d/serveur.systea.net sur serveur2 qui surveille serveur '''en remote''' :
 
  ###############################################################################
 
  ###############################################################################
  ## Isp129.systea.net remote
+
  ## serveur.systea.net remote
 
  ###############################################################################
 
  ###############################################################################
 
  #
 
  #
  check host isp129.systea.net with address 80.64.226.29
+
  check host serveur.systea.net with address 1.2.3.4
 
         if failed icmp type echo count 3 with timeout 10 seconds then alert
 
         if failed icmp type echo count 3 with timeout 10 seconds then alert
  
Ligne 154 : Ligne 154 :
 
Apache doit être opérationnel sur la machine
 
Apache doit être opérationnel sur la machine
  
Créer /var/www/monit, y copier /home/fsoyer/Documents/Documents divers - logiciels/monit/monit.php en index.php.
+
Créer /var/www/monit/monit.php :
 +
<?php
 +
//  Copyright (C), 2004 David Fletcher, <david@megapico.co.uk>
 +
//
 +
//  This program is free software; you can redistribute it and/or
 +
//  modify it under the terms of the GNU General Public License as
 +
//  published by the Free Software Foundation; either version 2 of the
 +
//  License, or (at your option) any later version.
 +
//
 +
//  This program is distributed in the hope that it will be useful, but
 +
//  WITHOUT ANY WARRANTY; without even the implied warranty of
 +
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 +
//  General Public License for more details.
 +
//
 +
//  You should have received a copy of the GNU General Public License
 +
//  along with this program; if not, write to the Free Software Foundation,
 +
//  Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 +
//
 +
//  Requires PHP, and a working webserver!
 +
//  @author Author David Fletcher, <david@megapico.co.uk>
 +
//  @version \$Id: monit.php,v 1.2 2004/11/20 23:53:42 hauk Exp $
 +
 +
//Configuration - set this to match the information in /etc/monitrc
 +
//Set information about the monit server address, port and login details.
 +
$addr = 'localhost';
 +
$port = 2812;
 +
$path = '/';
 +
$user = 'admin';
 +
$pass = 'monit';
 +
$timeout = 30;
 +
//End of configuration
 +
 +
$urlHandle = fsockopen($addr, $port, $errno, $errstr, $timeout);
 +
socket_set_timeout($urlHandle, $timeout);
 +
$urlString = "GET $path HTTP/1.0\r\nHost: $addr\r\nConnection: Keep-Alive\r\nUser-Agent: MonitPHP\r\n";
 +
$urlString .= "Authorization: Basic ".base64_encode("$user:$pass")."\r\n";
 +
$urlString .= "\r\n";
 +
fputs($urlHandle, $urlString);
 +
$response = fgets($urlHandle);
 +
$endHeader = false;                          // Strip initial header information
 +
 +
while ( !$endHeader){
 +
  if (fgets($urlHandle) == "\r\n")
 +
    $endHeader = true;
 +
}
 +
  $info = '';                                  // Generate a string to send to the screen
 +
 +
while (!feof($urlHandle)) {
 +
  $info.=fgets($urlHandle);
 +
}
 +
  fclose ($urlHandle);
 +
echo $info;
 +
?>
  
 
Créer /etc/apache2/conf.d/monit.conf :
 
Créer /etc/apache2/conf.d/monit.conf :

Version du 8 octobre 2008 à 08:03

Sur Debian

  1. Installation

apt-get install monit

Dans /etc/monit/monitrc, décommenter :

set daemon  120 # NOTE POUR DEBIAN : c'est le paramètre de /etc/default/monit CHECK_INTERVAL qui est prioritaire
                # (lancement du démon avec "-d" dans l'init.d), c'est lui qu'il faut donc modifier !
set logfile syslog facility log_daemon
set mailserver   localhost             # primary mailserver

Modifier le format du mail :

set mail-format {

From: monit-<nom du serveur>@systea.net Subject: $EVENT $SERVICE Message: $DATE $SERVICE : $EVENT $DESCRIPTION Monit $ACTION : $SERVICE

}

Donner le destinataire :

set alert <administrateur>@systea.net                       # receive all alerts

Eventuellement, ouvrir le "embedded webserver" au localhost pour au moins pouvoir lancer un "monit status" ou "monit summary" (voir plus bas pour redirection php si APACHE installé):

set httpd port 2812 and
    use address localhost  # only accept connection from localhost
    allow localhost        # allow localhost to connect to the server and

Note S'il ny a pas d'Apache, ouvrir le port 2812 et configurer monit en SSL autonome :

set httpd port 2812 and
   SSL Enable 
   PEMFILE /etc/apache2/ssl/apache.pem
   allow admin:<mot de passe admin>      # require user 'admin' with password

Note2 L'ouverture du port 2812 peut être un trou de sécurité. Ne l'ouvrir qu'en connaissance de cause.

Vérifier que :

include /etc/monit/monit.d/*

est décommenté (ajouter le "monit" au milieu, il n'y est pas par défaut).

Créer le répertoire au besoin.

Sur CentOS / RedHat

Récupérer la dernière version de paquet sur dag.wieers.com (CentOS4 = RHEL4)

# wget http://dag.wieers.com/rpm/packages/monit/monit-4.9-2.el4.rf.i386.rpm

Installer :

# rpm -i monit-4.9-2.el4.rf.i386.rpm

Attention, le fichier de conf est /etc/monit.conf. Le répertoire /etc/monit.d est déjà créé.


Configuration des services

Exemple de fichier de config /etc/monit/monit.d/serveur.systea.net, type DEBIAN, surveillance locale :

###############################################################################
## serveur.systea.net local
###############################################################################
#
check system serveur.systea.net
    if loadavg (1min) > 6 then alert
    if loadavg (5min) > 4 then exec "/root/bin/top.sh"
    if memory usage > 85% then exec "/root/bin/top.sh"
    if cpu usage (user) > 70% then exec "/root/bin/top.sh"
    if cpu usage (system) > 50% then exec "/root/bin/top.sh"
    if cpu usage (wait) > 60% then exec "/root/bin/top.sh"
check process apache2 with pidfile /var/run/apache2.pid
    start program = "/etc/init.d/apache2 start"
    stop program  = "/etc/init.d/apache2 stop"
    if cpu > 60% for 2 cycles then alert
    if cpu > 80% for 5 cycles then restart
    if failed port 80 then restart
check process proftpd1 with pidfile /var/run/proftpd.pid
    start program = "/etc/init.d/proftpd start"
    stop program  = "/etc/init.d/proftpd stop"
    if cpu > 60% for 2 cycles then alert
    if cpu > 80% for 5 cycles then restart
    if failed port 21 then restart
check process postfix2 with pidfile /var/spool/postfix/pid/master.pid
    start program = "/etc/init.d/postfix start"
    stop program  = "/etc/init.d//postfix stop"
    if cpu > 60% for 2 cycles then alert
    if cpu > 80% for 5 cycles then restart
    if failed port 25 then restart
check process mysql5 with pidfile /var/run/mysqld/mysqld.pid
    start program = "/etc/init.d/mysql start"
    stop program  = "/etc/init.d/mysql stop"
    if cpu > 60% for 2 cycles then alert
    if cpu > 80% for 5 cycles then restart
    if failed port 3306 then restart
check process postgresql7 with pidfile /var/lib/postgresql/7.4/main/postmaster.pid
    start program = "/etc/init.d/postgresql-7.4 start"
    stop program  = "/etc/init.d/postgresql-7.4 stop"
    if cpu > 60% for 2 cycles then alert
    if cpu > 80% for 5 cycles then restart
    if failed port 5432 then restart
check device root with path /dev/sda1
    if space usage > 75% for 5 times within 15 cycles then alert
    if space usage > 90% then alert

Exemple de fichier de config /etc/monit/monit.d/serveur.ephoto.fr, type CENTOS, surveillance locale :

###############################################################################
## serveur.ephoto.fr local
###############################################################################
#
check system serveur.ephoto.fr
    if loadavg (1min) > 6 then alert
    if loadavg (5min) > 4 then exec "/opt/systools/top.sh"
    if memory usage > 85% then exec "/opt/systools/top.sh"
    if cpu usage (user) > 70% then exec "/opt/systools/top.sh"
    if cpu usage (system) > 50% then exec "/opt/systools/top.sh"
    if cpu usage (wait) > 60% then exec "/opt/systools/top.sh"
check process httpd with pidfile /var/run/httpd.pid
    start program = "/etc/init.d/httpd start"
    stop program  = "/etc/init.d/httpd stop"
    if cpu > 60% for 2 cycles then alert
    if cpu > 80% for 5 cycles then restart
    if failed port 80 then restart
check process sendmail with pidfile /var/run/sendmail.pid
    start program = "/etc/init.d/sendmail start"
    stop program  = "/etc/init.d/sendmail stop"
    if cpu > 60% for 2 cycles then alert
    if cpu > 80% for 5 cycles then restart
    if failed port 25 then restart
check process mysql5 with pidfile /var/run/mysqld/mysqld.pid
    start program = "/etc/init.d/mysqld start"
    stop program  = "/etc/init.d/mysqld stop"
    if cpu > 60% for 2 cycles then alert
    if cpu > 80% for 5 cycles then restart
    if failed port 3306 then restart
check device root with path /dev/mapper/VolGroup00-LogVol00
    if space usage > 75% for 5 times within 15 cycles then alert
    if space usage > 90% then alert
check device home with path /dev/mapper/VolGroup00-LogVol04
    if space usage > 75% for 5 times within 15 cycles then alert
    if space usage > 90% then alert

Fichier top.sh :

#!/bin/bash
LOG=/root/top.log
top -d 5 -b -n 5 > $LOG
cat $LOG | mail -s "top.log isp129" fsoyer@systea.net

Exemple de /etc/monit/monit.d/serveur.systea.net sur serveur2 qui surveille serveur en remote :

###############################################################################
## serveur.systea.net remote
###############################################################################
#
check host serveur.systea.net with address 1.2.3.4
       if failed icmp type echo count 3 with timeout 10 seconds then alert

Accès au webserver de l'extérieur sans ouvrir de port supplémentaire

Apache doit être opérationnel sur la machine

Créer /var/www/monit/monit.php :

<?php
//  Copyright (C), 2004 David Fletcher, <david@megapico.co.uk>
// 
//  This program is free software; you can redistribute it and/or
//  modify it under the terms of the GNU General Public License as
//  published by the Free Software Foundation; either version 2 of the
//  License, or (at your option) any later version.
// 
//  This program is distributed in the hope that it will be useful, but
//  WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
//  General Public License for more details.
// 
//  You should have received a copy of the GNU General Public License
//  along with this program; if not, write to the Free Software Foundation,
//  Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
//  Requires PHP, and a working webserver!
//  @author Author David Fletcher, <david@megapico.co.uk>
//  @version \$Id: monit.php,v 1.2 2004/11/20 23:53:42 hauk Exp $

//Configuration - set this to match the information in /etc/monitrc
//Set information about the monit server address, port and login details.
$addr = 'localhost';
$port = 2812;
$path = '/';
$user = 'admin';
$pass = 'monit';
$timeout = 30;
//End of configuration

$urlHandle = fsockopen($addr, $port, $errno, $errstr, $timeout);
socket_set_timeout($urlHandle, $timeout);
$urlString = "GET $path HTTP/1.0\r\nHost: $addr\r\nConnection: Keep-Alive\r\nUser-Agent: MonitPHP\r\n";
$urlString .= "Authorization: Basic ".base64_encode("$user:$pass")."\r\n";
$urlString .= "\r\n";
fputs($urlHandle, $urlString);
$response = fgets($urlHandle);
$endHeader = false;                           // Strip initial header information

while ( !$endHeader){
  if (fgets($urlHandle) == "\r\n")
    $endHeader = true;
}
 $info = ;                                  // Generate a string to send to the screen

while (!feof($urlHandle)) {
  $info.=fgets($urlHandle);
}
 fclose ($urlHandle);
echo $info;
?>

Créer /etc/apache2/conf.d/monit.conf :

<IfModule mod_alias.c>
  Alias /monit "/var/www/monit"
</IfModule>

<DirectoryMatch /var/www/monit/>
  Options -FollowSymLinks
  AllowOverride All
  order deny,allow
#  deny from all
#  allow from 127.0.0.0/255.0.0.0
</DirectoryMatch>

Créer /var/www/.htaccess :

AuthUserFile /var/www/monit/.htpasswd
 AuthName "Restricted Access"
 Require valid-user
 AuthType Basic

<Files .*>
deny from all
</Files>

Et créer le fichier de mots de passe avec user admin/<password de l'admin> :

# htpasswd -c /var/www/monit/.htpasswd admin