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.

ASA Hardware Monitor

We are not be able to able to Monitor Cisco ASA Firewall Hardware.

  • Cisco ASA Hardware Health not detected - SolarWinds Worldwide, LLC. Help and Support

    I have marked it as BUG with the vendor  ASAs don’t currently support envmonMIB, this’ documented under the Cisco bug ID CSCuw47997.

    If you require additional information on the status of the bug please contact Cisco and reference the bug ID. 

    pastedImage_0.png

    For more details please find the KB post below.

    Hardware health OIDS - SolarWinds Worldwide, LLC. Help and Support

    You can run the SNMPWALk fro the ASA and then search within the txt output file to confirm if the MIB table is actually present within the device itself.

    Running SNMPWalk

  • Cisco ASA has its own MIB for hardware (CISCO-ENTITY-SENSOR-EXT-MIB)

    But Solawinds do not want to support it.

  • Solarwinds does wanted but there are certain vendor standard requirements which are missing from the device  therefor its been logged as BUG with Cisco

    See the details here.

    Cisco Bug: CSCur55645 - Saleen: Add support for CISCO-ENTITY-SENSOR-EXT-MIB

    When running discovery against Cisco devices (1.3.6.1.4.1.9) we use below OID(s) Cisco own standard MIB's

        1.3.6.1.4.1.9.9.91.1.1.1.1.1 - entSensorType

        1.3.6.1.4.1.9.9.13.1.2.1.2 - ciscoEnvMonVoltageStatusDescr

        1.3.6.1.4.1.9.9.13.1.3.1.2 - ciscoEnvMonTemperatureStatusDescr

        1.3.6.1.4.1.9.9.13.1.4.1.2 - ciscoEnvMonFanStatusDescr

        1.3.6.1.4.1.9.9.13.1.5.1.2 - ciscoEnvMonSupplyStatusDescr

  • The problem is resolved with newer code--all you should have to do is upgrade your ASA to a newer release:

    pastedImage_0.png

  • Yes you do, and it is very annoying, because it has never worked, and probably never will, as it is not the way hardware MIBs are implemented on ASA.

    People have asked Solarwinds to support ASA for many many years, but you keep blaming cisco.

    ASA use 1.3.6.1.2.1.99.1.1.1.1 - entPhySensortype

    We monitor our ASA hardware health with UnDP pollers, and get all info which is relevant to us with the following list of pollers:

    1.3.6.1.2.1.99.1.1.1.1 - entPhySensortype

    entPhySensortype

    1.3.6.1.2.1.99.1.1.1.4 - entPhySensorUnitsdisplay

    The most recent measurement obtained by the agent for this

    sensor.

    1.3.6.1.2.1.99.1.1.1.6

    A textual description of the data units that should be used

    in the display of entPhySensorValue.

    1.3.6.1.2.1.47.1.1.1.1.7

    The textual name of the physical entity. The value of this

    object should be the name of the component as assigned by

    the local device and should be suitable for use in commands

    1.3.6.1.4.1.9.9.745.1.1.1.5

    This object indicates the result of the most

    recent evaluation of the threshold.

    1.3.6.1.4.1.9.9.745.1.1.1.2

    This object specifies the severity of this threshold.

    For cluster information (which unit is active/standby etc) we use:

    1.3.6.1.4.1.9.9.147.1.2.1.1.1.4

    A detailed textual description of the current status of

    the resource which may provide a more specific description

    than cfwHardwareStatusValue.

    1.3.6.1.4.1.9.9.147.1.2.1.1.1.2

    A detailed textual description of the resource

    identified by cfwHardwareType.

    1.3.6.1.4.1.9.9.147.1.2.1.1.1.3

    This object contains the current status of the resource.

    Combined in a CustomQuery recource with a whole lot of SQL we get:

    pastedImage_0.png

    and:

    pastedImage_2.png

    If ANYONE has gotten hardware status for ASA  with Solwarwinds outofthe box pollers ANYTIME, I would be VERY interrested i knowing about it, and how to do it.

  • Thank you @lll8lll

    Very interesting,  thank you for sharing the valuable information with us i am sure PM will be notified on this as well . 

    Would it also be possible for you to provide the Custom SQL query where you are using to combine this will help us to use as a work around for the others ?

  • I did post it in a similar discussion, but I don t find it on the fly, so here is a repost:

    (You have to change the GUID of the custompollers to the GUID of your own custompollers, as they are assigned by the system when you create a UnDP poller)

    ***********************************SQL 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='E200B54B-C47B-42F7-89C6-5F0784724C0A') 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='ABB18B3C-BCB2-473D-AC66-24BED1C8C799') 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='F2DA14E8-0A02-4DDD-94A8-B997E7981716') 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='9A8397E8-DC3C-4674-902D-F5DE8EB7F796') 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='57F28AF3-D7AB-408B-897E-674D72BFFB74') 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='AE8F6616-4408-4332-B376-3A39E7BBCA23') AND (CA.NodeID=${NodeID})
    ) Sensor_Severity ON Sensor_Severity.RowID=Sensor_Values.RowID AND Sensor_Severity.NodeID=Sensor_Values.NodeID

    ***********************************SQL 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='580A4093-7D89-4A78-BC6B-7190CD48F999') 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='27B3BF20-62AF-41B4-BA69-022311492556') 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='A4B69CD6-8A9D-469D-8AFD-221EAC5CF46D') AND (CA.NodeID=${NodeId})
    ) State_raw ON (State_Raw.RowID=Caption_Values.RowID) AND (State_Raw.NodeID=Caption_Values.NodeID)

    WHERE NodeId=${NodeId}

  • Thank you emoticons_happy.png you are awsm help .

  • I followed lll8lll​ 's instructions and it worked like a charm.  Only thing I don't like is the custom query shows up on all devices (blank on non-ASA devices).  But this is pretty minor compared to not monitoring ASA hardware.  Thanks lll8lll