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.