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 3dc1e60c authored by thl-cmk's avatar thl-cmk :flag_na:
Browse files

update project

parent 882a6b11
No related branches found
No related tags found
No related merge requests found
...@@ -18,6 +18,8 @@ ...@@ -18,6 +18,8 @@
# 29.05.2018: fixed longoutpout (removed not configured) # 29.05.2018: fixed longoutpout (removed not configured)
# 02.11.2018: modified scanfunction (from "find 'cisco' =-1" to "'cisco' in OID" # 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) # 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)
#
# #
# #
...@@ -208,8 +210,8 @@ def parse_cisco_bgp_peer(info): ...@@ -208,8 +210,8 @@ def parse_cisco_bgp_peer(info):
peer_ip = '' peer_ip = ''
OID_END = OID_END.split('.') OID_END = OID_END.split('.')
if int(OID_END[1]) == 4: # length of ip address if int(OID_END[1]) == 4: # length of ip address
peer_ip = '.'.join(OID_END[2:6]) # ip v4 address peer_ip = '.'.join(OID_END[2:6]) # ipv4 address
elif int(OID_END[1]) == 16: elif int(OID_END[1]) == 16: # ipv6 address
peer_ip = ':'.join('%02s' % hex(int(m))[2:] for m in OID_END[2:18]).replace(' ', '0').upper() peer_ip = ':'.join('%02s' % hex(int(m))[2:] for m in OID_END[2:18]).replace(' ', '0').upper()
peer_ip = bgp_shorten_ipv6_adress(peer_ip) peer_ip = bgp_shorten_ipv6_adress(peer_ip)
...@@ -261,81 +263,95 @@ def parse_cisco_bgp_peer(info): ...@@ -261,81 +263,95 @@ def parse_cisco_bgp_peer(info):
return names[int(byte1, 16)].get(int(byte2, 16)) return names[int(byte1, 16)].get(int(byte2, 16))
# bgp not active # bgp not active
if info == [[], []]: if info == [[], []]:
return None return None
cbgpPeer2Table, cbgpPeer2AddrFamily = info cbgpPeer2Entry, cbgpPeer2AddrFamily = info
peer_prefixes = {} peer_prefixes = {}
# create dictionary from cbgpPeer2AddrFamily ('remoteip addrfamilyname' as index) # create dictionary from cbgpPeer2AddrFamily ('remoteip addrfamilyname' as index)
for entry in cbgpPeer2AddrFamily: if len(cbgpPeer2AddrFamily) > 0 :
oid_end, addrfamilyname, acceptedprefixes, deniedprefixes, prefixadminlimit, prefixthreshold, \ for entry in cbgpPeer2AddrFamily:
prefixclearthreshold, advertisedprefixes, suppressedprefixes, withdrawnprefixes = entry oid_end, addrfamilyname, acceptedprefixes, deniedprefixes, prefixadminlimit, prefixthreshold, \
prefixclearthreshold, advertisedprefixes, suppressedprefixes, withdrawnprefixes = entry
remoteaddr = cisco_bgp_get_peer(oid_end) remoteaddr = cisco_bgp_get_peer(oid_end)
# check if prefixadminlimit is set # check if prefixadminlimit is set
if prefixadminlimit.isdigit(): if prefixadminlimit.isdigit():
prefixadminlimit = int(prefixadminlimit) prefixadminlimit = int(prefixadminlimit)
else: else:
prefixadminlimit = 0 prefixadminlimit = 0
# check if prefixthreshold is set # check if prefixthreshold is set
if prefixthreshold.isdigit(): if prefixthreshold.isdigit():
prefixthreshold = int(prefixthreshold) prefixthreshold = int(prefixthreshold)
else: else:
prefixthreshold = 0 prefixthreshold = 0
# check if prefixclearthreshold is set # check if prefixclearthreshold is set
if prefixclearthreshold.isdigit(): if prefixclearthreshold.isdigit():
prefixclearthreshold = int(prefixclearthreshold) prefixclearthreshold = int(prefixclearthreshold)
else: else:
prefixclearthreshold = 0 prefixclearthreshold = 0
if acceptedprefixes.isdigit(): if acceptedprefixes.isdigit():
acceptedprefixes = int(acceptedprefixes) acceptedprefixes = int(acceptedprefixes)
else: else:
acceptedprefixes = 0 acceptedprefixes = 0
if advertisedprefixes.isdigit(): if advertisedprefixes.isdigit():
advertisedprefixes = int(advertisedprefixes) advertisedprefixes = int(advertisedprefixes)
else: else:
advertisedprefixes = 0 advertisedprefixes = 0
# fix sugested by Laurent Barbier (lbarbier[at]arkane-studios[dot]com) # 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. # some Cisco devices report not "0" if the value is 0, instead the report "". for example Nexus devices behave like this.
if deniedprefixes.isdigit(): if deniedprefixes.isdigit():
deniedprefixes = int(deniedprefixes) deniedprefixes = int(deniedprefixes)
else: else:
deniedprefixes = 0 deniedprefixes = 0
if suppressedprefixes.isdigit(): if suppressedprefixes.isdigit():
suppressedprefixes = int(suppressedprefixes) suppressedprefixes = int(suppressedprefixes)
else: else:
suppressedprefixes = 0 suppressedprefixes = 0
if withdrawnprefixes.isdigit(): if withdrawnprefixes.isdigit():
withdrawnprefixes = int(withdrawnprefixes) withdrawnprefixes = int(withdrawnprefixes)
else: else:
withdrawnprefixes = 0 withdrawnprefixes = 0
peer = {'remoteaddr': remoteaddr,
'addrfamilyname': addrfamilyname, peer = {'remoteaddr': remoteaddr,
'acceptedprefixes': acceptedprefixes, 'addrfamilyname': addrfamilyname,
'deniedprefixes': deniedprefixes, 'acceptedprefixes': acceptedprefixes,
'prefixadminlimit': prefixadminlimit, 'deniedprefixes': deniedprefixes,
'prefixthreshold': prefixthreshold, 'prefixadminlimit': prefixadminlimit,
'prefixclearthreshold': prefixclearthreshold, 'prefixthreshold': prefixthreshold,
'advertisedprefixes': advertisedprefixes, 'prefixclearthreshold': prefixclearthreshold,
'suppressedprefixes': suppressedprefixes, 'advertisedprefixes': advertisedprefixes,
'withdrawnprefixes': withdrawnprefixes, } 'suppressedprefixes': suppressedprefixes,
'withdrawnprefixes': withdrawnprefixes, }
peer_prefixes.update({'%s %s' % (remoteaddr, addrfamilyname): peer})
peer_prefixes.update({'%s %s' % (remoteaddr, addrfamilyname): peer})
# create dictionary from cbgpPeer2Table (peer ip address as index)
# workaround: get remote ip from cbgpPeer2Entry if cbgpPeer2AddrFamilyName is missing :-(
elif len(cbgpPeer2Entry) > 0:
for entry in cbgpPeer2Entry:
remoteaddr = cisco_bgp_get_peer(entry[0])
addrfamilyname = ''
peer = {'remoteaddr': remoteaddr,
}
peer_prefixes.update({'%s %s' % (remoteaddr, addrfamilyname): peer})
# create dictionary from cbgpPeer2Entry (peer ip address as index)
peer_table = {} peer_table = {}
for entry in cbgpPeer2Table: for entry in cbgpPeer2Entry:
oid_end, state, adminstatus, localaddr, localas, localidentifier, remoteas, remoteidentifier, inupdates, \ oid_end, state, adminstatus, localaddr, localas, localidentifier, remoteas, remoteidentifier, inupdates, \
outupdates, intotalmessages, outtotalmessages, lasterror, fsmestablishedtransitions, fsmestablishedtime, \ outupdates, intotalmessages, outtotalmessages, lasterror, fsmestablishedtransitions, fsmestablishedtime, \
inupdateelapsedtime, lasterrortxt, prevstate = entry inupdateelapsedtime, lasterrortxt, prevstate = entry
...@@ -494,10 +510,10 @@ def check_cisco_bgp_peer(item, params, parsed): ...@@ -494,10 +510,10 @@ def check_cisco_bgp_peer(item, params, parsed):
['Last error', peer.get('lasterror'), ''], ['Last error', peer.get('lasterror'), ''],
['Last error text', peer.get('lasterrortxt'), ''], ['Last error text', peer.get('lasterrortxt'), ''],
['Previous state', cisco_bgp_peerstate(peer.get('prevstate')), ''], ['Previous state', cisco_bgp_peerstate(peer.get('prevstate')), ''],
['Address family name', prefixes.get('addrfamilyname'), ''], ['Address family name', prefixes.get('addrfamilyname', 'unknown'), ''],
['Prefix admin limit (prefixes)', '%.0d' % prefixadminlimit, ''], ['Prefix admin limit (prefixes)', '%.0d' % prefixadminlimit, ''],
['Prefix threshold (prefixes/%)', '%.0d' % warnthreshold, '%.0d' % prefixthreshold], ['Prefix threshold (prefixes/%)', '%.0d' % warnthreshold, '%.0d' % prefixthreshold],
['Prefix clear threshold (%)', '%.0d' % prefixes.get('prefixclearthreshold'), ''] ['Prefix clear threshold (%)', '%.0d' % prefixes.get('prefixclearthreshold', 0), '']
] ]
if params.get('htmloutput', False): if params.get('htmloutput', False):
...@@ -512,8 +528,7 @@ def check_cisco_bgp_peer(item, params, parsed): ...@@ -512,8 +528,7 @@ def check_cisco_bgp_peer(item, params, parsed):
longoutput = '\n' + table_bracket % (''.join([line_bracket % cell_seperator.join([cell_bracket % (entry[0], entry[1], entry[2])]) for entry in longoutput_data])) longoutput = '\n' + table_bracket % (''.join([line_bracket % cell_seperator.join([cell_bracket % (entry[0], entry[1], entry[2])]) for entry in longoutput_data]))
else: else:
longoutput += '\nfor nicer output' \ longoutput += '\nfor nicer output' \
'\ndisable \'Escape HTML codes in plugin output\' in wato --> global settings and' \ '\ndisable \'Escape HTML codes in plugin output\' in wato --> global settings and enable HTML output in \'Parameters for this service\''
'\nenable HTML output in \'Parameters for this service\''
for entry in longoutput_data: for entry in longoutput_data:
if not entry[2] == '': if not entry[2] == '':
longoutput += '\n{}: {} / {}'.format(entry[0], entry[1], entry[2]) longoutput += '\n{}: {} / {}'.format(entry[0], entry[1], entry[2])
...@@ -537,16 +552,16 @@ def check_cisco_bgp_peer(item, params, parsed): ...@@ -537,16 +552,16 @@ def check_cisco_bgp_peer(item, params, parsed):
now_time = time.time() now_time = time.time()
rate_item = item.replace(' ', '_') rate_item = item.replace(' ', '_')
deniedprefixes = get_rate('cisco_bgp_peer.%s.%s' % ('deniedprefixes', rate_item), now_time, prefixes.get('deniedprefixes'), onwrap=SKIP) 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'), 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'), 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'), 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'), 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'), 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'), 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'), onwrap=SKIP) outtotalmessages = get_rate('cisco_bgp_peer.%s.%s' % ('outtotalmessages', rate_item), now_time, peer.get('outtotalmessages', 0), onwrap=SKIP)
# prefixes # prefixes
# 'unit', <value>, <warn-at>, <crit-at>, <min value>, <max value> # 'unit', <value>, <warn-at>, <crit-at>, <min value>, <max value>
...@@ -593,7 +608,7 @@ check_info['cisco_bgp_peer'] = { ...@@ -593,7 +608,7 @@ check_info['cisco_bgp_peer'] = {
'parse_function' : parse_cisco_bgp_peer, 'parse_function' : parse_cisco_bgp_peer,
'snmp_scan_function' : lambda oid: 'cisco'in oid('.1.3.6.1.2.1.1.1.0').lower(), 'snmp_scan_function' : lambda oid: 'cisco'in oid('.1.3.6.1.2.1.1.1.0').lower(),
'snmp_info' : [ 'snmp_info' : [
('.1.3.6.1.4.1.9.9.187.1.2.5.1', # cbgpPeer2Table ('.1.3.6.1.4.1.9.9.187.1.2.5.1', # CISCO-BGP4-MIB::cbgpPeer2Entry
[OID_END, [OID_END,
'3', # cbgpPeer2State '3', # cbgpPeer2State
'4', # cbgpPeer2AdminStatus '4', # cbgpPeer2AdminStatus
...@@ -627,5 +642,6 @@ check_info['cisco_bgp_peer'] = { ...@@ -627,5 +642,6 @@ check_info['cisco_bgp_peer'] = {
'8.1.7', # cbgpPeer2SuppressedPrefixes '8.1.7', # cbgpPeer2SuppressedPrefixes
'8.1.8', # cbgpPeer2WithdrawnPrefixes '8.1.8', # cbgpPeer2WithdrawnPrefixes
]), ]),
] ]
} }
No preview for this file type
...@@ -7,6 +7,6 @@ ...@@ -7,6 +7,6 @@
'name': 'cisco_bgp_peer', 'name': 'cisco_bgp_peer',
'num_files': 3, 'num_files': 3,
'title': u'Cisco BGP Peer', 'title': u'Cisco BGP Peer',
'version': '20190218.v.0.2b', 'version': '20200224.v.0.2c',
'version.min_required': '1.2.8b8', 'version.min_required': '1.2.8b8',
'version.packaged': '1.4.0p35'} 'version.packaged': '1.4.0p35'}
\ No newline at end of file
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