<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
"http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" []>
<book lang="fr">
  <bookinfo>
    <title>Installation et configuration de Nagios</title>
    <author>
      <firstname>Emmanuel</firstname>
      <surname>Saracco</surname>
      <affiliation>
        <orgname>Easter-eggs</orgname>
        <address>
          <email>esaracco@easter-eggs.com</email>
          <email>esaracco@free.fr</email>
        </address>
      </affiliation>
    </author>

    <revhistory>
      <revision>
	<revnumber>v1.0a</revnumber>
	<date>2005-12-11</date>
	<authorinitials>es</authorinitials>
	<revremark>Nommage systématique des chapitres et sections. Mise en place d'une nouvelle feuille de style. Modification du texte de licence.</revremark>
      </revision>

      <revision>
        <revnumber>v1.0</revnumber>
        <date>2003-11-07</date>
        <authorinitials>es</authorinitials>
      </revision>
    </revhistory>

    <legalnotice>
      <para>
        <citetitle>Installation et configuration de Nagios</citetitle>
      </para>

      <para>
        Permission is granted to copy, distribute and/or modify this document
        under the terms of the GNU Free Documentation License, Version 1.2
        or any later version published by the Free Software Foundation;
        with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
        Texts.
      </para>

      <para>
        A copy of the license is available on the World Wide Web at 
      <ulink url="http://www.gnu.org/licenses/fdl.html">http://www.gnu.org/licenses/fdl.html</ulink>.
      </para>
    </legalnotice>

    <copyright>
      <year>2003-2005</year>
      <holder>Emmanuel Saracco, Easter-eggs</holder>
    </copyright>

  </bookinfo>

  <chapter id="introduction">
  <title>Introduction</title>
  <para>
    Nagios permet de surveiller le bon fonctionnement des services d'une ou 
    plusieures machines. Il est écrit en C et fonctionne grâce à un ensemble 
    de plugins (qui eux peuvent être écrits dans n'importe quel langage).
  </para>
  <para>  
    Il permet:
    <itemizedlist mark='opencircle'>
      <listitem><para>
      De surveiller les services réseau (SMTP, POP3, HTTP, PING, etc.)
      </para></listitem>
      <listitem><para>
      Une interface permettant l'intégration simple de plugins
      </para></listitem>
      <listitem><para>
      De prévenir par email ou par tout autre méthode personnalisée en cas de 
      problème
      </para></listitem>
      <listitem><para>
      Déclencher des procédures personnalisées pour résoudres les problèmes
      </para></listitem>
      <listitem><para>
      La consultations des différents événements et données collectés via une 
      interface web
      </para></listitem>
      <listitem><para>
      De mettre en place un archivage automatique des données collectées
      </para></listitem>
    </itemizedlist>
  </para>
  
  <para>
    La distribution GNU/Linux Debian/unstable contient les paquets suivants:
    <itemizedlist mark='opencircle'>
      <listitem><para><literal>nagios-text</literal></para></listitem>
      <listitem><para><literal>nagios-mysql</literal></para></listitem>
      <listitem><para><literal>nagios-pgsql</literal></para></listitem>
    </itemizedlist>
    Pour une installation sur Debian/Woody, faire une recherche sur 
    <ulink url="http://www.apt-get.org/search.php?query=nagios&amp;submit=&amp;arch%5B%5D=i386&amp;arch%5B%5D=all">apt-get.org</ulink>
  </para>
  
  <para>
    Nagios peut en effet gérer ses données en base de données (MySQL ou 
    PostgreSQL) ou bien dans des fichiers textes.
  </para>
  
  <para>
    Il existe un plugin webmin pour nagios 
    (<ulink url="http://nagmin.sourceforge.net/">nagmin</ulink>) qui 
    fonctionne avec la version packagée pour MySQL.
  </para>

  <para>
    Nous ne traiterons dans ce document que de la version fichiers textes de 
    nagios. Juste un mot à propos des versions base de données: une fois 
    l'installation du paquet faite, il faudra créer la base de données 
    manuellement en se servant des informations disponibles sous 
    <filename class="directory">/usr/share/doc/nagios*</filename>.
  </para>
  </chapter>

  <chapter id="installation">
    <title>Installation</title>
    
    <para>
      L'installation de la version fichiers textes est simple:
    </para>
    
    <programlisting><computeroutput>
    # apt-get install nagios-text
    </computeroutput></programlisting>
    
    <para>
      Par défaut, nagios est installé avec des fichiers de configuration 
      préremplis. Il faudra donc les éditer pour les adapter à notre convenance.
    </para>
  </chapter>
 
  <chapter id="parametrage">
    <title>Paramétrage</title>
    <para>
      L'installation de base du paquet ne permet pas d'utiliser de suite 
      nagios. Il est nécessaire de faire un certain nombre de paramétrages 
      pour cela.
    </para>

    <sect1 id="apache">
      <title>Apache</title>
      <para>
        Le paquet installe la configuration apache dans le fichier 
	<filename>/etc/nagios/apache.conf</filename>. Ce fichier est destiné 
	à être inclu dans le fichier de configuration général d'apache. 
	L'inclusion n'est pas faite lors de l'installation. Il faut donc 
	éditer le fichier <filename>/etc/apache/httpd.conf</filename> et y 
	ajouter la ligne suivante:
      </para>
      <programlisting>
Include /etc/nagios/apache.conf
      </programlisting>
      <para>
        Ensuite il faut relancer apache:
      </para>
    <programlisting><computeroutput>
/etc/init.d/apache restart
    </computeroutput></programlisting>
    </sect1>
    
    <sect1 id="gestion-des-utilisateurs">
      <title>Gestion des utilisateurs</title>

      <para>
        Pour que les utilisateurs aient le droit d'accéder à l'interface web 
	il faut tout d'abord créer un fichier d'accès et y ajouter les comptes 
	nécessaires. La configuration par défaut de nagios s'attend à trouver 
	un fichier <filename>/etc/nagios/htpasswd.users</filename>. Nous le 
	créons donc avec un compte d'administration par défaut:
      </para>
    <programlisting><computeroutput>
# htpasswd -c /etc/nagios/htpasswd.users nagiosadmin
New password: [mot de passe pour nagiosadmin]
Re-type new password: [confirmation du mot de passe]
    </computeroutput></programlisting>

      <para>
        Nous pouvons à présent nous loguer sur l'interface web avec le nouveau 
	compte que nous venons de créer.
      </para>
      <para>
        Par contre, si nous pouvons nous loguer sans problème, nous n'avons 
	pas les droits sur grand chose... Il va donc falloir cette fois-ci 
	éditer la configuration propre à nagios.
      </para>

      <sect2 id="edition-du-fichier-cgi-cfg">
        <title>
	Edition du fichier <filename>/etc/nagios/cgi.cfg</filename>
	</title>
      
        <para>
          Par défaut, un utilisateur aura le droit d'accéder aux objets 
	  auxquels il est associé (nous verrons la création des différents 
	  objets plus loin). Si l'on veut que certains utilisateurs aient le 
	  droit de visualiser des informations auxquelles ils ne sont pas 
	  associés il faudra modifier selon nos besoins les variables de 
	  configuration suivantes:
        
	<itemizedlist mark='opencircle'>
          <listitem><para>
	  <option>authorized_for_system_information</option>
	  </para></listitem>
          <listitem><para>
	  <option>authorized_for_configuration_information</option>
	  </para></listitem>
          <listitem><para>
	  <option>authorized_for_system_commands</option>
	  </para></listitem>
          <listitem><para>
	  <option>authorized_for_all_services</option>
	  </para></listitem>
          <listitem><para>
	  <option>authorized_for_all_hosts</option>
	  </para></listitem>
          <listitem><para>
	  <option>authorized_for_all_service_commands</option>
	  </para></listitem>
          <listitem><para>
	  <option>authorized_for_all_host_commands</option>
	  </para></listitem>
        </itemizedlist>

       Pour que notre utilisateur <literal>nagiosadmin</literal> puisse 
       accéder aux services de toutes les machines par exemple, il faudra 
       modifier la variable <option>authorized_for_all_services</option> 
       comme suit:
	</para>

    <programlisting>
authorized_for_all_services=nagiosadmin      
    </programlisting>
	
        <para>
          Pour autoriser l'accès à tous les utilisateurs logués sur 
	  l'interface web il suffit de mettre un astérisque 
	  <literal>*</literal> au lieu de préciser le login.
	</para>

	<note>
	<para>
          Il n'est pas nécessaire de redémarrer nagios après ce genre de 
	  modification.
	  </para>
	</note>

      </sect2>
    </sect1>
 
  <sect1 id="creation-des-objets">
    <title>Création des objets</title>

    <para>
      Nous devons à présent faire connaitre la configuration de notre réseau 
      à nagios. Pour cela nous devrons mettre en place des groupes, des 
      réseaux, des machines et des services.
    </para>
    
    <sect2 id="gestion-des-contacts">
    <title>Gestion des contacts</title>
  
    <para>
      Les contacts permettront de mettre en place un certain nombre de 
      paramétrages par défaut ainsi que de connaitre l'appartenance des objets 
      créés et les personnes à contacter.
    </para>
  

    <sect3 id="creation-des-contacts">
    <title>Création des contacts</title>

    <para>
      La gestion des contacts se fait dans le fichier 
      <filename>/etc/nagios/contacts.cfg</filename>.
    </para>

    <para>
    L'enregistrement d'un contact se fait dans un bloc:
    </para>
    <programlisting>
define contact{

}
    </programlisting>
    <para>
      On définit ainsi le nom du contact (identifiant que l'on utilisera par 
      la suite pour faire référence à ce contact dans les autres fichiers de 
      configuration), son alias (identifiant plus humainement compréhensible), 
      les périodes de notification par défaut ainsi que les éléments 
      nécessaires pour communiquer avec ce contact. L'exemple qui se trouve 
      dans le fichier est le suivant:
    </para>
    <example>
    <title>Un contact</title>
    <programlisting>
define contact{
	contact_name                    nagios
	alias                           Nagios Admin
	service_notification_period     24x7
	host_notification_period        24x7
	service_notification_options    w,u,c,r
	host_notification_options       d,u,r
	service_notification_commands   notify-by-email,notify-by-epager
	host_notification_commands      host-notify-by-email,host-notify-by-epager
        email                           nagios-admin@localhost.localdomain
        pager                           pagenagios-admin@localhost.localdomain
        }
    </programlisting>
    </example>
    <para>
      Les variables permettant d'indiquer les périodes sont définies dans le 
      fichier <filename>/etc/nagios/timeperiods.cfg</filename>. Il peut être 
      nécessaire de les adapter en fonction du pays ou des horaires propres à 
      la société pour laquelle nagios est à configurer.
      </para>
      <para>
      Une fois les contacts créés, nous devons créer des groupes auxquels les 
      associer.
    </para>
    </sect3>
 
    <sect3 id="creation-des-groupes-de-contacts">
      <title>Création des groupes de contacts</title>

      <para>
        La gestion des groupes se fait dans le fichier 
	<filename>/etc/nagios/contactgroups.cfg</filename>.
      </para>
    <para>
    L'enregistrement d'un groupe se fait dans un bloc:
    </para>
    <programlisting>
define contactgroup{

}
    </programlisting>
    <para>
    On définira ici pour chaque groupe créé un nom de groupe (qui permettra 
    d'identifier le groupe par la suite dans les autres fichiers de 
    configuration), un alias (identifiant plus humainement compréhensible), 
    et une liste de contacts à associer au groupe. L'exemple qui se trouve 
    dans le fichier est le suivant:
    </para>
    <example>
    <title>Un groupe de contacts</title>
    <programlisting>
define contactgroup{
	contactgroup_name       router-admins
	alias                   Router Technicians
	members                 nagios
        }
    </programlisting>
    </example>
    <para>
      L'ajout de plusieurs utilisateurs dans un groupe se fait simplement en 
      séparant les différents identifiants par une virgule.
    </para>
    <para>
      A présent que nous avons créé des utilisateurs et des groupes, nous 
      pouvons commencer à mettre en place notre réseau.
    </para>
    </sect3>
   
    </sect2>

    <sect2 id="gestion-des-machines">
    <title>Gestion des machines</title>

   <para>
     La configuration que nous ferons dans cette section permettra à nagios de 
     connaitre la base de machines qu'il devra surveiller par la suite.
   </para>
   <para>
     Nagios offre la possibilité de créer des modèles qui nous permettront de 
     mettre en place une base de configuration standard et d'éviter la 
     redondance de l'information.
   </para>

    <sect3 id="creation-des-machines">
    <title>Création des machines</title>
    <para>
      La gestion des machines se fait dans le fichier 
      <filename>/etc/nagios/hosts.cfg</filename>.
    </para>
    
    <sect4 id="machines-creation-d-un-modele">
    <title>Création d'un modèle (template)</title>
    <para>
      Que l'on crée un modèle ou une machine la syntaxe est la même. On utilise 
      juste l'option <option>name</option> et <option>register</option> pour le 
      modèle, et l'option <option>use</option> pour la machine.
    </para>
    <para>
      Dans le modèle on définira le nom du modèle ainsi qu'un certain nombre de 
      variable. L'exemple qui se trouve dans le fichier est le suivant:
    </para>
    <example>
    <title>Un modèle de machine</title>
    <programlisting>
define host{
	name				generic-host
	notifications_enabled		0
	event_handler_enabled		0
	flap_detection_enabled		0
	process_perf_data		1
	retain_status_information	1
	retain_nonstatus_information	1
	register			0
	}
    </programlisting>
    </example>
    <para>
      Après avoir défini nos modèles, nous pouvons ajouter les machines.
    </para>
    </sect4>

    <sect4 id="creation-des-machines-basee-sur-un-modele">
    <title>Création des machines basée sur un modèle</title>
        <para>
      L'enregistrement d'une nouvelle machine se fait dans un bloc:
    </para>
    <programlisting>
define host{

}    
    </programlisting>

    <para>
      Nous définirons ici le modèle à utiliser, le nom de la machine (celui 
      dont nous nous servirons pour y faire référence dans les fichiers de 
      configuration), un alias (identifiant plus humainement compréhensible), 
      la commande à utiliser pour vérifier que la machine est vivante 
      (référence à une commande définie dans 
      <filename>/etc/nagios/checkcommands.cfg</filename>), l'adresse IP de la 
      machine, la période de notification ainsi qu'un certain nombre d'autres 
      variables. L'exemple qui se trouve dans le fichier est le suivant:
    </para>
    <example>
    <title>Une machine</title>
    <programlisting>
define host{
	use                     generic-host
	host_name               gw
	alias                   Default Gateway
	address                 10.0.0.1
	check_command           check-host-alive
	max_check_attempts      20
	notification_interval   60
	notification_period     24x7
	notification_options    d,u,r
        }
    </programlisting>
    </example>
   
    <para>
      Une fois que nous avons créé nos machines nous pouvons les associer à 
      des groupes.
    </para>
 
      </sect4>
    </sect3>

    <sect3 id="creation-des-groupes-de-machines">
    <title>Création des groupes de machines</title>
      <para>
        La gestion des groupes se fait dans le fichier 
	<filename>/etc/nagios/hostgroups.cfg</filename>.
      </para>
    <para>
    L'enregistrement d'un groupe se fait dans un bloc:
    </para>
    <programlisting>
define hostgroup{

}
    </programlisting>
    <para>
      On définira ici pour chaque groupe créé un nom de groupe (qui permettra 
      d'identifier le groupe par la suite dans les autres fichiers de 
      configuration), un alias (identifiant plus humainement compréhensible), 
      les groupes de contacts à y associer et une liste de machines à associer 
      au groupe. L'exemple qui se trouve dans le fichier est le suivant:
    </para>
    <example>
    <title>Un groupe de machines</title>
    <programlisting>
define hostgroup{
        hostgroup_name  gateways
        alias           Routers and Gateways
        contact_groups  router-admins
        members         gw
        }
    </programlisting>
    </example>
    <para>
      L'ajout de plusieurs machines dans un groupe se fait simplement en 
      séparant les différents identifiants par une virgule.
    </para>
    <para>
      A présent que nous avons créé des groupes de contacts et des groupes de 
      machines, nous pouvons commencer à mettre définir quels seront les 
      services à surveiller pour chaque machine.
    </para>
    </sect3>
    </sect2>

  <sect2 id="gestion-des-services-a-surveiller">
  <title>Gestion des services à surveiller</title>
  <para>
    La gestion des services se fait dans le fichier 
    <filename>/etc/nagios/services.cfg</filename>.
    Comme pour les machines il est possible pour les services de définir 
    des modèles.
  </para>
  <sect3 id="services-creation-d-un-modele">
  <title>Création d'un modèle (template)</title>
    <para>
      Que l'on crée un modèle ou un service la syntaxe est la même. On 
      utilise juste l'option <option>name</option> et 
      <option>register</option> pour le modèle, et l'option 
      <option>use</option> pour le service.
    </para>
    <para>
      Dans le modèle on définira le nom du modèle ainsi qu'un certain nombre 
      de variable. L'exemple qui se trouve dans le fichier est le suivant:
    </para>
    <example>
    <title>Un modèle de service</title>
    <programlisting>
define service{
	name				generic-service
	active_checks_enabled		0
	passive_checks_enabled		0
	parallelize_check		1
	obsess_over_service		1
	check_freshness			0
	notifications_enabled		0
	event_handler_enabled		0
	flap_detection_enabled		0
	process_perf_data		1
	retain_status_information	1
	retain_nonstatus_information	1
	register			0
	}    
    </programlisting>
    </example>
    <para>
      Après avoir défini nos modèles, nous pouvons ajouter les services pour 
      chaque machine.
    </para>

  </sect3>
    <sect3 id="creation-des-services-basee-sur-un-modele">
    <title>Création des services basée sur un modèle</title>
        <para>
      L'enregistrement d'un nouveau service se fait dans un bloc:
    </para>
    <programlisting>>
define service{

}    
    </programlisting>

    <para>
      Nous définirons ici le modèle à utiliser, l'identifiant de la machine 
      concernée, le nom du service voulu, le groupes de contacts responsable 
      de cet élément ainsi que certaines autres variables.
    </para>
    <example>
    <title>Un service</title>
    <programlisting>
define service{
        use                             generic-service
        host_name                       gw
        service_description             PING
        is_volatile                     0
        check_period                    24x7
        max_check_attempts              3
        normal_check_interval           5
        retry_check_interval            1
        contact_groups                  router-admins
        notification_interval           240
        notification_period             24x7
        notification_options            c,r
        check_command                   check_ping!100.0,20%!500.0,60%
        }    
    </programlisting>
    </example>
      </sect3>
  </sect2>
  
  <sect2 id="verification-de-la-configuration">
  <title>Vérification de la configuration</title>
  <para>
    Pour permettre à l'administrateur de vérifier la cohérence des 
    informations saisies dans les fichiers de configuration on peut utiliser 
    nagios avec l'option verbeuse (<parameter>-v</parameter>). On lui passe 
    en second argument le fichier de configuration à partir duquel faire les 
    vérification (<parameter>/etc/nagios/nagios.cfg</parameter> en ce qui nous 
    concerne).
  </para>
  <programlisting><computeroutput>
Nagios 1.1
Copyright (c) 1999-2003 Ethan Galstad (nagios@nagios.org)
Last Modified: 06-02-2003
License: GPL

Reading configuration data...

Running pre-flight check on configuration data...

Checking services...
	Checked 1 services.
Checking hosts...
	Checked 1 hosts.
Checking host groups...
	Checked 1 host groups.
Checking contacts...
	Checked 1 contacts.
Checking contact groups...
	Checked 1 contact groups.
Checking service escalations...
	Checked 1 service escalations.
Checking host group escalations...
	Checked 0 host group escalations.
Checking service dependencies...
	Checked 0 service dependencies.
Checking host escalations...
	Checked 0 host escalations.
Checking host dependencies...
	Checked 0 host dependencies.
Checking commands...
	Checked 22 commands.
Checking time periods...
	Checked 4 time periods.
Checking for circular paths between hosts...
Checking for circular service execution dependencies...
Checking global event handlers...
Checking obsessive compulsive service processor command...
Checking misc settings...

Total Warnings: 0
Total Errors:   0

Things look okay - No serious problems were detected during the pre-flight check
  </computeroutput></programlisting>
  <para>
    Une fois que la vérification est ok, redémarrez nagios.
  </para>
  </sect2>
  </sect1>
 
  </chapter>

  <chapter id="personnalisation">
  <title>Personnalisation</title>
  <para>
  Nagios permet de personnaliser chacune des machines configurées en y 
  associant des données étendues. Cette section ne concerne en rien l'activité 
  principale de surveillance, mais elle permet d'enjoliver le rendu de
  certaines informations.
  </para>
  </chapter>

  <chapter id="premiers-pas">
  <title>Premiers pas</title>
  <para>
  </para>
  </chapter>

  </book>
