Collection of CheckMK checks (see https://checkmk.com/). All checks and plugins are provided as is. Absolutely no warranty. Send any comments to thl-cmk[at]outlook[dot]com

Skip to content
Snippets Groups Projects
Commit 1577da1d authored by thl-cmk's avatar thl-cmk :flag_na:
Browse files

update project

parent fc5b9a2e
No related branches found
No related tags found
No related merge requests found
......@@ -19,7 +19,7 @@
# 02.11.2018: modified scanfunction (from "find 'cisco' =-1" to "'cisco' in OID"
# 02.18.2019: added fix for empty values ("" instead of "0") sugested by Laurent Barbier (lbarbier[at]arkane-studios[dot]com)
# 24.02.2020: added workaround for missing cbgpPeer2AddrFamily (example L2VPN EVPN peers, Fix for jonale82[at]gmail[dot]com)
#
# 02.03.2020: changed handling of perfdata, add only data the are really there (not None, instead of setting them to 0)
#
#
......@@ -263,7 +263,6 @@ def parse_cisco_bgp_peer(info):
return names[int(byte1, 16)].get(int(byte2, 16))
# bgp not active
if info == [[], []]:
return None
......@@ -277,64 +276,34 @@ def parse_cisco_bgp_peer(info):
oid_end, addrfamilyname, acceptedprefixes, deniedprefixes, prefixadminlimit, prefixthreshold, \
prefixclearthreshold, advertisedprefixes, suppressedprefixes, withdrawnprefixes = entry
remoteaddr = cisco_bgp_get_peer(oid_end)
remoteaddr = cisco_bgp_get_peer(entry[0])
peer = {'remoteaddr': remoteaddr}
peer.update({'addrfamilyname': addrfamilyname})
# check if prefixadminlimit is set
if prefixadminlimit.isdigit():
prefixadminlimit = int(prefixadminlimit)
else:
prefixadminlimit = 0
peer.update({'prefixadminlimit':int(prefixadminlimit)})
# check if prefixthreshold is set
if prefixthreshold.isdigit():
prefixthreshold = int(prefixthreshold)
else:
prefixthreshold = 0
peer.update({'prefixthreshold':int(prefixthreshold)})
# check if prefixclearthreshold is set
if prefixclearthreshold.isdigit():
prefixclearthreshold = int(prefixclearthreshold)
else:
prefixclearthreshold = 0
peer.update({'prefixclearthreshold':int(prefixclearthreshold)})
if acceptedprefixes.isdigit():
acceptedprefixes = int(acceptedprefixes)
else:
acceptedprefixes = 0
peer.update({'acceptedprefixes':int(acceptedprefixes)})
if advertisedprefixes.isdigit():
advertisedprefixes = int(advertisedprefixes)
else:
advertisedprefixes = 0
peer.update({'advertisedprefixes':int(advertisedprefixes)})
# fix sugested by Laurent Barbier (lbarbier[at]arkane-studios[dot]com)
# some Cisco devices report not "0" if the value is 0, instead the report "". for example Nexus devices behave like this.
if deniedprefixes.isdigit():
deniedprefixes = int(deniedprefixes)
else:
deniedprefixes = 0
peer.update({'deniedprefixes':int(deniedprefixes)})
if suppressedprefixes.isdigit():
suppressedprefixes = int(suppressedprefixes)
else:
suppressedprefixes = 0
peer.update({'suppressedprefixes':int(suppressedprefixes)})
if withdrawnprefixes.isdigit():
withdrawnprefixes = int(withdrawnprefixes)
else:
withdrawnprefixes = 0
peer = {'remoteaddr': remoteaddr,
'addrfamilyname': addrfamilyname,
'acceptedprefixes': acceptedprefixes,
'deniedprefixes': deniedprefixes,
'prefixadminlimit': prefixadminlimit,
'prefixthreshold': prefixthreshold,
'prefixclearthreshold': prefixclearthreshold,
'advertisedprefixes': advertisedprefixes,
'suppressedprefixes': suppressedprefixes,
'withdrawnprefixes': withdrawnprefixes, }
peer.update({'withdrawnprefixes':int(withdrawnprefixes)})
peer_prefixes.update({'%s %s' % (remoteaddr, addrfamilyname): peer})
......@@ -357,23 +326,35 @@ def parse_cisco_bgp_peer(info):
inupdateelapsedtime, lasterrortxt, prevstate = entry
peer = {'remoteaddr': cisco_bgp_get_peer(oid_end),
'state': int(state),
'adminstate': int(adminstatus),
'localaddr': bgp_render_ip_address(localaddr),
'localas': int(localas),
'localid': localidentifier,
'remoteas': int(remoteas),
'remoteid': remoteidentifier,
'inupdates': int(inupdates),
'outupdates': int(outupdates),
'intotalmessages': int(intotalmessages),
'outtotalmessages': int(outtotalmessages),
'lasterror': cisco_bgp_errors(lasterror),
'fsmestablishedtransitions': int(fsmestablishedtransitions),
'fsmestablishedtime': int(fsmestablishedtime),
'inupdateelapsedtime': inupdateelapsedtime,
'lasterrortxt': lasterrortxt,
'prevstate': int(prevstate),}
'prevstate': int(prevstate),
}
if state.isdigit():
peer.update({'state': int(state)})
if adminstatus.isdigit():
peer.update({'adminstate': int(adminstatus)})
if localas.isdigit():
peer.update({'localas': int(localas)})
if remoteas.isdigit():
peer.update({'remoteas': int(remoteas)})
if inupdates.isdigit():
peer.update({'inupdates':int(inupdates)})
if outupdates.isdigit():
peer.update({'outupdates': int(outupdates)})
if intotalmessages.isdigit():
peer.update({'intotalmessages': int(intotalmessages)})
if outtotalmessages.isdigit():
peer.update({'outtotalmessages': int(outtotalmessages)})
if fsmestablishedtransitions.isdigit():
peer.update({'fsmestablishedtransitions': int(fsmestablishedtransitions)})
if inupdates.isdigit():
peer.update({'fsmestablishedtime': int(fsmestablishedtime)})
peer_table.update({'%s' % cisco_bgp_get_peer(oid_end): peer})
......@@ -442,7 +423,7 @@ def check_cisco_bgp_peer(item, params, parsed):
peer_not_found_state = not_found_state
if prefixes:
state = 0
# state = 0
perfdata = []
infotext = ''
longoutput = ''
......@@ -496,11 +477,6 @@ def check_cisco_bgp_peer(item, params, parsed):
else:
bgptype = ' (eBGP)'
acceptedprefixes = prefixes.get('acceptedprefixes', 0)
prefixadminlimit = prefixes.get('prefixadminlimit', 0)
prefixthreshold = prefixes.get('prefixthreshold', 0)
warnthreshold = prefixadminlimit / 100.0 * prefixthreshold # use float (100.0) to get xx.xx in division
longoutput_data = [
['IP-address (remote/local)', peer.get('remoteaddr'), peer.get('localaddr')],
['Router-ID (remote/local)', peer.get('remoteid'), peer.get('localid')],
......@@ -511,11 +487,20 @@ def check_cisco_bgp_peer(item, params, parsed):
['Last error text', peer.get('lasterrortxt'), ''],
['Previous state', cisco_bgp_peerstate(peer.get('prevstate')), ''],
['Address family name', prefixes.get('addrfamilyname', 'unknown'), ''],
['Prefix admin limit (prefixes)', '%.0d' % prefixadminlimit, ''],
['Prefix threshold (prefixes/%)', '%.0d' % warnthreshold, '%.0d' % prefixthreshold],
['Prefix clear threshold (%)', '%.0d' % prefixes.get('prefixclearthreshold', 0), '']
,
]
acceptedprefixes = prefixes.get('acceptedprefixes', None)
prefixadminlimit = prefixes.get('prefixadminlimit', None)
prefixthreshold = prefixes.get('prefixthreshold', None)
if prefixadminlimit is not None and prefixthreshold is not None:
warnthreshold = prefixadminlimit / 100.0 * prefixthreshold # use float (100.0) to get xx.xx in division
longoutput_data.append(['Prefix admin limit (prefixes)', '%.0d' % prefixadminlimit, ''])
longoutput_data.append(['Prefix threshold (prefixes/%)', '%.0d' % warnthreshold, '%.0d' % prefixthreshold])
else:
warnthreshold = None
if params.get('htmloutput', False):
#
# disable 'Escape HTML codes in plugin output' in wato --> global settings
......@@ -535,49 +520,52 @@ def check_cisco_bgp_peer(item, params, parsed):
else:
longoutput += '\n{}: {}'.format(entry[0], entry[1])
if prefixadminlimit > 0:
if prefixadminlimit is not None and acceptedprefixes is not None and prefixadminlimit is not None and warnthreshold is not None:
if acceptedprefixes >= prefixadminlimit:
state = max(2, state)
infotext = 'Prefix admin limit reached(!!) ' + infotext
yield 2, 'Prefix admin limit reached (%d/%d)' % (acceptedprefixes, prefixadminlimit)
elif prefixthreshold > 0:
perfdata.append(('acceptedprefixes', acceptedprefixes, warnthreshold, prefixadminlimit))
if acceptedprefixes >= warnthreshold:
state = max(1, state)
infotext = 'Prefix warn threshold reached(!) ' + infotext
yield 1, 'Prefix warn threshold reached (%d/%d)' % (acceptedprefixes, warnthreshold)
else:
perfdata.append(('acceptedprefixes', acceptedprefixes, '', prefixadminlimit))
else:
elif acceptedprefixes is not None:
perfdata.append(('acceptedprefixes', acceptedprefixes))
now_time = time.time()
rate_item = item.replace(' ', '_')
deniedprefixes = get_rate('cisco_bgp_peer.%s.%s' % ('deniedprefixes', rate_item), now_time, prefixes.get('deniedprefixes', 0), onwrap=SKIP)
advertisedprefixes = get_rate('cisco_bgp_peer.%s.%s' % ('advertisedprefixes', rate_item), now_time, prefixes.get('advertisedprefixes', 0), onwrap=SKIP)
withdrawnprefixes = get_rate('cisco_bgp_peer.%s.%s' % ('withdrawnprefixes', rate_item), now_time, prefixes.get('withdrawnprefixes', 0), onwrap=SKIP)
suppressedprefixes = get_rate('cisco_bgp_peer.%s.%s' % ('suppressedprefixes', rate_item), now_time, prefixes.get('suppressedprefixes', 0), onwrap=SKIP)
inupdates = get_rate('cisco_bgp_peer.%s.%s' % ('inupdates', rate_item), now_time, peer.get('inupdates', 0), onwrap=SKIP)
outupdates = get_rate('cisco_bgp_peer.%s.%s' % ('outupdates', rate_item), now_time, peer.get('outupdates', 0), onwrap=SKIP)
intotalmessages = get_rate('cisco_bgp_peer.%s.%s' % ('intotalmessages', rate_item), now_time, peer.get('intotalmessages', 0), onwrap=SKIP)
outtotalmessages = get_rate('cisco_bgp_peer.%s.%s' % ('outtotalmessages', rate_item), now_time, peer.get('outtotalmessages', 0), onwrap=SKIP)
# prefixes
# 'unit', <value>, <warn-at>, <crit-at>, <min value>, <max value>
perfdata.append(('deniedprefixes', deniedprefixes))
perfdata.append(('advertisedprefixes', advertisedprefixes))
perfdata.append(('withdrawnprefixes', withdrawnprefixes))
perfdata.append(('suppressedprefixes', suppressedprefixes))
perfdata.append(('inupdates', inupdates))
perfdata.append(('outupdates', outupdates))
perfdata.append(('intotalmessages', intotalmessages))
perfdata.append(('outtotalmessages', outtotalmessages))
perfdata.append(('fsmestablishedtransitions', peer.get('fsmestablishedtransitions')))
perfdata.append(('fsmestablishedtime', peer.get('fsmestablishedtime')))
perfdata.append(('inupdateelapsedtime', peer.get('inupdateelapsedtime')))
if prefixes.get('deniedprefixes', None) is not None:
deniedprefixes = get_rate('cisco_bgp_peer.%s.%s' % ('deniedprefixes', rate_item), now_time, prefixes.get('deniedprefixes', 0), onwrap=SKIP)
perfdata.append(('deniedprefixes', deniedprefixes))
if prefixes.get('advertisedprefixes', None) is not None:
advertisedprefixes = get_rate('cisco_bgp_peer.%s.%s' % ('advertisedprefixes', rate_item), now_time, prefixes.get('advertisedprefixes', 0), onwrap=SKIP)
perfdata.append(('advertisedprefixes', advertisedprefixes))
if prefixes.get('withdrawnprefixes', None) is not None:
withdrawnprefixes = get_rate('cisco_bgp_peer.%s.%s' % ('withdrawnprefixes', rate_item), now_time, prefixes.get('withdrawnprefixes', 0), onwrap=SKIP)
perfdata.append(('withdrawnprefixes', withdrawnprefixes))
if prefixes.get('suppressedprefixes', None) is not None:
suppressedprefixes = get_rate('cisco_bgp_peer.%s.%s' % ('suppressedprefixes', rate_item), now_time, prefixes.get('suppressedprefixes', 0), onwrap=SKIP)
perfdata.append(('suppressedprefixes', suppressedprefixes))
if peer.get('inupdates', None) is not None:
inupdates = get_rate('cisco_bgp_peer.%s.%s' % ('inupdates', rate_item), now_time, peer.get('inupdates', 0), onwrap=SKIP)
perfdata.append(('inupdates', inupdates))
if peer.get('outupdates', None) is not None:
outupdates = get_rate('cisco_bgp_peer.%s.%s' % ('outupdates', rate_item), now_time, peer.get('outupdates', 0), onwrap=SKIP)
perfdata.append(('outupdates', outupdates))
if peer.get('intotalmessages', None) is not None:
intotalmessages = get_rate('cisco_bgp_peer.%s.%s' % ('intotalmessages', rate_item), now_time, peer.get('intotalmessages', 0), onwrap=SKIP)
perfdata.append(('intotalmessages', intotalmessages))
if peer.get('outtotalmessages', None) is not None:
outtotalmessages = get_rate('cisco_bgp_peer.%s.%s' % ('outtotalmessages', rate_item), now_time, peer.get('outtotalmessages', 0), onwrap=SKIP)
perfdata.append(('outtotalmessages', outtotalmessages))
if peer.get('fsmestablishedtransitions', None) is not None:
perfdata.append(('fsmestablishedtransitions', peer.get('fsmestablishedtransitions')))
if peer.get('fsmestablishedtime', None) is not None:
perfdata.append(('fsmestablishedtime', peer.get('fsmestablishedtime')))
if peer.get('inupdateelapsedtime', None) is not None:
perfdata.append(('inupdateelapsedtime', peer.get('inupdateelapsedtime')))
if infotext[0:2] == ', ':
infotext = infotext[2:]
......
No preview for this file type
......@@ -7,6 +7,6 @@
'name': 'cisco_bgp_peer',
'num_files': 3,
'title': u'Cisco BGP Peer',
'version': '20200224.v.0.2c',
'version': '20200302.v.0.2d',
'version.min_required': '1.2.8b8',
'version.packaged': '1.4.0p35'}
\ No newline at end of file
'version.packaged': '1.4.0p38'}
\ No newline at end of file
......@@ -68,19 +68,22 @@ register_check_parameters(
title=('BGP Peers'),
elements=[
TextUnicode(
title=_('BGP Peer object name'),
help=_('The configured value must match a BGP peer reported by the monitored '
'device.'),
title=_('BGP Peer item name'),
help=_('The configured value must match a BGP item reported by the monitored '
'device. For example: "10.194.115.98 IPv4 Unicast"'),
allow_empty=False,
),
TextUnicode(
title=_('BGP Peer Alias'),
help=_('You can configure an individual alias here for the BGP peer matching '
'the IP-Address configured in the field above.'),
'the text configured in the "BGP Peer item name" field. The alias will '
'be shown in the infotext'),
),
MonitoringState(
default_value=2,
title=_('State if BGP peer is not found'),
title=_('State if not found'),
help=_('You can configure an individual state if the BGP peer matching the text '
'configured in the "BGP Peer item name" field is not found')
)]),
add_label=_('Add BGP peer'),
movable=False,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment