From 88f2903dd9479e69175cf6cfb2b9bee5be0b41d5 Mon Sep 17 00:00:00 2001 From: "th.l" <thl-cmk@outlook.com> Date: Mon, 18 Apr 2022 10:40:09 +0200 Subject: [PATCH] update project --- agent_based/huawei_bgp_peer.py | 213 +++++++++++++++++++++++++ huawei_bgp_peers.mkp | Bin 5879 -> 3261 bytes packages/huawei_bgp_peers | 28 ++-- web/plugins/metrics/huawei_bgp_peer.py | 48 ++++++ 4 files changed, 280 insertions(+), 9 deletions(-) create mode 100644 agent_based/huawei_bgp_peer.py create mode 100644 web/plugins/metrics/huawei_bgp_peer.py diff --git a/agent_based/huawei_bgp_peer.py b/agent_based/huawei_bgp_peer.py new file mode 100644 index 0000000..7c5fff3 --- /dev/null +++ b/agent_based/huawei_bgp_peer.py @@ -0,0 +1,213 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# +# License: GNU General Public License v2 +# +# Author: thl-cmk[at]outlook[dot]com +# URL : https://thl-cmk.hopto.org +# Date : 2020-06-22 +# +# Huawei BGP Peer +# +# Monitor status of Huawei BGP Peers (IPv4 and IPv6) +# +# 2020-07-20: added BGP prefix counter +# +# snmpwalk sample +# .1.3.6.1.4.1.2011.5.25.177.1.1.2.1.1.0.2.1.2.16.32.32.9.200.0.2.0.1.0.0.0.0.31.100.0.7 = Gauge32: 4 +# .1.3.6.1.4.1.2011.5.25.177.1.1.2.1.2.0.2.1.2.16.32.32.9.200.0.2.0.1.0.0.0.0.31.100.0.7 = Gauge32: 16374 +# .1.3.6.1.4.1.2011.5.25.177.1.1.2.1.4.0.2.1.2.16.32.32.9.200.0.2.0.1.0.0.0.0.31.100.0.7 = STRING: "2020:9F8:19:1::14F6:7" +# .1.3.6.1.4.1.2011.5.25.177.1.1.2.1.5.0.2.1.2.16.32.32.9.200.0.2.0.1.0.0.0.0.31.100.0.7 = INTEGER: 6 +# .1.3.6.1.4.1.2011.5.25.177.1.1.2.1.6.0.2.1.2.16.32.32.9.200.0.2.0.1.0.0.0.0.31.100.0.7 = Gauge32: 1 +# .1.3.6.1.4.1.2011.5.25.177.1.1.2.1.7.0.2.1.2.16.32.32.9.200.0.2.0.1.0.0.0.0.31.100.0.7 = Gauge32: 3456508 +# .1.3.6.1.4.1.2011.5.25.177.1.1.2.1.9.0.2.1.2.16.32.32.9.200.0.2.0.1.0.0.0.0.31.100.0.7 = Hex-STRING: 00 00 +# .1.3.6.1.4.1.2011.5.25.177.1.1.2.1.10.0.2.1.2.16.32.32.9.200.0.2.0.1.0.0.0.0.31.100.0.7 = Gauge32: 0 +# .1.3.6.1.4.1.2011.5.25.177.1.1.2.1.11.0.2.1.2.16.32.32.9.200.0.2.0.1.0.0.0.0.31.100.0.7 = INTEGER: 2 +# +# .1.3.6.1.4.1.2011.5.25.177.1.1.2.1.1.0.1.1.1.4.79.200.120.2 = Gauge32: 4 +# .1.3.6.1.4.1.2011.5.25.177.1.1.2.1.2.0.1.1.1.4.79.200.120.2 = Gauge32: 20676 +# .1.3.6.1.4.1.2011.5.25.177.1.1.2.1.4.0.1.1.1.4.79.200.120.2 = STRING: "79.200.120.2" +# .1.3.6.1.4.1.2011.5.25.177.1.1.2.1.5.0.1.1.1.4.79.200.120.2 = INTEGER: 6 +# .1.3.6.1.4.1.2011.5.25.177.1.1.2.1.6.0.1.1.1.4.79.200.120.2 = Gauge32: 16 +# .1.3.6.1.4.1.2011.5.25.177.1.1.2.1.7.0.1.1.1.4.79.200.120.2 = Gauge32: 2293069 +# .1.3.6.1.4.1.2011.5.25.177.1.1.2.1.9.0.1.1.1.4.79.200.120.2 = Hex-STRING: 06 05 +# .1.3.6.1.4.1.2011.5.25.177.1.1.2.1.10.0.1.1.1.4.79.200.120.2 = Gauge32: 0 +# .1.3.6.1.4.1.2011.5.25.177.1.1.2.1.11.0.1.1.1.4.79.200.120.2 = INTEGER: 2 +# +# HUAWEI-BGP-VPN-MIB::hwBgpPeerNegotiatedVersion.0.ipv6.unicast.ipv6."20:20:09:f8:00:19:00:01:00:00:00:00:14:f6:00:07" = Gauge32: 4 +# HUAWEI-BGP-VPN-MIB::hwBgpPeerRemoteAs.0.ipv6.unicast.ipv6."20:20:09:f8:00:19:00:01:00:00:00:00:14:f6:00:07" = Gauge32: 16374 +# HUAWEI-BGP-VPN-MIB::hwBgpPeerRemoteAddr.0.ipv6.unicast.ipv6."20:20:09:f8:00:19:00:01:00:00:00:00:14:f6:00:07" = STRING: "2020:9F8:19:1::14F6:7" +# HUAWEI-BGP-VPN-MIB::hwBgpPeerState.0.ipv6.unicast.ipv6."20:20:09:f8:00:19:00:01:00:00:00:00:14:f6:00:07" = INTEGER: established(6) +# HUAWEI-BGP-VPN-MIB::hwBgpPeerFsmEstablishedCounter.0.ipv6.unicast.ipv6."20:20:09:f8:00:19:00:01:00:00:00:00:14:f6:00:07" = Gauge32: 1 +# HUAWEI-BGP-VPN-MIB::hwBgpPeerFsmEstablishedTime.0.ipv6.unicast.ipv6."20:20:09:f8:00:19:00:01:00:00:00:00:14:f6:00:07" = Gauge32: 3456883 +# HUAWEI-BGP-VPN-MIB::hwBgpPeerLastError.0.ipv6.unicast.ipv6."20:20:09:f8:00:19:00:01:00:00:00:00:14:f6:00:07" = Hex-STRING: 00 00 +# HUAWEI-BGP-VPN-MIB::hwBgpPeerUnAvaiReason.0.ipv6.unicast.ipv6."20:20:09:f8:00:19:00:01:00:00:00:00:14:f6:00:07" = Gauge32: 0 +# HUAWEI-BGP-VPN-MIB::hwBgpPeerEntry.11.0.ipv6.unicast.ipv6."20:20:09:f8:00:19:00:01:00:00:00:00:14:f6:00:07" = INTEGER: 2 +# +# HUAWEI-BGP-VPN-MIB::hwBgpPeerNegotiatedVersion.0.ipv4.unicast.ipv4."79.200.120.2" = Gauge32: 4 +# HUAWEI-BGP-VPN-MIB::hwBgpPeerRemoteAs.0.ipv4.unicast.ipv4."79.200.120.2" = Gauge32: 20676 +# HUAWEI-BGP-VPN-MIB::hwBgpPeerRemoteAddr.0.ipv4.unicast.ipv4."79.200.120.2" = STRING: "79.200.120.2" +# HUAWEI-BGP-VPN-MIB::hwBgpPeerState.0.ipv4.unicast.ipv4."79.200.120.2" = INTEGER: established(6) +# HUAWEI-BGP-VPN-MIB::hwBgpPeerFsmEstablishedCounter.0.ipv4.unicast.ipv4."79.200.120.2" = Gauge32: 16 +# HUAWEI-BGP-VPN-MIB::hwBgpPeerFsmEstablishedTime.0.ipv4.unicast.ipv4."79.200.120.2" = Gauge32: 2293069 +# HUAWEI-BGP-VPN-MIB::hwBgpPeerLastError.0.ipv4.unicast.ipv4."79.200.120.2" = Hex-STRING: 06 05 +# HUAWEI-BGP-VPN-MIB::hwBgpPeerUnAvaiReason.0.ipv4.unicast.ipv4."79.200.120.2" = Gauge32: 0 +# HUAWEI-BGP-VPN-MIB::hwBgpPeerEntry.11.0.ipv4.unicast.ipv4."79.200.120.2" = INTEGER: 2 + + +from typing import List, Dict, Optional + +from cmk.base.plugins.agent_based.agent_based_api.v1 import ( + register, + SNMPTree, + OIDEnd, + startswith, +) +from cmk.base.plugins.agent_based.agent_based_api.v1.type_defs import ( + StringTable, +) + +from cmk.base.plugins.agent_based.utils.bgp_peer import ( + bgp_get_peer, + BgpPeer, + bgp_get_peer_entry, +) + + +def _huawei_get_adress_family(OID_END): + # HWBgpAfi ::= TEXTUAL-CONVENTION + # STATUS current + # DESCRIPTION + # "Address Family Identifier(AFI) for BGP peer." + HWBgpAfi = { + 1: 'IPv4', + 2: 'IPv6', + 25: 'VPLS', + 196: 'L2VPN', + } + + # HWBgpSafi ::= TEXTUAL-CONVENTION + # STATUS current + # DESCRIPTION + # "Subsequent Address Family Identifier(SAFI) for BGP peer." + HWBgpSafi = { + 1: 'Unicast', + 2: 'Multicast', + 4: 'MPL', + 5: 'mcast-vpn', + 65: 'VPL', + 66: 'MDT', + 128: 'VPN', + 132: 'route-target', + } + + OID_END = OID_END.split('.') + + adress_family = HWBgpAfi.get(int(OID_END[1]), OID_END[1]) + sub_family = HWBgpSafi.get(int(OID_END[2]), OID_END[2]) + + return '%s %s' % (adress_family, sub_family) + + +def _huawei_bgp_PeerUnAvaiReason(st): + reason = { + '1': 'Configuration lead peer down', + '2': 'Receive notification', + '3': 'Receive error packet', + '4': 'Hold timer expire', + '5': 'Remote peer not reachable', + '6': 'Direct connect-interface down', + '7': 'Route limit', + } + return reason.get(st, st) + + +def parse_huawei_bgp_peer(string_table: List[StringTable]) -> Dict[str, BgpPeer]: + hwbgpPeer2Entry, hwBgpPeerRouteEntry = string_table + + peer_table = {} + for entry in hwbgpPeer2Entry: + oid_end, hwBgpPeerRemoteAddr, hwBgpPeerState, hwBgpPeerFsmEstablishedCounter, hwBgpPeerFsmEstablishedTime, \ + hwBgpPeerUnAvaiReason = entry + + bgp_peer = bgp_get_peer_entry([ + hwBgpPeerRemoteAddr, + hwBgpPeerState, + '2', # admin_state not admin_down + None, # in_updates + None, # out_updates + None, # in_messages + None, # out_messages + hwBgpPeerFsmEstablishedCounter, + hwBgpPeerFsmEstablishedTime, + None, # in_update_elapsed_time + ] + ) + if bgp_peer: + adressfamily = _huawei_get_adress_family(oid_end) + remote_address = list(bgp_peer.keys())[0] + index = f'{remote_address} {adressfamily}' + bgp_peer[remote_address].peer_unavail_reason = int(hwBgpPeerUnAvaiReason) + bgp_peer[remote_address].peer_unavail_reason_str = _huawei_bgp_PeerUnAvaiReason(int(hwBgpPeerUnAvaiReason)) + bgp_peer = {index: bgp_peer[remote_address]} + peer_table.update(bgp_peer) + + # peer = { + # 'hwpeerunavireason': _huawei_bgp_PeerUnAvaiReason(hwBgpPeerUnAvaiReason), + # } + # + # add BGP route counter + for entry in hwBgpPeerRouteEntry: + oid_end, hwBgpPeerPrefixRcvCounter, hwBgpPeerPrefixActiveCounter, hwBgpPeerPrefixAdvCounter = entry + counter = [] + for key, value in [ + ('prefixrcvcounter', hwBgpPeerPrefixRcvCounter), + ('prefixactivecounter', hwBgpPeerPrefixActiveCounter), + ('prefixadvcounter', hwBgpPeerPrefixAdvCounter), + ]: + try: + counter.append((key, int(value))) + except TypeError: + pass + + # adjust oid_end to match cisco oid_end + service = '%s %s' % (bgp_get_peer(f'{oid_end[6:]}.1.1'), _huawei_get_adress_family(oid_end)) + if service in peer_table.keys(): + peer_table[service].metric_count += counter + + return peer_table + + +register.snmp_section( + name='huawei_bgp_peer', + parse_function=parse_huawei_bgp_peer, + parsed_section_name='bgp_peer', + supersedes=['bgp_peer'], + fetch=[ + SNMPTree( + base='.1.3.6.1.4.1.2011.5.25.177.1.1.2.1', # HUAWEI-BGP-VPN-MIB::hwBgpPeerEntry + oids=[ + OIDEnd(), # 0.ipv4/ipv6.adressFamily.ipv4/ipv6.RemotePeerIP + # '1', # hwBgpPeerNegotiatedVersion + # '2', # hwBgpPeerRemoteAs + '4', # hwBgpPeerRemoteAddr + '5', # hwBgpPeerState + '6', # hwBgpPeerFsmEstablishedCounter + '7', # hwBgpPeerFsmEstablishedTime + # '9', # hwBgpPeerLastError + '10', # hwBgpPeerUnAvaiReason + # '11', # hwBgpPeerEntry + ] + ), + SNMPTree( + base='.1.3.6.1.4.1.2011.5.25.177.1.1.3.1', # HUAWEI-BGP-VPN-MIB::hwBgpPeerRouteEntry + oids=[ + OIDEnd(), # 0.ipv4/ipv6.adressFamily.ipv4/ipv6.RemotePeerIP + '1', # hwBgpPeerPrefixRcvCounter + '2', # hwBgpPeerPrefixActiveCounter + '3', # hwBgpPeerPrefixAdvCounter + ] + ), + ], + detect=startswith('.1.3.6.1.2.1.1.2.0', '.1.3.6.1.4.1.2011') +) diff --git a/huawei_bgp_peers.mkp b/huawei_bgp_peers.mkp index e60fb90c1dc5fbd675cba47e9e688690e18b647f..8f257de3a7a9111c1dca455af648df420c523466 100644 GIT binary patch literal 3261 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 Aq5uE@ literal 5879 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 N{|8CMPyqm-004eMi+un9 diff --git a/packages/huawei_bgp_peers b/packages/huawei_bgp_peers index 4d2045d..efb10c1 100644 --- a/packages/huawei_bgp_peers +++ b/packages/huawei_bgp_peers @@ -1,12 +1,22 @@ -{'author': u'Th.L. (thl-cmk[at]outlook[dot]com)', - 'description': u'Monitors Huawei BGP Peers (HUAWEI-BGP-VPN-MIB). \n\n- creates one service for each peer/address family (IPv4 and IPv6)', +{'author': 'Th.L. (thl-cmk[at]outlook[dot]com)', + 'description': 'Monitors Huawei BGP Peers (HUAWEI-BGP-VPN-MIB). \n' + '\n' + '- creates one service for each peer/address family (IPv4 and ' + 'IPv6)\n' + '\n' + 'needs the bgp_peer.mkp (minimum version 20220418.v1.7) ' + 'package to work \n' + '\n' + 'see: ' + 'https://thl-cmk.hopto.org/gitlab/checkmk/vendor-independent/bgp_peer/-/raw/master/bgp_peer.mkp\n' + ' \n', 'download_url': 'https://thl-cmk.hopto.org', - 'files': {'checks': ['huawei_bgp_peers'], - 'web': ['plugins/wato/huawei_bgp_peers.py', - 'plugins/metrics/huawei_bgp_peers.py']}, + 'files': {'agent_based': ['huawei_bgp_peer.py'], + 'web': ['plugins/metrics/huawei_bgp_peer.py']}, 'name': 'huawei_bgp_peers', - 'num_files': 3, - 'title': u'Huawei BGP Peer', - 'version': '20200720.v.0.1a', + 'num_files': 2, + 'title': 'Huawei BGP Peer', + 'version': '20220418.v.0.2', 'version.min_required': '1.2.8b8', - 'version.packaged': '1.4.0p38'} \ No newline at end of file + 'version.packaged': '2021.09.20', + 'version.usable_until': None} \ No newline at end of file diff --git a/web/plugins/metrics/huawei_bgp_peer.py b/web/plugins/metrics/huawei_bgp_peer.py new file mode 100644 index 0000000..851538e --- /dev/null +++ b/web/plugins/metrics/huawei_bgp_peer.py @@ -0,0 +1,48 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# +# License: GNU General Public License v2 +# +# Author: thl-cmk[at]outlook[dot]com +# URL : https://thl-cmk.hopto.org +# Date : 2020-06-22 +# +# Huawei BGP Peer +# +# 2020-07-20: added BGP prefix counter +# +# +from cmk.gui.i18n import _ + +from cmk.gui.plugins.metrics import ( + metric_info, + graph_info, + perfometer_info +) + + +metric_info['bgp_peer_prefixrcvcounter'] = { + 'title': _('Prefixes received'), + 'unit': 'count', + 'color': '11/a', +} +metric_info['bgp_peer_prefixactivecounter'] = { + 'title': _('Prefixes active'), + 'unit': 'count', + 'color': '33/a', +} +metric_info['bgp_peer_prefixadvcounter'] = { + 'title': _('Prefixes advertised'), + 'unit': 'count', + 'color': '43/a', +} + + +graph_info['huawei_bgp_peer_counter']= { + 'title': _('BGP prefix counter'), + 'metrics': [ + ('bgp_peer_prefixrcvcounter', 'line'), + ('bgp_peer_prefixactivecounter', 'line'), + ('bgp_peer_prefixadvcounter', 'line'), + ] +} -- GitLab