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
https://support.solarwinds.com/Success_Center/Network_Performance_Monitor_(NPM)/Cisco_ASA_Hardware_Health_not_detected
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.
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:
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:
and:
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.
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 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
Your welcome :-)
I created a seperate view for ASA in order to avoid the customQuery to show on all nodes.
Hello lll8lll Do you mind if i use your SQL and post content as a KB in our success center ? It will be great help of others as well .
No I dont mind :-)
lll8lll can you provide a brief process for creating a separate view on a per-device basis? I was trying to figure this out yesterday, but wasn't able. Thanks
Under Settings you have "Manage Views" here you can create new views (i.e. a copy of the standard summary view but with the CustomQuery)
Under "Views by Device Type" you can select the standard view for each device type.
NOTE: We just upgraded to NPM 12.01 and I see now that after the upgrade, the menu on the "Manage Views" are FUBAR. They may still work, but they
are not easy to interpret. Before the upgrade it was very easy to manage views.
We run 9.4(3)3 but still no hardware sensors
"...Hi, The information on the site https://support.solarwinds.com/Success_Center/Network_Performance_Monitor_(NPM)/Change_the_preferred_Cisco_MIB_for_hardware_health_in_NPM_11.0 is correct. You can change it per node or globally. But that specific node is not providing the correct OIDs for the environment data....."
This about the ASA 5545X...
When i use your query i get all red icons, then the value under the name column and then the name under the unit value ?
thank you very much for the sql on how to create custom hardware monitoring. I have an issue with regards to the status of the icons, all i can ever get is red icons, I can display the name of the sensor and its current value and also the type of sensor. I saw your origional post with the oids you created, would you be able to share the configuration you used for the pollers to variables used in the sql ie OID to Variable. many thanks
Hiya,
Looking for ASA 5520 releases, I believe the last one is 9.1.7.... I am guessing that the list you provided is for other(s) ASA device models?
Cheers,
Ana
For what, specifically, are you searching, ana.villar?
The key for using lll8lll 's SQL is to make sure you're putting the proper GUID of the correct custom poller in the correct section of the SQL. Specifically, this SQL:
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
You need to replace the GUID of CA.CustomPollerID with the GUID of the custom poller that polls 1.3.6.1.4.1.9.9.745.1.1.1.5, which is named: ceSensorExtThresholdEvaluation. That poller should return 0 for all OK devices, which will cause the CASE statements in the custom query to display the green circle.
Hi there,
I gave up. I did a SNMP Walk and this specific model has nothing else that can be monitored. So I decided that I would use my time on something else more useful...