Chapitre 15. Supervision des services publiquement disponibles

Ce document décrit la façon de superviser des services, applications et protocoles rendus disponibles publiquement. Par public j'entends les services qui sont accessibles à travers le réseau - que ce soit votre réseau local ou plus grand avec Internet. Les exemples de ce type de services incluent HTTP, POP3, IMAP, FTP, and SSH. Il y a beaucoup plus de services publics que ce que vous utilisez probablement au quotidien. Ces services et applications, ainsi que les protocoles sous-jacents, peuvent en général être supervisés avec Nagios sans nécessiter d'accès spéciaux.

Introduction

Les services privés, à l'opposé, ne peuvent pas être supervisés par Nagios sans agent intermédiaire de quelque type. Les exemples de services privés associés à des hôtes sont des choses comme la charge CPU, l'utilisation mémoire, l'utilisation du disque, le nombre d'utilisateurs connectés, des informations sur les processus, etc. Ces services privés ou attributs d'hôtes ne sont en général pas exposés à un client externe. Cette situation requiert qu'un agent intermédiaire de supervision soit installé sur chacun des hôtes dont vous avez besoin de superviser ce type d'informations. Plus d'information sur la supervision des services privés attachés à des hôtes de différents types peut être trouvée dans la documentation à:

Vous trouverez occasionnellement que cette information sur les services et applications privés peut être supervisée avec SNMP. L'agent SNMP vous permet de superviser à distance l'information d'hôte normalement privée (et inaccessible). Jetez un œil sur la documentation Supervision des routeurs/switchs pour avoir plus d'information sur la façon de superviser des services avec le protocole SNMP.

Ces instructions impliquent que vous ayez installé Nagios comme précisé dans le guide rapide. Les exemples de configuration ci-dessous font référence aux objets de configuration définis dans les fichiers d'exemples (commands.cfg, templates.cfg, etc.) qui ont été installés si vous avez suivi le guide rapide.

Plugins pour la supervision des services

Quand vous avez besoin de superviser un service, application, protocole particulier, les chances sont grandes qu'un plugin existe pour le faire. La distribution officielle des plugins Nagios fournit des plugins qui peuvent être utilisés pour contrôler une grande variété de services et protocoles. Il y a aussi toute une collection de plugins qui peut être trouvée dans le sous répertoire contrib/ de la distribution des plugins. Le site NagiosExchange.org héberge aussi de nombreux plugins additionnels écrits par des utilisateurs, n'hésitez pas à y tenter votre chance.

Si vous ne parvenez pas à trouver un plugin approprié pour superviser ce dont vous avez besoin, vous pouvez toujours écrire le vôtre. Les plugins sont faciles à écrire, ne vous laissez donc pas effrayer par cette idée. Lisez la documentation sur le développement de plugins pour plus d'informations.

Je vais passer en revue la supervision de services basiques que vous aurez probablement à faire tôt au tard. Chacun de ces services peut être supervisé en utilisant un des plugins compris dans la ditribution Nagios. Allons-y…

Création d'une définition d'hôte

Avant de pouvoir superviser un service, vous devez d'abord définir un host associé à ce service. Vous pouvez mettre les définitions d'hôtes dans n'importe quel fichier de configuration spécifié avec le paramètre cfg_file ou les mettre dans un dossier précisé par le paramètre cfg_dir . Si vous avez déjà créé une définition d'hôte, vous pouvez passer cette étape.

Pour cet exemple, disons que vous souhaitez superviser une variété de services sur un hôte distant. Appelons cet hôte remotehost. La définition de l'hôte peut être mise dans son propre fichier de configuration ou ajoutée à un existant. Voilà à quoi pourrait ressembler la définition de l'hôte remotehost:

define host {
    use         generic-host      ; Inherit default values from a template
    host_name   remotehost        ; The name we're giving to this host
    alias       Some Remote Host  ; A longer name associated with the host
    address     192.168.1.50      ; IP address of the host
    hostgroups  allhosts          ; Host groups this host is associated with
}
        

Maintenant qu'une définition d'hôte a été ajoutée pour l'hôte à superviser, nous pouvons commencer à définir les services qui doivent être contrôlés. Comme pour la définition de l'hôte, les définitions de services peuvent être mises dans n'importe quel fichier de configuration.

Création d'une définition de service

Pour chaque service à superviser, vous devez créer un service dans Nagios associé à la définition d'hôte que vous avez juste créé. Vous pouvez mettre des définitions de services dans n'importe quel fichier de configuration précisé par le paramètre cfg_file ou dans n'importe quel dossier précisé par le paramètre cfg_dir .

Quelques exemples de définitions de services pour superviser des services publics communs (HTTP, FTP, etc.) sont donnés ci-dessous.

Supervision HTTP

Il y a de bonnes chances que vous ayez envie de superviser des serveurs web - que ce soit le vôtre ou celui de quelqu'un d'autre. Le plugin check_http est juste fait pour ça. Il fonctionne avec le protocole HTTP et peut superviser un temps de réponse, des codes d'erreurs, des chaînes de caractères dans la réponse HTML, des certificats de serveurs, et beaucoup plus encore.

Le fichier commands.cfg contient une définition de commande pour utiliser le plugin check_http. Il ressemble à ceci:

define command {
    name          check_http
    command_name  check_http
    command_line  $USER1$/check_http -I $HOSTADDRESS$ $ARG1$
}
        

Une définition simple de service pour superviser un service HTTP sur la machine remotehost pourrait ressembler à ceci:

define service {
    use                 generic-service ; Inherit default values from a template
    host_name           remotehost
    service_description HTTP
    check_command       check_http
}
        

Cette simple définition de service va superviser le service HTTP fonctionnant sur remotehost. Ce service génèrera des alertes si le sereur web ne répond pas dans les 10 secondes ou si la réponse contient un code d'erreur HTTP (403, 404, etc.). C'est tout ce dont vous avez besoin pour une supervision basique. Plutôt simple, non ?

Pour des possibilités plus avancées de supervision, utilisez le plugin check_http manuellement avec --help comme argument de la ligne de commande pour voir toutes les options que peut vous fournir ce plugin. Cette syntaxe --help fonctionne avec tous les plugins couverts par cette documentation.

Une définition plus avancée pour superviser le service HTTP est donnée ci-dessous. Cette définition de service va vérifier que l'adresse URI /download/index.php contient la chaîne de caractères latest-version.tar.gz. Une erreur sera produite si la chaîne n'est pas trouvée, si l'URI n'est pas valable, ou si le serveur web met plus de 5 secondes à répondre.

define service {
    use                 generic-service  ; Inherit default values from a template
    host_name           remotehost
    service_description Product Download Link
    check_command       check_http!-u /download/index.php -t 5 -s "latest-version.tar.gz"
}
        

Supervision FTP

Quand vous avez besoin de superviser des serveurs FTP, vous pouvez utiliser le plugin check_ftp. Le fichier commands.cfg une définition de commande pour utiliser le plugin check_ftp qui ressemble à ceci:

define command {
    command_name  check_ftp
    command_line  $USER1$/check_ftp -H $HOSTADDRESS$ $ARG1$
}
        

Une définition simple de service pour superviser un serveur FTP sur remotehost devrait ressembler à ceci:

define service {
    use                  generic-service ; Inherit default values from a template
    host_name            remotehost
    service_description  FTP
    check_command        check_ftp
}
        

Cette définition de service va superviser le service FTP et générer des alertes si le serveur FTP ne répond pas dans les 10 secondes.

Une définition de service plus avancée est donnée ci-dessous. Ce service va vérifier le serveur FTP en écoute sur le port 1023 de remotehost. Une alerte sera émise si le serveur ne répond pas dans les 5 secondes ou si la réponse que fait le serveur ne contient pas la chaîne de caractère Pure-FTPd [TLS].

define service {
    use                  generic-service  ; Inherit default values from a template
    host_name            remotehost
    service_description  Special FTP 
    check_command        check_ftp!-p 1023 -t 5 -e "Pure-FTPd [TLS]"
}
        

Supervision SSH

Quand vous avez besoin de superviser des serveurs SSH, vous pouvez utiliser le plugin check_ssh. Le fichier commands.cfg contient une définition de commande pour utiliser le plugin check_ssh qui ressemble à ceci:

define command {
    command_name  check_ssh
    command_line  $USER1$/check_ssh $ARG1$ $HOSTADDRESS$
}
        

Une définition simple de service pour superviser un serveur SSH sur remotehost devrait ressembler à ceci:

define service {
    use                 generic-service ; Inherit default values from a template
    host_name           remotehost
    service_description SSH
    check_command       check_ssh
}
        

Cette définition de service va superviser le service SSH et générer des alertes si le serveur ne répond pas dans les 10 secondes.

Une définition de service plus avancée est donnée ci-dessous. Ce service va vérifier le serveur SSH et générer une alerte si le serveur ne répond pas dans les 5 secondes ou si le numéro de version ne correspond pas à OpenSSH_4.2.

define service {
    use                 generic-service  ; Inherit default values from a template
    host_name           remotehost
    service_description SSH Version Check 
    check_command       check_ssh!-t 5 -r "OpenSSH_4.2"
}
        

Supervision SMTP

Le plugin check_smtp peut être utilisé pour superviser vos serveurs de messagerie. Le fichier commands.cfg une définition de commande pour utiliser le plugin check_smtp qui ressemble à ceci:

define command {
    command_name  check_smtp
    command_line  $USER1$/check_smtp -H $HOSTADDRESS$ $ARG1$
}
        

Une définition simple de service pour superviser un serveur SMTP sur remotehost devrait ressembler à ceci:

define service {
    use                 generic-service ; Inherit default values from a template
    host_name           remotehost
    service_description SMTP
    check_command       check_smtp
}
        

Cette définition de service va superviser le service SMTP et générer des alertes si le serveur SMTP ne répond pas dans les 10 secondes.

Une définition de service plus avancée est donnée ci-dessous. Ce service va vérifier le serveur SMTP et générer une alerte si le serveur ne répond pas dans les 5 secondes ou si la réponse du serveur ne contient pas la chaîne de caractères mygreatmailserver.com.

define service {
    use                 generic-service ; Inherit default values from a template
    host_name           remotehost
    service_description SMTP Response Check 
    check_command       check_smtp!-t 5 -e "mygreatmailserver.com"
}
        

Supervision POP3

Le plugin check_pop peut être utilisé pour superviser le service POP3 de vos serveurs de messagerie. Le fichier commands.cfg une définition de commande pour utiliser le plugin check_pop qui ressemble à ceci:

define command {
    command_name  check_pop
    command_line  $USER1$/check_pop -H $HOSTADDRESS$ $ARG1$
}
        

Une définition simple de service pour superviser un serveur POP3 sur remotehost devrait ressembler à ceci:

define service {
    use                 generic-service ; Inherit default values from a template
    host_name           remotehost
    service_description POP3
    check_command       check_pop
}
        

Cette définition de service va superviser le service POP3 et générer des alertes si le serveur POP3 ne répond pas dans les 10 secondes.

Une définition de service plus avancée est donnée ci-dessous. Ce service va vérifier le serveur POP3 et générer une alerte si le serveur ne répond pas dans les 5 secondes ou si la réponse du serveur ne contient pas la chaîne de caractères mygreatmailserver.com.

define service {
    use                 generic-service ; Inherit default values from a template
    host_name           remotehost
    service_description POP3 Response Check 
    check_command       check_pop!-t 5 -e "mygreatmailserver.com"
}
        

Supervision IMAP

Le plugin check_imap peut être utilisé pour superviser le service IMAP4 sur vos serveurs de messagerie. Le fichier commands.cfg une définition de commande pour utiliser le plugin check_imap qui ressemble à ceci:

define command {
    command_name  check_imap
    command_line  $USER1$/check_imap -H $HOSTADDRESS$ $ARG1$
}
        

Une définition simple de service pour superviser un serveur IMAP4 sur remotehost devrait ressembler à ceci:

define service {
    use                 generic-service ; Inherit default values from a template
    host_name           remotehost
    service_description IMAP
    check_command       check_imap
}
        

Cette définition de service va superviser le service IMAP4 et générer des alertes si le serveur IMAP ne répond pas dans les 10 secondes.

Une définition de service plus avancée est donnée ci-dessous. Ce service va vérifier le service IMAP4 et générer une alerte si le serveur ne répond pas dans les 5 secondes ou si la réponse du serveur ne contient pas la chaîne de caractères mygreatmailserver.com.

define service {
    use                 generic-service ; Inherit default values from a template
    host_name           remotehost
    service_description IMAP4 Response Check 
    check_command       check_imap!-t 5 -e "mygreatmailserver.com"
}
        

Redémarrage de Nagios

Une fois que vous avez ajouté les définitions du nouvel hôte et du service à vos fichiers de configuration d'objets, vous êtes prêt à démarrer la supervision de ceux-ci. Pour cela, vous devez vérifier votre configuration et redémarrer Nagios.

Si le processus de vérification produit n'importe quel message d'erreur, réglez d'abord vos problèmes de configuration avant de continuer. Assurez-vous de ne pas redémarrer Nagios avant que le processus de vérification ne se déroule sans erreur!