Example of a script that uses baselines
The following is an example of a script that includes multiple monitors and baselines:
Manifest = {
'Name': 'single_interface_tx_rx_stats_monitor',
'Description': 'Policy to monitor tx/rx packets stats of a interface',
'Version': '2.0',
'Author': 'Aruba Networks'
}
ParameterDefinitions = {
'interface_id': {
'Name': 'Interface Id',
'Description': 'Interface to be monitored',
'Type': 'string',
'Default': '1/1/1'
}
}
class Agent(NAE):
def __init__(self):
# algorithm for dynamic Threshold calculation
self.alg = MaxAlgorithm(continuous_learning_window="10m")
# rx packets
uri1 = '/rest/v1/system/interfaces/{}?attributes=statistics.rx_packets'
rate_m1 = Rate(uri1, "10 seconds", [self.params['interface_id']])
self.m1 = Monitor(
rate_m1,
'Rx Packets (packets per second)')
self.r1 = Rule('Rule for Monitor Interface rx Packets')
title1 = Title("Baseline for Interface rx Packets")
self.baseline1 = Baseline(self.m1, algorithm=self.alg, title=title1,
high_threshold_factor=2,
low_threshold_factor=1.2,
initial_learning_time='1d')
self.r1.condition('{} > {}', [self.m1, self.baseline1])
self.r1.clear_condition('{} < {}', [self.m1, self.baseline1])
self.r1.action("ALERT_LEVEL", AlertLevel.CRITICAL)
self.r1.clear_action("ALERT_LEVEL", AlertLevel.NONE)
# rx packets dropped
uri2 = '/rest/v1/system/interfaces/{}?attributes=statistics.rx_dropped'
self.m2 = Monitor(
uri2,
'Rx Packets Dropped (packets)',
[self.params['interface_id']])
# tx packets
uri3 = '/rest/v1/system/interfaces/{}?attributes=statistics.tx_packets'
rate_m3 = Rate(uri3, "10 seconds", [self.params['interface_id']])
self.m3 = Monitor(
rate_m3,
'Tx Packets (packets per second)')
self.r3 = Rule('Rule for Monitor Interface tx Packets')
title3 = Title("Baseline for Interface tx Packets")
self.baseline3 = Baseline(self.m3, algorithm=self.alg, title=title3,
high_threshold_factor=2,
low_threshold_factor=1.2,
initial_learning_time='1d')
self.r3.condition('{} > {}', [self.m3, self.baseline3])
self.r3.clear_condition('{} < {}', [self.m3, self.baseline3])
self.r3.action("ALERT_LEVEL", AlertLevel.CRITICAL)
self.r3.clear_action("ALERT_LEVEL", AlertLevel.NONE)
# tx packets dropped
uri4 = '/rest/v1/system/interfaces/{}?attributes=statistics.tx_dropped'
self.m4 = Monitor(
uri4,
'Tx Packets Dropped (packets)',
[self.params['interface_id']])