Cisco ASA Hardware Health & failover status monitoring

Version 17

    *****UPDATE HARDWARE HEALTH IS INCLUDED IN NPM 12.2 PLEASE UPGRADE****

     

     

     

     

     

    Hello Everyone.

    In this article i have combined the required steps and information in order to monitor the Cisco Cisco ASA Hardware Health and fail-over status in Orion as work around .

    If you have any difficulty please let me know .

    Please Note: I have Cisco ASA 5506 and result may differ depending on the version and model you have.

     

    ✔ Download and import pre-build universal device poller (Attached - Scroll down to the page )

    ✔ Assign the UNDP Poller to required node and test

    ✔ Get the poller ID

    ✔ Custom SWQL Query

    ✔ Create Custom Query resource

     

     

    Download the Custom Poller (Attached) and import in the Universal Device Poller

     

    Open Universal Device Poller on the Orion Server >

     

     

    Once imported > Right click on each Poller > Assign >

     

     

    Assign it to your ASA > Test > (To make sure its working and valid for the ASA ) > Finish

     

     

    Get the Poller ID

     

    Now Go to your Cisco ASA Node >(Top Right Corner ) >  Click on the "Customize Page" >

    Click on the + button > Search for the Resource "Universal Device Poller Status" >

    Select Click "Submit"

     

     

     

    You will be bale to see the below resource on the Node Details page.

     

    Right Click on the first Poller and Copy Link address

     

     

    Paste it in the Notepad copy what you need is the PollerID see an example below

     

    Make a list for all the pollers one by one.(Remember Marking and sequence  )

     

    Category

    Poller Name

    Poller ID

    Hardware Health

    entPhySensorValue

    d3ef4593-7bf3-4cb0-a663-84028d36dca5

    Hardware Health

    entPhysicalName

    2c6c8d51-6e76-4c16-8007-b0c7a4bfbfa9

    Hardware Health

    entPhySensorUnitsDisplay

    4359cd09-0789-4bbe-a705-32d0c35e4af3

    Hardware Health

    ceSensorExtThresholdSeverity

    ac89813d-9368-4a1c-a00c-987f9a7cd08c

    Hardware Health

    entPhySensorType

    ba5b6415-edbc-4a1b-90f3-4930961e5615

    Hardware Health

    ceSensorExtThresholdEvaluation

    43fe9676-5d5a-4a33-8d92-3d755f6b0dee

    FailOver

    cfwHardwareInformation

    ce86effb-8cf5-4a06-9fa0-00cf54222702

    FailOver

    cfwHardwareStatusDetail

    b6fdaae8-0e4c-4258-bd41-0d7037699985

    FailOver

    cfwHardwareStatusValue

    45dd90df-9eb5-4e4c-8eac-cd463a4437c7

     

     

     

    Create your custom SWQL Query Now change the below SQL Query according to the above Poller ID

     

     

    *******SWQL FOR Hardware STATUS*******

    SELECT  Sensor_Names.Value as Name,

      CASE Sensor_Type.value

      WHEN 10 THEN ToString(Sensor_Values.Value + ' Rpm')

      WHEN 12 THEN CASE Sensor_Values.Value WHEN 2 THEN 'DOWN' ELSE 'OK' END

      WHEN 8 THEN ToString(Sensor_Values.Value + ' °C')

      ELSE ToString(Sensor_Values.Value + ' ' + Sensor_Display.Value)

      END as Unit,

      --Sensor_Severity.value as Severity,

      --Sensor_Status.Value as Status,

      CASE Sensor_Type.value

      WHEN 8 THEN

       CASE Sensor_Status.value

       WHEN 0 THEN '/Orion/HardwareHealth/Images/Temperature_Up.png'

       ELSE '/Orion/HardwareHealth/Images/Temperature_Down.png'

       END

      WHEN 10 THEN

       CASE Sensor_Status.value

       WHEN 0 THEN '/Orion/HardwareHealth/Images/Fan_Up.png'

       ELSE '/Orion/HardwareHealth/Images/Fan_Down.png' END

      WHEN 12 THEN

       CASE Sensor_Status.value

       WHEN 0 THEN '/Orion/HardwareHealth/Images/PowerSupply_Up.png'

       ELSE '/Orion/HardwareHealth/Images/PowerSupply_Down.png' END

      ELSE

       CASE Sensor_Status.value

       WHEN 0 THEN '/Orion/HardwareHealth/Images/Generic_Up.png'

       ELSE '/Orion/HardwareHealth/Images/Generic_Down.png' END

      END as [_IconFor_Name]

    FROM (

      SELECT CS.RowID as RowID, IsNull(CS.Status, 0) as Value, CA.NodeID

      FROM Orion.NPM.CustomPollerStatus CS

      INNER JOIN Orion.NPM.CustomPollerAssignment CA ON CA.CustomPollerAssignmentID = CS.CustomPollerAssignmentID

      WHERE (CA.CustomPollerID='d3ef4593-7bf3-4cb0-a663-84028d36dca5') AND (CA.NodeID=${NodeID})

    ) Sensor_Values

    LEFT OUTER JOIN (

      SELECT CS.RowID as RowID, IsNull(CS.Status, 0) as Value, CA.NodeID

      FROM Orion.NPM.CustomPollerStatus CS

      INNER JOIN Orion.NPM.CustomPollerAssignment CA ON CA.CustomPollerAssignmentID = CS.CustomPollerAssignmentID

      WHERE (CA.CustomPollerID='2c6c8d51-6e76-4c16-8007-b0c7a4bfbfa9') AND (CA.NodeID=${NodeID})

    ) Sensor_Names ON Sensor_Names.RowID=Sensor_Values.RowID AND Sensor_Names.NodeID=Sensor_Values.NodeID

    LEFT OUTER JOIN (

      SELECT CS.RowID as RowID, IsNull(CS.Status, 0) as Value, CA.NodeID

      FROM Orion.NPM.CustomPollerStatus CS

      INNER JOIN Orion.NPM.CustomPollerAssignment CA ON CA.CustomPollerAssignmentID = CS.CustomPollerAssignmentID

      WHERE (CA.CustomPollerID='4359cd09-0789-4bbe-a705-32d0c35e4af3') AND (CA.NodeID=${NodeID})

    ) Sensor_Display ON Sensor_Display.RowID=Sensor_Values.RowID AND Sensor_Display.NodeID=Sensor_Values.NodeID

    LEFT OUTER JOIN (

      SELECT SUBSTRING(CS.RowID, 1, 2) as RowID, IsNull(CS.Status, 0) as Value, CA.NodeID

      FROM Orion.NPM.CustomPollerStatus CS

      INNER JOIN Orion.NPM.CustomPollerAssignment CA ON CA.CustomPollerAssignmentID = CS.CustomPollerAssignmentID

      WHERE (CA.CustomPollerID='ac89813d-9368-4a1c-a00c-987f9a7cd08c') AND (CA.NodeID=${NodeID})

    ) Sensor_Status ON Sensor_Status.RowID=Sensor_Values.RowID AND Sensor_Status.NodeID=Sensor_Values.NodeID

    LEFT OUTER JOIN (

      SELECT CS.RowID as RowID, IsNull(CS.Status, 0) as Value, CA.NodeID

      FROM Orion.NPM.CustomPollerStatus CS

      INNER JOIN Orion.NPM.CustomPollerAssignment CA ON CA.CustomPollerAssignmentID = CS.CustomPollerAssignmentID

      WHERE (CA.CustomPollerID='ba5b6415-edbc-4a1b-90f3-4930961e5615') AND (CA.NodeID=${NodeID})

    ) Sensor_Type ON Sensor_Type.RowID=Sensor_Values.RowID AND Sensor_Type.NodeID=Sensor_Values.NodeID

    LEFT OUTER JOIN (

      SELECT SUBSTRING(CS.RowID, 1, 2) as RowID, IsNull(CS.Status, 0) as Value, CA.NodeID

      FROM Orion.NPM.CustomPollerStatus CS

      INNER JOIN Orion.NPM.CustomPollerAssignment CA ON CA.CustomPollerAssignmentID = CS.CustomPollerAssignmentID

      WHERE (CA.CustomPollerID='43fe9676-5d5a-4a33-8d92-3d755f6b0dee') AND (CA.NodeID=${NodeID})

    ) Sensor_Severity ON Sensor_Severity.RowID=Sensor_Values.RowID AND Sensor_Severity.NodeID=Sensor_Values.NodeID

     

     

     

     

    ******SWQL FOR FAILOVER STATUS*****

     

    SELECT Caption_Values.Value as Caption,
      State_values.Value as State,
      CASE Caption_values.RowID
      WHEN 6 THEN --Status for primary unit
       CASE State_raw.Value
       WHEN 1 THEN '/Orion/Images/StatusIcons/Small-Unknown.gif'
       WHEN 2 THEN '/Orion/Images/StatusIcons/Small-Up.gif'
       WHEN 3 THEN '/Orion/Images/StatusIcons/Small-Down.gif'
       WHEN 4 THEN '/Orion/Images/StatusIcons/Small-Down.gif'
       WHEN 5 THEN '/Orion/Images/StatusIcons/Small-Down.gif'
       WHEN 6 THEN '/Orion/Images/StatusIcons/Small-Down.gif'
       WHEN 7 THEN '/Orion/Images/StatusIcons/Small-Down.gif'
       WHEN 8 THEN '/Orion/Images/StatusIcons/Small-Up-Down.gif'
       WHEN 9 THEN '/Orion/Images/StatusIcons/Small-Up.gif'
       WHEN 10 THEN '/Orion/Images/StatusIcons/Small-Up-Critical.gif'
       ELSE '/Orion/Images/StatusIcons/Small-Unknown.gif'
       END
      WHEN 4 THEN '/Orion/Images/StatusIcons/Small-Unknown.gif'
      WHEN 7 THEN
       CASE State_raw.Value
       WHEN 1 THEN '/Orion/Images/StatusIcons/Small-Unknown.gif'
       WHEN 2 THEN '/Orion/Images/StatusIcons/Small-Up.gif'
       WHEN 3 THEN '/Orion/Images/StatusIcons/Small-Down.gif'
       WHEN 4 THEN '/Orion/Images/StatusIcons/Small-Down.gif'
       WHEN 5 THEN '/Orion/Images/StatusIcons/Small-Down.gif'
       WHEN 6 THEN '/Orion/Images/StatusIcons/Small-Down.gif'
       WHEN 7 THEN '/Orion/Images/StatusIcons/Small-Down.gif'
       WHEN 8 THEN '/Orion/Images/StatusIcons/Small-Up-Down.gif'
       WHEN 9 THEN '/Orion/Images/StatusIcons/Small-Up.gif'
       WHEN 10 THEN '/Orion/Images/StatusIcons/Small-Up.gif'
       ELSE '/Orion/Images/StatusIcons/Small-Unknown.gif'
       END
      ELSE '/Orion/Images/StatusIcons/Small-Unknown.gif'
      END as [_IconFor_Caption]
     
    FROM (
      SELECT CS.RowID as RowID, IsNull(CS.Status, 0) as Value, CA.NodeID
      FROM Orion.NPM.CustomPollerStatus CS
      INNER JOIN Orion.NPM.CustomPollerAssignment CA ON CA.CustomPollerAssignmentID = CS.CustomPollerAssignmentID
      WHERE (CA.CustomPollerID='ce86effb-8cf5-4a06-9fa0-00cf54222702') AND (CA.NodeID=${NodeId})

    ) Caption_Values

    LEFT OUTER JOIN (
      SELECT CS.RowID as RowID, IsNull(CS.Status, 0) as Value, CA.NodeID
      FROM Orion.NPM.CustomPollerStatus CS
      INNER JOIN Orion.NPM.CustomPollerAssignment CA ON CA.CustomPollerAssignmentID = CS.CustomPollerAssignmentID
      WHERE (CA.CustomPollerID='b6fdaae8-0e4c-4258-bd41-0d7037699985') AND (CA.NodeID=${NodeId})
    ) State_values ON (Caption_Values.RowID= State_Values.RowID) AND (Caption_Values.NodeID = State_Values.NodeID)

    LEFT OUTER JOIN (
      SELECT CS.RowID as RowID, IsNull(CS.Status, 0) as Value, CA.NodeID
      FROM Orion.NPM.CustomPollerStatus CS
      INNER JOIN Orion.NPM.CustomPollerAssignment CA ON CA.CustomPollerAssignmentID = CS.CustomPollerAssignmentID
      WHERE (CA.CustomPollerID='45dd90df-9eb5-4e4c-8eac-cd463a4437c7') AND (CA.NodeID=${NodeId})
    ) State_raw ON (State_Raw.RowID=Caption_Values.RowID) AND (State_Raw.NodeID=Caption_Values.NodeID)

    WHERE NodeId=${NodeId}

     

     

    Create custom query resources

     

    Add "Custom Query" Resource on the Node details page .

     

     

    Pate the above custom query in two different Custom Resources

     

     

    Results:

     

    Depending on the ASA version you have will be different