LibreNMS mostrando valores erróneos de voltaje en UPS genérica


3 min de lectura
LibreNMS mostrando valores erróneos de voltaje en UPS genérica

LibreNMS es, para mi gusto, el mejor NMS gratuito y de código abierto que existe. Basado en el fork de Observium, es la mejor opción para migrar del querido (pero obsoleto) Cacti a un sistema con soporte y comunidades activas. LibreNMS tiene soporte para una gran variedad de dispositivos y su interfaz es muy intuitiva y amigable (Nagios: in your face!). A pesar de que los problemas que tiene esta aplicación son pocos (para ser gratis), de vez en cuando es necesario ajustar algunos parámetros para que coincidan perfecto con la infraestructura propia. Uno de los errores más frecuentes que he encontrado es que en algunas UPS (genéricas, por cierto) no se muestran correctamente los valores de voltaje (Input, Output, Battery) y hay que escarbar en el código para encontrar el OID erróneo al hacer las consultas SNMP.

Acá un ejemplo:

MariaDB [librenms]> select * from sensors where device_id="323" and sensor_class="voltage" and sensor_descr="Input" \G; 
*************************** 1. row ***************************
                sensor_id: 1359
           sensor_deleted: 0
             sensor_class: voltage
                device_id: 323
              poller_type: snmp
               sensor_oid: .1.3.6.1.2.1.33.1.3.3.1.3.0
             sensor_index: 100
              sensor_type: rfc1628
             sensor_descr: Input
                    group: NULL
           sensor_divisor: 1
        sensor_multiplier: 1
           sensor_current: 0
             sensor_limit: 259.9
        sensor_limit_warn: NULL
         sensor_limit_low: 192.1
    sensor_limit_low_warn: NULL
             sensor_alert: 1
            sensor_custom: No
         entPhysicalIndex: NULL
entPhysicalIndex_measured: NULL
               lastupdate: 2021-02-09 16:55:15
              sensor_prev: 222
                user_func: NULL
1 row in set (0.001 sec)

Como pueden ver, el voltaje de entrada (sensor_current) está en 0. Eso ocurre porque la OID está mal y al consultar arroja un valor 0.

root@monitoreo:~# snmpwalk -c public  -v1 10.120.90.201 .1.3.6.1.2.1.33.1.3.3.1.3.0
iso.3.6.1.2.1.33.1.3.3.1.3.0 = INTEGER: 0
root@monitoreo:~#

El valor correcto de OID es, sin embargo, .1.3.6.1.2.1.33.1.3.3.1.3.1 (noten el 1 al final)

root@monitoreo:~# snmpwalk -c public  -v1 10.120.90.201 .1.3.6.1.2.1.33.1.3.3.1.3.1
iso.3.6.1.2.1.33.1.3.3.1.3.1 = INTEGER: 225
root@monitoreo:~#

Para corregir el problema es necesario decirle a LibreNMS que el último índice sea siempre 1, en vez de 0. Eso se realiza editando el archivo /opt/librenms/includes/discovery/sensors/voltage/rfc1628.inc.php ajustando el OID:

$input_volts = snmpwalk_group($device, 'upsInputVoltage', 'UPS-MIB');
foreach ($input_volts as $index => $data) {
//  MODIFICACIÓN DEL OID DE LA UPS GENÉRICA
//  $volt_oid = ".1.3.6.1.2.1.33.1.3.3.1.3.$index";
    $volt_oid = ".1.3.6.1.2.1.33.1.3.3.1.3.1";
    $divisor = get_device_divisor($device, $pre_cache['poweralert_serial'], 'voltage', $volt_oid);
    $descr = 'Input';
    if (count($input_volts) > 1) {
        $descr .= " Phase $index";
    }

Por algún motivo LibreNMS obliga a poner un valor de la variable $index en 0, lo que provoca que el OID  resultante sea erróneo. Luego de este cambio hay que volver a redescubrir los dispositivos (recomendable borrar el caché primero) y ejecutar un polling manual:

cd /opt/librenms/
rm cache/os_defs.cache
./discovery.php -h all
./poller.php -h all

Con eso ya deberíamos poder visualizar correctamente los valores de OID en las UPS.

Artículos Relacionados

SUBIR

🎉 Te has suscrito con éxito a NETLAYER.CL!
OK