From c4330572f7f80cd5c2ce731803b719a4498807b1 Mon Sep 17 00:00:00 2001 From: "th.l" <thl-cmk@outlook.com> Date: Sun, 30 Mar 2025 17:07:43 +0200 Subject: [PATCH] modified for check APIv2 --- README.md | 2 +- mkp/cisco_bgp_peer-1.0.3-20250324.mkp | Bin 0 -> 5904 bytes .../bgp_peer}/agent_based/cisco_bgp_peer.py | 67 +++++++++--------- .../agent_based/inv_cisco_bgp_peer.py | 20 +++--- .../bgp_peer/checkman/cisco_bgp_peer | 39 ++++++++++ source/packages/cisco_bgp_peer | 10 +-- 6 files changed, 91 insertions(+), 47 deletions(-) create mode 100644 mkp/cisco_bgp_peer-1.0.3-20250324.mkp rename source/{ => cmk_addons_plugins/bgp_peer}/agent_based/cisco_bgp_peer.py (91%) rename source/{ => cmk_addons_plugins/bgp_peer}/agent_based/inv_cisco_bgp_peer.py (93%) create mode 100644 source/cmk_addons_plugins/bgp_peer/checkman/cisco_bgp_peer diff --git a/README.md b/README.md index 48a8679..6d9a5d3 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -[PACKAGE]: ../../raw/master/mkp/cisco_bgp_peer-1.0.2-20241220.mkp "cisco_bgp_peer-1.0.2-20241220.mkp" +[PACKAGE]: ../../raw/master/mkp/cisco_bgp_peer-1.0.3-20250324.mkp "cisco_bgp_peer-1.0.3-20250324.mkp" # Cisco BGP Peer Monitors status of Cisco BGP peers (IPv4 and IPv6, with basic support for VRFs on NXOS) diff --git a/mkp/cisco_bgp_peer-1.0.3-20250324.mkp b/mkp/cisco_bgp_peer-1.0.3-20250324.mkp new file mode 100644 index 0000000000000000000000000000000000000000..700d5c0c5ef55c0a76b51af8f882ae7c6e85a9db GIT binary patch literal 5904 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 U{~!FYKZn9Z{u+~jDS(0bA2cVXD*ylh literal 0 HcmV?d00001 diff --git a/source/agent_based/cisco_bgp_peer.py b/source/cmk_addons_plugins/bgp_peer/agent_based/cisco_bgp_peer.py similarity index 91% rename from source/agent_based/cisco_bgp_peer.py rename to source/cmk_addons_plugins/bgp_peer/agent_based/cisco_bgp_peer.py index a39204b..9e9d735 100644 --- a/source/agent_based/cisco_bgp_peer.py +++ b/source/cmk_addons_plugins/bgp_peer/agent_based/cisco_bgp_peer.py @@ -63,23 +63,25 @@ from dataclasses import dataclass from typing import List, Dict, Optional, Tuple import copy -from cmk.base.plugins.agent_based.agent_based_api.v1 import ( +from cmk.agent_based.v2 import ( OIDBytes, OIDEnd, + SNMPSection, SNMPTree, + StringByteTable, all_of, contains, exists, - register, ) -from cmk.base.plugins.agent_based.agent_based_api.v1.type_defs import StringByteTable -from cmk.base.plugins.agent_based.utils.bgp_peer import ( + +from cmk_addons.plugins.bgp_peer.lib.bgp_peer import ( BgpPeer, bgp_get_ip_address_from_oid, bgp_get_peer_entry, bgp_render_ip_address, ) + ########################################################################### # # cisco_bgp_peer (CISCO-BGP4-MIB:cbgpPeer2Entry) @@ -216,11 +218,11 @@ def parse_cisco_bgp_peer(string_table: List[StringByteTable]) -> Dict[str, BgpPe return peer_table -register.snmp_section( +snmp_section_cisco_bgp_peer = SNMPSection( name='cisco_bgp_peer', parse_function=parse_cisco_bgp_peer, parsed_section_name='bgp_peer', - supersedes=['bgp_peer'], + supersedes=['bgp_peer', 'cisco_bgp_peerv2'], fetch=[ SNMPTree( base='.1.3.6.1.4.1.9.9.187.1.2.5.1', # CISCO-BGP4-MIB::cbgpPeer2Entry @@ -272,6 +274,7 @@ register.snmp_section( ), ) + ########################################################################### # # cisco_bgp_peer (CISCO-BGP4-MIB:cbgpPeer3Entry) @@ -280,9 +283,9 @@ register.snmp_section( # ToDo: add support for non IPv4, needs sample -def parse_cisco_bgp_peer_3(string_table: StringByteTable) -> Optional[Dict[str, BgpPeer]]: +def parse_cisco_bgp_peer_3(string_table: List[StringByteTable]) -> Dict[str, BgpPeer]: peer_table = {} - for entry in string_table: + for entry in string_table[0]: ( remote_addr_type, remote_addr, @@ -338,33 +341,33 @@ def parse_cisco_bgp_peer_3(string_table: StringByteTable) -> Optional[Dict[str, return peer_table -register.snmp_section( +snmp_section_cisco_bgp_peer_3 = SNMPSection( name='cisco_bgp_peer_3', parse_function=parse_cisco_bgp_peer_3, parsed_section_name='bgp_peer', - supersedes=['bgp_peer', 'cisco_bgp_peer'], - fetch=SNMPTree( - base='.1.3.6.1.4.1.9.9.187.1.2.9.1', # CISCO-BGP4-MIB::cbgpPeer3Entry - oids=[ - '2', # cbgpPeer3Type - OIDBytes('3'), # cbgpPeer3RemoteAddr - '4', # cbgpPeer3VrfName - '5', # cbgpPeer3State - '6', # cbgpPeer3AdminStatus - OIDBytes('8'), # cbgpPeer3LocalAddr - '10', # cbgpPeer3LocalAs - '11', # cbgpPeer3LocalIdentifier - '13', # cbgpPeer3RemoteAs - '14', # cbgpPeer3RemoteIdentifier - '15', # cbgpPeer3InUpdates - '16', # cbgpPeer3OutUpdates - '17', # cbgpPeer3InTotalMessages - '18', # cbgpPeer3OutTotalMessages - '20', # cbgpPeer3FsmEstablishedTransitions - '21', # cbgpPeer3FsmEstablishedTime - '29', # cbgpPeer3InUpdateElapsedTime - ] - ), + supersedes=['bgp_peer', 'cisco_bgp_peer', 'cisco_bgp_peerv2', 'cisco_bgp_peerv3'], + fetch=[SNMPTree( + base='.1.3.6.1.4.1.9.9.187.1.2.9.1', # CISCO-BGP4-MIB::cbgpPeer3Entry + oids=[ + '2', # cbgpPeer3Type + OIDBytes('3'), # cbgpPeer3RemoteAddr + '4', # cbgpPeer3VrfName + '5', # cbgpPeer3State + '6', # cbgpPeer3AdminStatus + OIDBytes('8'), # cbgpPeer3LocalAddr + '10', # cbgpPeer3LocalAs + '11', # cbgpPeer3LocalIdentifier + '13', # cbgpPeer3RemoteAs + '14', # cbgpPeer3RemoteIdentifier + '15', # cbgpPeer3InUpdates + '16', # cbgpPeer3OutUpdates + '17', # cbgpPeer3InTotalMessages + '18', # cbgpPeer3OutTotalMessages + '20', # cbgpPeer3FsmEstablishedTransitions + '21', # cbgpPeer3FsmEstablishedTime + '29', # cbgpPeer3InUpdateElapsedTime + ] + )], detect=all_of( contains('.1.3.6.1.2.1.1.1.0', 'Cisco'), exists('.1.3.6.1.4.1.9.9.187.1.2.9.1.3.*') diff --git a/source/agent_based/inv_cisco_bgp_peer.py b/source/cmk_addons_plugins/bgp_peer/agent_based/inv_cisco_bgp_peer.py similarity index 93% rename from source/agent_based/inv_cisco_bgp_peer.py rename to source/cmk_addons_plugins/bgp_peer/agent_based/inv_cisco_bgp_peer.py index c2db485..982ea79 100644 --- a/source/agent_based/inv_cisco_bgp_peer.py +++ b/source/cmk_addons_plugins/bgp_peer/agent_based/inv_cisco_bgp_peer.py @@ -11,22 +11,22 @@ # # 2022-04-22: moved here from cisco_bgp_peer # 2022-04-30: code cleanup/streamlining -# +# 2025-03-24: moved to check API v2 for CMK 2.3/2.4 from typing import List -from cmk.base.plugins.agent_based.agent_based_api.v1 import ( + +from cmk.agent_based.v2 import ( OIDBytes, - OIDEnd, + SNMPSection, SNMPTree, + StringByteTable, + exists, + OIDEnd, all_of, contains, - exists, - register, ) -from cmk.base.plugins.agent_based.agent_based_api.v1.type_defs import ( - StringByteTable -) -from cmk.base.plugins.agent_based.utils.bgp_peer import ( + +from cmk_addons.plugins.bgp_peer.lib.bgp_peer import ( InvBgpPeer, bgp_error_as_string, bgp_error_code_as_hex, @@ -101,7 +101,7 @@ def parse_inv_cisco_bgp_peer(string_table: List[StringByteTable]): return bgp_peers -register.snmp_section( +snmp_section_inv_cisco_bgp_peer = SNMPSection( name='inv_cisco_bgp_peer', parse_function=parse_inv_cisco_bgp_peer, parsed_section_name='inv_bgp_peer', diff --git a/source/cmk_addons_plugins/bgp_peer/checkman/cisco_bgp_peer b/source/cmk_addons_plugins/bgp_peer/checkman/cisco_bgp_peer new file mode 100644 index 0000000..b54de43 --- /dev/null +++ b/source/cmk_addons_plugins/bgp_peer/checkman/cisco_bgp_peer @@ -0,0 +1,39 @@ +title: Cisco BGP Peers +agents: snmp +catalog: hw/network/cisco +license: GPL +distribution: https://thl-cmk.hopto.org +description: + Monitors the status of BGP peers. It supports IPv4/IPv6 peers and more then one + address family per BGP peer. + + critical: + + - if peer state is "idle" or adminstate is not "start" + + - if accepted prefixes equal or above prefix admin limit + + warning: + + - if peer state is not "established" or peer is not up long enough + + - if accepted prefixes equal or above warn threshold + + This check is tested with a variaity of Cisco ASR and ISR routers. + + The "prefix admin limit" and "warn threshold" needs to be configured on the device. + For example: neighbor 172.17.10.10 maximum-prefix 10000 80. The threshold is in + percentage of the prefix limit . + +item: + Is build from the Address family and IP address of the BGP peer. + For example "172.17.10.10 IPv4 Unicast" + +perfdata: + Describe precisely the number and meaning of performance variables + the check sends. If it outputs no performance data, then leave out this + section. + +inventory: + Checks for "cisco" in sysDesc. If found the check creates one service for each + BGP peer and address family. diff --git a/source/packages/cisco_bgp_peer b/source/packages/cisco_bgp_peer index 16c0651..7f3969b 100644 --- a/source/packages/cisco_bgp_peer +++ b/source/packages/cisco_bgp_peer @@ -17,10 +17,12 @@ 'plugin ' '(https://thl-cmk.hopto.org/gitlab/checkmk/vendor-independent/bgp_peer)\n', 'download_url': 'https://thl-cmk.hopto.org/gitlab/checkmk/cisco/cisco_bgp_peer', - 'files': {'agent_based': ['cisco_bgp_peer.py', 'inv_cisco_bgp_peer.py']}, + 'files': {'cmk_addons_plugins': ['bgp_peer/agent_based/cisco_bgp_peer.py', + 'bgp_peer/agent_based/inv_cisco_bgp_peer.py', + 'bgp_peer/checkman/cisco_bgp_peer']}, 'name': 'cisco_bgp_peer', 'title': 'Cisco BGP Peer', - 'version': '1.0.2-20241220', - 'version.min_required': '2.0.0b1', + 'version': '1.0.3-20250324', + 'version.min_required': '2.3.0b1', 'version.packaged': 'cmk-mkp-tool 0.2.0', - 'version.usable_until': '2.4.0b1'} + 'version.usable_until': '2.5.0b1'} -- GitLab