Monitoring réseau : que fait votre imprimante réseau ?

Monitoring réseau : que fait votre imprimante réseau ?

La problématique

C’est pratique, une imprimante réseau, n’est-ce pas ? Elle peut être localisée dans votre bureau, dans un local du bâtiment, quelque part en ville … ou même sur un autre continent !
Comment s’assurer qu’elle est fonctionnelle, qu’elle dispose de suffisament de papier, que ses cartouches ne sont pas vides, ou qu’elle n’est pas bourrée ?
Bien sur, ce serait mieux si elle était accessible, mais elle ne peut pas l’être pour tout le monde.
“Allo, nous souhaitons imprimer en publipostage environ 1500 contrats d’une vingtaine de pages chacun et il ne reste que 6000 feuilles dans les tiroirs. Pourriez vous les recharger ce soir avant 19h00 ?”
çà sonne mieux que :
“Allô, nous avions lancé hier soir une impression en publipostage de 1500 contrats d’une vingtaine de pages chacun, mais il y a eu un manque de papier. Pourriez-vous recharger les tiroirs, nous allons devoir recommencer !”

La solution

La plupart des imprimantes réseau peuvent communiquer grâce au protocole SNMP. Par ailleurs, chacune des informations ou alertes qu’elles sont capables de transmettre sont stockées une base d’information MIB dont les contenus sont accessibles grâce à une adresse OID construite sur une arborescence de type “1.3.6.1.2.1.2.2.1.6”. En interrogeant cette adresse on a accès à la valeur qu’elle contient et éventuellement aux valeurs “enfants” selon la requête envoyée à l’imprimante.

La mise en oeuvre

L’arborescence ou les adresses OID des MIB n’est pas tout-à-fait standard, d’autant que toutes les imprimantes ne possèdent pas les mêmes fonctionnalités ni ne diffusent les mêmes informations.

Il faut donc d’abord trouver le pavé (livre) des adresses ou codes OID pour l’imprimante concernée :

  1. Certains fabricants les fournissent sur le CD d’installation des drivers, ou plus généralement sur leur site internet. Mais souvent ce n’est le cas que pour les modèles industriels.
  2. Il existe des petits programmes capables d’interroger directement l’imprimante en question et de révéler dans une liste ou un tableau les codes, leur description et leur contenu.
  3. Des commandes sous linux permettent également de les obtenir. Il faudra encore les filtrer et les formater, ce que proposent plusieurs tutoriels sur le web.

Commandes linux

la commande “snmpwalk” permet entre autre d’explorer l’aborescence d’une MIB. On l’installe sous Fedora (et sans doute toute distribution basée sur les paquets RPM) avec le paquet “net-snmp-utils”.

Exemple (adresse IP de l’imprimante : 192.168.0.146)

On obtient alors un défilement assez impressionnant qu’il faut maintenant analyser. En complétant la commande comme suit on récupère le résultat dans un fichier texte (*.txt) ce qui permet de faire des recherches de mots clés avec un éditeur de texte (ex.: gedit ou kate).

Dans mon cas, le fichier contient les lignes suivantes

Formatage des données : petite analyse

En parcourant les lignes, on s’aperçoit vite que leur structure ressemble à ceci :
NomDuChamp = Format : Contenu.

Exemples:

  • hrSystemUptime.0 = Timeticks: (282364664) 32 days, 16:20:46.64
    Cette ligne révèle que l’imprimante fonctionne depuis 32 jours, 16 heures, 20 minutes et 46,64 secondes.
  • Les lignes suivantes correspondent au taux de remplissage des cartouches d’encre :
    mib-2.43.11.1.1.9.1.1 = INTEGER: 97
    mib-2.43.11.1.1.9.1.2 = INTEGER: 70
    mib-2.43.11.1.1.9.1.3 = INTEGER: 82
    mib-2.43.11.1.1.9.1.4 = INTEGER: 77
    mib-2.43.14.1.1.2.1.1 = INTEGER: 11

Ainsi, en récupérant pour chaque ligne le NomDuChamp et le Contenu, on peut stocker la requête dans une table de hash dont l’interrogation sera non seulement simple à écrire, mais très universelle et adaptable à n’importe quel besoin. Pour cela on pourrait passer par l’étape du fichier texte, mais comme le langage Perl possède des modules pour le protocole SNMP, pourquoi s’en priver ?
En modifiant une option de la commande, on peut préciser certains résultats :

On obtient alors un contenu un peu différent :

  • Les lignes 620 à 623 révèlent les OID (adresses) des cartouches d’encre :
    SNMPv2-SMI::mib-2.43.11.1.1.6.1.1 = STRING: “R..servoir noir”
    SNMPv2-SMI::mib-2.43.11.1.1.6.1.2 = STRING: “R..servoir jaune”
    SNMPv2-SMI::mib-2.43.11.1.1.6.1.3 = STRING: “R..servoir cyan”
    SNMPv2-SMI::mib-2.43.11.1.1.6.1.4 = STRING: “R..servoir magenta”
  • Par déduction, le pourcentage d’encre restant dans chacune d’elle est indiqué dans les lignes 632 à 635 :
    SNMPv2-SMI::mib-2.43.11.1.1.9.1.1 = INTEGER: 97
    SNMPv2-SMI::mib-2.43.11.1.1.9.1.2 = INTEGER: 70
    SNMPv2-SMI::mib-2.43.11.1.1.9.1.3 = INTEGER: 82
    SNMPv2-SMI::mib-2.43.11.1.1.9.1.4 = INTEGER: 77

Script : la version BASH

Il y a toujours plusieurs façons de concevoir un programme. Il dépend avant tout des choix optés par le programmeur. Il peut être très spécifique ou plus universel,s externes comme des fichiers ou des bases de données…

Et voilà le résultat !

Dès lors il est possible d’y ajouter des sorties pour créer des alertes qui seront transmises à un moniteur Nagios.

Script : la version PERL

A l’aide des modules de PERL, on interroge directement l’imprimante et on affiche les résultats sans passer par un fichier intermédiaire. C’est pour cela que l’exécution sera bien plus plus rapide, ce qui est un plus dans un contexte d’interrogation par un moniteur comme Nagios.

Et voilà le résultat affiché dans la console!

Remarquez qu’entre les deux scripts l’encre a diminuée quelque peu …

Script : la version PYTHON

Comme pour la version Perl, on va utiliser un module, PySNMP, à installer au préalable et à appeler avec l’instruction “import”.

Il restera à retravailler la sortie pour la rendre plus explicite.

Monitoring réseau : vérification de pages Web (ou Web-applications)

Monitoring réseau : vérification de pages Web (ou Web-applications)

La problématique

Comment s’assurer que l’authentification mise en place fonctionne bien et que le contenu affiché d’une page web est bien celui attendu ?

Les solutions

  1. Une première solution consiste à se connecter régulièrement et à vérifier.
    Si l’authentification échoue, on est déjà fixé. Cela commence plutôt mal!
  2. Dans le cas où la page s’affiche, reste à savoir si le contenu est conforme, qu’il n’y a pas eu de fautes introduites lors de la dernière intervention, que les images soient toutes visibles, etc …
    Cela peut-être fastidieux et contraignant, surtout si comme dans le cas décrit dans la suite il faut vérifier la même page à la fois sur des serveurs en production, en expérimentation et en test.
  3. Pourquoi ne pas confier la tâche au moniteur Nagios ?
    J’ai écris le script Perl ci-après pour que le moniteur Nagios se charge de ce travail, et ce en moins de temps qu’il n’en faut pour le dire !

Le script PERL

Il permet de se connecter à une page Web nécessitant une authentification de type HTML (d’autres types sont possibles via l’installation d’autres modules). Son but est de vérifier :

  • L’authentification fonctionne-elle ?
  • Le temps de réponse est-il dans les limites acceptables ?
  • Le contenu de la page est-il conforme à celui attendu (même taille, même contenu, …) ?
  • Eventuellement la page est-elle identique sur le serveur mirroir ?

Principe :

Sans trop rentrer dans les détails techniques …

  • On se connecte à la page par l’authentification requise, c’est à dire en transmettant un nom d’utilisateur et un mot de passe. Il est préférable de définir pour cet accès un nouvel utilisateur spécifique à cette requête.
  • On doit alors également gérér un coockie de session pour la durée de celle-ci.
  • Pour accéder à la page voulue, il peut être nécessaire de cliquer sur des menus, des liens ou faire des choix dans un formulaire, dépendament de la configuration du site.
  • Lors d’une première connexion “manuelle”, on crée un fichier de référence (ou modèle) de la page à analyser. Evidemment celle-ci devra être vérifiée la première fois par le concepteur.
  • Lors des autres visites, on récupère la page pour la compiler dans un tableau. Dès lors, ce sont les fonctions de PERL qui se chargenet de ce travail.
  • On affiche le résultat de l’analyse sous une forme interpretable par le moniteur nagios pour qu’il puisse la transmettre par son interface et les courriels paramétrés.

Le script

Le script est anonymé ! Il conviendra donc de remplacer les adresses IP, le “login”, le “mdp” (mot de passe) et l'”user” par ceux voulus.

Il faudra également adapter la structure du script à celui du site, pour tenir compte du cheminement qui permet d’atteindre la page à analyser.