This discussion has been locked. The information referenced herein may be inaccurate due to age, software updates, or external references.
You can no longer post new replies to this discussion. If you have a similar question you can start a new discussion in this forum.

Custom Table Poller Values don't clear

We're trying to poll for active alarms on a Ciena device. The poller itself works but when an alarm clears on the device the value polled doesn't clear from Orion. This causes issues with Orion alerts then not clearing unless you remove and reapply the poller. I'm not sure if its just how the device handles the alert table or if there's a work around in Orion? I did notice if there are no active alarms and I test the OID for the table it returns no OID supported. We're on NPM: 2020.2.4

Here's the poller we've setup:

Screenshot_4.png

When doing a test this is one node with an alarm and one without:

Screenshot_5.png

We used ObjectInstance for the label. In this case correlates to the port number.

Screenshot_3.png

I used this chart to help troubleshoot. Any alarms will populate once its polled but when the alarm is cleared on the device it stays in the table until the poller is removed.

Screenshot_2.png

Here's the alert we setup. It seems to work its just the issue with the alarm values not clearing from Orion causing the alarm to stick unless the poller is removed and reapplied. 

Screenshot_1.png

  • I had a scenario similar to this a while back. It's due to the way your device handles alarms.

    • You could poll the device for alarm metrics and it would return a table of active alarms
    • However if the device had no active alarms, the OID didn't exist/respond rather than reply with a 0 or blank table. Due to the failure to get a response, SolarWinds keeps the most recent polled value

    There was another OID that returned the number of active alarms so our way around it was to create a SQL query that ran every X minutes on the SQL server against the SolarWinds database and deleted the stale status values from the database if that number was 0.

    This query would return the NodeID of the nodes that had 0 active alarms (from the active alarm OID) and then use that to delete the current status values of the other values (e.g. the actual alarm description pollers).

    If an alarm did trigger on the device, the OID would be valid and would populate values in the database. Then on reset, the alarm count would return to 0 and the script would remove the alarm description values on its next scheduled run.

    CAVEAT - This query will delete entries directly from the database. Use with caution. You can remove the outer DELETE and only use the SELECT query if you want to see what would be deleted first. You could probably join on the custom poller table and use the poller name instead of the OID but this worked as a temporary solution.

    DELETE FROM CustomPollerStatus
    WHERE CustomPollerAssignmentID IN (
     
    -- Get CustomPollerAssignmentIDs for nodes with no alerts
    SELECT cps.CustomPollerAssignmentID FROM [dbo].[CustomPollerStatus] cps
    INNER JOIN CustomPollerAssignment cpa ON cpa.CustomPollerAssignmentID = cps.CustomPollerAssignmentID
    WHERE cpa.CustomPollerID IN
    	(
            -- custom poller IDs of the alert description pollers
    	'a1528284-654f-4c35-9ed2-e3875f391ab7', -- alert description poller 1 
    	'73547852-3362-4f83-a0aa-94e4fd88b9b3', -- alert description poller 2
    	'04083eab-779a-4473-a9f4-9577efbb9e15', -- alert description poller 3
    	'6d80c1a8-b65e-4f40-b910-5b5597926c07' -- alert description poller 4
    	)
    AND NodeID IN
    	(
    	-- Get NodeIDs for nodes where number of active alarms = 0
    	SELECT NodeID FROM (
    	SELECT cpa.NodeID, cps.CustomPollerAssignmentID, cpa.AssignmentName, cps.Status FROM [dbo].[CustomPollerStatus] cps
    		INNER JOIN CustomPollerAssignment cpa ON cpa.CustomPollerAssignmentID = cps.CustomPollerAssignmentID
    		WHERE cpa.CustomPollerID IN (
    		  '33c47a1f-f0a2-4539-a19b-512a86ffbd82' -- Number_Active_Alarms poller
    		 )
    		) t1
    	WHERE Status = 0
    	)
    
    )