Est ce possible? l'exploitation de SNMP via un webservice dans un intranet
Bonjour,
Je voulais poster une idée qui m'est venu en lisant un document qui parlait de l'administration réseau en utilisant SNMP et je me suis posé la question: serait il possible d'exploiter cela via un webservice dans un réseau d'entreprise.c'est une idée qui a besoin de votre iade pour savoir si elle est faisable ou pas et si la façon dont je pensais la faire est possible techniquement
En effet, voilà a quoi je pensais, il s'agit de mettre en place un mecanisme au sein d'un reseau d'entreprise hétérogene ( plusieurs types d'OS) peremettant a chaque PC ou station au démarrage de communiquer toute sa configuration matérielle ( a définir biens ur avec un accord avec l'administrateur systeme) à un serveur dédié qui traitent ces informations et les stockent dans une base de données , et qui se charge par la suite de gérér le parc machine et les eventuels changements qui peuvent surgir chaque jour ( à définir utlérieuement aussi ) . Mon soucis est la phase de collecte d'information par chaque PC et son envoie au serveur ; j'ai pensé a exploiter SNMP et sa fameuse MIB et ce en injectant les données de chaque PC dans un format XML que l'on envoie au serveur avec SOAP , le serveur a l'ecoute dénivche chaque message le traite et récupere ces infos de nouveau et les stocke dans la base ou en fait ce qu'il veux aprés .
C'est ca grossomodo mon idée , ca peut vous paraiytre peut etre bizarre , c'est pourquoi je l'expose ici , alors si ca vaut le coup comment voyez vous la bonne architecture pour impelmenter ce service , sinon dites moi ce que j'ai loupé :)
et encore merci pour votre aide
Petit topo sur mon projet
Comme tu le demandes (et que de toute façon je dois faire une présentation du projet dans une semaine) je vais faire un petit topo sur ce que j'avais à faire, le cheminement que j'ai effectué et rapidement une présentation du résultat à l'heure actuelle.
PRESENTATION
Tout d'abord le réseau, il est composé d'environ 550 machines utilisés quotidiennement par quelques 470 personnes, des profs, des élèves ingénieurs et des chercheurs. Le parc est principalement composé de deux sortes de machines : windows xp pro, fedora core 4. Il n'y avait pas, à ma connaissance, d'exploitation de snmp. Le but du projet était donc de faire une exploration des possibilités du protocole, de pouvoir interoger ponctuellement un machine sur le réseau afin d'en obtenir les informations la concernant et aussi de récupérer les évènements système en vu de l'installation d'un système de clonage qui provoquerait la pertes des dits évènements système habituellement accessible sur la machine. (Note : le système de clonage est une sorte de manager de système d'exploitation, permettant à un utilisateur de changer le système d'une machine. Ce n'est pas un dual boot, le système format tout et install l'image d'un autre système d'exploitation. Cela est mis en place pour qu'un enseignant puisse, au besoins, passer une salle windows en salle linux, sans qu'un membre du service technique n'ait a intervenir. Vous aurez noté que comme l'ancien système dégage, on perd les évènements qui y étaient enregistrés, ce qui peut être génant si on veut pouvoir consulter un "historique" de ces alertes.) L'ensemble de ces informations devaient être accessible à tout moment via un frontal web de plus elles devaient permettrent un traitement visant à rendre certaines informations comme le nombre de licence ou l'utilisation d'une salle.
ETUDE
J'ai d'abord passé pas mal de temps à chercher sur le web ce qu'était snmp, comment celà marchait et qu'est ce qu'on pouvait en tirer. Je passe le principe du protocol, si quelqu'un veut un éclaircicement je peux y revenir. La première phase à été de faire fonction un agent sur chaque type de machine et d'en soutirer des informations. Sur les 3-4 versions de snmp seul la V3 est sécurisé, de plus c'est celle qui est appelé à être utilisé même si ce n'est, pour le moment, pas toujours le cas. L'agent linux employé (Net-snmp de net-snmp.org) fonctionne correctement en V3 et retourne des informations pertinentes. L'agent windows quand a lui ne fonctionne pas en V3, quand au portage de l'agent linux sous windows, la host mib n'est pas implanté et on est donc privé d'une bonne partie des informations interessantes. La solution conciste a faire tourner l'agent microsoft en n'acceptant que les adresses de la boucle locale et à y ajouter l'agent net-snmp (sous windows toujours) en redirigeant les requetes concernant la host mib vers l'agent windows (et oui il sait faire tout ça ce petit malin). Ca parait simple comme ça mais a mettre en oeuvre ça l'est un peu moins quand on part de rien. Comme j'avais du recompiler net-snmp j'en ai profité pour ajouter une branche à la mib, c'était une des questions posées par mon tuteur "peut on ajouter de l'information dans la mib ?".
Une fois la partie agent fonctionnelle j'ai fais un listing des informations commune aux différents types de machines, après présentation auprès de mon tuteur, on a sélectionné celles qui nous semblaient pertinentes. Sur son avis, la plus grande partie des informations réseaux ont été écarté.
informations sur les interfaces réseau : adresse mac, erreur in/out
informations sur les disques installés et leur utilisation : type, taille, bootable ou non
informations sur les logiciels installés : type, date d'installation
informations sur les processus en fonctionnement : nom, chemin, paramètres, type
divers informations : contact, localisation, nom de la machine, système utilisé, ainsi que des informations ajoutées par le service technique.
(On peut noter que des informations sur les tables de rootage, sur les protocoles ip tcp udp snmp et autres sont disponibles et pourraient, à l'avenir, être exploitées de la même manière) Afin de rendre la consultation et le traitement de ces informations possible à tout moment, il a été décidé de les stocker dans une base de données mysql.
En ce qui concernes les évènements système la volonté était d'utiliser des traps snmp pour les capter, il existe un système qui les converti automatiquement sous windows mais rien d'équivalent sous linux (à ma connaissance, si je dis une bêtise reprenez moi ça me serait utile.). En cherchant ce système sous linux j'ai croisé à plusieurs reprise "syslog", c'est un mécanisme d'enregistrement des évènements système sous linux, ce qui était interessant de ce mécanisme est qu'il était capable de générer des paquetes à destination d'un hote. J'ai donc codé un démon en c dont le rôle est de receptionner ces messages et de les enregistrer dans la base de données. De plus j'ai trouvé un service (NTsyslog) sous windows qui permet de transformer un évènement système en paquet syslog et de l'envoyer à un hote, j'avais donc un moyen d'uniformiser la récupération des évènements système.
L'utilisation des traps est donc laissé de coté, pour deux raisons, le fonctionnement en "ligne de commande" est assez obscure (aussi si quelqu'un pouvait m'éclaircir la dessus je suis preneur, les divers sujets que j'ai laissé la dessus sont restés sans réponse) et aussi parce que l'utilisation qu'on voulait en faire n'est visiblement pas possible et que syslog le remplace avantageusement.
En ce qui concerne le frontal web, php intègre des fonctions "snmp" le problème est que la doc en snmp v3 est souvent tronqué et que certaines fonctions (snmptable) n'existent pas. Dans un premier temps, j'ai essayé de faire un snmptable like, mais le temps de récupération était très long, par exemple pour récupérer les informations concernant les quelques 750 packages installé sous une machines linux, celà prenait plus de 6 minutes. La solution à été d'executer la commande snmptable et de récupérer / traiter le flux de sortie le temps est réduit à quelques dixaines de secondes et le nombre de requetes divisé par 10 il me semble.
RESULTATS
Pour le moment, j'ai un système capable d'interoger une machine ponctuellement, on a stocké la salle dans le champs "location", le nom de la machine correspond au nom de la machine sur le réseau. On peut donc rechercher une machine par son nom ou par le nom de sa salle, une partie de l'interface affiche les alertes récement receuillies, les logiciels installés ainsi que le nombre d'installation, une partie machine permet de visualiser les informations propres à une machine.
Derrière tourne donc un script php, composé d'un objet "machine", cet objet peut fonctionner sur les infos de la bd, ou sur des infos snmp si la machine en question est allumée (test avec ping et analyse du flux de sortie). Quand l'utilisateur décide de consulter une machine, l'objet correspondant est créé et ajouté à sa session, tant qu'il parcourt les pages de la machine, les informations sont ajoutées à l'objet, quand il ferme l'onglet correspondant elles sont enregistrées dans la bd. Sur chaque poste, tourne une configuration agent (net snmp sur linux, net snmp + agent microsoft sous windows) ainsi qu'une configuration syslog (/etc/syslogd.conf sous linux, ntsyslog sous windows), un démon syslog tourne sur la machine serveur. Pour que ce soit joli, j'ai fais une jolie feuille de style "porte coulissantes" accopagné d'un objet menu en php, qui permet d'ajouter/supprimer dynamiquement un onglet, on consulte donc toutes les machines que l'ont veut sans changer de page (et ça c'est beau ;) .. enfin moi je trouve ! ).
Je vous poste quelques screen pour visualiser la chose :
http://img144.imageshack.us/img144/3690/80766234zs1.png
http://img178.imageshack.us/img178/5963/22149640ws3.png
http://img249.imageshack.us/img249/8569/94553854bc8.png
http://img261.imageshack.us/img261/6122/57615042eq2.png
http://img403.imageshack.us/img403/4852/79979377xt0.png
http://img264.imageshack.us/img264/2849/43604746aj6.png
http://img402.imageshack.us/img402/7935/24363526tz8.png
http://img442.imageshack.us/img442/825/31322969ok4.png
http://img170.imageshack.us/img170/8123/78240005in9.png
(Note : pour la partie processus je vous laisse imaginer quand la machine est allumé, je n'en avais pas sous la main..enfin si mais pas la bonne !)
Ce qu'il me reste à faire, finaliser le démon syslog, faire le même genre de démon pour les traps snmp (si je suis motivé), faire un système efficace d'enregistrement des informations dans la bd (détecter et traiter des cas comme le changement d'un interface réseau d'un post vers un autre, rennommage d'une machine etc), séparer éventuellement les logiciels windows des logiciels linux (linux est très bavard puisqu'il met une entrée dans la mib par package qu'il installe, chez moi j'en suis a 750 avec une installation de base), traiter les évènements système pour obtenir l'utilisation d'une salle ou d'un groupe de machine, faire un beau rapport, gagner au loto ... ;)
Si quelqu'un à une remarque, une idée d'amélioration ou quoi que ce soit je suis preneur, de même si vous voulez un coup de main :)
PS : je vous met quand même une petite biblio on sait jamais si je change de mail que les générations futures puissent retracer mon parcours ;)
B-A BA SNMP
Generalites et differences V1 V2 V3
Bibliotheque de mibs
modifier mibb
inserer dans mib
configuration net snmp
convertion d'event en trap sous win
Idem
configuration agent net snmp linux
how to snmp linux
utiliser net snmp ET l'agent windows en même temps
Changer le port de l'agent snmp windows
php et snmp (v1 v2c v3)