From 0553542f81932256cec123262de129c99b157011 Mon Sep 17 00:00:00 2001 From: "th.l" <thl-cmk@outlook.com> Date: Mon, 6 Mar 2023 06:22:53 +0100 Subject: [PATCH] update project --- agent_based/checkpoint_fw_connections.py | 63 +++++++++--------- checkpoint_fw_connections.mkp | Bin 4671 -> 4777 bytes gui/metrics/checkpoint_fw_connections.py | 32 ++++++++- gui/wato/checkpoint_fw_connections.py | 79 ++++++++++------------- 4 files changed, 96 insertions(+), 78 deletions(-) diff --git a/agent_based/checkpoint_fw_connections.py b/agent_based/checkpoint_fw_connections.py index ea85933..4af20aa 100644 --- a/agent_based/checkpoint_fw_connections.py +++ b/agent_based/checkpoint_fw_connections.py @@ -21,8 +21,11 @@ # added relative thresholds (idea and code based on cmk PR #312 by https://github.com/gradecke) # added lower levels and admin_table_limit, removed default values except for 'levels_upper_relative' # 2023-03-04: changed for CMK 2.1 (moved gui files from local/share/.. to local/lib/..) +# removed default levels for Connection limits (Percent) +# removed dependencies between relative and absolute levels +# added predictive monitoring for current connections absolute and relative # -# + # sample string_table # [[[u'559684419', u'203840211', u'51093794', u'786231', u'815404655', u'0']], [[u'11172', u'27598', u'0']]] # @@ -39,6 +42,7 @@ from cmk.base.plugins.agent_based.agent_based_api.v1 import ( Service, Result, check_levels, + check_levels_predictive, State, SNMPTree, all_of, @@ -99,10 +103,17 @@ def discovery_checkpoint_fw_connections(section: CheckpointFwConnections) -> Dis def check_checkpoint_fw_connections(params, section: CheckpointFwConnections) -> CheckResult: - fwConnTableLimit = params.get('admin_table_limit', section.fwConnTableLimit) + fwConnTableLimit = max(params.get('admin_table_limit', section.fwConnTableLimit), section.fwConnTableLimit) if fwConnTableLimit > 0: - yield from check_levels( + yield from check_levels_predictive( + value=section.fwCurrnetNumConn * 100 / fwConnTableLimit, + levels=params.get('levels_upper_relative'), + boundaries=(0, 100), + label='Connections relative', + render_func=render.percent, + metric_name='checkpoint_fw_connections_relative' + ) if isinstance(params.get('levels_upper_relative'), dict) else check_levels( value=section.fwCurrnetNumConn * 100 / fwConnTableLimit, levels_upper=params.get('levels_upper_relative'), levels_lower=params.get('levels_lower_relative'), @@ -112,30 +123,20 @@ def check_checkpoint_fw_connections(params, section: CheckpointFwConnections) -> 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)), + ('Current', '', 'fwcurrentnumconn', section.fwCurrnetNumConn, params.get('levels_upper_absolute'), + params.get('levels_lower_absolute')), + ('Peak', '', 'fwpeaknumconn', section.fwPeakNumConn, None, None), + ('Rate', '/s', 'fwconnectionrate', section.fwConnectionRate, None, None), ]: - yield from check_levels( + yield from check_levels_predictive( + value=value, + label=label, + metric_name=f'checkpoint_fw_connections_{metric}', + render_func=lambda v: f'{v:.0f}{unit}', + levels=levels_upper, + boundaries=(0, None), + ) if isinstance(levels_upper, dict) else check_levels( value=value, label=label, metric_name=f'checkpoint_fw_connections_{metric}', @@ -145,12 +146,12 @@ def check_checkpoint_fw_connections(params, section: CheckpointFwConnections) -> boundaries=(0, None), ) - if fwConnTableLimit == 0: + if section.fwConnTableLimit == 0 and params.get('admin_table_limit', 0) == 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}') + elif section.fwConnTableLimit > params.get('admin_table_limit', 0): + yield Result(state=State.OK, summary=f'Table limit: {section.fwConnTableLimit} (set on firewall)') else: - yield Result(state=State.OK, summary=f'Table limit: {section.fwConnTableLimit} (CMK admin limit') + yield Result(state=State.OK, summary=f'Table limit: {params.get("admin_table_limit", 0)} (CMK admin limit)') now_time = time.time() value_store = get_value_store() @@ -212,7 +213,5 @@ register.check_plugin( discovery_function=discovery_checkpoint_fw_connections, check_function=check_checkpoint_fw_connections, check_ruleset_name='checkpoint_fw_connections', - check_default_parameters={ - 'levels_upper_relative': (80, 90), - } + check_default_parameters={}, ) diff --git a/checkpoint_fw_connections.mkp b/checkpoint_fw_connections.mkp index 4201b73e6891a94f92edcd26745ba6f61638831e..bef9fa5b7d8efc483098b26836661029620c9c4f 100644 GIT binary patch delta 4719 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 delta 4607 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 diff --git a/gui/metrics/checkpoint_fw_connections.py b/gui/metrics/checkpoint_fw_connections.py index 62d926b..9800ac8 100644 --- a/gui/metrics/checkpoint_fw_connections.py +++ b/gui/metrics/checkpoint_fw_connections.py @@ -10,8 +10,8 @@ # Check Point Firewall connections metrics plugins # checkpoint_fw_connections # -# 2023-02-18: moved metrics file from ~/local/share/check_mk/... to ~/local/lib/check_mk/... -# +# 2023-03-04: moved metrics file from ~/local/share/check_mk/... to ~/local/lib/check_mk/... +# added predictive metrics from cmk.gui.i18n import _ @@ -19,8 +19,28 @@ from cmk.gui.plugins.metrics.utils import ( metric_info, graph_info, perfometer_info, + check_metrics, ) +# for predictive monitoring +check_metrics["check_mk-checkpoint_fw_connections"] = { + "predict_checkpoint_fw_connections_fwcurrentnumconn": {"auto_graph": False}, + "predict_checkpoint_fw_connections_relative": {"auto_graph": False}, +} +metric_info['predict_checkpoint_fw_connections_fwcurrentnumconn'] = { + 'title': _('_Predicted connections (absolute)'), + 'unit': 'count', + 'color': '26/b', +} + +metric_info['predict_checkpoint_fw_connections_relative'] = { + 'title': _('_Predicted connections (relative)'), + 'unit': '%', + 'color': '36/b', +} +# + +# normal metrics metric_info['checkpoint_fw_connections_fwconnectionstcp'] = { 'title': _('TCP connections'), 'unit': '1/s', @@ -72,6 +92,7 @@ metric_info['checkpoint_fw_connections_relative'] = { graph_info['checkpoint_fw_connections_fwpeaknumconn'] = { 'title': _('Check Point Firewall Connections absolute'), 'metrics': [ + ('predict_checkpoint_fw_connections_fwcurrentnumconn', 'line'), ('checkpoint_fw_connections_fwcurrentnumconn', 'area'), ('checkpoint_fw_connections_fwpeaknumconn', 'line'), ], @@ -79,11 +100,15 @@ graph_info['checkpoint_fw_connections_fwpeaknumconn'] = { ('checkpoint_fw_connections_fwcurrentnumconn:crit', _('crit')), ('checkpoint_fw_connections_fwcurrentnumconn:warn', _('warn')), ], + 'optional_metrics': [ + 'predict_checkpoint_fw_connections_fwcurrentnumconn', + ], } graph_info['checkpoint_fw_connections_relative'] = { 'title': _('Check Point Firewall Connections relative to connection table limit'), 'metrics': [ + ('predict_checkpoint_fw_connections_relative', 'line'), ('checkpoint_fw_connections_relative', 'area'), ], 'scalars': [ @@ -91,6 +116,9 @@ graph_info['checkpoint_fw_connections_relative'] = { ('checkpoint_fw_connections_relative:warn', _('warn')), ], 'range': (0, 110), + 'optional_metrics': [ + 'predict_checkpoint_fw_connections_relative', + ], } graph_info['checkpoint_fw_connections_fwconnectionstcp'] = { diff --git a/gui/wato/checkpoint_fw_connections.py b/gui/wato/checkpoint_fw_connections.py index d72a8a2..a1bf473 100644 --- a/gui/wato/checkpoint_fw_connections.py +++ b/gui/wato/checkpoint_fw_connections.py @@ -7,10 +7,11 @@ # URL : https://thl-cmk.hopto.org # Date : 2020-06-07 # -# 2023-02-18: moved wato file from ~/local/share/check_mk/... to ~/local/lib/check_mk/... +# 2023-03-04: moved wato file from ~/local/share/check_mk/... to ~/local/lib/check_mk/... +# fix: CheckParameterRulespecWithItem -> CheckParameterRulespecWithoutItem +# changed levels_upper_absolute/levels_upper_relative from Tuple to Levels for predictive monitoring # - from cmk.gui.i18n import _ from cmk.gui.valuespec import ( Dictionary, @@ -19,66 +20,57 @@ from cmk.gui.valuespec import ( Percentage, ) from cmk.gui.plugins.wato.utils import ( - CheckParameterRulespecWithItem, + CheckParameterRulespecWithoutItem, rulespec_registry, RulespecGroupCheckParametersNetworking, + Levels, ) def _parameter_valuespec_checkpoint_fw_connections(): return Dictionary( elements=[ - ('levels_upper_absolute', - Tuple( - 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'), minvalue=0, unit=_('connections')), - Integer(title=_('Critical at'), minvalue=0, unit=_('connections')), - ])), - ('levels_lower_absolute', - Tuple( - 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 blow'), minvalue=0, unit=_('connections')), - Integer(title=_('Critical below'), minvalue=0, 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 ' + title=_('Connection table limit'), + help=_('This 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' + 'relative metrics. This setting takes precedence over the the onnection table limit ' + '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', + ('levels_upper_absolute', + Levels( + title=_('Max. connections (Absolute)'), + help=_('This sets the upper limits for the current number of connections through the firewall.'), + unit=_('connections'), + )), + ('levels_lower_absolute', 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'), + title=_('Min. connections (Absolute)'), + help=_('This sets the lower limits for the current number of connections through the firewall. ' + '"Min. connections (Absolute)" will only be used if "Max. connections (Absolute)" is not using ' + 'Predictive Levels.'), elements=[ - Percentage( - title=_('Warning at'), unit='%', minvalue=0.0, maxvalue=100.0, default_value=80.0), - Percentage( - title=_('Critical at'), unit='%', minvalue=0.0, maxvalue=100.0, default_value=90.0), + Integer(title=_('Warning blow'), minvalue=0, unit=_('connections')), + Integer(title=_('Critical below'), minvalue=0, unit=_('connections')), ])), + ('levels_upper_relative', + Levels( + title=_('Max. connections (Percentage)'), + help=_('This relative threshold can only be used if a connection table limit is defined (on the ' + 'firewall side or with the above "Connection table limit").By default, this limit is not ' + 'set on Check Point devices.'), + unit=_('%'), + )), ('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'), + title=_('Min. connections (Percentage)'), + help=_('This relative threshold can only be used if a maximum number is defined (on the ' + 'firewall side or with the above "Connection table limit"). By default, this limit is not ' + 'set on Check Point devices.'), elements=[ Percentage( title=_('Warning below'), unit='%', minvalue=0.0, maxvalue=100.0), @@ -86,12 +78,11 @@ def _parameter_valuespec_checkpoint_fw_connections(): title=_('Critical below'), unit='%', minvalue=0.0, maxvalue=100.0), ])), ], - # optional_keys=['levels_upper_relative'], ) rulespec_registry.register( - CheckParameterRulespecWithItem( + CheckParameterRulespecWithoutItem( check_group_name='checkpoint_fw_connections', group=RulespecGroupCheckParametersNetworking, match_type='dict', -- GitLab