Comme je suis quelqu'un de relativement paresseux (je n'avais pas trop envie de me déclarer les 48 ports des 200 switchs à la main). J'ai donc rapidement pensé à un script qui me permettrait de déclarer automatiquement ces surveillances. Et comme je suis un mec super sympas qui adore raconter sa vie, je vais vous en faire profiter bande de veinards !
Pour se faire, nous allons utiliser les MIBs SNMP des switchs CISCO qui ont la bonne idée de proposer tout un tas de chose vachement intéressante (oui, enfin ... pour un administrateur d'outils de surveillance). Nous allons voir notamment l'OID 1.3.6.1.2.1.2.2.1.2 qui va nous renvoyer la liste des interfaces du switch :
$ snmpwalk -c ecalyptus -v 2c 10.1.1.1 1.3.6.1.2.1.2.2.1.2
iso.3.6.1.2.1.2.2.1.2.1 = STRING: "FastEthernet1"
iso.3.6.1.2.1.2.2.1.2.2 = STRING: "TenGigabitEthernet1/1"
iso.3.6.1.2.1.2.2.1.2.3 = STRING: "TenGigabitEthernet1/2"
iso.3.6.1.2.1.2.2.1.2.4 = STRING: "TenGigabitEthernet1/3"
iso.3.6.1.2.1.2.2.1.2.5 = STRING: "TenGigabitEthernet1/4"
iso.3.6.1.2.1.2.2.1.2.6 = STRING: "GigabitEthernet3/1"
iso.3.6.1.2.1.2.2.1.2.7 = STRING: "GigabitEthernet3/2"
iso.3.6.1.2.1.2.2.1.2.8 = STRING: "GigabitEthernet3/3"
iso.3.6.1.2.1.2.2.1.2.9 = STRING: "GigabitEthernet3/4"
iso.3.6.1.2.1.2.2.1.2.10 = STRING: "GigabitEthernet3/5"
iso.3.6.1.2.1.2.2.1.2.11 = STRING: "GigabitEthernet3/6"
iso.3.6.1.2.1.2.2.1.2.12 = STRING: "GigabitEthernet3/7"
iso.3.6.1.2.1.2.2.1.2.13 = STRING: "GigabitEthernet3/8"
iso.3.6.1.2.1.2.2.1.2.14 = STRING: "GigabitEthernet3/9"
iso.3.6.1.2.1.2.2.1.2.15 = STRING: "GigabitEthernet3/10"
[...]
Nous allons nous servir de cette sortie pour générer notre surveillance. Pour cela, nous allons utiliser le script perl suivant :
#!/usr/bin/perl use strict; open(MODEL, "modele.txt"); mkdir("modeles") if(!-d("modeles")); while(Ce script attend en entrée un fichier de paramètre (modele.txt) et nous donne en sortie des fichiers de configuration au format nagios dans le sous-répertoire modeles. Il nous reste maintenant à prendre ces fichiers et les intégrer dans la configuration de notre nagios/Shinken.) { chomp(); my($modele, $ip) = split(/;/); my @interfaces = `snmpwalk -c ecalyptus -v 2c $ip 1.3.6.1.2.1.2.2.1.2`; open(MODEL_CFG, ">modeles/switch-$modele.cfg"); foreach(@interfaces) { if(/iso.3.6.1.2.1.2.2.1.2.(\d+) = STRING: "(.*Ethernet.*)"/) { my ($id, $interface) = ($1, $2); print MODEL_CFG "define service { hostgroup_name $modele use generic-service service_description $interface check_command check_port_usage!$id!6000!8000 } \n"; } } close(MODEL_CFG); } close(MODEL);
Ci-dessous un exemple de surveillance sur un switch CISCO (du type WS-C2960-24PC-L) :
define service { hostgroup_name WS-C2960-24PC-L use generic-service service_description FastEthernet0/1 check_command check_port_usage!10001!6000!8000 } [...] define service { hostgroup_name WS-C2960-24PC-L use generic-service service_description GigabitEthernet0/2 check_command check_port_usage!10102!6000!8000 }Il reste ensuite à déclarer un hostgroup ad-hoc avec un template de serveur comme suit :
define hostgroup{
hostgroup_name WS-C2960-24PC-L
alias Switchs Cisco WS-C2960-24PC-L
}
define host {
name switch-WS-C2960-24PC-L
use generic-switch
alias Ensemble des switchs Cisco WS-C2960-24PC-L
hostgroups Switch,WS-C2960-24PC-L
icon_image vendors/cisco.png
register 0
}
Et nous pouvons déclarer maintenant des switchs utilisant le template switch-WS-C2960-24PC-L. Ces derniers viendront directement avec la surveillance automatique de tous leurs ports.
c'est bien et assez utile pour nagios. Mais shinken possède depuis un moment un générateur de service pour cela. grâce à la directive duplicate_foreach de l'objet service.
RépondreSupprimerJette un oeil sur cet article : http://www.monitoring-fr.org/2010/12/shinken-0-4-la-libellule-decadente-se-pose/