From 4694abea218658f2cd192144d3c85100cb7e1d8c Mon Sep 17 00:00:00 2001 From: "th.l" <thl-cmk@outlook.com> Date: Tue, 24 Aug 2021 21:56:55 +0200 Subject: [PATCH] update project --- agent_based/checkpoint_fw_connections.py | 215 ++++++++++++++++++ checkpoint_fw_connections.mkp | Bin 3079 -> 4447 bytes packages/checkpoint_fw_connections | 19 +- .../metrics/checkpoint_fw_connections.py | 111 +++++---- web/plugins/wato/checkpoint_fw_connections.py | 103 +++++++-- 5 files changed, 364 insertions(+), 84 deletions(-) create mode 100644 agent_based/checkpoint_fw_connections.py diff --git a/agent_based/checkpoint_fw_connections.py b/agent_based/checkpoint_fw_connections.py new file mode 100644 index 0000000..ff812b3 --- /dev/null +++ b/agent_based/checkpoint_fw_connections.py @@ -0,0 +1,215 @@ +#!/usr/bin/python +# -*- encoding: utf-8; py-indent-offset: 4 -*- +# +# License: GNU General Public License v2 +# +# Author: thl-cmk[at]outlook[dot]com +# URL : https://thl-cmk.hopto.org +# Date : 2018-03-17 +# # +# rewrite of the original checkpoint_connections check from check_mk +# +# added connection statistic details for tcp/udp/icmp/other ..... +# +# 2018-05-29: added connection limit (fwConnTableLimit) +# 2020-05-31: changed form checkpoint_connections to checkpoint_fw_connections +# changed to checkpoint_fw_connections_default_levels to +# factory_settings['checkpoint_fw_connections_defaults'] +# 2020-06-07: code cleanup, added wato, added warn/crit for connection rate +# 2020-06-08: changed snmp-scan function, code cleanup +# 2021-08-24: rewritten for CMK 2.0, +# added relative thresholds (idea and code based on cmk PR #312 by https://github.com/gradecke) +# added lower levels and admin_table_limit +# +# +# sample info +# [[[u'559684419', u'203840211', u'51093794', u'786231', u'815404655', u'0']], [[u'11172', u'27598', u'0']]] +# +# no firewall +# [[], []] +# + +import time +from dataclasses import dataclass +from typing import List, Dict, Any, Optional + +from cmk.base.plugins.agent_based.agent_based_api.v1 import ( + register, + Service, + Result, + check_levels, + State, + SNMPTree, + all_of, + startswith, + any_of, + equals, + Metric, + get_rate, + GetRateError, + get_value_store, + IgnoreResultsError, + render, +) +from cmk.base.plugins.agent_based.agent_based_api.v1.type_defs import ( + DiscoveryResult, + CheckResult, + StringTable, +) + + +@dataclass +class CheckpointFwConnections: + fwConnectionsTcp: int + fwConnectionsUdp: int + fwConnectionsIcmp: int + fwConnectionsOther: int + fwConnectionsSum: int + fwConnectionRate: int + fwCurrnetNumConn: int + fwPeakNumConn: int + fwConnTableLimit: int + + +def parse_checkpoint_fw_connections(string_table: List[StringTable]) -> Optional[CheckpointFwConnections]: + fwConnectionsStat, fwpolicystat = string_table + try: + fwConnectionsTcp, fwConnectionsUdp, fwConnectionsIcmp, fwConnectionsOther, fwConnectionsSum, \ + fwConnectionRate = fwConnectionsStat[0] + except(IndexError, ValueError): + return + + fwCurrnetNumConn, fwPeakNumConn, fwConnTableLimit = fwpolicystat[0] + + return CheckpointFwConnections( + fwConnectionsTcp=int(fwConnectionsTcp), + fwConnectionsUdp=int(fwConnectionsUdp), + fwConnectionsIcmp=int(fwConnectionsIcmp), + fwConnectionsOther=int(fwConnectionsOther), + fwConnectionsSum=int(fwConnectionsSum), + fwConnectionRate=int(fwConnectionRate), + fwCurrnetNumConn=int(fwCurrnetNumConn), + fwPeakNumConn=int(fwPeakNumConn), + fwConnTableLimit=int(fwConnTableLimit), + ) + + +def discovery_checkpoint_fw_connections(section: CheckpointFwConnections) -> DiscoveryResult: + yield Service() + + +def check_checkpoint_fw_connections(params, section: CheckpointFwConnections) -> CheckResult: + fwConnTableLimit = params.get('admin_table_limit', section.fwConnTableLimit) + + if fwConnTableLimit > 0: + yield from check_levels( + value=section.fwCurrnetNumConn * 100 / fwConnTableLimit, + levels_upper=params.get('levels_upper_relative'), + levels_lower=params.get('levels_lower_relative'), + boundaries=(0, 100), + label='Connections relative', + render_func=render.percent, + metric_name='checkpoint_fw_connections_relative' + ) + + if fwConnTableLimit > 0 and 'levels_upper_relative' in params: + warn_pct, crit_pct = params['levels_upper_relative'] + warn = fwConnTableLimit * warn_pct / 100 + crit = fwConnTableLimit * crit_pct / 100 + levels_upper = (warn, crit) + else: + # use absolute levels if no relative levels provided or no maximum set on CP + levels_upper = params.get('levels_upper_absolute', (None, None)) + + if section.fwConnTableLimit > 0 and 'levels_lower_relative' in params: + warn_pct, crit_pct = params['levels_lower_relative'] + warn = fwConnTableLimit * warn_pct / 100 + crit = fwConnTableLimit * crit_pct / 100 + levels_lower = (warn, crit) + else: + # use absolute levels if no relative levels provided or no maximum set on CP + levels_lower = params.get('levels_lower_absolute', (None, None)) + + for label, unit, metric, value, levels_upper, levels_lower in [ + ('Current', '', 'fwcurrentnumconn', section.fwCurrnetNumConn, levels_upper, levels_lower), + ('Peak', '', 'fwpeaknumconn', section.fwPeakNumConn, (None, None), (None, None)), + ('Rate', '/s', 'fwconnectionrate', section.fwConnectionRate, (None, None), (None, None)), + ]: + yield from check_levels( + value=value, + label=label, + metric_name=f'checkpoint_fw_connections_{metric}', + render_func=lambda v: f'{v:.0f}{unit}', + levels_upper=levels_upper, + levels_lower=levels_lower, + boundaries=(0, None), + ) + + if fwConnTableLimit == 0: + yield Result(state=State.OK, summary=f'Table limit: automatically adjusted') + elif section.fwConnTableLimit == fwConnTableLimit: + yield Result(state=State.OK, summary=f'Table limit: {section.fwConnTableLimit}') + else: + yield Result(state=State.OK, summary=f'Table limit: {section.fwConnTableLimit} (CMK admin limit') + + now_time = time.time() + value_store = get_value_store() + + for key, value in [ + ('fwconnectionstcp', section.fwConnectionsTcp), + ('fwconnectionsudp', section.fwConnectionsUdp), + ('fwconnectionsicmp', section.fwConnectionsIcmp), + ('fwconnectionsother', section.fwConnectionsOther), + ('fwconnectionssum', section.fwConnectionsSum), + ]: + try: + value = get_rate(value_store, f'checkpoint_fw_connections_{key}', now_time, value, raise_overflow=True) + except GetRateError: + value = 0 + yield Metric(name=f'checkpoint_fw_connections_{key}', value=value, boundaries=(0, None)) + + +register.snmp_section( + name='checkpoint_fw_connections', + parse_function=parse_checkpoint_fw_connections, + fetch=[ + SNMPTree( + base='.1.3.6.1.4.1.2620.1.1.26.11', # CHECKPOINT-MIB::fwConnectionsStat + oids=[ + '1', # fwConnectionsStatConnectionsTcp + '2', # fwConnectionsStatConnectionsUdp + '3', # fwConnectionsStatConnectionsIcmp + '4', # fwConnectionsStatConnectionsOther + '5', # fwConnectionsStatConnections + '6', # fwConnectionsStatConnectionRate + ] + ), + SNMPTree( + base='.1.3.6.1.4.1.2620.1.1.25', # CHECKPOINT-MIB::fwPolicyStat + oids=[ + '3', # fwNumConn + '4', # fwPeakNumConn + '10', # fwConnTableLimit + ] + ), + ], + detect=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'), + ) + ) +) + +register.check_plugin( + name='checkpoint_fw_connections', + service_name='Firewall connections', + discovery_function=discovery_checkpoint_fw_connections, + check_function=check_checkpoint_fw_connections, + check_ruleset_name='checkpoint_fw_connections', + check_default_parameters={ + # 'levels_upper_absolute': (10000, 20000), + # 'levels_upper_relative': (75, 85) + } +) diff --git a/checkpoint_fw_connections.mkp b/checkpoint_fw_connections.mkp index 0c78645faa44ac4e6309f9ecd9ca13573fad631b..b8cceab3eb6d87c2dd5ff7cc4ad7244e68f4aa5b 100644 GIT binary patch delta 4404 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 delta 3033 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 bAN5F+F%cq@FA)X|{_o*`q_%!X0C)fZXMW`C diff --git a/packages/checkpoint_fw_connections b/packages/checkpoint_fw_connections index 5493ab4..435d04f 100644 --- a/packages/checkpoint_fw_connections +++ b/packages/checkpoint_fw_connections @@ -1,12 +1,17 @@ -{'author': u'Th.L. (thl-cmk[at]outlook[dot]com)', - 'description': u'Monitor Check Point Firewall connection statistics.\n\nRewrite of the original check.\nAdded perfdata for peak connections and TCP, UDP, ICMP, other and total connection rate\n', +{'author': 'Th.L. (thl-cmk[at]outlook[dot]com)', + 'description': 'Monitor Check Point Firewall connection statistics.\n' + '\n' + 'Rewrite of the original check.\n' + 'Added perfdata for peak connections and TCP, UDP, ICMP, other ' + 'and total connection rate\n', 'download_url': 'https://thl-cmk.hopto.org', - 'files': {'checks': ['checkpoint_fw_connections'], + 'files': {'agent_based': ['checkpoint_fw_connections.py'], 'web': ['plugins/metrics/checkpoint_fw_connections.py', 'plugins/wato/checkpoint_fw_connections.py']}, 'name': 'checkpoint_fw_connections', 'num_files': 3, - 'title': u'Check Point Connections', - 'version': '20200608.v.0.0.2a', - 'version.min_required': '1.2.8b8', - 'version.packaged': '1.4.0p38'} \ No newline at end of file + 'title': 'Check Point Connections', + 'version': '20210824.v.0.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_fw_connections.py b/web/plugins/metrics/checkpoint_fw_connections.py index 18d1627..686768e 100644 --- a/web/plugins/metrics/checkpoint_fw_connections.py +++ b/web/plugins/metrics/checkpoint_fw_connections.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 # @@ -11,17 +11,13 @@ # checkpoint_fw_connections # -############################################################################## -# -# define units for perfdata -# -############################################################################## +from cmk.gui.i18n import _ -############################################################################## -# -# define metrics for perfdata -# -############################################################################## +from cmk.gui.plugins.metrics import ( + metric_info, + graph_info, + perfometer_info, +) metric_info['checkpoint_fw_connections_fwconnectionstcp'] = { 'title': _('TCP connections'), @@ -31,17 +27,17 @@ metric_info['checkpoint_fw_connections_fwconnectionstcp'] = { metric_info['checkpoint_fw_connections_fwconnectionsudp'] = { 'title': _('UDP connections'), 'unit': '1/s', - 'color': '12/a', + 'color': '25/a', } metric_info['checkpoint_fw_connections_fwconnectionsicmp'] = { 'title': _('ICMP connections'), 'unit': '1/s', - 'color': '13/a', + 'color': '31/a', } metric_info['checkpoint_fw_connections_fwconnectionsother'] = { 'title': _('Other connections'), 'unit': '1/s', - 'color': '14/a', + 'color': '41/a', } metric_info['checkpoint_fw_connections_fwconnectionssum'] = { 'title': _('Total connections'), @@ -65,32 +61,37 @@ metric_info['checkpoint_fw_connections_fwpeaknumconn'] = { 'color': '16/a', } +metric_info['checkpoint_fw_connections_relative'] = { + 'title': _('Connections relative'), + 'unit': '%', + 'color': '36/a', +} -############################################################################## -# -# map perfdata to metric -# -############################################################################## - - -check_metrics['check_mk-checkpoint_fw_connections'] = { - 'fwconnectionstcp': {'name': 'checkpoint_fw_connections_fwconnectionstcp', }, - 'fwconnectionsudp': {'name': 'checkpoint_fw_connections_fwconnectionsudp', }, - 'fwconnectionsicmp': {'name': 'checkpoint_fw_connections_fwconnectionsicmp', }, - 'fwconnectionsother': {'name': 'checkpoint_fw_connections_fwconnectionsother', }, - 'fwconnectionssum': {'name': 'checkpoint_fw_connections_fwconnectionssum', }, - 'fwconnectionrate': {'name': 'checkpoint_fw_connections_fwconnectionrate', }, - 'fwcurrentnumconn': {'name': 'checkpoint_fw_connections_fwcurrentnumconn', }, - 'fwpeaknumconn': {'name': 'checkpoint_fw_connections_fwpeaknumconn', }, +graph_info['checkpoint_fw_connections_fwpeaknumconn'] = { + 'title': _('Check Point Firewall Connections absolute'), + 'metrics': [ + ('checkpoint_fw_connections_fwpeaknumconn', 'line'), + ('checkpoint_fw_connections_fwcurrentnumconn', 'area'), + ], + 'scalars': [ + ('checkpoint_fw_connections_fwcurrentnumconn:crit', _('crit')), + ('checkpoint_fw_connections_fwcurrentnumconn:warn', _('warn')), + ], } -############################################################################## -# -# how to graph perdata -# -############################################################################## +graph_info['checkpoint_fw_connections_relative'] = { + 'title': _('Check Point Firewall Connections relative to connection table limit'), + 'metrics': [ + ('checkpoint_fw_connections_relative', 'area'), + ], + 'scalars': [ + ('checkpoint_fw_connections_relative:crit', _('crit')), + ('checkpoint_fw_connections_relative:warn', _('warn')), + ], + 'range': (0, 110), +} -graph_info.append({ +graph_info['checkpoint_fw_connections_fwconnectionstcp'] = { 'title': _('Check Point Firewall Connections per second'), 'metrics': [ ('checkpoint_fw_connections_fwconnectionstcp', 'stack'), @@ -100,27 +101,21 @@ graph_info.append({ ('checkpoint_fw_connections_fwconnectionssum', 'line'), ('checkpoint_fw_connections_fwconnectionrate', 'line'), ], -}) - -graph_info.append({ - 'title': _('Check Point Firewall Connections count'), - 'metrics': [ - ('checkpoint_fw_connections_fwpeaknumconn', 'line'), - ('checkpoint_fw_connections_fwcurrentnumconn', 'area'), - ], - 'scalars': [ - ('checkpoint_fw_connections_fwcurrentnumconn:crit', _('crit')), - ('checkpoint_fw_connections_fwcurrentnumconn:warn', _('warn')), - ], -}) - - -############################################################################## -# -# define perf-o-meter -# -############################################################################## +} +perfometer_info.append(('stacked', [ + { + 'type': 'linear', + 'segments': ['checkpoint_fw_connections_relative'], + 'total': 100, + }, + { + 'type': 'logarithmic', + 'metric': 'checkpoint_fw_connections_fwconnectionrate', + 'half_value': 1000.0, + 'exponent': 2, + }, +])) perfometer_info.append(('stacked', [ { @@ -135,4 +130,4 @@ perfometer_info.append(('stacked', [ 'half_value': 1000.0, 'exponent': 2, }, -])) \ No newline at end of file +])) diff --git a/web/plugins/wato/checkpoint_fw_connections.py b/web/plugins/wato/checkpoint_fw_connections.py index 5fd7be0..85dcb50 100644 --- a/web/plugins/wato/checkpoint_fw_connections.py +++ b/web/plugins/wato/checkpoint_fw_connections.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 # @@ -7,28 +7,93 @@ # URL : https://thl-cmk.hopto.org # Date : 2020-06-07 # -register_check_parameters( - subgroup_applications, - 'checkpoint_fw_connections', - _('Check Point Firewall Connections'), - Dictionary( + +from cmk.gui.i18n import _ +from cmk.gui.valuespec import ( + Dictionary, + Tuple, + Integer, + Percentage, +) +from cmk.gui.plugins.wato import ( + CheckParameterRulespecWithItem, + rulespec_registry, + RulespecGroupCheckParametersNetworking, +) + + +def _parameter_valuespec_checkpoint_fw_connections(): + return Dictionary( elements=[ - ('warncritcurrent', + ('levels_upper_absolute', Tuple( - title=_('Levels for number of current active connections'), + title=_('Maximum number of firewall connections'), + help=_('This rule sets upper limits to the current number of connections through ' + 'a Checkpoint firewall.'), elements=[ - Integer(title=_('Warning at'), default_value=1000, unit=_('Count'), allow_empty=False), - Integer(title=_('Critical at'), default_value=2000, unit=_('Count'), allow_empty=False), + Integer(title=_('Warning at'), default_value=1000, unit=_('connections')), + Integer(title=_('Critical at'), default_value=2000, unit=_('connections')), ])), - ('warncritrate', + ('levels_lower_absolute', Tuple( - title=_('Levels for number of new connections/s'), + title=_('Minimum number of firewall connections'), + help=_('This rule sets lower limits to the current number of connections through ' + 'a Checkpoint firewall.'), elements=[ - Integer(title=_('Warning at'), default_value=100, unit=_('Count'), allow_empty=False), - Integer(title=_('Critical at'), default_value=200, unit=_('Count'), allow_empty=False), + Integer(title=_('Warning blow'), default_value=100, unit=_('connections')), + Integer(title=_('Critical below'), default_value=50, unit=_('connections')), + ])), + ('admin_table_limit', + Integer( + title=_('Admin connection table limit'), + help=_('This rule sets the maximum number of connections through the firewall. This is use full ' + 'if your firewall is set to automatic connection table limit and you still want ' + 'relative metrics. This setting takes precedence over the the fwConnTableLimit ' + 'configured on the firewall (only for monitoring purposes of curse). This value should match' + 'the real values of your firewall, if not you might get relative values above 100%.'), + minvalue=0, + unit=_('connections'), + )), + ('levels_upper_relative', + Tuple( + title=_('Percentage of maximum connections (only used if a limit is defined on ' + 'the Check Point device)'), + help=_('This relative threshold can only be used if a maximum number is defined on ' + 'the firewall side and then read from fwConnTableLimit. By default, this ' + 'limit is not set in Check Point devices and this check than falls back to ' + 'the absolute defaults or the ones defined above'), + elements=[ + Percentage( + title=_('Warning at'), unit='%', minvalue=0.0, default_value=80.0, + ), + Percentage( + title=_('Critical at'), unit='%', minvalue=0.0, default_value=90.0), + ])), + ('levels_lower_relative', + Tuple( + title=_('Percentage of minimum connections (only used if a limit is defined on ' + 'the Check Point device)'), + help=_('This relative threshold can only be used if a maximum number is defined on ' + 'the firewall side and then read from fwConnTableLimit. By default, this ' + 'limit is not set in Check Point devices and this check than falls back to ' + 'the absolute defaults or the ones defined above'), + elements=[ + Percentage( + title=_('Warning below'), unit='%', minvalue=0.0, default_value=20.0, + ), + Percentage( + title=_('Critical below'), unit='%', minvalue=0.0, default_value=10.0), ])), ], - ), - None, - match_type='dict', -) \ No newline at end of file + # optional_keys=['levels_upper_relative'], + ) + + +rulespec_registry.register( + CheckParameterRulespecWithItem( + check_group_name='checkpoint_fw_connections', + group=RulespecGroupCheckParametersNetworking, + match_type='dict', + parameter_valuespec=_parameter_valuespec_checkpoint_fw_connections, + title=lambda: _('Check Point Firewall Connections'), + )) -- GitLab