From a3a896d872578ef859fc10152a81d60b2dd5b4f2 Mon Sep 17 00:00:00 2001 From: "th.l" <thl-cmk@outlook.com> Date: Mon, 6 Sep 2021 18:00:26 +0200 Subject: [PATCH] update project --- agent_based/checkpoint_vsx.ps | 249 ++++++++++++++++++++++++++ checkpoint_vsx.mkp | Bin 3428 -> 4083 bytes packages/checkpoint_vsx | 23 ++- web/plugins/metrics/checkpoint_vsx.py | 29 +-- 4 files changed, 283 insertions(+), 18 deletions(-) create mode 100644 agent_based/checkpoint_vsx.ps diff --git a/agent_based/checkpoint_vsx.ps b/agent_based/checkpoint_vsx.ps new file mode 100644 index 0000000..8d49537 --- /dev/null +++ b/agent_based/checkpoint_vsx.ps @@ -0,0 +1,249 @@ +#!/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 : 2017-17-05 +# +# Check Point vsx Cluster status +# +# Monitor status of virtual systems in Check Point vsx/vsls cluster +# +# 2018-08-03: changed snmp scan function +# 2018-08-13: code cleanup, add metrics +# 2020-06-08: changed snmp-scan function +# 2021-09-06: rewritten for CMK 2.0 +# +# snmpwalk sample +# +# .1.3.6.1.4.1.2620.1.16.22.1.1.1.3.0 = Gauge32: 2 +# .1.3.6.1.4.1.2620.1.16.22.1.1.2.3.0 = Gauge32: 2 +# .1.3.6.1.4.1.2620.1.16.22.1.1.3.3.0 = STRING: "HRI" +# .1.3.6.1.4.1.2620.1.16.22.1.1.4.3.0 = STRING: "Virtual System" +# .1.3.6.1.4.1.2620.1.16.22.1.1.5.3.0 = STRING: "10.140.1.3" +# .1.3.6.1.4.1.2620.1.16.22.1.1.6.3.0 = STRING: "Standard" +# .1.3.6.1.4.1.2620.1.16.22.1.1.7.3.0 = STRING: "Active" +# .1.3.6.1.4.1.2620.1.16.22.1.1.8.3.0 = STRING: "Trust established" +# .1.3.6.1.4.1.2620.1.16.22.1.1.9.3.0 = STRING: "Standby" +# .1.3.6.1.4.1.2620.1.16.22.1.1.10.3.0 = Gauge32: 0 +# +# .1.3.6.1.4.1.2620.1.16.23.1.1.2.3.0 = Gauge32: 40 +# .1.3.6.1.4.1.2620.1.16.23.1.1.3.3.0 = Gauge32: 864 +# .1.3.6.1.4.1.2620.1.16.23.1.1.4.3.0 = Gauge32: 14900 +# .1.3.6.1.4.1.2620.1.16.23.1.1.5.3.0 = STRING: "69459" +# .1.3.6.1.4.1.2620.1.16.23.1.1.6.3.0 = STRING: "2405" +# .1.3.6.1.4.1.2620.1.16.23.1.1.7.3.0 = STRING: "67054" +# .1.3.6.1.4.1.2620.1.16.23.1.1.8.3.0 = STRING: "0" +# .1.3.6.1.4.1.2620.1.16.23.1.1.9.3.0 = STRING: "4228862" +# .1.3.6.1.4.1.2620.1.16.23.1.1.10.3.0 = STRING: "72445" +# .1.3.6.1.4.1.2620.1.16.23.1.1.11.3.0 = STRING: "0" +# .1.3.6.1.4.1.2620.1.16.23.1.1.12.3.0 = STRING: "7074" +# .1.3.6.1.4.1.2620.1.16.23.1.1.13.3.0 = INTEGER: 0 +# +import time +from dataclasses import dataclass +from typing import List, Dict, Optional, Tuple + +from cmk.base.plugins.agent_based.agent_based_api.v1 import ( + register, + Service, + Result, + State, + SNMPTree, + all_of, + startswith, + any_of, + equals, + Metric, + get_value_store, + get_rate, + GetRateError, +) +from cmk.base.plugins.agent_based.agent_based_api.v1.type_defs import ( + DiscoveryResult, + CheckResult, + StringTable, +) + + +@dataclass +class CheckpointVsx: + vsxStatusVSId: str + vsxStatusVsType: str + vsxStatusMainIP: str + vsxStatusPolicyName: str + vsxStatusVsPolicyType: str + vsxStatusSicTrustState: str + vsxStatusHAState: str + vsxStatusVSWeight: str + vsxCountersConnNum: int + vsxCountersConnPeakNum: int + vsxCountersConnTableLimit: int + vsxCountersIsDataValid: str + metrics_rate: List[Tuple[str, int]] + + +def parse_checkpoint_vsx(string_table: StringTable) -> Optional[Dict[str, CheckpointVsx]]: + vsx_systems = {} + for entry in string_table: + try: + vsxStatusVSId, vsxStatusVsName, vsxStatusVsType, vsxStatusMainIP, vsxStatusPolicyName, vsxStatusVsPolicyType, \ + vsxStatusSicTrustState, vsxStatusHAState, vsxStatusVSWeight, vsxCountersConnNum, vsxCountersConnPeakNum, \ + vsxCountersConnTableLimit, vsxCountersPackets, vsxCountersDroppedTotal, vsxCountersAcceptedTotal, \ + vsxCountersRejectedTotal, vsxCountersBytesAcceptedTotal, vsxCountersBytesDroppedTotal, \ + vsxCountersBytesRejectedTotal, vsxCountersLoggedTotal, vsxCountersIsDataValid = entry + except ValueError: + return + if vsxStatusVsType.lower in ['virtual system']: # , 'vsx gateway', 'virtual switch', 'virtual router' + vsx_systems[vsxStatusVsName] = CheckpointVsx( + vsxStatusVSId=vsxStatusVSId, + vsxStatusVsType=vsxStatusVsType, + vsxStatusMainIP=vsxStatusMainIP, + vsxStatusPolicyName=vsxStatusPolicyName, + vsxStatusVsPolicyType=vsxStatusVsPolicyType, + vsxStatusSicTrustState=vsxStatusSicTrustState, + vsxStatusHAState=vsxStatusHAState, + vsxStatusVSWeight=vsxStatusVSWeight, + vsxCountersConnNum=int(vsxCountersConnNum), + vsxCountersConnPeakNum=int(vsxCountersConnPeakNum), + vsxCountersConnTableLimit=int(vsxCountersConnTableLimit), + vsxCountersIsDataValid=vsxCountersIsDataValid, + metrics_rate=[ + ('vsxCountersPackets', int(vsxCountersPackets)), + ('vsxCountersDroppedTotal', int(vsxCountersDroppedTotal)), + ('vsxCountersAcceptedTotal', int(vsxCountersAcceptedTotal)), + ('vsxCountersRejectedTotal', int(vsxCountersRejectedTotal)), + ('vsxCountersBytesAcceptedTotal', int(vsxCountersBytesAcceptedTotal)), + ('vsxCountersBytesDroppedTotal', int(vsxCountersBytesDroppedTotal)), + ('vsxCountersBytesRejectedTotal', int(vsxCountersBytesRejectedTotal)), + ('vsxCountersLoggedTotal', int(vsxCountersLoggedTotal)), + ], + ) + return vsx_systems + + +def discovery_checkpoint_vsx(section: Dict[str, CheckpointVsx]) -> DiscoveryResult: + for key in section.keys(): + yield Service( + item=key, + parameters={'policyname': section[key].vsxStatusPolicyName, 'ha_state': section[key].vsxStatusHAState} + ) + + +def check_checkpoint_vsx(item, params, section: Dict[str, CheckpointVsx]) -> CheckResult: + try: + vsx = section[item] + except KeyError: + yield Result(state=State.UNKNOWN, notice='Item not found in SNMP data') + return + + now_time = time.time() + value_store = get_value_store() + raise_ingore_res = False + + for key, value in vsx.metrics_rate: + try: + value = get_rate(value_store, f'checkpoint_vsx_{key}', now_time, int(value), raise_overflow=True) + except GetRateError: + raise_ingore_res = True + value = 0 + yield Metric(name=f'checkpoint_vsx_{key}', value=value, boundaries=(0, None)) + + # system information + yield Result(state=State.OK, summary=f'IP: {vsx.vsxStatusMainIP}, VS ID: {vsx.vsxStatusVSId}') + # Counters + # infotext = f'Connections: {vsx.vsxCountersConnNum:.0f}, ' \ + # f'Packets prosessed: {vsx.vsxCountersPackets:.0f}/s, ' \ + # f'Logs send: {vsx.vsxCountersLoggedTotal:0.2f}/s') + + yield Result(state=State.OK, notice=f'System name: {item}') + yield Result(state=State.OK, notice=f'H/A status: {vsx.vsxStatusHAState}') + yield Result(state=State.OK, notice=f'Virtual system ID {vsx.vsxStatusVSId}') + yield Result(state=State.OK, notice=f'Type {vsx.vsxStatusVsType}') + yield Result(state=State.OK, notice=f'Weight {vsx.vsxStatusVSWeight}') + yield Result(state=State.OK, notice=f'Main IP {vsx.vsxStatusMainIP}') + yield Result(state=State.OK, notice=f'Policy name {vsx.vsxStatusPolicyName}') + yield Result(state=State.OK, notice=f'Policy type {vsx.vsxStatusVsPolicyType}') + yield Result(state=State.OK, notice=f'SIC status {vsx.vsxStatusSicTrustState}') + + yield Result(state=State.OK, notice=f'Conn table limit {vsx.vsxCountersConnTableLimit}') + yield Result(state=State.OK, notice=f'Is data valid {vsx.vsxCountersIsDataValid}') + + if vsx.vsxCountersConnTableLimit > 0: + yield Metric(value=vsx.vsxCountersConnNum, name='connections', boundaries=(0, vsx.vsxCountersConnTableLimit)) + else: + yield Metric(value=vsx.vsxCountersConnNum, name='connections') + yield Metric(value=vsx.vsxCountersConnPeakNum, name='connections_peak') + + if not vsx.vsxStatusHAState.lower() in ['active', 'standby']: + yield Result(state=State.WARN, notice=f'Status: {vsx.vsxStatusHAState}') + else: + yield Result(state=State.OK, summary=f'Status: {vsx.vsxStatusHAState}') + if not vsx.vsxStatusSicTrustState.lower() in ['trust established']: + yield Result(state=State.WARN, notice='SIC not established') + if not vsx.vsxStatusVsPolicyType.lower() in ['active']: + yield Result(state=State.CRIT, notice='No policy installed') + if params.get('policyname', 'unknown') != vsx.vsxStatusPolicyName: + yield Result( + state=State.WARN, + notice=f'Policy name changed: expected {params["policyname"]}, found {vsx.vsxStatusPolicyName}' + ) + if params.get('ha_state', 'unknown') != vsx.vsxStatusHAState: + yield Result( + state=State.WARN, + notice=f'State changed: expected/found {params["ha_state"]}/{vsx.vsxStatusHAState}' + ) + + +register.snmp_section( + name='checkpoint_vsx', + parse_function=parse_checkpoint_vsx, + fetch=SNMPTree( + base='.1.3.6.1.4.1.2620.1.16', # CHECKPOINT-MIB::vsxStatusVSId + oids=[ + '22.1.1.3', # vsxStatusVsName + '22.1.1.4', # vsxStatusVsType + '22.1.1.5', # vsxStatusMainIP + '22.1.1.6', # vsxStatusPolicyName + '22.1.1.7', # vsxStatusVsPolicyType + '22.1.1.8', # vsxStatusSicTrustState + '22.1.1.9', # vsxStatusHAState + '22.1.1.10', # vsxStatusVSWeight + '23.1.1.2', # vsxCountersConnNum + '23.1.1.3', # vsxCountersConnPeakNum + '23.1.1.4', # vsxCountersConnTableLimit + '23.1.1.5', # vsxCountersPackets + '23.1.1.6', # vsxCountersDroppedTotal + '23.1.1.7', # vsxCountersAcceptedTotal + '23.1.1.8', # vsxCountersRejectedTotal + '23.1.1.9', # vsxCountersBytesAcceptedTotal + '23.1.1.10', # vsxCountersBytesDroppedTotal + '23.1.1.11', # vsxCountersBytesRejectedTotal + '23.1.1.12', # vsxCountersLoggedTotal + '23.1.1.13', # vsxCountersIsDataValid + ]), + + detect= # all_of( + any_of( + startswith('.1.3.6.1.2.1.1.2.0', '.1.3.6.1.4.1.2620'), + all_of( + equals('.1.3.6.1.2.1.1.2.0', '.1.3.6.1.4.1.8072.3.2.10'), + equals('.1.3.6.1.4.1.2620.1.6.1.0', 'SVN Foundation'), + ) + ), + # startswith('.1.3.6.1.4.1.2620.1.2.1.0', 'IPSec VPN') + # ) +) + +register.check_plugin( + name='checkpoint_vsx', + service_name='VSX System %s', + discovery_function=discovery_checkpoint_vsx, + check_function=check_checkpoint_vsx, + check_ruleset_name='checkpoint_vsx', + check_default_parameters={ + 'vsType': ['virtual system', 'vsx gateway', 'virtual switch', 'virtual router'] + }, +) diff --git a/checkpoint_vsx.mkp b/checkpoint_vsx.mkp index 672988dba878c54172c89c07e3c596a955fb4a3a..b37c81fcaa6dccf918ba631d8ae0553f07af8a6f 100644 GIT binary patch literal 4083 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 RPmd!+xo~mcE4p{@{{Ue5>%;&6 literal 3428 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 diff --git a/packages/checkpoint_vsx b/packages/checkpoint_vsx index 81903a1..cd48699 100644 --- a/packages/checkpoint_vsx +++ b/packages/checkpoint_vsx @@ -1,11 +1,20 @@ -{'author': u'Th.L. (thl-cmk[at]outlook[dot]com)', - 'description': u"Monitor status of virtual systems in Check Point vsx/vsls cluster.\n\n - creates one check for every virtual system. \n - check goes critical if virtual system status is not 'Active' or 'Standby'\n - longoutput gives details for each virtual system.\n - monitors VSX virtual system counters (connections/packets/bytes/logs).\n", +{'author': 'Th.L. (thl-cmk[at]outlook[dot]com)', + 'description': 'Monitor status of virtual systems in Check Point vsx/vsls ' + 'cluster.\n' + '\n' + ' - creates one check for every virtual system. \n' + ' - check goes critical if virtual system status is not ' + "'Active' or 'Standby'\n" + ' - longoutput gives details for each virtual system.\n' + ' - monitors VSX virtual system counters ' + '(connections/packets/bytes/logs).\n', 'download_url': 'https://thl-cmk.hopto.org', - 'files': {'checks': ['checkpoint_vsx'], + 'files': {'agent_based': ['checkpoint_vsx.ps'], 'web': ['plugins/metrics/checkpoint_vsx.py']}, 'name': 'checkpoint_vsx', 'num_files': 2, - 'title': u'Check Point VSX system status and counter', - 'version': '20200608.v.0.2', - 'version.min_required': '1.2.8b8', - 'version.packaged': '1.4.0p38'} \ No newline at end of file + 'title': 'Check Point VSX system status and counter', + 'version': '20210906.v.0.3', + 'version.min_required': '2.0.0', + 'version.packaged': '2021.07.14', + 'version.usable_until': None} \ No newline at end of file diff --git a/web/plugins/metrics/checkpoint_vsx.py b/web/plugins/metrics/checkpoint_vsx.py index 11d39c5..a4700f2 100644 --- a/web/plugins/metrics/checkpoint_vsx.py +++ b/web/plugins/metrics/checkpoint_vsx.py @@ -1,5 +1,5 @@ -#!/usr/bin/python -# -*- encoding: utf-8; py-indent-offset: 4 -*- +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- # # License: GNU General Public License v2 # @@ -10,6 +10,13 @@ # Check Point VSX status metrics plugin # checkpoint_vsx # +from cmk.gui.i18n import _ + +from cmk.gui.plugins.metrics import ( + metric_info, + graph_info, + perfometer_info, +) metric_info['checkpoint_vsx_connections'] = { 'title': _('Connections active'), 'unit': 'count', @@ -83,15 +90,15 @@ check_metrics['check_mk-checkpoint_vsx'] = { 'logges_send': {'name': 'checkpoint_vsx_logges_send', }, } -graph_info.append({ +graph_info['checkpoint_vsx_connections']={ 'title': _('Check Point VSX: Connections'), 'metrics': [ ('checkpoint_vsx_connections_peak', 'line'), ('checkpoint_vsx_connections', 'area'), ] -}) +} -graph_info.append({ +graph_info['checkpoint_vsx_packets']={ 'title': _('Check Point VSX: Packets'), 'metrics': [ ('checkpoint_vsx_packets_rejected', 'line'), @@ -99,24 +106,23 @@ graph_info.append({ ('checkpoint_vsx_packets_accepted', 'line'), ('checkpoint_vsx_packets_processed', 'line'), ] -}) +} -graph_info.append({ +graph_info['checkpoint_vsx_bytes']={ 'title': _('Check Point VSX: Bytes'), 'metrics': [ ('checkpoint_vsx_bytes_rejected', 'line'), ('checkpoint_vsx_bytes_dropped', 'line'), ('checkpoint_vsx_bytes_accepted', 'line'), ] -}) +} -graph_info.append({ +graph_info['checkpoint_vsx_logges_send']={ 'title': _('Check Point VSX: Logs'), 'metrics': [ ('checkpoint_vsx_logges_send', 'line'), ] -}) - +} perfometer_info.append(('stacked', [ { @@ -132,3 +138,4 @@ perfometer_info.append(('stacked', [ 'exponent': 2, }, ])) + -- GitLab