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.