Support for IPMI-Only devices

I have some servers that only support IPMI. Their only SNMP support is for sending traps to a monitoring server. It would be nice to get something other than up/down status.

3 Likes

I’d like to chime in here. I need this too. I have some Fujitsu Primergy Servers where the BMC can only send SNMP traps.
If I add these devices as ping only, they never get polled via IPMI.
If I force add them as snmp devices the discovery/poller will never run the ipmi module, because SNMP is unreachable.
As far as I know IPMI data is not extracted via SNMP so it should be possible to get the data independently from the devices SNMP capability.
Maybe check if the IPMI settings for the device are populated and if yes, then do the IPMI querie even when SNMP is unreachable?

I ran into this issue and did some terrible php hacking, and ended up with:

Author: Anton Lundin <[email protected]>
Date:   Thu May 14 21:17:58 2020 +0200

    Ipmi without snmp

diff --git a/discovery.php b/discovery.php
index 6572ad3dc..82c9f0e5b 100755
--- a/discovery.php
+++ b/discovery.php
@@ -116,7 +116,7 @@ if (!empty(\LibreNMS\Config::get('distributed_poller_group'))) {
 }
 
 global $device;
-foreach (dbFetch("SELECT * FROM `devices` WHERE disabled = 0 AND snmp_disable = 0 $where ORDER BY device_id DESC", $sqlparams) as $device) {
+foreach (dbFetch("SELECT * FROM `devices` WHERE disabled = 0 $where ORDER BY device_id DESC", $sqlparams) as $device) {
     DeviceCache::setPrimary($device['device_id']);
     $discovered_devices += (int)discover_device($device, $module_override);
 }
diff --git a/includes/discovery/functions.inc.php b/includes/discovery/functions.inc.php
index 095afce0e..b60593cb5 100644
--- a/includes/discovery/functions.inc.php
+++ b/includes/discovery/functions.inc.php
@@ -120,10 +120,6 @@ function load_discovery(&$device)
  */
 function discover_device(&$device, $force_module = false)
 {
-    if ($device['snmp_disable'] == '1') {
-        return false;
-    }
-
     global $valid;
 
     $valid = array();
@@ -143,6 +139,11 @@ function discover_device(&$device, $force_module = false)
 
     $discovery_devices = Config::get('discovery_modules', array());
     $discovery_devices = array('core' => true) + $discovery_devices;
+    // HACKED for ipmi-only support
+    if ($device['snmp_disable'] == '1') {
+        $discovery_devices = array();
+        $discovery_devices['sensors'] = 1;
+    }
 
     foreach ($discovery_devices as $module => $module_status) {
         $os_module_status = Config::getOsSetting($device['os'], "discovery_modules.$module");
diff --git a/includes/html/pages/device/edit/device.inc.php b/includes/html/pages/device/edit/device.inc.php
index fb523c1f7..aa537017c 100644
--- a/includes/html/pages/device/edit/device.inc.php
+++ b/includes/html/pages/device/edit/device.inc.php
@@ -104,7 +104,7 @@ $disable_notify             = get_dev_attrib($device, 'disable_notify');
     </div>
     <div class="col-md-1 col-md-offset-2">
         <?php
-        if (\LibreNMS\Config::get('enable_clear_discovery') == 1 && !$device['snmp_disable']) {
+        if (\LibreNMS\Config::get('enable_clear_discovery') == 1) {
             ?>
             <button type="submit" id="rediscover" data-device_id="<?php echo($device['device_id']); ?>" class="btn btn-primary" name="rediscover"><i class="fa fa-retweet"></i> Rediscover device</button>
             <?php
diff --git a/includes/polling/functions.inc.php b/includes/polling/functions.inc.php
index bd49f010d..429891390 100644
--- a/includes/polling/functions.inc.php
+++ b/includes/polling/functions.inc.php
@@ -291,7 +291,9 @@ function poll_device($device, $force_module = false)
 
     if ($response['status'] == '1') {
         if ($device['snmp_disable']) {
-            Config::set('poller_modules', []);
+            // Hack it to poll ipmi only
+            //Config::set('poller_modules', Config::get('poller_modules'));
+            Config::set('poller_modules', ['ipmi' => true]);
         } else {
             // we always want the core module to be included, prepend it
             Config::set('poller_modules', ['core' => true] + Config::get('poller_modules'));

It isn’t pretty, but it works.

Hi,

We have the same issue as thousands of LibreNMS users. All other tools Zabbix, Nagios etc support IPMI Monitoring AND snmp monitoring however LibreNMS only supports snmp and optionally, if snmp works well, you might get some IPMI data unless you have a newer IPMI chip like ILO4. It is strange you can’t just add IPMI without snmp. As this is so many times requested I wonder why no one ever created an update for this. I will try your hack tomorrow as we have like 300 of servers in LibreNMS on IPMI and we only pull snmp data from our own, non dedicated servers, which are like 20.

Of the 300 machines, maybe 30 have ILO3, SuperMicro X8/X9 mainboard and cannot be added on snmp as there is no snmp agent in the IPMI chip.

1 Like

I know it’s been a few years since this was posted, but I’m running up against this as well with Nutanix hosts that can’t be polled via SNMP, but have IPMI with hardware stats we can pull, but the poller keeps coming back saying that the host’s ipmi was not discovered during discovery.

Is there some sort of setting you need to enable to bypass that so IPMI will actually poll?