PROJET AUTOBLOG


Shaarli - Les discussions de Shaarli

Archivé

Site original : Shaarli - Les discussions de Shaarli du 23/07/2013

⇐ retour index

Zabbix + découverte SNMP : remonter le nom logique (eth0) des interfaces physiques plutôt que leur description (marque+modèle)

mercredi 14 octobre 2015 à 01:39
GuiGui's Show - Liens
Sur un serveur, on a une carte réseau Broadcom NetXtreme II BCM5709 avec 4 ports. Sous GNU/Linux, c'est mappé en 4 interfaces : eth0-3. On utilise Zabbix et SNMP (pas l'agent Zabbix) pour monitorer, entre autres, ce serveur.

Par défaut, la découverte SNMP des interfaces réseau remonte la description de l'interface (IF-MIB.ifDescr) qui contient, selon le RFC 2863, « A textual string containing information about the interface.  This string should include the name of the manufacturer, the product name and the version of the interface hardware/software. ». Dans notre cas, les 4 interfaces sont en fait les ports d'une même carte réseau... Donc la description est identique... Donc Zabbix refuse d'importer 3 des 4 interfaces pour un même hôte puisque la valeur SNMP (la description de l'interface donc) est la même... De plus, pour un hôte donné, on n'est pas certain de l'interface qui sera importée (de mon expérience, ce n'est pas forcément eth0). Enfin, un nom de graphe « Traffic on interface Broadcom NetXtreme II BCM5709 », ce n'est pas parlant. On n'a pas ce problème avec les interfaces logiques comme les tun/tap ou la loopback : ifDescr = ifName.

On pourrait utiliser ifIndex, une valeur numérique unique associée à une interface dans l'arborescence SNMP. Mais un graphe « Traffic on interface 1 », ce n'est toujours pas parlant.

Ce qu'il nous faut, en fait, c'est IF-MIB.ifName : « The textual name of the interface.  The value of this object should be the name of the interface as assigned by the local device and should be suitable for use in commands entered at the device's `console'.  This might be a text name, such as `le0' or a simple port number, such as `1', depending on the interface naming syntax of the device. ». On remontera donc « eth0 », « eth1 »,...

Pour ce faire, dans Zabbix, il faut aller dans Configuration -> Templates puis cliquer sur « Discovery » sur la ligne « Template SNMP Interfaces » puis cliquer sur « Network interfaces ». On change la valeur du champ « Key » de « ifDescr » pour « ifName ». On change la valeur du champ « SNMP OID » de « IF-MIB::ifDescr » pour «IF-MIB::ifName ». Pour que la modification soit prise en compte plus vite, on peut changer la valeur du champ « Update interval (in sec) » de 3600 à 60. Pour que les anciens items (ceux basés sur ifDescr) disparaissent plus vite, on peut changer la valeur de « Keep lost resources period (in days) ».

Dans les « Item prototypes » du template SNMP Interfaces, on vérifie que les clés sont bien de la forme ifOutOctets[{#SNMPVALUE}], ifInOctets[{#SNMPVALUE}], ... {#SNMPVALUE} sera remplacé par le nom de l'interface.

On attend que la découverte SNMP s'effectue et on constatera que les interfaces réseau manquantes sont désormais présentes ainsi que la création de nouveaux items comme « Outgoing traffic on interface eth0 » est effective. Même chose pour les graphes. Désormais, on remonte des métriques depuis toutes les interfaces réseau / ports physiques. Il est également possible de créer des items calculés avec une formule comme « last("<nom_machine1>:ifOutOctets[eth0]")+last("<nom_machine2>:ifOutOctets[eth0]") » puisque ifOutOctets[eth0] est une clé disponible. \o/
(Permalink)