I have an application monitor that has three PowerShell component monitors. Call them ComponentA, ComponentB and ComponentC.
When Component B OR ComponentC have status Critical I want to raise an alert ONLY if the status of ComponentA is UP.
I quess BNF for the trigger condition would be
On an individual node running MyApplicationNameHere:
IF ( ( ( ComponentB-status -eq Critical ) OR (ComponentC-status -eq Critical)) AND ( ComponentA-status -eq UP) ) THEN raise alert
I've tried to implement this with the GUI alert definition tool in a number of ways without success. Here is a cut-n-paste from the Edit Alert->Summary screen
of the alert definitions.
----------------------------
Trigger Condition try #1:
At least one child condition must be satisfied (OR)
All child conditions must be satisfied (AND)
Component Alerting Properties - Component Name - is equal to - ComponentB
Component - Status - is equal to - Critical
All child conditions must be satisfied (AND)
Component Alerting Properties - Component Name - is equal to - ComponentC
Component - Status - is equal to - Critical
And
All child conditions must be satisfied (AND)
Component Alerting Properties - Component Name - is equal to - ComponentA
Component - Status - is equal to - Up
vvvvvvvvvvvvvvvvvvvvvvvvvvvvv
But this never works because ComponentA never appears to get considered, if I remove the last test (the last AND clause for ComponentA)
then the alert gets generated whenever ComponentB or ComponentC have Critical Status
--------------------------
Trigger Condition try #2 (using a secondary Section in the alert def):
All child conditions must be satisfied (AND)
All child conditions must be satisfied (AND)
Application Alerting Properties - Application Name - is equal to - MyApplicationNameHere
Application - Status - is not equal to - Up
All child conditions must be satisfied (AND)
At least one child condition must be satisfied (OR)
All child conditions must be satisfied (AND)
Component Alerting Properties - Component Name - is equal to - ComponentB
Component - Status - is equal to - Critical
All child conditions must be satisfied (AND)
Component Alerting Properties - Component Name - is equal to - ComponentC
Component - Status - is equal to - Critical
And
All child conditions must be satisfied (AND)
Application Alerting Properties - Application Name - is equal to - MyApplicationNameHere
All child conditions must be satisfied (AND)
Component Alerting Properties - Component Name - is equal to - ComponentA
Component - Status - is equal to - Up
vvvvvvvvvvvvvvvvvvvvvvvv
The problem with this is that if the application is installed on 2 nodes the test does not match ComponentA to Components B&C. For example, if
the template is deployed on node1 and node2 AND node1 has ComponentC Status -eq UP while node2 has its ComponentC status (not) -eq UP, then a
critical status of ComponentB or ComponentC on node2 raises an alert because ComponentA status on node1 is UP. If both node1 and node2 have ComponentA status (not) -eq UP, then no alert is generated. I conclude that test is not matching all three components to the same application running on the same node.
-----------------------
So maybe the answer is a SWQL-based alert? Since I cannot find examples for how to accurately construct an alert using SWQL, I'm asking for some help here.
Would it be something like "Select the nodes running MyApplicationNameHere where (ComponentB OR ComponentC status is Critical) and (ComponentA status is OK)" and then for each node found, generate a separate alert? The selection statement strikes me as just a matter of me crawling up the SWQL learning curve but generating a separate alert for each instance found that meets the conditions doesn't line up with my conception of how Solarwinds works, I hope I am wrong about that.
I'm also hoping that I can get some guidance from someone, somewhere on how I might try to either resolve this problem OR to declare it unresolvable. Thanks
In Advance!