WUG.ninja

Search

How do I handle interface active monitors?

The problem

When you discover network devices using default settings, an active monitor is added for each interface the device has. Active monitors are enabled for the interfaces that were active during the discovery scan, and the others are sitting there disabled. The problem with this approach is that when an access switch is scanned, you may potentially end up with a bunch of monitors you do not care to be alerted about enabled on a device.

The solution(s)

Disable them all

You have many different options here. One of the options for you is to simply disable them. To do so, go to your ‘My Network’ tab and select your top level device group. From here, hit the checkbox to select all devices and then right-click any device in the list and go to ‘Edit Devices’ -> ‘Active Monitor Properties’. In the next dialog, simply specify ‘Interface’ for the active monitor and change ‘Enable Polling’ to ‘Off’. This will disable the interface active monitor across all devices. Note that, depending on your environment you *MAY* want to monitor certain interfaces for their administrative status. In those scenarios, you can either manually enable the monitors on a device by device basis *OR* you can could use a script do enable specific monitors for you. More details on those scripts later.

Use the ‘Filter library’ under device roles

One of the best options is to use the built-in option for filtering these interfaces. Doing so is simple, using WhatsUp Gold’s Device Roles and Sub Roles. You can access this once logged into the web interface under Settings > Libraries > Roles and Sub Roles. From here, you can access the switch, router, firewall, etc. roles and adjust your filters on the interfaces accordingly. You can then apply these filters to the interface active monitor within your roles and sub roles.

T-SQL: Disable monitors not in map views

In older releases of the solution, you were able to enable just interface active monitors shown in Layer-2 maps. I tried to reconstruct this functionality using T-SQL. Before you do anything with this T-SQL: Stop your services and backup your database just in case you are unhappy with the result. After the T-SQL is run, you can start your services again and you will see that all interface active monitors that are *NOT* shown in any map view are disabled and the monitors shown in maps are enabled. Notice it is broken up into sections, so you can run either enable/disable or both.

T-SQL

use whatsup;
--enable monitors that are disabled and in the map view
update pivotactivemonitortypetodevice
set bDisabled = 0 where (bDisabled = 1 and nActiveMonitorTypeID in (22) and nPivotActiveMonitorTypeToDeviceID in (select distinct(MonitorID_A) as 'nPivotActiveMonitorTypeToDeviceID' from WugMapLink WML join PivotActiveMonitorTypeToDevice PAMTD on PAMTD.nPivotActiveMonitorTypeToDeviceID = WML.MonitorID_A
union
select distinct(MonitorID_B) as 'nPivotActiveMonitorTypeToDeviceID' from WugMapLink WML join PivotActiveMonitorTypeToDevice PAMTD on PAMTD.nPivotActiveMonitorTypeToDeviceID = WML.MonitorID_B))
--disable monitors that are enabled and not in any map view
use whatsup;
update pivotactivemonitortypetodevice
set bDisabled = 1 where (bDisabled = 0 and nActiveMonitorTypeID in (22) and nPivotActiveMonitorTypeToDeviceID not in (select distinct(MonitorID_A) as 'nPivotActiveMonitorTypeToDeviceID' from WugMapLink WML join PivotActiveMonitorTypeToDevice PAMTD on PAMTD.nPivotActiveMonitorTypeToDeviceID = WML.MonitorID_A
union
select distinct(MonitorID_B) as 'nPivotActiveMonitorTypeToDeviceID' from WugMapLink WML join PivotActiveMonitorTypeToDevice PAMTD on PAMTD.nPivotActiveMonitorTypeToDeviceID = WML.MonitorID_B))

The scripted way

Using a script, you can cycle through these monitors and enable/disable them in bulk based off of any shared criteria. For example, maybe you label each of your important interface with a meaningful description and everything else is ‘GigabitEthernet’. Using a script you could simply disable all interface active monitors across all devices which have ‘GigabitEthernet’ as their comment on the monitor.

WhatsUp Gold Active Script Action (VBScript)

'This Action Script is NOT Device assigned and should be used as a global recurring action that could be scheduled or run manually as needed
Option Explicit
'***DO NOT MODIFY ABOVE THIS LINE AT RISK OF BREAKING THE SCRIPT**
' ******************* Configuration *************************
'Set to True if you want to *DISABLE* interfaces, Set to False if you do not want to *DISABLE* any interface active monitors
Dim bRunDisable : bRunDisable = True
'This should match a portion of the comment of the interface active monitors you'd like to *DISABLE*
Dim sDisableComment : sDisableComment = "GigabitEthernet"
Dim sDisableComment2 : sDisableComment2 = "" 'Optional: Enter second comment to match, leave blank if you don't need it
Dim sDisableComment3 : sDisableComment3 = "" 'Optional: Enter third comment to match, leave blank if you don't need it
Dim sDisableComment4 : sDisableComment4 = "" 'Optional: Enter fourth comment to match, leave blank if you don't need it
'Set to True if you want to *ENABLE* interfaces, Set to False if you do not want to *ENABLE* any interface active monitors
Dim bRunEnable : bRunEnable = True
'This should match a portion of the comment of the interface active monitors you'd like to *ENABLE*
Dim sEnableComment : sEnableComment = "Trunk" 'Enter first comment to match
Dim sEnableComment2 : sEnableComment2 = "VLAN" 'Optional: Enter second comment to match, leave blank if you don't need it
Dim sEnableComment3 : sEnableComment3 = "to switch" 'Optional: Enter third comment to match, leave blank if you don't need it
Dim sEnableComment4 : sEnableComment4 = "" 'Optional: Enter fourth comment to match, leave blank if you don't need it
'When disabling, 0 means disable all that match, 1 means disable only those that match and are down
Dim bDownDisable : bDownDisable = 0
'Device Group(s): Set to the device group you'd like to run the script against
'This can be either a device group or dynamic group name. It must match exactly!
'Leaving this variable blank is the equivalent of "All Devices"
Dim sDeviceGroup : sDeviceGroup = ""
'Do a dry run? If True, then SQL commands will not be executed, only logged.
Dim bDryRun : bDryRun = False
' ***************** End Configuration ***********************
'***DO NOT MODIFY BELOW THIS LINE AT RISK OF BREAKING THE SCRIPT***
'Variable declaration
Dim nPivotActiveMonitorTypeToDeviceID 'This will be used for tracking the nPivotActiveMonitorTypeToDeviceID
Dim sDisableQuery 'This will be used for settings the disable query depending on if you set bDisable to 1
Dim nCurrDevID : nCurrDevID = 0 'This will be used for tracking which nDeviceID we are working on
Dim nNewDevID 'This will be used for tracking which nDeviceID we are working on
Dim bContinue : bContinue = True 'This is a true/false flag to specifying whether to continue in the script or not
Dim sGroupQuery : sGroupQuery = "" 'This will be filled in later depending on what type of group is entered in the 'sDeviceGroup' variable
Dim nDisableCount : nDisableCount = 0 'This will be used to keep count of how many devices we disabled interfaces on
Dim nEnableCount : nEnableCount = 0 'This will be used to keep count of how many devices we enabled interfaces on
Dim sFinalEnableComment : sFinalEnableComment = "" 'This will set the final enable comment TSQL
Dim sFinalDisableComment : sFinalDisableComment = "" 'This will set the final disable comment TSQL
'Optional: TSQL adjustments: You can adjust the TSQL matching here by adjusting where % (wildcards) are placed
If Len(sEnableComment) > 0 Then
sFinalEnableComment = "(sComment like '%" & sEnableComment & "%' "
End If
If Len(sEnableComment2) > 0 Then
sFinalEnableComment = sFinalEnableComment & "or sComment like '%" & sEnableComment2 & "%' "
End If
If Len(sEnableComment3) > 0 Then
sFinalEnableComment = sFinalEnableComment & "or sComment like '%" & sEnableComment3 & "%' "
End If
If Len(sEnableComment4) > 0 Then
sFinalEnableComment = sFinalEnableComment & "or sComment like '%" & sEnableComment4 & "%' "
End If
sFinalEnableComment = sFinalEnableComment & ") "
If Len(sDisableComment) > 0 Then
sFinalDisableComment = "(sComment like '%" & sDisableComment & "%' "
End If
If Len(sDisableComment2) > 0 Then
sFinalDisableComment = sFinalDisableComment & "or sComment like '%" & sDisableComment2 & "%' "
End If
If Len(sDisableComment3) > 0 Then
sFinalDisableComment = sFinalDisableComment & "or sComment like '%" & sDisableComment3 & "%' "
End If
If Len(sDisableComment4) > 0 Then
sFinalDisableComment = sFinalDisableComment & "or sComment like '%" & sDisableComment4 & "%' "
End If
sFinalDisableComment = sFinalDisableComment & ") "
'Create DB Object
Dim oDB : Set oDB = Context.GetDB
'Create WUG Event Helper Object
Dim oEvent : Set oEvent = CreateObject("CoreAsp.EventHelper")
'****BEGIN MAIN SCRIPT****
'Get the device group type
GetDeviceGroupType sDeviceGroup
'If the continue flag is true, keep going
If bContinue = True Then
Dim sSqlToEnable : sSqlToEnable = "SELECT nPivotActiveMonitorTypeToDeviceID, PAMTD2.nDeviceID FROM PivotActiveMonitorTypeToDevice PAMTD2" & _
" join ActiveMonitorType on ActiveMonitorType.nActiveMonitorTypeID = PAMTD2.nActiveMonitorTypeID " & _
" where (PAMTD2.nActiveMonitorTypeID = 22 and " & sFinalEnableComment & _
" and bDisabled = 1) " & sGroupQuery
Dim sSqlToDisable : sSqlToDisable = "SELECT nPivotActiveMonitorTypeToDeviceID, PAMTD2.nDeviceID FROM PivotActiveMonitorTypeToDevice PAMTD2" & _
" join ActiveMonitorType on ActiveMonitorType.nActiveMonitorTypeID = PAMTD2.nActiveMonitorTypeID " & _
" join Device D on D.nDeviceID = PAMTD2.nDeviceID " & _
" where (PAMTD2.nActiveMonitorTypeID = 22 and " & sFinalDisableComment & _
" and bDisabled = 0) " & sGroupQuery
Dim sSqlToDisable1 : sSqlToDisable1 = "SELECT nPivotActiveMonitorTypeToDeviceID, PAMTD2.nDeviceID FROM PivotActiveMonitorTypeToDevice PAMTD2" & _
" join ActiveMonitorType on ActiveMonitorType.nActiveMonitorTypeID = PAMTD2.nActiveMonitorTypeID" & _
" where (PAMTD2.nActiveMonitorTypeID = 22 and " & sFinalDisableComment & _
" and bDisabled = 0 and nPivotActiveMonitorTypeToDeviceID in (" & _
" select nPivotActiveMonitorTypeToDeviceID from PivotActiveMonitorTypeToDevice PAMTD" & _
" join MonitorState MS on MS.nMonitorStateID = PAMTD.nMonitorStateID" & _
" where nInternalMonitorState = 1))" & sGroupQuery
If bDownDisable = 0 Then sDisableQuery = sSqlToDisable
If bDownDisable = 1 Then sDisableQuery = sSqlToDisable1
'Run the disable/enable SQLs and send change events
If bRunDisable Then
Context.NotifyProgress "Disable query: " & sDisableQuery
DisableInterfacesSQL sDisableQuery
Else
Context.NotifyProgress "*DISABLE* interfaces skipped due to bRunDisable flag"
End If
If bRunEnable Then
Context.NotifyProgress "Enable query: " & sSqlToEnable
EnableInterfacesSQL sSqlToEnable
Else
Context.NotifyProgress "*ENABLE* interfaces skipped due to bRunDisable flag"
End If
End If
Context.NotifyProgress nEnableCount & " devices had interfaces enabled"
Context.NotifyProgress nDisableCount & " devices had interfaces disabled"
'****END MAIN SCRIPT****
' **********************
' * GetDeviceGroupType *
' **********************
Sub GetDeviceGroupType(sDeviceGroup)
Context.NotifyProgress "****** GetDeviceGroupType sub procedure start." & vbCrLf
'This gets the device group ID
If Len(sDeviceGroup) > 0 Then
Context.NotifyProgress "Finding group ID..."
Dim nDeviceGroupID : nDeviceGroupID = GetSQLOutputToInt("select min(nDeviceGroupID) from DeviceGroup where sGroupName = '" & sDeviceGroup &"'")
Context.NotifyProgress nDeviceGroupID & " is the group ID"
If nDeviceGroupID > 0 Then
'This gets whether that device group is dynamic or not
Dim bDynamicGroup : bDynamicGroup = GetSQLOutputToBoolean("select bDynamicGroup from DeviceGroup where nDeviceGroupID = " & nDeviceGroupID)
Context.NotifyProgress bDynamicGroup & " is the value of bDynamicGroup for nDeviceGroupID " & nDeviceGroupID
If bDynamicGroup = 0 Then
sGroupQuery = " and nPivotActiveMonitorTypeToDeviceID in (select nPivotActiveMonitorTypeToDeviceID from PivotDeviceToGroup PDTG join PivotActiveMonitorTypeToDevice PAMTD3 on PAMTD3.nDeviceID = PDTG.nDeviceID where nDeviceGroupID = " & nDeviceGroupID & ")"
Else
Dim sFilter : sFilter = GetSQLOutputToString("select sFilter from DeviceGroup where nDeviceGroupID = " & nDeviceGroupID)
Context.NotifyProgress sFilter
sGroupQuery = " and PAMTD2.nDeviceID in ( " & sFilter &")"
End If
Else
Context.NotifyProgress "Group named " & sDeviceGroup & " was not found. Stopping script."
bContinue = False
End If
End If
Context.NotifyProgress "****** GetDeviceGroupType sub procedure end." & vbCrLf
End Sub
' ***********************
' * EnableInterfacesSQL *
' ***********************
Sub EnableInterfacesSQL(sSqlToEnable)
'Run the SQL statement
Dim sRS : Set sRS = oDB.Execute(sSqlToEnable)
If Not sRS.BOF And Not sRS.EOF Then
sRS.moveFirst()
While Not sRS.EOF
nPivotActiveMonitorTypeToDeviceID = sRS("nPivotActiveMonitorTypeToDeviceID")
nNewDevID = sRS("nDeviceID")
Context.NotifyProgress "Processing device ID: " & nNewDevID
EnableMonitor(nPivotActiveMonitorTypeToDeviceID)
If nNewDevID <> nCurrDevID And nCurrDevID <> 0 Then
nEnableCount = nEnableCount + 1
SendChangeEvent(nCurrDevID)
End If
sRS.MoveNext()
nCurrDevID = nNewDevID
If sRS.EOF = True Then
nEnableCount = nEnableCount + 1
SendChangeEvent(nCurrDevID)
End If
Wend
End If
End Sub
' ************************
' * DisableInterfacesSQL *
' ************************
Sub DisableInterfacesSQL(sDisableQuery)
'Run the SQL statement
Dim sRS : Set sRS = oDB.Execute(sDisableQuery)
If Not sRS.BOF And Not sRS.EOF Then
sRS.moveFirst()
While Not sRS.EOF
nPivotActiveMonitorTypeToDeviceID = sRS("nPivotActiveMonitorTypeToDeviceID")
nNewDevID = sRS("nDeviceID")
Context.NotifyProgress "Processing device ID: " & nNewDevID
DisableMonitor(nPivotActiveMonitorTypeToDeviceID)
If nNewDevID <> nCurrDevID And nCurrDevID <> 0 Then
nDisableCount = nDisableCount + 1
SendChangeEvent(nCurrDevID)
End If
sRS.MoveNext()
nCurrDevID = nNewDevID
If sRS.EOF = True Then
nDisableCount = nDisableCount + 1
SendChangeEvent(nCurrDevID)
End If
Wend
End If
End Sub
' *********************
' * GetSQLOutputToInt *
' *********************
Function GetSQLOutputToInt(sSql)
GetSQLOutputToInt = 0
Dim sRet, sRS
Context.NotifyProgress sSql
Set sRS = oDB.Execute(sSql)
If Not sRS.EOF And Not sRS.BOF Then
sRet = Trim(sRS.GetString)
If Len(sRet) > 0 Then
If Right(sRet, 1) = vbCr Then
sRet = Left(sRet, Len(sRet) - 1)
End If
End If
If IsNumeric(sRet) Then
GetSQLOutputToInt = CInt(sRet)
End If
End If
End Function
' *************************
' * GetSQLOutputToBoolean *
' *************************
Function GetSQLOutputToBoolean(sSql)
GetSQLOutputToBoolean = 0
Dim sRet, sRS
Context.NotifyProgress sSql
Set sRS = oDB.Execute(sSql)
If Not sRS.EOF And Not sRS.BOF Then
sRet = Trim(sRS.GetString)
If Len(sRet) > 0 Then
If Right(sRet, 1) = vbCr Then
sRet = Left(sRet, Len(sRet) - 1)
End If
End If
If Len(sRet) > 0 Then
GetSQLOutputToBoolean = CBool(sRet)
End If
End If
End Function
' ************************
' * GetSQLOutputToString *
' ************************
Function GetSQLOutputToString(sSql)
GetSQLOutputToString = 0
Dim sRet, sRS
Context.NotifyProgress sSql
Set sRS = oDB.Execute(sSql)
If Not sRS.EOF And Not sRS.BOF Then
sRet = Trim(sRS.GetString)
If Right(sRet, 1) = vbCr Or Right(sRet, 1) = vbLf Then
sRet = Left(sRet, Len(sRet) - 1)
End If
If Len(sRet) > 0 Then
GetSQLOutputToString = Trim(sRet)
End If
End If
End Function
' ******************
' * DisableMonitor *
' ******************
Sub DisableMonitor(nPivotID)
Dim sSql : sSql = "Update PivotActiveMonitorTypeToDevice set bDisabled = 1 where nPivotActiveMonitorTypeToDeviceID = " & nPivotID
If bDryRun = False Then 
Dim sRS : Set sRS = oDb.Execute(sSql)
Context.NotifyProgress sSql & " was run."
Else
Context.NotifyProgress sSql & " would have run"
End If
End Sub
' ******************
' * EnableMonitor *
' ******************
Sub EnableMonitor(nPivotID)
Dim sSql : sSql = "Update PivotActiveMonitorTypeToDevice set bDisabled = 0 where nPivotActiveMonitorTypeToDeviceID = " & nPivotID
If bDryRun = False Then 
Dim sRS : Set sRS = oDb.Execute(sSql)
Context.NotifyProgress sSql & " was run."
Else
Context.NotifyProgress sSql & " would have run"
End If
End Sub
' *******************
' * SendChangeEvent *
' *******************
Sub SendChangeEvent(nDeviceID)
'Variables for device change event
Const DCT_MODIFIED = 2
Const DCIT_DEVICE  = 1
If bDryRun = False Then 
oEvent.SendChangeEvent DCT_MODIFIED, nDeviceID, DCIT_DEVICE
Context.NotifyProgress nDeviceID & " was sent a change event."
Else
Context.NotifyProgress nDeviceID & " would have been sent a change event."
End If
End Sub

Share This Post

More To Explore

WhatsUp Gold

WhatsUp Gold Tip #3: Monitor your systems

Focus on what is important It’s nice to have detailed monitoring information for every system on your network, but if a non-critical system is unavailable

Blog Posts

WhatsUp Gold Tip #2: Discover your systems

Introduction When you finish adding your credentials to WhatsUp Gold, the next step to success is configuring the discovery process in WhatsUp Gold to work for you.

credentials
Blog Posts

WhatsUp Gold Tip #1: Add your credentials first

Introduction Following installation, the first step to success is adding credentials for your infrastructure. WhatsUp Gold Network Monitoring and Log Management is an agentless solution