Base théorique : Sur quoi reposent les outils de monitoring ?
Définition de la supervision
La supervision se définit comme une technique utilisant au mieux les ressources informatiques pour obtenir des informations sur l'état des réseaux et de leurs composants. Ces données seront ensuite traitées et affichées afin de mettre en lumière d'éventuels problèmes.
La supervision peut résoudre les problèmes automatiquement ou dans le cas contraire prévenir via un système d'alerte (email ou SMS par exemple) les administrateurs. Cette définition de la supervision est décrite plus en détail dans la norme ISO7498/4.
Plusieurs actions sont ainsi réalisées : Acquisition de données, analyse, puis visualisation et réaction.
Un tel processus est réalisé à plusieurs niveaux d'un parc de machines : Au niveau interconnexions (Réseau), au niveau de la machine elle-même (Système) et au niveau des services offerts par cette machine (Applications).
Supervision réseau
Par le terme réseau on entend ici l'aspect communication entre les machines. Le rôle est de s'assurer du bon fonctionnement des communications et de la performance des liens (débit, latence, taux d'erreurs). C'est dans ce cadre que l'on va vérifier par exemple si une adresse IP est toujours joignable, ou si tel port est ouvert sur telle machine, ou faire des statistiques sur la latence du lien réseau.
Supervision système
La surveillance se cantonne dans ce cas à la machine elle-même et en particulier ses ressources. Si l'on souhaite par exemple contrôler la mémoire utilisée ou la charge processeur sur le serveur voire analyser les fichiers de logs système.
Supervision applicative
Cette technique est plus subtile, c'est elle qui va nous permettre de vérifier le fonctionnement d'une application lancée sur une machine. Cela peut être par exemple une tentative de connexion sur le port de l'application pour voir si elle retourne ou demande bien les bonnes informations, mais aussi de l'analyse de logs applicatifs.
En effet rien ne garantit qu'un port X ouvert veut dire que l'application qui tourne derrière n'est pas "plantée".
Les protocoles existants
Il existe des protocoles réseau qui permettent de récupérer des informations sur le parc informatique. Nous allons en étudier deux particulièrement importants qui possèdent des rôles très différents mais qui ont un point en commun : Ils sont tout deux largement utilisés par les logiciels de supervision.
ICMP (Internet Control Message Protocol)
ICMP est un protocole de couche réseau (couche 3 du modèle OSI) qui vient palier à l'absence de message d'erreur du protocole IP (Internet Protocol). En effet si il y a un incident de transmission les équipements intermédiaires vont utiliser ce protocole pour prévenir la machine émettrice. Les paquets ICMP sont encapsulés dans des paquets IP (malgré qu'ils soient au même niveau OSI), et peuvent contenir des bouts de paquets IP pour citer celui ayant généré l'erreur. Afin de catégoriser les erreurs, elles sont divisés en types eux-mêmes parfois redivisés en codes. Par exemple le type 3 représente un destinataire inaccessible : Il existe 16 codes différents en fonction de la raison pour laquelle le destinataire n'est pas joignable.
C'est un protocole très simple, qui n'a pas pour fonction directe la supervision d'un réseau mais qui est utilisé comme source d'information sur la qualité du réseau ou sur la présence d'une machine.
SNMP (Simple Network Management Protocol)
- Présentation
SNMP (Simple Network Management Protocol) est un protocole de couche applicative qui a pour but de superviser les réseaux. Il a été conçu en 1988 par l'IETF (Internet Engineering Task Force) avec pour idée directrice de créer un protocole simple qui ne vienne pas gêner le trafic du réseau qu'il supervise.
Depuis sa création, le protocole a évolué par soucis de sécurité: La version 2 qui est pour l'instant la plus utilisée possède une notion de communauté qui est utilisée comme un mot de passe, la version 3 durcit un peu plus le protocole en y ajoutant le chiffrement. - Fonctionnement
Par soucis de simplicité et donc de rapidité, SNMP ne transporte que des variables et s'appuie sur le protocole UDP (User Datagram Protocol). SNMP va créer un dialogue entre des agents installés sur des machines à superviser et un serveur de supervision.
Les échanges entre agents et serveur se résument à trois opérations, les alarmes, les requêtes et les réponses :
- Une requête est émise du serveur vers un agent via le port 161 UDP si le serveur veut demander ou imposer quelque chose à cet agent. La requète peut être de quatre types
- GetRequest : Demande la valeur d'une variable à un agent
- GetNextRequest : Demande la valeur suivante de la variable
- GetBulk : Demande un ensemble de variables regroupées
- SetRequest : Demande la modification de la valeur d'une variable sur un agent
- L'agent va ensuite traiter cette requète et emettre une réponse via le même port. Si tout se passe bien, l'agent répond un GetResponse accompagné de la valeur demandée. Mais dans le cas contraire l'agent ajoutera un code d'erreur en réponse (par exemple No Access ou Read Only)
- Une alarme est créée par un agent en cas d'évènement et utilise un message dit de type trap ou de type inform pour prévenir le serveur. Ce message SNMP transite via le port 162 UDP. Les alarmes peuvent prendre les formes suivantes :
- ColdStart(0) : Redémarrage à froid du système
- WarmStart(1) : Redémarrage à chaud du système
- LinkDown(2) : Le lien réseau n'est plus opérationnel
- LinkUp(3) : Le lien réseau est opérationnel
- AuthentificationFailure(4) : Tentative d'accès à l'agent avec un mauvais nom de communauté
- EGPNeighboorLoss(5) : La passerelle adjacente ne répond plus
- EntrepriseSpecific(6) : Alarme propre aux constructeurs
Étant donné que ces requêtes utilisent des noms de variables, ceux-ci doivent être communs à tout matériel que l'on souhaite monitorer (et supportant SNMP).
C'est pour cette raison que les données sont stockées dans une base normalisée nommée MIB (Managed Information Base). Cette base organisée de manière hiérarchique et est assez compliquée à lire pour un humain. Chaque information (les fameuses variables précédentes) est identifiée par un OID (Object IDentifier).Par exemple, pour obtenir l'uptime (durée de temps depuis le dernier redémarrage de la machine) :
Fig1 snmpget -v 2c -c public localhost .1.3.6.1.2.1.1.3.0 system.sysUpTime.0 = Timeticks: (23599841) 2 days, 17:33:18.41Ici nous avons lancé une requête GetRequest en SNMP v2 avec pour communauté "public" vers l'agent "localhost" en demandant l'information d'OID ".1.3.6.1.2.1.1.3.0" correspondant à la variable system.sysUpTime.0.
- Une requête est émise du serveur vers un agent via le port 161 UDP si le serveur veut demander ou imposer quelque chose à cet agent. La requète peut être de quatre types