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 @@
# 29.05.2018: fixed longoutpout (removed not configured)
# 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)
#
#
#
......@@ -208,8 +210,8 @@ def parse_cisco_bgp_peer(info):
peer_ip = ''
OID_END = OID_END.split('.')
if int(OID_END[1]) == 4: # length of ip address
peer_ip = '.'.join(OID_END[2:6]) # ip v4 address
elif int(OID_END[1]) == 16:
peer_ip = '.'.join(OID_END[2:6]) # ipv4 address
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 = bgp_shorten_ipv6_adress(peer_ip)
......@@ -261,81 +263,95 @@ def parse_cisco_bgp_peer(info):
return names[int(byte1, 16)].get(int(byte2, 16))
# bgp not active
if info == [[], []]:
return None
cbgpPeer2Table, cbgpPeer2AddrFamily = info
cbgpPeer2Entry, cbgpPeer2AddrFamily = info
peer_prefixes = {}
# create dictionary from cbgpPeer2AddrFamily ('remoteip addrfamilyname' as index)
for entry in cbgpPeer2AddrFamily:
oid_end, addrfamilyname, acceptedprefixes, deniedprefixes, prefixadminlimit, prefixthreshold, \
prefixclearthreshold, advertisedprefixes, suppressedprefixes, withdrawnprefixes = entry
if len(cbgpPeer2AddrFamily) > 0 :
for entry in cbgpPeer2AddrFamily:
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
if prefixadminlimit.isdigit():
prefixadminlimit = int(prefixadminlimit)
else:
prefixadminlimit = 0
# check if prefixadminlimit is set
if prefixadminlimit.isdigit():
prefixadminlimit = int(prefixadminlimit)
else:
prefixadminlimit = 0
# check if prefixthreshold is set
if prefixthreshold.isdigit():
prefixthreshold = int(prefixthreshold)
else:
prefixthreshold = 0
# check if prefixthreshold is set
if prefixthreshold.isdigit():
prefixthreshold = int(prefixthreshold)
else:
prefixthreshold = 0
# check if prefixclearthreshold is set
if prefixclearthreshold.isdigit():
prefixclearthreshold = int(prefixclearthreshold)
else:
prefixclearthreshold = 0
# check if prefixclearthreshold is set
if prefixclearthreshold.isdigit():
prefixclearthreshold = int(prefixclearthreshold)
else:
prefixclearthreshold = 0
if acceptedprefixes.isdigit():
acceptedprefixes = int(acceptedprefixes)
else:
acceptedprefixes = 0
if acceptedprefixes.isdigit():
acceptedprefixes = int(acceptedprefixes)
else:
acceptedprefixes = 0
if advertisedprefixes.isdigit():
advertisedprefixes = int(advertisedprefixes)
else:
advertisedprefixes = 0
if advertisedprefixes.isdigit():
advertisedprefixes = int(advertisedprefixes)
else:
advertisedprefixes = 0
# 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
# 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
if suppressedprefixes.isdigit():
suppressedprefixes = int(suppressedprefixes)
else:
suppressedprefixes = 0
if suppressedprefixes.isdigit():
suppressedprefixes = int(suppressedprefixes)
else:
suppressedprefixes = 0
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_prefixes.update({'%s %s' % (remoteaddr, addrfamilyname): peer})
# create dictionary from cbgpPeer2Table (peer ip address as index)
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_prefixes.update({'%s %s' % (remoteaddr, addrfamilyname): peer})
# 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 = {}
for entry in cbgpPeer2Table:
for entry in cbgpPeer2Entry:
oid_end, state, adminstatus, localaddr, localas, localidentifier, remoteas, remoteidentifier, inupdates, \
outupdates, intotalmessages, outtotalmessages, lasterror, fsmestablishedtransitions, fsmestablishedtime, \
inupdateelapsedtime, lasterrortxt, prevstate = entry
......@@ -494,10 +510,10 @@ def check_cisco_bgp_peer(item, params, parsed):
['Last error', peer.get('lasterror'), ''],
['Last error text', peer.get('lasterrortxt'), ''],
['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 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):
......@@ -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]))
else:
longoutput += '\nfor nicer output' \
'\ndisable \'Escape HTML codes in plugin output\' in wato --> global settings and' \
'\nenable HTML output in \'Parameters for this service\''
'\ndisable \'Escape HTML codes in plugin output\' in wato --> global settings and enable HTML output in \'Parameters for this service\''
for entry in longoutput_data:
if not entry[2] == '':
longoutput += '\n{}: {} / {}'.format(entry[0], entry[1], entry[2])
......@@ -537,16 +552,16 @@ def check_cisco_bgp_peer(item, params, parsed):
now_time = time.time()
rate_item = item.replace(' ', '_')
deniedprefixes = get_rate('cisco_bgp_peer.%s.%s' % ('deniedprefixes', rate_item), now_time, prefixes.get('deniedprefixes'), onwrap=SKIP)
advertisedprefixes = get_rate('cisco_bgp_peer.%s.%s' % ('advertisedprefixes', rate_item), now_time, prefixes.get('advertisedprefixes'), onwrap=SKIP)
withdrawnprefixes = get_rate('cisco_bgp_peer.%s.%s' % ('withdrawnprefixes', rate_item), now_time, prefixes.get('withdrawnprefixes'), onwrap=SKIP)
suppressedprefixes = get_rate('cisco_bgp_peer.%s.%s' % ('suppressedprefixes', rate_item), now_time, prefixes.get('suppressedprefixes'), 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', 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'), onwrap=SKIP)
outupdates = get_rate('cisco_bgp_peer.%s.%s' % ('outupdates', rate_item), now_time, peer.get('outupdates'), 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'), onwrap=SKIP)
outtotalmessages = get_rate('cisco_bgp_peer.%s.%s' % ('outtotalmessages', rate_item), now_time, peer.get('outtotalmessages'), 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>
......@@ -593,7 +608,7 @@ check_info['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_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,
'3', # cbgpPeer2State
'4', # cbgpPeer2AdminStatus
......@@ -627,5 +642,6 @@ check_info['cisco_bgp_peer'] = {
'8.1.7', # cbgpPeer2SuppressedPrefixes
'8.1.8', # cbgpPeer2WithdrawnPrefixes
]),
]
]
}
No preview for this file type
......@@ -7,6 +7,6 @@
'name': 'cisco_bgp_peer',
'num_files': 3,
'title': u'Cisco BGP Peer',
'version': '20190218.v.0.2b',
'version': '20200224.v.0.2c',
'version.min_required': '1.2.8b8',
'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