We are not be able to able to Monitor Cisco ASA Firewall Hardware.
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
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.
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.
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
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.
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}
SolarWinds solutions are rooted in our deep connection to our user base in the THWACK® online community. More than 195,000 members are here to solve problems, share technology and best practices, and directly contribute to our product development process.