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

update project

parent e86f1e38
No related branches found
No related tags found
No related merge requests found
#!/usr/bin/python
# -*- encoding: utf-8; py-indent-offset: 4 -*-
#
# Interface error details
#
# Author: Th.L.
# Date : 2020-04-03
#
# Monitor error details of ethernet like interfaces
# Please use only for troubleshooting purposes
#
#
# snmpwalk sample
#
# OMD[mysite]:~$ snmpwalk -v2c -c public isr-1100 -ObentU 1.3.6.1.2.1.10.7.10.1
#
#
# OMD[mysite]:~$ snmpwalk -v2c -c public isr-1100 -m EtherLike-MIB 1.3.6.1.2.1.10.7.10.1
#
#
# sample info
#
factory_settings['iferrordetails_defaults'] = {
'notFound': 3,
}
###########################################################################
#
# DATA Parser function
#
###########################################################################
def parse_iferrordetails(info):
def get_dot3StatsDuplexStatus(st):
name = {
1: 'unknown',
2: 'half duplex',
3: 'full duplex',
}
if st.isdigit():
return name.get(int(st), 'unkown')
else:
return 'no digit'
def get_dot3StatsRateControlAbility(st):
name = {
1: 'capable',
2: 'non capable',
}
if st.isdigit():
return name.get(int(st), 'unkown')
else:
return 'no digit'
def get_dot3StatsRateControlStatus(st):
name = {
1: 'off',
2: 'on',
3: 'unkown',
}
if st.isdigit():
return name.get(int(st), 'unkown')
else:
return 'no digit'
def get_ifOperStatus(st):
name = {
1: 'up',
2: 'down',
3: 'testing',
4: 'unknown',
5: 'dormant',
6: 'notPresent',
7: 'lowerLayerDown',
}
if st.isdigit():
return name.get(int(st), 'unkown')
else:
return 'no digit'
def get_short_if_name(st):
names = {'ethernet': 'Eth',
'fastethernet': 'Fa',
'gigabitethernet': 'Gi',
'tengigabitethernet': 'Te',
'fortygigabitethernet': 'Fo',
'hundredgigabitethernet': 'Hu',
'port-channel': 'Po',
'tunnel': 'Tu',
'loopback': 'Lo',
'wlan-gigabitethernet': 'Wlan-Gi',
}
for item in names.keys():
if st.lower().startswith(item):
st = st.lower().replace(item, names.get(item))
return st
errorDetailsList, interfaces = info
parsed = {}
for entry in errorDetailsList:
ifIndex, dot3StatsAlignmentErrors, dot3StatsFCSErrors, dot3StatsSingleCollisionFrames, \
dot3StatsMultipleCollisionFrames, dot3StatsSQETestErrors, dot3StatsDeferredTransmissions, \
dot3StatsLateCollisions, dot3StatsExcessiveCollisions, dot3StatsInternalMacTransmitErr, \
dot3StatsCarrierSenseErrors, dot3StatsFrameTooLongs, dot3StatsInternalMacReceiveErrors, \
dot3StatsSymbolErrors, dot3StatsDuplexStatus, dot3StatsRateControlAbility, \
dot3StatsRateControlStatus = entry
for interface in interfaces:
if ifIndex == interface[0]:
ifIndex, ifName, ifOperStatus = interface
if int(ifOperStatus) != 1:
dot3StatsDuplexStatus ='interface not up'
else:
dot3StatsDuplexStatus = get_dot3StatsDuplexStatus(dot3StatsDuplexStatus)
errorsDetails = {
'dot3StatsAlignmentErrors': int(dot3StatsAlignmentErrors),
'dot3StatsFCSErrors': int(dot3StatsFCSErrors),
'dot3StatsSingleCollisionFrames': int(dot3StatsSingleCollisionFrames),
'dot3StatsMultipleCollisionFrames': int(dot3StatsMultipleCollisionFrames),
'dot3StatsSQETestErrors': int(dot3StatsSQETestErrors),
'dot3StatsDeferredTransmissions': int(dot3StatsDeferredTransmissions),
'dot3StatsLateCollisions': int(dot3StatsLateCollisions),
'dot3StatsExcessiveCollisions': int(dot3StatsExcessiveCollisions),
'dot3StatsInternalMacTransmitErr': int(dot3StatsInternalMacTransmitErr),
'dot3StatsCarrierSenseErrors': int(dot3StatsCarrierSenseErrors),
'dot3StatsFrameTooLongs': int(dot3StatsFrameTooLongs),
'dot3StatsInternalMacReceiveErrors': int(dot3StatsInternalMacReceiveErrors),
'dot3StatsSymbolErrors': int(dot3StatsSymbolErrors),
'dot3StatsDuplexStatus': dot3StatsDuplexStatus,
'dot3StatsRateControlAbility': get_dot3StatsRateControlAbility(dot3StatsRateControlAbility),
'dot3StatsRateControlStatus': get_dot3StatsRateControlStatus(dot3StatsRateControlStatus),
'ifOperStatus': get_ifOperStatus(ifOperStatus),
}
parsed.update({'{}'.format(get_short_if_name(ifName)): errorsDetails})
return parsed
###########################################################################
#
# INVENTORY function
#
###########################################################################
def inventory_iferrordetails(parsed):
for entry in parsed.keys():
yield entry, {}
###########################################################################
#
# CHECK function
#
###########################################################################
def check_iferrordetails(item, params, parsed):
if item in parsed.keys():
errorDetails = parsed[item]
longoutput = ''
infotext = ''
perfdata = []
state = 0
infotext += 'Interface state: {}'.format(errorDetails['ifOperStatus'])
if errorDetails['ifOperStatus'].lower() == 'up':
infotext += ', duplex state: {}'.format(errorDetails['dot3StatsDuplexStatus'])
longoutput += '\nRate control: {}'.format( errorDetails['dot3StatsRateControlAbility'])
longoutput += '\nRate control state: {}'.format(errorDetails['dot3StatsRateControlStatus'])
perfdata = [
('dot3statsalignmenterrors', errorDetails['dot3StatsAlignmentErrors']),
('dot3statsfcserrors', errorDetails['dot3StatsFCSErrors']),
('dot3statssinglecollisionframes', errorDetails['dot3StatsSingleCollisionFrames']),
('dot3statsmultiplecollisionframes', errorDetails['dot3StatsMultipleCollisionFrames']),
('dot3statssqetesterrors', errorDetails['dot3StatsSQETestErrors']),
('dot3statsdeferredtransmissions', errorDetails['dot3StatsDeferredTransmissions']),
('dot3statslatecollisions', errorDetails['dot3StatsLateCollisions']),
('dot3statsexcessivecollisions', errorDetails['dot3StatsExcessiveCollisions']),
('dot3statsinternalmactransmiterr', errorDetails['dot3StatsInternalMacTransmitErr']),
('dot3statscarriersenseerrors', errorDetails['dot3StatsCarrierSenseErrors']),
('dot3statsframetoolongs', errorDetails['dot3StatsFrameTooLongs']),
('dot3statsinternalmacreceiveerrors', errorDetails['dot3StatsInternalMacReceiveErrors']),
('dot3statssymbolerrors', errorDetails['dot3StatsSymbolErrors']),
]
yield state, infotext + longoutput, perfdata
else:
yield params['notFound'], 'item missing'
###########################################################################
#
# CHECK info
#
###########################################################################
check_info['iferrordetails'] = {
'check_function': check_iferrordetails,
'inventory_function': inventory_iferrordetails,
'service_description': 'Error details %s',
'has_perfdata': True,
'snmp_scan_function': lambda oid: oid('.1.3.6.1.2.1.10.7.10.1.1') != '', # EtherLike-MIB::dot3PauseAdminMode
'group': 'iferrordetails',
'default_levels_variable': 'iferrordetails_defaults',
'parse_function': parse_iferrordetails,
'snmp_info': [('.1.3.6.1.2.1.10.7.2.1', [ # EtherLike-MIB::dot3StatsEntry
OID_END, # ifIndex
'2', # dot3StatsAlignmentErrors(2)
'3', # dot3StatsFCSErrors(3)
'4', # dot3StatsSingleCollisionFrames(4)
'5', # dot3StatsMultipleCollisionFrames(5)
'6', # dot3StatsSQETestErrors(6)
'7', # dot3StatsDeferredTransmissions(7)
'8', # dot3StatsLateCollisions(8)
'9', # dot3StatsExcessiveCollisions(9)
'10', # dot3StatsInternalMacTransmitErrors(10)
'11', # dot3StatsCarrierSenseErrors(11)
'13', # dot3StatsFrameTooLongs(13)
'16', # dot3StatsInternalMacReceiveErrors(16)
'18', # dot3StatsSymbolErrors(18)
'19', # dot3StatsDuplexStatus(19)
'20', # dot3StatsRateControlAbility(20)
'21', # dot3StatsRateControlStatus(21)
]),
('.1.3.6.1.2.1.2.2.1', ['1', # ifIndex
'2', # ifDescr
'8', # ifOperStatus
]),
]
}
File added
{'author': u'Th.L. (thl-cmk[at]outlook[dot]com)',
'description': u'Monitors interfaces error details\nPlease use only for troubleshooting purposes',
'download_url': 'https://thl-cmk.hopto.org',
'files': {'checks': ['iferrordetails'],
'web': ['plugins/metrics/iferrordetails.py']},
'name': 'iferrordetails',
'num_files': 2,
'title': u'CInterface error details',
'version': '20200403.v0.0.1',
'version.min_required': '1.2.8b8',
'version.packaged': '1.6.0p8'}
\ No newline at end of file
#!/usr/bin/python
# -*- encoding: utf-8; py-indent-offset: 4 -*-
#
# Interface error details metrics plugin
#
# Author: Th.L.
# Date : 2020-04-03
#
#####################################################################################################################
#
# define units
#
#####################################################################################################################
######################################################################################################################
#
# map perfdata to metric, not really necessary but makes sure to use the right metrics
#
######################################################################################################################
check_metrics['check_mk-iferrordetails'] = {
'dot3statsalignmenterrors': {'name': 'iferrordetails_dot3statsalignmenterrors',},
'dot3statsfcserrors': {'name': 'iferrordetails_dot3statsfcserrors',},
'dot3statssinglecollisionframes': {'name': 'iferrordetails_dot3statssinglecollisionframes',},
'dot3statsmultiplecollisionframes': {'name': 'iferrordetails_dot3statsmultiplecollisionframes',},
'dot3statssqetesterrors': {'name': 'iferrordetails_dot3statssqetesterrors',},
'dot3statsdeferredtransmissions': {'name': 'iferrordetails_dot3statsdeferredtransmissions',},
'dot3statslatecollisions': {'name': 'iferrordetails_dot3statslatecollisions',},
'dot3statsexcessivecollisions': {'name': 'iferrordetails_dot3statsexcessivecollisions',},
'dot3statsinternalmactransmiterr': {'name': 'iferrordetails_dot3statsinternalmactransmiterr',},
'dot3statscarriersenseerrors': {'name': 'iferrordetails_dot3statscarriersenseerrors',},
'dot3statsframetoolongs': {'name': 'iferrordetails_dot3statsframetoolongs',},
'dot3statsinternalmacreceiveerrors': {'name': 'iferrordetails_dot3statsinternalmacreceiveerrors',},
'dot3statssymbolerrors': {'name': 'iferrordetails_dot3statssymbolerrors',},
}
#####################################################################################################################
#
# define metrics for perfdata
#
#####################################################################################################################
metric_info['iferrordetails_dot3statsalignmenterrors'] = {
'title' : _('Alignment errors'),
'unit' : 'count',
'color' : '11/a',
}
metric_info['iferrordetails_dot3statsfcserrors'] = {
'title' : _('FCS errors'),
'unit' : 'count',
'color' : '12/a',
}
metric_info['iferrordetails_dot3statssinglecollisionframes'] = {
'title' : _('Single collision frames'),
'unit' : 'count',
'color' : '13/a',
}
metric_info['iferrordetails_dot3statsmultiplecollisionframes'] = {
'title' : _('Multiple collision frames'),
'unit' : 'count',
'color' : '14/a',
}
metric_info['iferrordetails_dot3statssqetesterrors'] = {
'title' : _('sqe test errors'),
'unit' : 'count',
'color' : '15/a',
}
metric_info['iferrordetails_dot3statsdeferredtransmissions'] = {
'title' : _('Deferred transmissions'),
'unit' : 'count',
'color' : '16/a',
}
metric_info['iferrordetails_dot3statslatecollisions'] = {
'title' : _('Late collisions'),
'unit' : 'count',
'color' : '21/a',
}
metric_info['iferrordetails_dot3statsexcessivecollisions'] = {
'title' : _('Excessive collisions'),
'unit' : 'count',
'color' : '22/a',
}
metric_info['iferrordetails_dot3statsinternalmactransmiterr'] = {
'title' : _('internal MAC transmit errors'),
'unit' : 'count',
'color' : '23/a',
}
metric_info['iferrordetails_dot3statscarriersenseerrors'] = {
'title' : _('Sarrier sense errors'),
'unit' : 'count',
'color' : '24/a',
}
metric_info['iferrordetails_dot3statsframetoolongs'] = {
'title' : _('Frame too long'),
'unit' : 'count',
'color' : '25/a',
}
metric_info['iferrordetails_dot3statsinternalmacreceiveerrors'] = {
'title' : _('Internal MAC receive errors'),
'unit' : 'count',
'color' : '26/a',
}
metric_info['iferrordetails_dot3statssymbolerrors'] = {
'title' : _('Symbol errors'),
'unit' : 'count',
'color' : '31/a',
}
######################################################################################################################
#
# how to graph perdata
#
######################################################################################################################
graph_info.append({
'title': _('Interface error details'),
'metrics': [
('iferrordetails_dot3statsalignmenterrors', 'line'),
('iferrordetails_dot3statsfcserrors', 'line'),
('iferrordetails_dot3statssinglecollisionframes', 'line'),
('iferrordetails_dot3statsmultiplecollisionframes', 'line'),
('iferrordetails_dot3statssqetesterrors', 'line'),
('iferrordetails_dot3statsdeferredtransmissions', 'line'),
('iferrordetails_dot3statslatecollisions', 'line'),
('iferrordetails_dot3statsexcessivecollisions', 'line'),
('iferrordetails_dot3statsinternalmactransmiterr', 'line'),
('iferrordetails_dot3statscarriersenseerrors', 'line'),
('iferrordetails_dot3statsframetoolongs', 'line'),
('iferrordetails_dot3statsinternalmacreceiveerrors', 'line'),
('iferrordetails_dot3statssymbolerrors', 'line'),
],
})
######################################################################################################################
#
# define perf-o-meter
#
######################################################################################################################
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