Net-snmp-extention
Un article de Wiki SOS-ADMIN.
Ce wiki faut suite à l'article sur NEt-SNMP : http://wiki.sos-admin.com/index.php?title=Net-snmp
Extendre Net-SNMP sans trop augmenter la charge de la machine
Il existe un mécanisme trés simple pour étendre Net-SNMP, en ajoutant ceci dans snmpd.conf :
exec .1.3.6.1.4.1.2021.50 qmail-messages qmailmrtg7 m /var/log/qmail exec .1.3.6.1.4.1.2021.51 qmail-concurrency qmailmrtg7 c /var/log/qmail exec .1.3.6.1.4.1.2021.52 qmail-message-status qmailmrtg7 s /var/log/qmail exec .1.3.6.1.4.1.2021.53 qmail-bytes-transfer qmailmrtg7 b /var/log/qmail exec .1.3.6.1.4.1.2021.54 qmail-smtp-concurrency qmailmrtg7 t /var/log/qmail/smtpd exec .1.3.6.1.4.1.2021.55 qmail-smtp-sessions qmailmrtg7 a /var/log/qmail/smtpd exec .1.3.6.1.4.1.2021.56 qmail-pop3-concurrency qmailmrtg7 t /var/log/qmail/pop3d exec .1.3.6.1.4.1.2021.57 qmail-pop3-sessions qmailmrtg7 a /var/log/qmail/pop3d
Nous avons désormais des statistiques pour qmail. Formidable !
Et bien non... Lorque vous interrogerez chacun de ces OID, il va falloir lancer un processus et analyser un fichier. Nous savons déjà que nous interrogerons tous les OID une fois toute les 5 minutes, je vous propose donc de mettre en place un cache pour calculer le maximum de valeurs en une fois, puis de délivrer les valeurs de ce cache pendant 5 minutes.
Le principe est simple, nous allons avoir un programme (en php... il faudrait vérifier qu'il fonctionne dans tous les cas et le recoder en C si quelqu'un veut le faire :o) qui consulte des fichiers et délivre le résultat à netsnmp. Ce programme ne calcule aucune statistique.
Commençons pas mettre en place la structure des répertoires et installer le programme :
#mkdir -p /etc/snmp/scripts #mkdir -p /etc/snmp/files #cd /etc/snmp/scripts/ #wget http://www.oxys.net/sos-admin/snmp/moulin #chmod +x moulin #./moulin
À ce stade, il peut y avoir une erreur du type 'bad interpreter', éditez le fichier moulin et corrigez le chemin de php. L'execution de ce script ne doit pour l'instant provoquer aucune sortie.
Configuration de net-snmp pour qu'il utilise le script
Éditez /etc/snmp/snmpd.conf et ajoutez ceci à la fin :
pass .1.3.6.1.4.1.2021.2789 /etc/snmp/scripts/moulin
Puis relancez net-snmp
#/etc/init.d/snmpd restart
Notre serveur est prêt à répondre à des requettes.
Ajout d'un script pour mysql
Téléchargement du source :
#cd /etc/snmp/scripts/ #wget http://www.oxys.net/sos-admin/snmp/mysql.c
Ce script necessite un accès root au serveur mysql, éditez-le et modifiez les variables :
#nano mysql.c
#include <unistd.h> #include <mysql/mysql.h> #include <string.h> #include <stdio.h> #include <malloc.h> #define MYSQLHOST "localhost" #define MYSQLUSER "root" #define MYSQLPASS "" <------------ ajoutez votre mot de passe
Enregistrez le fichier puis lancez la compilation :
#gcc mysql.c -o mysql -I/usr/local/include -L/usr/local/lib/mysql -lmysqlclient; #./mysql #ls -la ../files/ total 32 drwxr-xr-x 2 root root 4096 jan 24 11:10 . drwxr-xr-x 4 root root 4096 jan 24 10:43 .. -rw-r--r-- 1 root root 105 jan 24 11:10 .1.3.6.1.4.1.2021.2789.2.1 -rw-r--r-- 1 root root 117 jan 24 11:10 .1.3.6.1.4.1.2021.2789.2.2 -rw-r--r-- 1 root root 236 jan 24 11:10 .1.3.6.1.4.1.2021.2789.2.3 -rw-r--r-- 1 root root 407 jan 24 11:10 .1.3.6.1.4.1.2021.2789.2.4 -rw-r--r-- 1 root root 137 jan 24 11:10 .1.3.6.1.4.1.2021.2789.2.5 -rw-r--r-- 1 root root 62 jan 24 11:10 .1.3.6.1.4.1.2021.2789.2.6 #cat ../files/.1.3.6.1.4.1.2021.2789.2.1 #/etc/snmp/scripts/mysql .1.3.6.1.4.1.2021.2789.2.1.1 gauge 355720 .1.3.6.1.4.1.2021.2789.2.1.2 gauge 12
si vous obtenez ceci, c'est parfait, votre programme execute des requettes sql, les analyse et écrit le résultat dans des fichiers. Il ne reste plus qu'à ajouter l'entrée pour notre script :
#nano ../files/.1.3.6.1.4.1.2021.2789
# .1.3.6.1.4.1.2021.2789.2 string mysql
Attention : n'oubliez pas le # au début du fichiers, si vous avez regardé le script moulin, vous savez qu'il utilise la première ligne pour exécuter le script qui a généré le fichier s'il date de plus de 5 minutes. Ce fichier ne change jamais, nous nous contentons donc de #
Ajoutons également la définition des OID mysql (ce ne sont pas des OID officiels !) :
#cd /etc/snmp/files/ #wget http://www.oxys.net/sos-admin/snmp/.1.3.6.1.4.1.2021.2789.2
Test :
#snmpwalk -v 2c -c private localhost .1.3.6.1.4.1.2021.2789 UCD-SNMP-MIB::ucdavis.2789.2 = STRING: "mysql" UCD-SNMP-MIB::ucdavis.2789.2.1 = STRING: "Mysql Server" UCD-SNMP-MIB::ucdavis.2789.2.1.1 = Gauge32: 357497 UCD-SNMP-MIB::ucdavis.2789.2.1.2 = Gauge32: 12 UCD-SNMP-MIB::ucdavis.2789.2.2 = STRING: "Mysql Traffic" UCD-SNMP-MIB::ucdavis.2789.2.2.1 = Gauge32: 1050374227 UCD-SNMP-MIB::ucdavis.2789.2.2.2 = Gauge32: 2279290592 UCD-SNMP-MIB::ucdavis.2789.2.3 = STRING: "Mysql Handler" UCD-SNMP-MIB::ucdavis.2789.2.3.1 = Gauge32: 5588168 UCD-SNMP-MIB::ucdavis.2789.2.3.2 = Gauge32: 625141 UCD-SNMP-MIB::ucdavis.2789.2.3.3 = Gauge32: 659052 UCD-SNMP-MIB::ucdavis.2789.2.3.4 = Gauge32: 3046508 UCD-SNMP-MIB::ucdavis.2789.2.3.5 = Gauge32: 50536 UCD-SNMP-MIB::ucdavis.2789.2.4 = STRING: "Mysql Threads" UCD-SNMP-MIB::ucdavis.2789.2.4.1 = Gauge32: 645879 UCD-SNMP-MIB::ucdavis.2789.2.4.2 = Gauge32: 219245 UCD-SNMP-MIB::ucdavis.2789.2.4.3 = Gauge32: 4753996 UCD-SNMP-MIB::ucdavis.2789.2.4.4 = Gauge32: 19243773 UCD-SNMP-MIB::ucdavis.2789.2.4.5 = Gauge32: 792 UCD-SNMP-MIB::ucdavis.2789.2.4.6 = Gauge32: 9763254 UCD-SNMP-MIB::ucdavis.2789.2.4.7 = Gauge32: 328649600 UCD-SNMP-MIB::ucdavis.2789.2.4.8 = Gauge32: 69873 UCD-SNMP-MIB::ucdavis.2789.2.4.9 = Gauge32: 1011879 UCD-SNMP-MIB::ucdavis.2789.2.5 = STRING: "Mysql Cache" UCD-SNMP-MIB::ucdavis.2789.2.5.1 = Gauge32: 31 UCD-SNMP-MIB::ucdavis.2789.2.5.2 = Gauge32: 1 UCD-SNMP-MIB::ucdavis.2789.2.5.3 = Gauge32: 0
C'est fini, nous pouvons récupérer des statistiques de mysql en sollicitant au minimum la machine.

