Issue Where SolarWinds Orion Agents Show As Connected But They Are Not Updating Statistics (RESOLVED)

This issue can easily slip by unnoticed. All of that status indicators still show green, so everything is good, right? Not so! Statistics and gauge widgets will simply show that last statistic is received, whether it is recent or not. However, if you try to graph statistical data, there won't be any there. Several of the graph widgets will simply say "No data to display" as well.

I have a custom query based alert that lets me know if the CPU stats haven't received updates in the last hour to help shed light on situations like this. When I discovered this issue, I noticed that the SolarWinds Orion agents would randomly stop transmitting statistics even though they showed as connected. It was one of those random and intermittent issues that's difficult to reproduce until this issue has already arisen. Because of this, I spent between 6 and 9 months months working with SolarWinds developers and support to track down the issue and get a fix in place for it. 

Below is a fix which finally resolved 95% of these agent issues.

Run NotePad as an Administrator and open the following file "c:\Program Files (x86)\Common Files\SolarWinds\JobEngine.v2\SWJobEngineSvc2.exe.config". Search for jobEngineSettings_Full and add the option emptyRouterCleanupInterval="-00:00:00.0010000" before the closing bracket so that it looks like the section below.

<jobEngineSettings_Full maxWorkerProcess="10"
jobExecutionRetention="01:00:00"
jobExecutionEnabled="false"
thresholdStreamByteThreshold="131072"
maxWorkerProcessLogFileAge="5.00:00:00"
maxHungJobs="1"
jobHungTimeout="00:00:30"
maxJobThreadsPerWorkerProcess="100"
maxJobThreadsPerWorkerProcess64="1000"
workerMonitoringPeriod="00:00:01.0000000"
forceSeparateWorkersOnAgent="true"
jobErrorSuppressionInterval="01:00:00"
jobErrorSuppressionCleanupInterval="00:05:00"
emptyRouterCleanupInterval="-00:00:00.0010000"
/>

After you make these configuration changes, you will need to restart the SolarWinds JobEngine v2 service.

This fix has to be repeated on each of your polling engines.

Why Your SolarWinds Orion Web Server Drives are Filling Up Over Time & How to Fix It

If you've had your SolarWinds Orion install for any length of time, you'll probably notice that the C: drives on the primary polling engine and/or any additional web servers (AWS) keep growing over time. The more support tickets you create, the faster these drives will fill up. Well, there's a reason for this...

When you generate a diagnostics from the Orion web console, it drops all of those hefty zip files on the C: drive of the web server that you were logged into when you generated them. Furthermore, it never cleans these up on it's own. If you're web server has been up for several years, you've probably got a pretty good chunk of disk sucked up by these diagnostic files.

They are easy enough to clean up though, if you know where they are hidden. Yes, they are literally hidden. They exist under the hidden file path of %ProgramData%\SolarWinds\Diagnostics. Typically, that ProgramData environment variable will point to C:\ProgramData which is a hidden folder, but the path can vary based on your server's configuration.

In order to automatically clean these up, I wrote the PowerShell script below and I run it daily from Task Scheduler. This simple one-liner will check the directory for any zip files older that 14 days and delete them. Typically, after you submit that zip file to support, you'll never use it again. So, you're not going to be missing anything by removing these old files.

You will probably have to run this PowerShell snippet in an elevated PowerShell window for it to access these files if they have their default permissions.

I also have this script available on GitHub as Remove-OldOrionDiagnosticFiles.ps1 if you'd prefer to grab it from there.

How to Bulk Disable/Enable Topology Polling on All SolarWinds Orion Nodes (SQL)

If you're not familiar with topology polling, it is used by SolarWinds Orion to determine the node-to-node dependencies. So, for example, if a switch goes down you would get an alert for the switch and not for all of the dependent child nodes that are plugged into the switch.

One of the SolarWinds Orion environments that I took over had topology polling disabled on a large portion of the nodes. This prevented a lot of dependencies from being created which otherwise would have been.

Of course, you could go through all of the nodes one at a time, hit the list resources button, and add topology polling back to each one of them. Or, you could run a simple SQL query to enable it on each of the nodes that have it disabled.

Let's start by identifying which nodes have topology polling disabled. The select statement below will find all of them and also get the related node information from the NodesData table so that you sanity check what you're going to change.

If all of the results look good to you, the query below can be used to enable topology polling on any nodes that have the setting explicitly disabled.

Easy peasy! I have a couple variations of these on GitHub if you want to go the other way and disable topology polling in mass. Those are linked below

How to Bulk Disable/Enable Multicast Polling on All SolarWinds Orion Nodes (SQL)

When I was doing SolarWinds consulting, I ran into a lot of clients complaining about poor database performance in relation to their multicast routing tables having millions of rows in them. These customers were often looking a quick and easy way to identify all of the nodes which have multicast polling enabled on them, as well as a way to quickly disable it.

First things first. If you want to identify which nodes have multicast polling enabled, you can run the SQL query below in Database Manager or SQL Server Management Studio.

SELECT n.Caption
, n.IP_Address
, n.Vendor
, n.MachineType
, p.PollerID
, p.PollerType
, [Enabled] 
FROM Pollers p
INNER JOIN NodesData n ON n.NodeID=p.NetObjectID
WHERE PollerType LIKE 'N.MulticastRouting%' AND [Enabled] = 1

Whether you have used the query above to identify the nodes with multicast polling enabled or not, the SQL query below can be used to disable multicast polling on any nodes in Orion that currently have them enabled.

UPDATE Pollers
SET [Enabled] = 0
WHERE PollerType LIKE 'N.MulticastRouting%' AND [Enabled] <> 0

If you want to enable multicast polling on them again, you can just change the enabled line to equal one where it currently equals zero, like below.

UPDATE Pollers
SET [Enabled] = 1
WHERE PollerType LIKE 'N.MulticastRouting%' AND [Enabled] = 0

Below are links to these SQL queries on GitHub:

How to Bulk Enable Application Dependency Mapping on Agents in SolarWinds Orion Using PowerShell

SolarWinds Server & Application Monitor (SAM) has a feature called Application Dependency Mapping. This feature analyzes the connections on servers running the Orion agent to determine which processes and servers are talking to each other. It then takes those connections and creates application dependencies for them.

Identifying and enabling application dependency mappings programmatically in SolarWinds Orion can get a little funky. Below is a PowerShell script which finds any agents that do not have application dependency mappings enabled and enabled it on them. I also have this script posted on GitHub if you'd prefer to grab it from there. Sometime copying code from a web page can morph characters.

# Verify that the OrionSDK is installed and available.
# This is a required prerequisite for this script.
# It can be downloaded from https://github.com/solarwinds/OrionSDK
if (!(Get-Command Get-SwisData)) {
    if (!(Get-PSSnapin | Where-Object { $_.Name -eq "SwisSnapin" })) {
        Try {
            Add-PSSnapin "SwisSnapin"
        } Catch {
            if (Test-Path "C:\Program Files (x86)\SolarWinds\Orion SDK\SWQL Studio\SwisPowerShell.dll") {
                C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe "C:\Program Files (x86)\SolarWinds\Orion SDK\SWQL Studio\SwisPowerShell.dll" | Out-Null
                C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe "C:\Program Files (x86)\SolarWinds\Orion SDK\SWQL Studio\SwisPowerShell.dll" | Out-Null
            } else {
                Write-Host "This script requires the OrionSDK to be installed." -ForegroundColor Red
                Write-Host "https://github.com/solarwinds/OrionSDK" -ForegroundColor Red
            }
        }
    }
}

# Checking to see if we already have stored credentials.
# If not, we'll prompt for credentials and securely
# store them with Export-CLIXML.
$ApiCredPath = $env:Userprofile + '\ApiCreds'
if (!(Test-Path -Path $ApiCredPath)) {
    $ApiCred = Get-Credential -Message "Please enter your credentials for SolarWinds Orion"
    if ($ApiCred) {
        Export-Clixml -Path $ApiCredPath -InputObject $ApiCred
    }
}
$SwCredential = Import-Clixml -Path $ApiCredPath -Verbose

# Checking to see if we have a cached an Orion server.
# If not, we'll prompt for hostname or IP address of the
# primary Orion server and cache it to the Orion environment variable.
if (!$Env:Orion) {
    $OrionServer = Read-Host "Enter the hostname or IP of your primary Orion server."
    if ($OrionServer) {
        New-Item -Path Env:\Orion -Value $OrionServer
    }
}
$Swis = Connect-Swis -Hostname $env:Orion -Credential $SwCredential

# Get agent nodes that don't yet have application dependencies enabled
$NodesQuery = @"
    SELECT NodeID, ObjectSubType, IPAddress, Caption, n.CustomProperties.Environment, n.Inventory.NodeID AS [InventoryNodeID]
    FROM Orion.Nodes n
    WHERE n.ObjectSubType='Agent' AND 
        n.Inventory.NodeID IS NULL AND 
"@

$Nodes = Get-SwisData -SwisConnection $Swis -Query $NodesQuery


# Loop through each of the nodes and enable application dependencies
foreach ($Node in $Nodes) {
    Invoke-SwisVerb -SwisConnection $Swis -EntityName Orion.ADM.NodeInventory -Verb Enable -Arguments @( ,@( $($Node.NodeID) ) )
}

Enable-ApplicationDependencyPolling.ps1

How to Set Node Captions to Lower Case Host Name in SolarWinds Orion Using PowerShell

By default, SolarWinds Orion will use either the sysname it gets from the device via SNMP, WMI, or the agent, etc. when it sets the nodes name in the "caption" field. If it can't get the sysname, it will try to get a name from reverse DNS and use that if it is available. Unfortunately, this can leave the node names inconsistent where some will have be using a fully qualified domain name (FQDN) and other won't. Some will use capital letters, while others will be lower case. 

I wrote a PowerShell script which will truncate the name down to the hostname and convert all of the letters to lower case. This makes viewing a list of nodes much easier on the eyes when they are all consistent, especially if you have a touch of OCD. I have the full script available on GitHub here, if you'd like to download it.

I tried to dummy-proof the script a little bit. So, you'll notice that the first section will check that the OrionSDK is installed and that the snap-in has been loaded, which is a prerequisite requirement. 

The second section will prompt you for credentials to log into the SolarWinds SWIS API. I use the export-clixml and import-clixml cmdlets to store and retrieve the credentials. These cmdlets use the "Windows Data Protection API" to securely encrypt/decrypt the credentials.

The next section creates a connection to the SolarWinds SWIS API. It will check to see if there's already an "Orion" environment variable. If not, it will prompt you for the hostname or IP address of the primary Orion server and cache it in the "Orion" environment variable. That way it doesn't have to ask you for the Orion server again the next time you run the script.

I also use the "ScriptLogPath" environment variable to cache the directory where you want to store the script logs. If this hasn't been set yet, it will prompt you for a file path. The next section roll these logs if they are over 10 MB.

Finally we are getting to the guts of the script. First, we'll query the Orion API for nodes in the private IP space which have alphabetic characters, a period, and no spaces in it's name. I limited it to the private IP space because if it's an external node, the domain is probably more useful and probably wants to be preserved. If it has a period, it obviously isn't just a hostname. Finally, if it has a space, it's probably a custom caption of sort, so we won't mess with it.

The script takes all of the results from the query above, splits them at all of the periods and takes the first section for the new caption. It then converts that new caption, converts it to lower case and writes it back to the Orion API.

The final section of the script uses the ExecuteSQL verb in the Orion.Reporting path of the Orion API to get any remaining nodes that has a capital letter in it's name. We do it this way because the Orion API isn't able to use case sensitive regex to find the nodes. The Orion database typically uses SQL_Latin1_General_CP1_CI_AS for collation, which is case insensitive. By piping the SQL query into SQL through the ExecuteSQL verb, we can force it to use the Latin1_General_BIN collation for this query. We then manually build a URI for that node, convert the caption to lower case, and update the node via the Orion API.

I hope this is useful for you. As always, test any scripts before using them in production. Feel free to catabolize the parts that are important to you, and drop what isn't.

Full Script: Set-OrionCaptionToLowerCaseHostName.ps1

Custom SolarWinds Orion Universal Device Pollers for Tintri VMstore Devices (UnDP)

Tintri VMstore devices support SNMP, but their metrics aren't automatically recognized by SolarWinds Orion. I have create a bundle of Universal Device Pollers (UnDPs) which can be used to pull the majority of the metrics that they make available via SNMP.

These pollers can be downloaded as a .UnDP file from GitHub here and imported directly into SolarWinds using the Universal Device Poller utility on the Orion server. I pasted the XML below so you can look it over as well. I do recommend downloading the .UnDP files instead of copying the text from a web page because some of the characters can get morphed when you copy them from an HTML page.

<?xml version="1.0" encoding="utf-8"?>
<CustomPollers version="9.0">
  <CustomPoller UniqueName="cacheHitRatio" Description="&quot;The current cache hit ratio, measured in percent of IO satisfied from flash storage.&quot;" OID="1.3.6.1.4.1.41456.1.2.1.1.29" MIB="VMSTORE-MIB:cacheHitRatio" SNMPGetType="GetNext" NetObjectPrefix="N" GroupName="Tintri" PollerType="R" Parser="Gauge" IncludeHistory="True" Unit="%" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="" LabelType="Generic" LabelDetail="networkLatency">
    <Enumerations />
  </CustomPoller>
  <CustomPoller UniqueName="daysTillFull" Description="&quot;Days until space capacity is exhausted.&quot;" OID="1.3.6.1.4.1.41456.1.2.1.1.17" MIB="VMSTORE-MIB:daysTillFull" SNMPGetType="GetNext" NetObjectPrefix="N" GroupName="Tintri" PollerType="R" Parser="Gauge" IncludeHistory="True" Unit="" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="" LabelType="" LabelDetail="">
    <Enumerations />
  </CustomPoller>
  <CustomPoller UniqueName="diskLatency" Description="&quot;Overall latency in milliseconds contributed by the hard disks.&quot;" OID="1.3.6.1.4.1.41456.1.2.1.1.28" MIB="VMSTORE-MIB:diskLatency" SNMPGetType="GetNext" NetObjectPrefix="N" GroupName="Tintri" PollerType="R" Parser="Gauge" IncludeHistory="True" Unit="ms" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="" LabelType="Generic" LabelDetail="networkLatency">
    <Enumerations />
  </CustomPoller>
  <CustomPoller UniqueName="fsLatency" Description="&quot;Overall latency in milliseconds contributed by the Tintri storage excluding hard disks.&quot;" OID="1.3.6.1.4.1.41456.1.2.1.1.27" MIB="VMSTORE-MIB:fsLatency" SNMPGetType="GetNext" NetObjectPrefix="N" GroupName="Tintri" PollerType="R" Parser="Gauge" IncludeHistory="True" Unit="ms" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="" LabelType="Generic" LabelDetail="networkLatency">
    <Enumerations />
  </CustomPoller>
  <CustomPoller UniqueName="highIops" Description="&quot;Highest 10-minute-average IOPS from the past 7 days.&quot;" OID="1.3.6.1.4.1.41456.1.2.1.1.23" MIB="VMSTORE-MIB:highIops" SNMPGetType="GetNext" NetObjectPrefix="N" GroupName="Tintri" PollerType="R" Parser="Gauge" IncludeHistory="True" Unit="" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="" LabelType="" LabelDetail="">
    <Enumerations />
  </CustomPoller>
  <CustomPoller UniqueName="highThroughput" Description="&quot;Highest 10-minute-average throughput from the past 7 days, measured in MBps.&quot;" OID="1.3.6.1.4.1.41456.1.2.1.1.20" MIB="VMSTORE-MIB:highThroughput" SNMPGetType="GetNext" NetObjectPrefix="N" GroupName="Tintri" PollerType="R" Parser="Gauge" IncludeHistory="True" Unit="MBs" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="" LabelType="" LabelDetail="">
    <Enumerations />
  </CustomPoller>
  <CustomPoller UniqueName="hostLatency" Description="&quot;Overall latency in milliseconds contributed by the ESX hosts.&quot;" OID="1.3.6.1.4.1.41456.1.2.1.1.25" MIB="VMSTORE-MIB:hostLatency" SNMPGetType="GetNext" NetObjectPrefix="N" GroupName="Tintri" PollerType="R" Parser="Gauge" IncludeHistory="True" Unit="ms" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="" LabelType="" LabelDetail="">
    <Enumerations />
  </CustomPoller>
  <CustomPoller UniqueName="iops" Description="&quot;Total IOPS includes both reads and writes.&quot;" OID="1.3.6.1.4.1.41456.1.2.1.1.21" MIB="VMSTORE-MIB:iops" SNMPGetType="GetNext" NetObjectPrefix="N" GroupName="Tintri" PollerType="R" Parser="Gauge" IncludeHistory="True" Unit="" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="" LabelType="" LabelDetail="">
    <Enumerations />
  </CustomPoller>
  <CustomPoller UniqueName="latency" Description="&quot;Average measured latency in milliseconds to respond to data request.&quot;" OID="1.3.6.1.4.1.41456.1.2.1.1.24" MIB="VMSTORE-MIB:latency" SNMPGetType="GetNext" NetObjectPrefix="N" GroupName="Tintri" PollerType="R" Parser="Gauge" IncludeHistory="True" Unit="ms" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="" LabelType="" LabelDetail="">
    <Enumerations />
  </CustomPoller>
  <CustomPoller UniqueName="liveDataSpace" Description="&quot;Space used by data files that make up a VM in Gigabytes.&quot;" OID="1.3.6.1.4.1.41456.1.2.1.1.14" MIB="VMSTORE-MIB:liveDataSpace" SNMPGetType="GetNext" NetObjectPrefix="N" GroupName="Tintri" PollerType="R" Parser="Gauge" IncludeHistory="True" Unit="GB" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="" LabelType="" LabelDetail="">
    <Enumerations />
  </CustomPoller>
  <CustomPoller UniqueName="LiveDataSpaceInTB" Description="" OID="" MIB="" SNMPGetType="GetNext" NetObjectPrefix="N" GroupName="Tintri" PollerType="F" Parser="None" IncludeHistory="True" Unit="" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="GigaToTera({liveDataSpace})" LabelType="" LabelDetail="">
    <Enumerations />
  </CustomPoller>
  <CustomPoller UniqueName="lowIops" Description="&quot;Lowest 10-minute-average IOPS from the past 7 days.&quot;" OID="1.3.6.1.4.1.41456.1.2.1.1.22" MIB="VMSTORE-MIB:lowIops" SNMPGetType="GetNext" NetObjectPrefix="N" GroupName="Tintri" PollerType="R" Parser="Gauge" IncludeHistory="True" Unit="" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="" LabelType="" LabelDetail="">
    <Enumerations />
  </CustomPoller>
  <CustomPoller UniqueName="lowThroughput" Description="&quot;Lowest 10-minute-average throughput from the past 7 days, measured in MBps.&quot;" OID="1.3.6.1.4.1.41456.1.2.1.1.19" MIB="VMSTORE-MIB:lowThroughput" SNMPGetType="GetNext" NetObjectPrefix="N" GroupName="Tintri" PollerType="R" Parser="Gauge" IncludeHistory="True" Unit="MBs" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="" LabelType="" LabelDetail="">
    <Enumerations />
  </CustomPoller>
  <CustomPoller UniqueName="model" Description="&quot;VMstore model&quot;" OID="1.3.6.1.4.1.41456.1.2.1.1.4" MIB="VMSTORE-MIB:model" SNMPGetType="GetNext" NetObjectPrefix="N" GroupName="Tintri" PollerType="S" Parser="Text" IncludeHistory="False" Unit="" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="" LabelType="" LabelDetail="">
    <Enumerations />
  </CustomPoller>
  <CustomPoller UniqueName="networkLatency" Description="&quot;Overall latency in milliseconds contributed by the network.&quot;" OID="1.3.6.1.4.1.41456.1.2.1.1.26" MIB="VMSTORE-MIB:networkLatency" SNMPGetType="GetNext" NetObjectPrefix="N" GroupName="Tintri" PollerType="R" Parser="Gauge" IncludeHistory="True" Unit="ms" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="" LabelType="" LabelDetail="">
    <Enumerations />
  </CustomPoller>
  <CustomPoller UniqueName="numUnreadAlerts" Description="&quot;Number of unread alerts.&quot;" OID="1.3.6.1.4.1.41456.1.2.1.1.8" MIB="VMSTORE-MIB:numUnreadAlerts" SNMPGetType="GetNext" NetObjectPrefix="N" GroupName="Tintri" PollerType="C" Parser="Counter" IncludeHistory="False" Unit="" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="" LabelType="" LabelDetail="">
    <Enumerations />
  </CustomPoller>
  <CustomPoller UniqueName="orphanedSpace" Description="&quot;Orphaned space in GB.&quot;" OID="1.3.6.1.4.1.41456.1.2.1.1.11" MIB="VMSTORE-MIB:orphanedSpace" SNMPGetType="GetNext" NetObjectPrefix="N" GroupName="Tintri" PollerType="R" Parser="Gauge" IncludeHistory="True" Unit="GB" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="" LabelType="" LabelDetail="">
    <Enumerations />
  </CustomPoller>
  <CustomPoller UniqueName="OrphanedSpaceInTB" Description="" OID="" MIB="" SNMPGetType="GetNext" NetObjectPrefix="N" GroupName="Tintri" PollerType="F" Parser="None" IncludeHistory="True" Unit="" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="GigaToTera({orphanedSpace})" LabelType="" LabelDetail="">
    <Enumerations />
  </CustomPoller>
  <CustomPoller UniqueName="provisionedPercent" Description="&quot;The total amount of disk space provisioned for all virtual machines as percentage of system total.&quot;" OID="1.3.6.1.4.1.41456.1.2.1.1.16" MIB="VMSTORE-MIB:provisionedPercent" SNMPGetType="GetNext" NetObjectPrefix="N" GroupName="Tintri" PollerType="R" Parser="Gauge" IncludeHistory="True" Unit="%" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="" LabelType="" LabelDetail="">
    <Enumerations />
  </CustomPoller>
  <CustomPoller UniqueName="remainingSpace" Description="&quot;Remaining space available on datastore in Gigabytes.&quot;" OID="1.3.6.1.4.1.41456.1.2.1.1.15" MIB="VMSTORE-MIB:remainingSpace" SNMPGetType="GetNext" NetObjectPrefix="N" GroupName="Tintri" PollerType="R" Parser="Gauge" IncludeHistory="True" Unit="GB" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="" LabelType="" LabelDetail="">
    <Enumerations />
  </CustomPoller>
  <CustomPoller UniqueName="RemainingSpaceInTB" Description="" OID="" MIB="" SNMPGetType="GetNext" NetObjectPrefix="N" GroupName="Tintri" PollerType="F" Parser="None" IncludeHistory="True" Unit="" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="GigaToTera({remainingSpace})" LabelType="" LabelDetail="">
    <Enumerations />
  </CustomPoller>
  <CustomPoller UniqueName="replBytesRemaining" Description="&quot;The logical amount of data yet to be replicated system wide.&quot;" OID="1.3.6.1.4.1.41456.1.2.1.1.33" MIB="VMSTORE-MIB:replBytesRemaining" SNMPGetType="GetNext" NetObjectPrefix="N" GroupName="Tintri" PollerType="R" Parser="Gauge" IncludeHistory="True" Unit="MB" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="" LabelType="" LabelDetail="">
    <Enumerations />
  </CustomPoller>
  <CustomPoller UniqueName="replDstLogicalReplicatedPerDay" Description="&quot;Logical amount of incoming data replicated in the past 24 hours, measured in MB.&quot;" OID="1.3.6.1.4.1.41456.1.2.1.1.39" MIB="VMSTORE-MIB:replDstLogicalReplicatedPerDay" SNMPGetType="GetNext" NetObjectPrefix="N" GroupName="Tintri" PollerType="R" Parser="Gauge" IncludeHistory="True" Unit="MB" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="" LabelType="" LabelDetail="">
    <Enumerations />
  </CustomPoller>
  <CustomPoller UniqueName="replDstLogicalThroughput" Description="&quot;Logical incoming replication rate, measured in MBps.&quot;" OID="1.3.6.1.4.1.41456.1.2.1.1.36" MIB="VMSTORE-MIB:replDstLogicalThroughput" SNMPGetType="GetNext" NetObjectPrefix="N" GroupName="Tintri" PollerType="R" Parser="Gauge" IncludeHistory="True" Unit="MBs" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="" LabelType="" LabelDetail="">
    <Enumerations />
  </CustomPoller>
  <CustomPoller UniqueName="replDstPhysicalReplicatedPerDay" Description="&quot;Physical amount of incoming data replicated in the past 24 hours, measured in MB.&quot;" OID="1.3.6.1.4.1.41456.1.2.1.1.41" MIB="VMSTORE-MIB:replDstPhysicalReplicatedPerDay" SNMPGetType="GetNext" NetObjectPrefix="N" GroupName="Tintri" PollerType="R" Parser="Gauge" IncludeHistory="True" Unit="MB" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="" LabelType="" LabelDetail="">
    <Enumerations />
  </CustomPoller>
  <CustomPoller UniqueName="replDstPhysicalThroughput" Description="&quot;Physical incoming replication rate, measured in MBps.&quot;" OID="1.3.6.1.4.1.41456.1.2.1.1.37" MIB="VMSTORE-MIB:replDstPhysicalThroughput" SNMPGetType="GetNext" NetObjectPrefix="N" GroupName="Tintri" PollerType="R" Parser="Gauge" IncludeHistory="True" Unit="MBs" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="" LabelType="" LabelDetail="">
    <Enumerations />
  </CustomPoller>
  <CustomPoller UniqueName="replIncomingCount" Description="&quot;Number of VMs being replicated onto this system.&quot;" OID="1.3.6.1.4.1.41456.1.2.1.1.32" MIB="VMSTORE-MIB:replIncomingCount" SNMPGetType="GetNext" NetObjectPrefix="N" GroupName="Tintri" PollerType="R" Parser="Gauge" IncludeHistory="True" Unit="" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="" LabelType="" LabelDetail="">
    <Enumerations />
  </CustomPoller>
  <CustomPoller UniqueName="replOutgoingCount" Description="&quot;Number of VMs configured for outgoing replication in the system.&quot;" OID="1.3.6.1.4.1.41456.1.2.1.1.31" MIB="VMSTORE-MIB:replOutgoingCount" SNMPGetType="GetNext" NetObjectPrefix="N" GroupName="Tintri" PollerType="R" Parser="Gauge" IncludeHistory="True" Unit="" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="" LabelType="" LabelDetail="">
    <Enumerations />
  </CustomPoller>
  <CustomPoller UniqueName="replSrcLogicalReplicatedPerDay" Description="&quot;Logical amount of outgoing data replicated in the past 24 hours, measured in MB.&quot;" OID="1.3.6.1.4.1.41456.1.2.1.1.38" MIB="VMSTORE-MIB:replSrcLogicalReplicatedPerDay" SNMPGetType="GetNext" NetObjectPrefix="N" GroupName="Tintri" PollerType="R" Parser="Gauge" IncludeHistory="True" Unit="MB" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="" LabelType="" LabelDetail="">
    <Enumerations />
  </CustomPoller>
  <CustomPoller UniqueName="replSrcLogicalThroughput" Description="&quot;Logical outgoing replication rate, measured in MBps.&quot;" OID="1.3.6.1.4.1.41456.1.2.1.1.34" MIB="VMSTORE-MIB:replSrcLogicalThroughput" SNMPGetType="GetNext" NetObjectPrefix="N" GroupName="Tintri" PollerType="R" Parser="Gauge" IncludeHistory="True" Unit="MBs" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="" LabelType="" LabelDetail="">
    <Enumerations />
  </CustomPoller>
  <CustomPoller UniqueName="replSrcPhysicalReplicatedPerDay" Description="&quot;Physical amount of outgoing data replicated in the past 24 hours, measured in MB.&quot;" OID="1.3.6.1.4.1.41456.1.2.1.1.40" MIB="VMSTORE-MIB:replSrcPhysicalReplicatedPerDay" SNMPGetType="GetNext" NetObjectPrefix="N" GroupName="Tintri" PollerType="R" Parser="Gauge" IncludeHistory="True" Unit="MB" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="" LabelType="" LabelDetail="">
    <Enumerations />
  </CustomPoller>
  <CustomPoller UniqueName="replSrcPhysicalThroughput" Description="&quot;Physical outgoing replication rate, measured in MBps.&quot;" OID="1.3.6.1.4.1.41456.1.2.1.1.35" MIB="VMSTORE-MIB:replSrcPhysicalThroughput" SNMPGetType="GetNext" NetObjectPrefix="N" GroupName="Tintri" PollerType="R" Parser="Gauge" IncludeHistory="True" Unit="MBs" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="" LabelType="" LabelDetail="">
    <Enumerations />
  </CustomPoller>
  <CustomPoller UniqueName="serialNumber" Description="&quot;Tintri Serial Number&quot;" OID="1.3.6.1.4.1.41456.1.2.1.1.6" MIB="VMSTORE-MIB:serialNumber" SNMPGetType="GetNext" NetObjectPrefix="N" GroupName="Tintri" PollerType="S" Parser="Text" IncludeHistory="False" Unit="" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="" LabelType="" LabelDetail="">
    <Enumerations />
  </CustomPoller>
  <CustomPoller UniqueName="swVersion" Description="&quot;Software version.&quot;" OID="1.3.6.1.4.1.41456.1.2.1.1.5" MIB="VMSTORE-MIB:swVersion" SNMPGetType="GetNext" NetObjectPrefix="N" GroupName="Tintri" PollerType="S" Parser="Text" IncludeHistory="False" Unit="" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="" LabelType="" LabelDetail="">
    <Enumerations />
  </CustomPoller>
  <CustomPoller UniqueName="throughput" Description="&quot;Current throughput, measured in MBps.&quot;" OID="1.3.6.1.4.1.41456.1.2.1.1.18" MIB="VMSTORE-MIB:throughput" SNMPGetType="GetNext" NetObjectPrefix="N" GroupName="Tintri" PollerType="R" Parser="Gauge" IncludeHistory="True" Unit="MBs" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="" LabelType="" LabelDetail="">
    <Enumerations />
  </CustomPoller>
  <CustomPoller UniqueName="tintriSnapshotSpace" Description="&quot;Space used by Tintri snapshots in Gigabytes.&quot;" OID="1.3.6.1.4.1.41456.1.2.1.1.12" MIB="VMSTORE-MIB:tintriSnapshotSpace" SNMPGetType="GetNext" NetObjectPrefix="N" GroupName="Tintri" PollerType="R" Parser="Gauge" IncludeHistory="True" Unit="GB" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="" LabelType="" LabelDetail="">
    <Enumerations />
  </CustomPoller>
  <CustomPoller UniqueName="TintriSnapshotSpaceInTB" Description="" OID="" MIB="" SNMPGetType="GetNext" NetObjectPrefix="N" GroupName="Tintri" PollerType="F" Parser="None" IncludeHistory="True" Unit="" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="GigaToTera({tintriSnapshotSpace})" LabelType="" LabelDetail="">
    <Enumerations />
  </CustomPoller>
  <CustomPoller UniqueName="uptime" Description="&quot;System up time.&quot;" OID="1.3.6.1.4.1.41456.1.2.1.1.3" MIB="VMSTORE-MIB:uptime" SNMPGetType="GetNext" NetObjectPrefix="N" GroupName="Tintri" PollerType="S" Parser="Text" IncludeHistory="False" Unit="" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="" LabelType="" LabelDetail="">
    <Enumerations />
  </CustomPoller>
  <CustomPoller UniqueName="vmStoreStatus" Description="&quot;The status of the filesystem.&quot;" OID="1.3.6.1.4.1.41456.1.2.1.1.7" MIB="VMSTORE-MIB:vmStoreStatus" SNMPGetType="GetNext" NetObjectPrefix="N" GroupName="Tintri" PollerType="S" Parser="Oper_Status" IncludeHistory="True" Unit="" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="" LabelType="" LabelDetail="">
    <Enumerations />
  </CustomPoller>
  <CustomPoller UniqueName="vmwSnapshotSpace" Description="&quot;Space used by VMware snapshot in Gigabytes.&quot;" OID="1.3.6.1.4.1.41456.1.2.1.1.13" MIB="VMSTORE-MIB:vmwSnapshotSpace" SNMPGetType="GetNext" NetObjectPrefix="N" GroupName="Tintri" PollerType="R" Parser="Gauge" IncludeHistory="True" Unit="GB" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="" LabelType="" LabelDetail="">
    <Enumerations />
  </CustomPoller>
</CustomPollers>

Tintri.UnDP

Custom SolarWinds Orion Universal Device Pollers for Dell iDRACs (UnDP)

I have seen a lot of discussion on SolarWinds' TWACK forum where users are trying to setup custom Universal Device Pollers (UnDP) to get hardware related health and statistics information from the iDRACs instead of installing DELL Open Manage and pulling that status through the installed Windows or Linux operating system. However, I haven't seen anybody come up with good results that work well. 

After doing some SNMP walks and a little research, I was able to create a bundle of Universal Device Pollers and transforms which I have used to poll servers with iDRAC 7, 8 and 9. They may work with other versions as well though. Of course, you'll need to setup the iDRAC IP address as an SNMP node in Orion for these to work. Below is a list of OIDs that are in this Universal Device Poller.

amperageProbeReading | 1.3.6.1.4.1.674.10892.5.4.600.30.1.6
amperageProbeReadingInAmps | 1.3.6.1.4.1.674.10892.5.4.600.30.1.6 (Transform)
amperageProbeStatus | 1.3.6.1.4.1.674.10892.5.4.600.30.1.5
chassisServiceTagName | 1.3.6.1.4.1.674.10892.5.4.300.10.1.11
chassisStatus | 1.3.6.1.4.1.674.10892.5.4.300.10.1.4
coolingDeviceReading | 1.3.6.1.4.1.674.10892.5.4.700.12.1.6
coolingDeviceStatus | 1.3.6.1.4.1.674.10892.5.4.700.12.1.5
firmwareStatus | 1.3.6.1.4.1.674.10892.5.4.300.60.1.5
memoryDeviceStatus | 1.3.6.1.4.1.674.10892.5.4.1100.50.1.5
networkDeviceStatus | 1.3.6.1.4.1.674.10892.5.4.1100.90.1.3
pCIDeviceStatus | 1.3.6.1.4.1.674.10892.5.4.1100.80.1.5
physicalDiskState | 1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.4
powerSupplyStatus | 1.3.6.1.4.1.674.10892.5.4.600.12.1.5
powerUnitStatus | 1.3.6.1.4.1.674.10892.5.4.600.10.1.8
powerUsagePeakAmps | 1.3.6.1.4.1.674.10892.5.4.600.60.1.12
powerUsagePeakWatts | 1.3.6.1.4.1.674.10892.5.4.600.60.1.9
powerUsageStatus | 1.3.6.1.4.1.674.10892.5.4.600.60.1.5
processorDeviceStatus | 1.3.6.1.4.1.674.10892.5.4.1100.30.1.5
systemBatteryStatus | 1.3.6.1.4.1.674.10892.5.4.600.50.1.5
systemBIOSStatus | 1.3.6.1.4.1.674.10892.5.4.300.50.1.5
systemSlotStatus | 1.3.6.1.4.1.674.10892.5.4.1200.10.1.5
temperatureProbeReading | 1.3.6.1.4.1.674.10892.5.4.700.20.1.6
temperatureProbeReadingInFahrenheit | 1.3.6.1.4.1.674.10892.5.4.700.20.1.6 (Transform)
temperatureProbeStatus | 1.3.6.1.4.1.674.10892.5.4.700.20.1.5
virtualDiskState | 1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.4
voltageProbeReading | 1.3.6.1.4.1.674.10892.5.4.600.20.1.6
voltageProbeReadingInVolts | 1.3.6.1.4.1.674.10892.5.4.600.20.1.6 (Transform)
voltageProbeStatus | 1.3.6.1.4.1.674.10892.5.4.600.20.1.5

You can download that UnDP file from GitHub or from my Thwack post and import it into Orion with the Universal Device Poller utility.

I pasted the actual XML contents from the UnDP file below so that you can look it over. However, I highly recommend downloading the actual file from GitHub or Thwack because some characters can get morphed when copying them from a web page. 

<?xml version="1.0" encoding="utf-8"?>
<CustomPollers version="9.0">
  <CustomPoller UniqueName="amperageProbeReading" Description="&quot;0600.0030.0001.0006 This attribute defines the reading for an amperage&#xD;&#xA;        probe of type other than amperageProbeTypeIsDiscrete.&#xD;&#xA;&#xD;&#xA;        When the value for amperageProbeType is amperageProbeTypeIsPowerSupplyAmps&#xD;&#xA;        or amperageProbeTypeIsSystemA" OID="1.3.6.1.4.1.674.10892.5.4.600.30.1.6" MIB="IDRAC-MIB-SMIv2:amperageProbeReading" SNMPGetType="GetSubTree" NetObjectPrefix="N" GroupName="Dell iDRAC" PollerType="S" Parser="None" IncludeHistory="True" Unit="" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="" LabelType="SameTable" LabelDetail="1.3.6.1.4.1.674.10892.5.4.600.30.1.8">
    <Enumerations />
  </CustomPoller>
  <CustomPoller UniqueName="amperageProbeReadingInAmps" Description="" OID="1.3.6.1.4.1.674.10892.5.4.600.30.1.6" MIB="" SNMPGetType="GetSubTree" NetObjectPrefix="N" GroupName="Dell iDRAC" PollerType="F" Parser="None" IncludeHistory="True" Unit="" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="{amperageProbeReading}/10" LabelType="SameTable" LabelDetail="1.3.6.1.4.1.674.10892.5.4.600.30.1.8">
    <Enumerations />
  </CustomPoller>
  <CustomPoller UniqueName="amperageProbeStatus" Description="&quot;0600.0030.0001.0005 This attribute defines the probe status of the&#xD;&#xA;        amperage probe.&quot;" OID="1.3.6.1.4.1.674.10892.5.4.600.30.1.5" MIB="IDRAC-MIB-SMIv2:amperageProbeStatus" SNMPGetType="GetSubTree" NetObjectPrefix="N" GroupName="Dell iDRAC" PollerType="S" Parser="Enumeration" IncludeHistory="True" Unit="" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="" LabelType="SameTable" LabelDetail="1.3.6.1.4.1.674.10892.5.4.600.30.1.8">
    <Enumerations>
      <Enumeration RawValue="1" TextValue="Other" />
      <Enumeration RawValue="2" TextValue="Unknown" />
      <Enumeration RawValue="3" TextValue="OK" />
      <Enumeration RawValue="4" TextValue="Non-critical" />
      <Enumeration RawValue="5" TextValue="Critical" />
      <Enumeration RawValue="6" TextValue="Non-recoverable" />
    </Enumerations>
  </CustomPoller>
  <CustomPoller UniqueName="chassisServiceTagName" Description="&quot;0300.0010.0001.0011 This attribute defines the service tag name of the system chassis.&quot;" OID="1.3.6.1.4.1.674.10892.5.4.300.10.1.11" MIB="IDRAC-MIB-SMIv2:chassisServiceTagName" SNMPGetType="GetSubTree" NetObjectPrefix="N" GroupName="Dell iDRAC" PollerType="S" Parser="None" IncludeHistory="True" Unit="" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="" LabelType="Generic" LabelDetail="Dell Service Tag">
    <Enumerations />
  </CustomPoller>
  <CustomPoller UniqueName="chassisStatus" Description="&quot;0300.0010.0001.0004 This attribute defines the status of the system chassis.&quot;" OID="1.3.6.1.4.1.674.10892.5.4.300.10.1.4" MIB="IDRAC-MIB-SMIv2:chassisStatus" SNMPGetType="GetSubTree" NetObjectPrefix="N" GroupName="Dell iDRAC" PollerType="S" Parser="Enumeration" IncludeHistory="True" Unit="" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="" LabelType="SameTable" LabelDetail="1.3.6.1.4.1.674.10892.5.4.300.10.1.7">
    <Enumerations>
      <Enumeration RawValue="1" TextValue="Other" />
      <Enumeration RawValue="2" TextValue="Unknown" />
      <Enumeration RawValue="3" TextValue="OK" />
      <Enumeration RawValue="4" TextValue="Non-critical" />
      <Enumeration RawValue="5" TextValue="Critical" />
      <Enumeration RawValue="6" TextValue="Non-critical" />
    </Enumerations>
  </CustomPoller>
  <CustomPoller UniqueName="coolingDeviceReading" Description="&quot;0700.0012.0001.0006 This attribute defines the reading for a cooling device&#xD;&#xA;        of subtype other than coolingDeviceSubTypeIsDiscrete.  When the value&#xD;&#xA;        for coolingDeviceSubType is other than coolingDeviceSubTypeIsDiscrete, the&#xD;&#xA;        value " OID="1.3.6.1.4.1.674.10892.5.4.700.12.1.6" MIB="IDRAC-MIB:coolingDeviceReading" SNMPGetType="GetSubTree" NetObjectPrefix="N" GroupName="Dell iDRAC" PollerType="S" Parser="None" IncludeHistory="True" Unit="" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="" LabelType="SameTable" LabelDetail="1.3.6.1.4.1.674.10892.5.4.700.12.1.8">
    <Enumerations />
  </CustomPoller>
  <CustomPoller UniqueName="coolingDeviceStatus" Description="&quot;0700.0012.0001.0005 This attribute defines the probe status of the&#xD;&#xA;        cooling device.&quot;" OID="1.3.6.1.4.1.674.10892.5.4.700.12.1.5" MIB="IDRAC-MIB:coolingDeviceStatus" SNMPGetType="GetSubTree" NetObjectPrefix="N" GroupName="Dell iDRAC" PollerType="S" Parser="Enumeration" IncludeHistory="True" Unit="" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="" LabelType="SameTable" LabelDetail="1.3.6.1.4.1.674.10892.5.4.700.12.1.8">
    <Enumerations>
      <Enumeration RawValue="1" TextValue="Other" />
      <Enumeration RawValue="2" TextValue="Unknown" />
      <Enumeration RawValue="3" TextValue="OK" />
      <Enumeration RawValue="4" TextValue="Non-critical" />
      <Enumeration RawValue="5" TextValue="Critical" />
      <Enumeration RawValue="6" TextValue="Non-recoverable" />
    </Enumerations>
  </CustomPoller>
  <CustomPoller UniqueName="firmwareStatus" Description="&quot;0300.0060.0001.0005 This attribute defines the status of the firmware.&quot;" OID="1.3.6.1.4.1.674.10892.5.4.300.60.1.5" MIB="IDRAC-MIB-SMIv2:firmwareStatus" SNMPGetType="GetSubTree" NetObjectPrefix="N" GroupName="Dell iDRAC" PollerType="S" Parser="Enumeration" IncludeHistory="True" Unit="" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="" LabelType="SameTable" LabelDetail="1.3.6.1.4.1.674.10892.5.4.300.60.1.8">
    <Enumerations>
      <Enumeration RawValue="" TextValue="" />
      <Enumeration RawValue="1" TextValue="Other" />
      <Enumeration RawValue="2" TextValue="Unknown" />
      <Enumeration RawValue="3" TextValue="OK" />
      <Enumeration RawValue="4" TextValue="Non-critical" />
      <Enumeration RawValue="5" TextValue="Critical" />
      <Enumeration RawValue="6" TextValue="Non-recoverable" />
    </Enumerations>
  </CustomPoller>
  <CustomPoller UniqueName="memoryDeviceStatus" Description="&quot;1100.0050.0001.0005 This attribute defines the status of the memory device.&quot;" OID="1.3.6.1.4.1.674.10892.5.4.1100.50.1.5" MIB="IDRAC-MIB-SMIv2:memoryDeviceStatus" SNMPGetType="GetSubTree" NetObjectPrefix="N" GroupName="Dell iDRAC" PollerType="S" Parser="Enumeration" IncludeHistory="True" Unit="" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="" LabelType="SameTable" LabelDetail="1.3.6.1.4.1.674.10892.5.4.1100.50.1.8">
    <Enumerations>
      <Enumeration RawValue="1" TextValue="Other" />
      <Enumeration RawValue="2" TextValue="Unknown" />
      <Enumeration RawValue="3" TextValue="OK" />
      <Enumeration RawValue="4" TextValue="Non-critical" />
      <Enumeration RawValue="5" TextValue="Critical" />
      <Enumeration RawValue="6" TextValue="Non-recoverable" />
    </Enumerations>
  </CustomPoller>
  <CustomPoller UniqueName="networkDeviceStatus" Description="&quot;1100.0090.0001.0003 This attribute defines the status of the network device.&quot;" OID="1.3.6.1.4.1.674.10892.5.4.1100.90.1.3" MIB="IDRAC-MIB:networkDeviceStatus" SNMPGetType="GetSubTree" NetObjectPrefix="N" GroupName="Dell iDRAC" PollerType="S" Parser="Enumeration" IncludeHistory="True" Unit="" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="" LabelType="SameTable" LabelDetail="1.3.6.1.4.1.674.10892.5.4.1100.90.1.6">
    <Enumerations>
      <Enumeration RawValue="1" TextValue="Other" />
      <Enumeration RawValue="2" TextValue="Unknown" />
      <Enumeration RawValue="3" TextValue="OK" />
      <Enumeration RawValue="4" TextValue="Non-critical" />
      <Enumeration RawValue="5" TextValue="Critical" />
      <Enumeration RawValue="6" TextValue="Non-recoverable" />
    </Enumerations>
  </CustomPoller>
  <CustomPoller UniqueName="pCIDeviceStatus" Description="&quot;1100.0080.0001.0005 This attribute defines the status of the PCI device.&quot;" OID="1.3.6.1.4.1.674.10892.5.4.1100.80.1.5" MIB="IDRAC-MIB:pCIDeviceStatus" SNMPGetType="GetSubTree" NetObjectPrefix="N" GroupName="Dell iDRAC" PollerType="S" Parser="Enumeration" IncludeHistory="True" Unit="" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="" LabelType="SameTable" LabelDetail="1.3.6.1.4.1.674.10892.5.4.1100.80.1.9">
    <Enumerations>
      <Enumeration RawValue="1" TextValue="Other" />
      <Enumeration RawValue="2" TextValue="Unknown" />
      <Enumeration RawValue="3" TextValue="OK" />
      <Enumeration RawValue="4" TextValue="Non-critical" />
      <Enumeration RawValue="5" TextValue="Critical" />
      <Enumeration RawValue="6" TextValue="Non-recoverable" />
    </Enumerations>
  </CustomPoller>
  <CustomPoller UniqueName="physicalDiskState" Description="&quot;The current state of this physical disk.&#xD;&#xA;        Possible states:&#xD;&#xA;        1: The current state could not be determined.&#xD;&#xA;        2: The physical disk is available for use, but no RAID configuration &#xD;&#xA;        has been assigned. &#xD;&#xA;        3: A RAID configurat" OID="1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.4" MIB="IDRAC-MIB-SMIv2:physicalDiskState" SNMPGetType="GetSubTree" NetObjectPrefix="N" GroupName="Dell iDRAC" PollerType="S" Parser="Enumeration" IncludeHistory="True" Unit="" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="" LabelType="SameTable" LabelDetail="1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.55">
    <Enumerations>
      <Enumeration RawValue="1" TextValue="unknown" />
      <Enumeration RawValue="10" TextValue="readonly" />
      <Enumeration RawValue="2" TextValue="ready" />
      <Enumeration RawValue="3" TextValue="online" />
      <Enumeration RawValue="4" TextValue="foreign" />
      <Enumeration RawValue="5" TextValue="offline" />
      <Enumeration RawValue="6" TextValue="blocked" />
      <Enumeration RawValue="7" TextValue="failed" />
      <Enumeration RawValue="8" TextValue="nonraid" />
      <Enumeration RawValue="9" TextValue="removed" />
    </Enumerations>
  </CustomPoller>
  <CustomPoller UniqueName="powerSupplyStatus" Description="&quot;0600.0012.0001.0005 This attribute defines the status of the power supply.&quot;" OID="1.3.6.1.4.1.674.10892.5.4.600.12.1.5" MIB="IDRAC-MIB-SMIv2:powerSupplyStatus" SNMPGetType="GetSubTree" NetObjectPrefix="N" GroupName="Dell iDRAC" PollerType="S" Parser="Enumeration" IncludeHistory="True" Unit="" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="" LabelType="SameTable" LabelDetail="1.3.6.1.4.1.674.10892.5.4.600.12.1.8">
    <Enumerations>
      <Enumeration RawValue="1" TextValue="Other" />
      <Enumeration RawValue="2" TextValue="Unknown" />
      <Enumeration RawValue="3" TextValue="OK" />
      <Enumeration RawValue="4" TextValue="Non-critical" />
      <Enumeration RawValue="5" TextValue="Critical" />
      <Enumeration RawValue="6" TextValue="Non-recoverable" />
    </Enumerations>
  </CustomPoller>
  <CustomPoller UniqueName="powerUnitStatus" Description="&quot;0600.0010.0001.0008 This attribute defines the status of the power unit.&quot;" OID="1.3.6.1.4.1.674.10892.5.4.600.10.1.8" MIB="IDRAC-MIB-SMIv2:powerUnitStatus" SNMPGetType="GetSubTree" NetObjectPrefix="N" GroupName="Dell iDRAC" PollerType="S" Parser="Enumeration" IncludeHistory="True" Unit="" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="" LabelType="SameTable" LabelDetail="1.3.6.1.4.1.674.10892.5.4.600.10.1.7">
    <Enumerations>
      <Enumeration RawValue="1" TextValue="Other" />
      <Enumeration RawValue="2" TextValue="Unknown" />
      <Enumeration RawValue="3" TextValue="OK" />
      <Enumeration RawValue="4" TextValue="Non-critical" />
      <Enumeration RawValue="5" TextValue="Critical" />
      <Enumeration RawValue="6" TextValue="Non-recoverable" />
    </Enumerations>
  </CustomPoller>
  <CustomPoller UniqueName="powerUsagePeakAmps" Description="&quot;0600.0060.0001.0012 This attribute defines the peak amperage reading&#xD;&#xA;        (in tenths of Amps) for this entity since the date and time specified&#xD;&#xA;        by the powerUsagePeakAmpsStartDateName attribute.&quot;" OID="1.3.6.1.4.1.674.10892.5.4.600.60.1.12" MIB="IDRAC-MIB:powerUsagePeakAmps" SNMPGetType="GetSubTree" NetObjectPrefix="N" GroupName="Dell iDRAC" PollerType="S" Parser="None" IncludeHistory="True" Unit="" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="" LabelType="SameTable" LabelDetail="1.3.6.1.4.1.674.10892.5.4.600.60.1.6">
    <Enumerations />
  </CustomPoller>
  <CustomPoller UniqueName="powerUsagePeakWatts" Description="&quot;0600.0060.0001.0009 This attribute defines the peak wattage reading&#xD;&#xA;        (in Watts) for this entity since the date and time specified by the&#xD;&#xA;        powerUsagePeakWattsStartDateName attribute.&quot;" OID="1.3.6.1.4.1.674.10892.5.4.600.60.1.9" MIB="IDRAC-MIB:powerUsagePeakWatts" SNMPGetType="GetSubTree" NetObjectPrefix="N" GroupName="Dell iDRAC" PollerType="S" Parser="None" IncludeHistory="True" Unit="" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="" LabelType="SameTable" LabelDetail="1.3.6.1.4.1.674.10892.5.4.600.60.1.6">
    <Enumerations />
  </CustomPoller>
  <CustomPoller UniqueName="powerUsageStatus" Description="&quot;0600.0060.0001.0005 This attribute defines the status of the&#xD;&#xA;        power usage information.&quot;" OID="1.3.6.1.4.1.674.10892.5.4.600.60.1.5" MIB="IDRAC-MIB:powerUsageStatus" SNMPGetType="GetSubTree" NetObjectPrefix="N" GroupName="Dell iDRAC" PollerType="S" Parser="Enumeration" IncludeHistory="True" Unit="" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="" LabelType="SameTable" LabelDetail="1.3.6.1.4.1.674.10892.5.4.600.60.1.6">
    <Enumerations>
      <Enumeration RawValue="1" TextValue="Other" />
      <Enumeration RawValue="2" TextValue="Unknown" />
      <Enumeration RawValue="3" TextValue="OK" />
      <Enumeration RawValue="4" TextValue="Non-critical" />
      <Enumeration RawValue="5" TextValue="Critical" />
      <Enumeration RawValue="6" TextValue="Non-recoverable" />
    </Enumerations>
  </CustomPoller>
  <CustomPoller UniqueName="processorDeviceStatus" Description="&quot;1100.0030.0001.0005 This attribute defines the status of the&#xD;&#xA;        processor device.&quot;" OID="1.3.6.1.4.1.674.10892.5.4.1100.30.1.5" MIB="IDRAC-MIB-SMIv2:processorDeviceStatus" SNMPGetType="GetSubTree" NetObjectPrefix="N" GroupName="Dell iDRAC" PollerType="S" Parser="Enumeration" IncludeHistory="True" Unit="" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="" LabelType="SameTable" LabelDetail="1.3.6.1.4.1.674.10892.5.4.1100.30.1.26">
    <Enumerations>
      <Enumeration RawValue="1" TextValue="Other" />
      <Enumeration RawValue="2" TextValue="Unknown" />
      <Enumeration RawValue="3" TextValue="OK" />
      <Enumeration RawValue="4" TextValue="Non-critical" />
      <Enumeration RawValue="5" TextValue="Critical" />
      <Enumeration RawValue="6" TextValue="Non-recoverable" />
    </Enumerations>
  </CustomPoller>
  <CustomPoller UniqueName="systemBatteryStatus" Description="&quot;0600.0050.0001.0005 This attribute defines the status of the battery.&quot;" OID="1.3.6.1.4.1.674.10892.5.4.600.50.1.5" MIB="IDRAC-MIB-SMIv2:systemBatteryStatus" SNMPGetType="GetSubTree" NetObjectPrefix="N" GroupName="Dell iDRAC" PollerType="S" Parser="Enumeration" IncludeHistory="True" Unit="" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="" LabelType="SameTable" LabelDetail="1.3.6.1.4.1.674.10892.5.4.600.50.1.7">
    <Enumerations>
      <Enumeration RawValue="1" TextValue="Other" />
      <Enumeration RawValue="2" TextValue="Unknown" />
      <Enumeration RawValue="3" TextValue="OK" />
      <Enumeration RawValue="4" TextValue="Non-Critical" />
      <Enumeration RawValue="5" TextValue="Critical" />
      <Enumeration RawValue="6" TextValue="Non-recoverable" />
    </Enumerations>
  </CustomPoller>
  <CustomPoller UniqueName="systemBIOSStatus" Description="&quot;0300.0050.0001.0005 This attribute defines the status of the system BIOS.&quot;" OID="1.3.6.1.4.1.674.10892.5.4.300.50.1.5" MIB="IDRAC-MIB-SMIv2:systemBIOSStatus" SNMPGetType="GetSubTree" NetObjectPrefix="N" GroupName="Dell iDRAC" PollerType="S" Parser="Enumeration" IncludeHistory="True" Unit="" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="" LabelType="Generic" LabelDetail="System Bios Status">
    <Enumerations>
      <Enumeration RawValue="" TextValue="" />
      <Enumeration RawValue="1" TextValue="Other" />
      <Enumeration RawValue="2" TextValue="Unknown" />
      <Enumeration RawValue="3" TextValue="OK" />
      <Enumeration RawValue="4" TextValue="Non-critical" />
      <Enumeration RawValue="5" TextValue="Critical" />
      <Enumeration RawValue="6" TextValue="Non-Recoverable" />
    </Enumerations>
  </CustomPoller>
  <CustomPoller UniqueName="systemSlotStatus" Description="&quot;1200.0010.0001.0005 This attribute defines the status of the system slot.&quot;" OID="1.3.6.1.4.1.674.10892.5.4.1200.10.1.5" MIB="IDRAC-MIB:systemSlotStatus" SNMPGetType="GetSubTree" NetObjectPrefix="N" GroupName="Dell iDRAC" PollerType="S" Parser="Enumeration" IncludeHistory="True" Unit="" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="" LabelType="SameTable" LabelDetail="1.3.6.1.4.1.674.10892.5.4.1200.10.1.8">
    <Enumerations>
      <Enumeration RawValue="1" TextValue="Other" />
      <Enumeration RawValue="2" TextValue="Unknown" />
      <Enumeration RawValue="3" TextValue="OK" />
      <Enumeration RawValue="4" TextValue="Non-critical" />
      <Enumeration RawValue="5" TextValue="Critical" />
      <Enumeration RawValue="6" TextValue="Non-recoverable" />
    </Enumerations>
  </CustomPoller>
  <CustomPoller UniqueName="temperatureProbeReading" Description="&quot;0700.0020.0001.0006 This attribute defines the reading for a temperature&#xD;&#xA;        probe of type other than temperatureProbeTypeIsDiscrete.  When the value&#xD;&#xA;        for temperatureProbeType is other than temperatureProbeTypeIsDiscrete,&#xD;&#xA;        the value ret" OID="1.3.6.1.4.1.674.10892.5.4.700.20.1.6" MIB="IDRAC-MIB-SMIv2:temperatureProbeReading" SNMPGetType="GetSubTree" NetObjectPrefix="N" GroupName="Dell iDRAC" PollerType="S" Parser="None" IncludeHistory="True" Unit="" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="" LabelType="SameTable" LabelDetail="1.3.6.1.4.1.674.10892.5.4.700.20.1.8">
    <Enumerations />
  </CustomPoller>
  <CustomPoller UniqueName="temperatureProbeReadingInFahrenheit" Description="" OID="1.3.6.1.4.1.674.10892.5.4.700.20.1.6" MIB="" SNMPGetType="GetSubTree" NetObjectPrefix="N" GroupName="Dell iDRAC" PollerType="F" Parser="None" IncludeHistory="True" Unit="" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="CtoF({temperatureProbeReading}/10)" LabelType="SameTable" LabelDetail="1.3.6.1.4.1.674.10892.5.4.700.20.1.8">
    <Enumerations />
  </CustomPoller>
  <CustomPoller UniqueName="temperatureProbeStatus" Description="&quot;0700.0020.0001.0005 This attribute defines the probe status of the&#xD;&#xA;        temperature probe.&quot;" OID="1.3.6.1.4.1.674.10892.5.4.700.20.1.5" MIB="IDRAC-MIB-SMIv2:temperatureProbeStatus" SNMPGetType="GetSubTree" NetObjectPrefix="N" GroupName="Dell iDRAC" PollerType="S" Parser="Enumeration" IncludeHistory="True" Unit="" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="" LabelType="SameTable" LabelDetail="1.3.6.1.4.1.674.10892.5.4.700.20.1.8">
    <Enumerations>
      <Enumeration RawValue="1" TextValue="Other" />
      <Enumeration RawValue="2" TextValue="Unknown" />
      <Enumeration RawValue="3" TextValue="OK" />
      <Enumeration RawValue="4" TextValue="Non-critical" />
      <Enumeration RawValue="5" TextValue="Critical" />
      <Enumeration RawValue="6" TextValue="Non-recoverable" />
    </Enumerations>
  </CustomPoller>
  <CustomPoller UniqueName="virtualDiskState" Description="&quot;The current state of this virtual disk&#xD;&#xA;        (which includes any member physical disks.)&#xD;&#xA;        Possible states:&#xD;&#xA;        1: The current state could not be determined.&#xD;&#xA;        2: The virtual disk is operating normally or optimally.&#xD;&#xA;        3: The virtu" OID="1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.4" MIB="IDRAC-MIB-SMIv2:virtualDiskState" SNMPGetType="GetSubTree" NetObjectPrefix="N" GroupName="Dell iDRAC" PollerType="S" Parser="Enumeration" IncludeHistory="True" Unit="" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="" LabelType="SameTable" LabelDetail="1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.36">
    <Enumerations>
      <Enumeration RawValue="1" TextValue="unknown" />
      <Enumeration RawValue="2" TextValue="online" />
      <Enumeration RawValue="3" TextValue="failed" />
      <Enumeration RawValue="4" TextValue="degraded" />
    </Enumerations>
  </CustomPoller>
  <CustomPoller UniqueName="voltageProbeReading" Description="&quot;0600.0020.0001.0006 This attribute defines the reading for a voltage&#xD;&#xA;        probe of type other than voltageProbeTypeIsDiscrete.  When the value&#xD;&#xA;        for voltageProbeType is other than voltageProbeTypeIsDiscrete, the value&#xD;&#xA;        returned for this a" OID="1.3.6.1.4.1.674.10892.5.4.600.20.1.6" MIB="IDRAC-MIB-SMIv2:voltageProbeReading" SNMPGetType="GetSubTree" NetObjectPrefix="N" GroupName="Dell iDRAC" PollerType="S" Parser="None" IncludeHistory="True" Unit="" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="" LabelType="SameTable" LabelDetail="1.3.6.1.4.1.674.10892.5.4.600.20.1.8">
    <Enumerations />
  </CustomPoller>
  <CustomPoller UniqueName="voltageProbeReadingInVolts" Description="" OID="1.3.6.1.4.1.674.10892.5.4.600.20.1.6" MIB="" SNMPGetType="GetSubTree" NetObjectPrefix="N" GroupName="Dell iDRAC" PollerType="F" Parser="None" IncludeHistory="True" Unit="" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="{voltageProbeReading}/1000" LabelType="SameTable" LabelDetail="1.3.6.1.4.1.674.10892.5.4.600.20.1.8">
    <Enumerations />
  </CustomPoller>
  <CustomPoller UniqueName="voltageProbeStatus" Description="&quot;0600.0020.0001.0005 This attribute defines the probe status of the&#xD;&#xA;        voltage probe.&quot;" OID="1.3.6.1.4.1.674.10892.5.4.600.20.1.5" MIB="IDRAC-MIB-SMIv2:voltageProbeStatus" SNMPGetType="GetSubTree" NetObjectPrefix="N" GroupName="Dell iDRAC" PollerType="S" Parser="Enumeration" IncludeHistory="True" Unit="" TimeUnitId="0" TimeUnitQuantity="0" DefaultDisplayTimeUnitId="0" Formula="" LabelType="SameTable" LabelDetail="1.3.6.1.4.1.674.10892.5.4.600.20.1.8">
    <Enumerations>
      <Enumeration RawValue="1" TextValue="Other" />
      <Enumeration RawValue="2" TextValue="Unknown" />
      <Enumeration RawValue="3" TextValue="OK" />
      <Enumeration RawValue="4" TextValue="Non-critical" />
      <Enumeration RawValue="5" TextValue="Critical" />
      <Enumeration RawValue="6" TextValue="Non-recoverable" />
    </Enumerations>
  </CustomPoller>
</CustomPollers>

 

 

UnDP: iDracPollers.UnDP

Custom SWQL Query to Identify the Top 10 SolarWinds Orion Nodes by Their Number of NPM Elements

Below is a SWQL query which can be used to determine which nodes in your SolarWinds Orion environment have the most elements. What is an element? In NPM, every node, volume and interface counts as an element. Which leads to, why is this important? For one, SolarWinds Network Performance Monitor (NPM) is typically licensed by the number of elements, unless you are one of the newer nodes based licensing options. If you have a large environment, this also comes in helpful when trying to balance the load across your polling engines. Typically, a polling engine is limited to ~12,000 elements before your polling frequencies start to automatically slow down (unless you're stacking polling engine licenses and have the computer resources to support it).

SELECT TOP 10 i.Interfaces + v.Volumes + 1 AS [Elements]
    , n.Caption AS [Node]
    , n.NodeID
    , n.IP_Address AS [IP]
    , n.Vendor
    , n.MachineType
FROM Orion.Nodes n
INNER JOIN (SELECT COUNT(InterfaceID) AS [Interfaces], NodeID FROM Orion.NPM.Interfaces GROUP BY NodeID) AS i ON i.NodeID=n.NodeID
INNER JOIN (SELECT COUNT(VolumeID) AS [Volumes], NodeID FROM Orion.Volumes GROUP BY NodeID) AS v ON v.NodeID=n.NodeID
GROUP BY n.NodeID
    , n.Caption
    , n.IP_Address
    , n.Vendor
    , n.MachineType
    , i.Interfaces
    , v.Volumes
ORDER BY [Elements] DESC

If you're unfamiliar with SWQL and how to run it, I'll list a few ways below.

  1. You can go to https://<OrionURL>/orion/Admin/swis.aspx in your environment, past the code in the box, and execute it. You'll have to replace "https://<OrionUrl>" with the URL for your environment, of course.
  2. If you have the OrionSDK installed, you can run it in SWQL Studio.
  3. If you have the OrionSDK installed, you can run the query with the "Get-SwisData" PowerShell cmdlet.
  4. You can use the query above as a data source for a report or custom dashboard widget.

Issue Where SolarWinds Orion Agents Show As Connected But They Are Not Updating Statistics (RESOLVED)

This issue can easily slip by unnoticed. All of that status indicators still show green, so everything is good, right? Not so! Statistics an...