Superviser des onduleurs/UPS avec Nagios/Centreon et SNMP

Posted by

Être alerté par l’onduleur en SNMP

Il n’est pas rare que les onduleurs (ou Uninterrupted Power Supply chez nos amis anglosaxons), même sans être très haut de gamme, disposent de sortie Ethernet permettant de superviser l’état de l’onduleur, sa charge, …

Généralement, ce genre d’onduleur est également livré avec des clients propriétaires qui vous permettent de configurer la partie réseau de l’onduleur, puis ensuite de définir des alertes, voire des actions à réaliser lorsque l’onduleur commence à se décharger. Cependant, dans un environnement un tant soit peu industrialisé, ce genre d’outil est rarement pratique :

  • Il y a généralement déjà un outil de supervision en place, et en ajouter un va à l’encontre de l’efficacité pour les équipes support. Des consoles de supervision doivent être installés sur les postes des administrateur.
  • Les agents pour éteindre les serveurs alimentés doivent être installés (ce qui induit une tâche d’exploitation/maintenance supplémentaire), parfois en s’appuyant sur des versions hors d’age de Java comme dépendance, et avec bien peu de support une fois que le produit est chez vous.

Heureusement, la plupart des onduleurs exposent également une MIB SNMP standard, que vous pouvez donc très simplement ajouter pour réaliser vous même votre propre supervision. Et même pourquoi pas votre propre agent d’extinction, en se basant sur un script ainsi qu’un agent déjà présent sur les machines pour la supervision (NSClient/NRPE pour moi).

Pour trouver cette MIB (.1.3.6.1.4.1.21111.1.1, originalement nommée UPS), j’ai tout simplement utiliser un snmpwalk sous Unix en me connectant à l’adresse IP de l’onduleur après configuration. Sous Windows, on peut aussi utiliser un utilitaire graphique pour faire la même chose, notamment avec iReasoning MIB Browser qui nous donne également quelques informations sur les indicateurs disponibles.

ups2
MIB Browser donne des informations sur la MIB de manière graphique, ce qui peut être plus lisible qu’un simple snmpwalk

Quoi surveiller ?

Les indicateurs de la MIB UPS qui m’ont parus les plus opportuns à surveiller sont les suivants :

  • upsBatStatus (.1.3.6.1.4.1.21111.1.1.3.1.0) : L’état de la batterie qui peut être chargé ou en cours de déchargement. Tout ce qui n’est pas 2 est inquiétant.
  • upsBatEstChargeRemaining (.1.3.6.1.4.1.21111.1.1.3.4.0) : L’estimation de la charge restant de la batterie en %age. Si on descend sous 90% c’est que l’onduleur se décharge et que ce n’est pas une microcoupure !
  • upsBatEstMinutesRemaining (.1.3.6.1.4.1.21111.1.1.3.3.0) : L’estimation du temps restant avant que la batterie soit épuisée. Je trouve cet indicateur pratique pour 2 raisons
    • On peut lancer des actions d’urgence (ssh + shutdown sur tous les linux) à partir d’un certain temps avant l’épuisement plutôt qu’un pourcentage, car on peut estimer que 5 minutes avant l’échéance, on aura plus le temps de rétablir avant coupure. Ce qui est plus difficile à fixer en pourcentage.
    • On peut éventuellement détecter un problème sur les batteries ou sur la charge de l’onduleur si en fonctionnement normal (sur secteur) on se retrouve avec un temps de charge trop bas.
  • upsBatSecondsOnBattery (.1.3.6.1.4.1.21111.1.1.3.2.0) : Le nombre de secondes depuis que l’onduleur est sur batterie et n’est donc plus sur secteur. Si on dépasse 0, c’est mauvais signe mais pour éviter les alertes intempestives j’ai mis 2.

Et comme je suis sympa, je vous passe la configuration Nagios/Centreon (ou tout autre produit compatible) associée qui vous permettra d’obtenir les indicateurs en question sans effort. Enjoy !

ups

define command {
    command_name                   check_snmp
    command_line                   $USER1$/check_snmp -H $HOSTADDRESS$ -o $ARG1$ -w $ARG2$ -c $ARG3$
}

define service {
    service_description            Template_par_défaut_pour_tous_les_serivces
    name                           generic-service
    contacts                       generic-contact
    check_period                   24x7
    notification_period            24x7
    max_check_attempts             5
    check_interval                 5
    retry_interval                 5
    notification_interval          15
    notification_options           w,u,c
    first_notification_delay       0
    register                       0
    notifications_enabled          1
}

define service {
    service_description            2_tentatives_et_interval_de_5_minutes_en_24_7
    name                           2retry_5min_24x7
    check_period                   24x7
    max_check_attempts             2
    check_interval                 5
    retry_interval                 5
    notification_interval          5
    register                       0
    use                            generic-service
}

define service {
    service_description            Check_SNMP_upsBatStatus
    name                           snmp_upsBatStatus
    check_command                  check_snmp!.1.3.6.1.4.1.21111.1.1.3.1.0!2!2
    register                       0
    use                            2retry-5min-24x7
}

define service {
    service_description            Check_SNMP_upsBatEstChargeRemaining
    name                           snmp_upsBatEstChargeRemaining
    check_command                  check_snmp!.1.3.6.1.4.1.21111.1.1.3.4.0!90:!80:
    register                       0
    use                            2retry-5min-24x7
}

define service {
    service_description            Check_SNMP_upsBatEstMinutesRemaining
    name                           snmp_upsBatEstMinutesRemaining
    check_command                  check_snmp!.1.3.6.1.4.1.21111.1.1.3.3.0!30:!20:
    register                       0
    use                            2retry-5min-24x7
}

define service {
    service_description            Check_SNMP_upsBatSecondsOnBattery
    name                           snmp_upsBatSecondsOnBattery
    check_command                  check_snmp!.1.3.6.1.4.1.21111.1.1.3.2.0!2!2
    register                       0
    use                            2retry-5min-24x7
}

8 comments

  1. Salut Zwindler, Article vraiment bien. le script check_snmp existe dans centreon mais ou est-ce que tu définis tes services?

  2. Dans l’article je donne la configuration Nagios pour les template de services et le template d’hôtes car c’est ce que préconise centreon. Une fois tous les templates créés tu n’as plus qu’à créer un hote appartenant à ce template. Les services seront créés automatiquement par centreon.

  3. Hello.

    Merci pour ces infos.
    Une difficulté cependant : pour tout ce qui est charge/durée résiduelle, on souhaite que les seuils WARNING/CRITICAL soient inversés à ce qu’ils sont d’habitude, c’est à dire valeur inférieure à, pas supérieure à.
    As-tu une idée de comment faire ?

  4. Je n’ai pas d’environnement de test sous la main pour vérifier mais il existe des flags pour dire au check de faire ça

  5. Ah voilà j’ai retrouvé : comme indiqué dans l’exemple à la fin de l’article, il suffit d’utiliser les seuils avec « : » devant le chiffre. C’est une convention dans le développement des checks nagios même si tous les plugins ne l’implémente pas tous.
    Donc par exemple pour le remainingTime, j’avais proposé des seuils warning et critiques à 30: et 20: (inférieur à 30 minutes = Warn et 20 minutes = Crit)

  6. Bonjour Zwindler,
    Je suis un peu nouveau dans la supervision et je souhaite pouvoir comprendre l’utilisation de l’outil CENTREON.
    Je cherche à le faire au travers de la supervision de mon UPS relié à mon synology.
    Mais voilà les Trap snmp, ne répondent pas, ne semble pas exister dans Centreon, quand je les charge les MIBS refusent de passer …
    Que du bonheur.
    En plus et malgré votre cadeau, je ne parviens pas non plus à importer votre configuration qui semble régler le problème.
    Le SNMP fonctionne sur CENTREON Central, je réussi à voir mes NAS synology, ou mon routeur CIsco par les comandes sous terminal.

    Merci de votre aide.
    Je passerai ensuite à la tentative de chargement des MIBs Synology qui me donne les mêmes résultats et c’est pas faute d’avoir les bons fichiers dans le repertoire /usr/share/snmp/mibs.

    Cordialement
    Dominique

Leave a Reply

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.