From 57e7227470aef691f744777eb62b7443df587ac6 Mon Sep 17 00:00:00 2001 From: "th.l" <thl-cmk@outlook.com> Date: Mon, 26 Jun 2023 19:23:49 +0200 Subject: [PATCH] update project --- agent_based/checkpoint_vsx_system.py | 51 ++------ checkman/checkpoint_vsx_system | 51 +++----- checkpoint_vsx_system-0.5.1-20230626.mkp | Bin 0 -> 7797 bytes checkpoint_vsx_system.mkp | Bin 0 -> 7797 bytes gui/metrics/checkpoint_vsx_system.py | 118 +++++++++++++++--- .../check_parameters/checkpoint_vsx_system.py | 7 +- packages/checkpoint_vsx_system | 42 +++++-- 7 files changed, 163 insertions(+), 106 deletions(-) create mode 100644 checkpoint_vsx_system-0.5.1-20230626.mkp create mode 100644 checkpoint_vsx_system.mkp diff --git a/agent_based/checkpoint_vsx_system.py b/agent_based/checkpoint_vsx_system.py index 8dfb77a..e9b0086 100644 --- a/agent_based/checkpoint_vsx_system.py +++ b/agent_based/checkpoint_vsx_system.py @@ -26,7 +26,8 @@ # 2023-06-17: added support for predicted levels for connection active # changed bytes/packets metrics to check_levels/check_levels_predictive # 2023-06-18: cleanup variable names to better meet python standards -# +# 2023-06-23: fixed _render_per_second to output non scientific format +# changed _render_per_second to match output in metrics # # snmpwalk sample @@ -55,50 +56,16 @@ # .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 # -# sample section -# section = { -# 'VSXGateway': CheckpointVsx( -# vsxStatusVSId='0', vsxStatusVsType='VSX Gateway', vsxStatusMainIP='10.10.2.3', -# vsxStatusPolicyName='Policy1', vsxStatusVsPolicyType='Active', -# vsxStatusSicTrustState='Trust established', vsxStatusHAState='Active', -# vsxStatusVSWeight='0', vsxCountersConnNum=31, vsxCountersConnPeakNum=140, -# vsxCountersConnTableLimit=14900, -# metrics_rate=[ -# ('packets_processed', 315101), ('packets_dropped', 23), -# ('packets_accepted', 315078), ('packets_rejected', 0), -# ('bytes_accepted', 196127045), ('bytes_dropped', 1380), -# ('bytes_rejected', 0), ('loggs_send', 534)] -# ), -# 'VSSwitch': CheckpointVsx( -# vsxStatusVSId='2', vsxStatusVsType='Virtual Switch', vsxStatusMainIP='N/A', -# vsxStatusPolicyName='InitialPolicy', vsxStatusVsPolicyType='Initial Policy', -# vsxStatusSicTrustState='Trust established', vsxStatusHAState='N/A', -# vsxStatusVSWeight='0', vsxCountersConnNum=0, vsxCountersConnPeakNum=0, -# vsxCountersConnTableLimit=900, -# metrics_rate=[ -# ('packets_processed', 0), ('packets_dropped', 0), -# ('packets_accepted', 0), ('packets_rejected', 0), -# ('bytes_accepted', 0), ('bytes_dropped', 0), -# ('bytes_rejected', 0), ('loggs_send', 3)]), -# 'VirtualSystem': CheckpointVsx( -# vsxStatusVSId='3', vsxStatusVsType='Virtual System', -# vsxStatusMainIP='10.10.30.33', vsxStatusPolicyName='Standard', -# vsxStatusVsPolicyType='Active', vsxStatusSicTrustState='Trust established', -# vsxStatusHAState='Standby', vsxStatusVSWeight='0', vsxCountersConnNum=58, -# vsxCountersConnPeakNum=575, vsxCountersConnTableLimit=999900, -# metrics_rate=[ -# ('packets_processed', 9632), ('packets_dropped', 119), -# ('packets_accepted', 9513), ('packets_rejected', 0), -# ('bytes_accepted', 1494138), ('bytes_dropped', 3524), -# ('bytes_rejected', 0), ('loggs_send', 98)]), -# } -# + import ipaddress import time from dataclasses import dataclass from typing import List, Dict, Optional, Any +# import same render function as used for the metrics (undocumented for check API, and metrics as well) +from cmk.utils.render import fmt_number_with_precision + from cmk.base.plugins.agent_based.agent_based_api.v1 import ( register, Service, @@ -149,8 +116,10 @@ class CheckpointVsx: metrics_rate: List[VsxMetric] +# render the /s in the same way as in the metrics def _render_per_second(value: float) -> str: - return f'{value:.2}/s' + return fmt_number_with_precision(value, drop_zeroes=True, unit="/s") + # return f'{value:.2f}/s' def parse_checkpoint_vsx_system(string_table: StringTable) -> Optional[Dict[str, CheckpointVsx]]: @@ -334,7 +303,7 @@ def check_checkpoint_vsx_system(item, params, section: Dict[str, CheckpointVsx]) ) except GetRateError: continue - # yield Metric(name=f'checkpoint_vsx_{key}', value=value, boundaries=(0, None)) + yield from check_levels_predictive( value=value, metric_name=f'checkpoint_vsx_{metric.name}', diff --git a/checkman/checkpoint_vsx_system b/checkman/checkpoint_vsx_system index 7cf5bf2..da16eb1 100644 --- a/checkman/checkpoint_vsx_system +++ b/checkman/checkpoint_vsx_system @@ -1,43 +1,32 @@ -title: Check Point VSX gateway state monitoring +title: Check Point VSX device agents: snmp +catalog: hw/network/checkpoint +license: GPLv2 +distribution: https://thl-cmk.hopto.org/gitlab/checkmk/check-point/gateway/checkpoint_vsx_system author: thl-cmk[at]outlook[dot]com -catalog: see modules/catalog.py for possible values -license: GPL -distribution: check_mk description: - This plugin monitors the state of Check Point VSX gateways. - With default settings the VSX system gets {critical} if the H/A state is other than activ/standby, - the SIC trust is not established or the policy type is not active. The monitoring state becomes - {warning} if the policy name or the H/A state is differnet from discovery time. All this states are - configurable via WATO. + This plugin monitors the state of Check Point VSX devices. + + With default settings the VSX system gets {critical} if the H/A state is other than active/standby, + the SIC trust is not established or the policy type is not active. + + The monitoring state becomes {warning} if the policy name or the H/A state is different from discovery time. + + All this states are configurable via WATO. item: - The system name. + The system name of the Virtual device. + +discovery: + One service is created for each Virtual device. perfdata: - This plugin adds the following perfdata: - connections (count) - connections peak (count) - packets processed/s - packets dropped/s - packets accepted/s - packets rejected/s - bytes accepted/s - bytes dropped/s - bytes rejected/s - loggs send/s + One graph for connections active/peak/limit. + One graph for packets/s processed/dropped/accepted/rejected/. + One graph for bytes/s accepted/dropped/rejected, + One graph for loggs send/s inventory: By default the inventory will discover {Virtual Systems}. Via WATO you can change this to discover also the {VSX Gateway} itself, {Virtual Switches} and {Virtual Routers}. -parameters: -Here you can define all the monitoring states. - excample (default) parameters: - { - 'state_sic_not_established': 2, # SIC trust is not established - 'state_ha_not_act_stb': 2, # H/A state is other than activ/standby - 'state_policy_not_installed': 2, # policy type is not active - 'state_policy_changed': 1, # policy name changed - 'state_ha_changed': 1, # H/A state changed - } diff --git a/checkpoint_vsx_system-0.5.1-20230626.mkp b/checkpoint_vsx_system-0.5.1-20230626.mkp new file mode 100644 index 0000000000000000000000000000000000000000..b13b5cfbcb5a6bcf7b8d096183a935983423e903 GIT binary patch literal 7797 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 bWc@#h>;Lff|41c^UO8F&dTijX;o$xkP{&Jp literal 0 HcmV?d00001 diff --git a/checkpoint_vsx_system.mkp b/checkpoint_vsx_system.mkp new file mode 100644 index 0000000000000000000000000000000000000000..b13b5cfbcb5a6bcf7b8d096183a935983423e903 GIT binary patch literal 7797 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 bWc@#h>;Lff|41c^UO8F&dTijX;o$xkP{&Jp literal 0 HcmV?d00001 diff --git a/gui/metrics/checkpoint_vsx_system.py b/gui/metrics/checkpoint_vsx_system.py index 55692d0..451acd0 100644 --- a/gui/metrics/checkpoint_vsx_system.py +++ b/gui/metrics/checkpoint_vsx_system.py @@ -7,18 +7,42 @@ # URL : https://thl-cmk.hopto.org # Date : 2018-03-13 # -# Check Point VSX status metrics plugin -# checkpoint_vsx +# Check Point VSX status metrics plugin checkpoint_vsx_system # + +# 2023-06-23: made '/s' unit output non scientific readable numbers +# set predictive metrics to not auto graph +# 2023-06-26: added definitions for predictive monitoring +# + from cmk.gui.i18n import _ from cmk.gui.plugins.metrics.utils import ( + unit_info, metric_info, graph_info, perfometer_info, check_metrics, ) +# make /s unit to use non scientific but readable numbers +# 60.000.000 -> becomes 60M/s instead of 6e+07/s +from cmk.utils.render import fmt_number_with_precision +from cmk.gui.valuespec import Integer + +unit_info["1/s_nonscientific"] = { + "title": _("per second"), + "description": _("Frequency (displayed in events/s)"), + "symbol": _("/s"), + # "render": lambda v: "{}{}".format(scientific(v, 2), _("/s")), + "render": lambda v: fmt_number_with_precision(v, drop_zeroes=True, unit="/s"), + # "js_render": "v => cmk.number_format.scientific(v, 2) + '/s'", + "js_render": "v => cmk.number_format.fmt_number_with_precision(v, cmk.number_format.SIUnitPrefixes, 2, true)" + " + '/s'", + "stepping": "integer", # for vertical graph labels + "valuespec": Integer, +} + metric_info['checkpoint_vsx_connections'] = { 'title': _('Connections active'), 'unit': 'count', @@ -37,29 +61,29 @@ metric_info['checkpoint_vsx_connections_limit'] = { metric_info['checkpoint_vsx_packets_processed'] = { 'title': _('Packets processed'), - 'unit': '1/s', - 'color': '12/a', + 'unit': '1/s_nonscientific', + 'color': '13/a', } metric_info['checkpoint_vsx_packets_dropped'] = { 'title': _('Packets dropped'), - 'unit': '1/s', + 'unit': '1/s_nonscientific', 'color': '22/a', } metric_info['checkpoint_vsx_packets_accepted'] = { 'title': _('Packets accepted'), - 'unit': '1/s', + 'unit': '1/s_nonscientific', 'color': '32/a', } metric_info['checkpoint_vsx_packets_rejected'] = { 'title': _('Packets rejected'), - 'unit': '1/s', + 'unit': '1/s_nonscientific', 'color': '42/a', } metric_info['checkpoint_vsx_bytes_accepted'] = { 'title': _('Bytes accepted'), 'unit': 'bytes/s', - 'color': '13/a', + 'color': '16/a', } metric_info['checkpoint_vsx_bytes_dropped'] = { 'title': _('Bytes dropped'), @@ -74,13 +98,73 @@ metric_info['checkpoint_vsx_bytes_rejected'] = { metric_info['checkpoint_vsx_loggs_send'] = { 'title': _('Loggs send'), - 'unit': '1/s', + 'unit': '1/s_nonscientific', 'color': '14/a', } +metric_info['predict_checkpoint_vsx_connections'] = { + 'title': _('Predicted Connections active'), + 'unit': 'count', + 'color': '26/b', +} + +metric_info['predict_checkpoint_vsx_packets_processed'] = { + 'title': _('Predicted Packets processed'), + 'unit': '1/s_nonscientific', + 'color': '13/b', +} +metric_info['predict_checkpoint_vsx_packets_dropped'] = { + 'title': _('Predicted Packets dropped'), + 'unit': '1/s_nonscientific', + 'color': '22/b', +} +metric_info['predict_checkpoint_vsx_packets_accepted'] = { + 'title': _('Predicted Packets accepted'), + 'unit': '1/s_nonscientific', + 'color': '32/b', +} +metric_info['predict_checkpoint_vsx_packets_rejected'] = { + 'title': _('Predicted Packets rejected'), + 'unit': '1/s_nonscientific', + 'color': '42/b', +} + +metric_info['predict_checkpoint_vsx_bytes_accepted'] = { + 'title': _('Predicted Bytes accepted'), + 'unit': 'bytes/s', + 'color': '16/b', +} +metric_info['predict_checkpoint_vsx_bytes_dropped'] = { + 'title': _('Predicted Bytes dropped'), + 'unit': 'bytes/s', + 'color': '23/b', +} +metric_info['predict_checkpoint_vsx_bytes_rejected'] = { + 'title': _('Predicted Bytes rejected'), + 'unit': 'bytes/s', + 'color': '33/b', +} + +metric_info['predict_checkpoint_vsx_loggs_send'] = { + 'title': _('Predicted Loggs send'), + 'unit': '1/s_nonscientific', + 'color': '14/b', +} + + check_metrics['check_mk-checkpoint_vsx_system'] = { - 'checkpoint_vsx_connections_peak': {'auto_graph': False}, - 'checkpoint_vsx_connections_limit': {'auto_graph': False}, + 'checkpoint_vsx_connections_peak': {'auto_graph': False}, + 'checkpoint_vsx_connections_limit': {'auto_graph': False}, + # no autograph for predictive monitoring + 'predict_checkpoint_vsx_connections': {'auto_graph': False}, + 'predict_checkpoint_vsx_packets_processed': {'auto_graph': False}, + 'predict_checkpoint_vsx_packets_dropped': {'auto_graph': False}, + 'predict_checkpoint_vsx_packets_accepted': {'auto_graph': False}, + 'predict_checkpoint_vsx_packets_rejected': {'auto_graph': False}, + 'predict_checkpoint_vsx_bytes_accepted': {'auto_graph': False}, + 'predict_checkpoint_vsx_bytes_dropped': {'auto_graph': False}, + 'predict_checkpoint_vsx_bytes_rejected': {'auto_graph': False}, + 'predict_checkpoint_vsx_loggs_send': {'auto_graph': False}, } graph_info['checkpoint_vsx_connections'] = { @@ -109,9 +193,9 @@ graph_info['checkpoint_vsx_packets'] = { 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'), + ('checkpoint_vsx_bytes_rejected', 'stack'), + ('checkpoint_vsx_bytes_dropped', 'stack'), + ('checkpoint_vsx_bytes_accepted', 'stack'), ] } @@ -126,13 +210,13 @@ perfometer_info.append(('stacked', [ { 'type': 'logarithmic', 'metric': 'checkpoint_vsx_connections', - 'half_value': 50000.0, + 'half_value': 1000000.0, 'exponent': 2, }, { 'type': 'logarithmic', - 'metric': 'checkpoint_vsx_packets_processed', - 'half_value': 50000.0, + 'metric': 'checkpoint_vsx_bytes_accepted', + 'half_value': 10000000.0, 'exponent': 2, }, ])) diff --git a/gui/wato/check_parameters/checkpoint_vsx_system.py b/gui/wato/check_parameters/checkpoint_vsx_system.py index f9ad001..804353c 100644 --- a/gui/wato/check_parameters/checkpoint_vsx_system.py +++ b/gui/wato/check_parameters/checkpoint_vsx_system.py @@ -16,8 +16,6 @@ from cmk.gui.i18n import _ from cmk.gui.valuespec import ( Dictionary, TextAscii, - Tuple, - Integer, MonitoringState, ListChoice, TextUnicode, @@ -63,7 +61,9 @@ def _parameter_valuespec_checkpoint_vsx_system(): ('state_sic_not_established', MonitoringState( title=_('State if SIC is not established'), - help=_('Monitoring state if SIC (Secure Internal Communication) is not established. Default is "CRIT"'), + help=_( + 'Monitoring state if SIC (Secure Internal Communication) is not established. Default is "CRIT"' + ), default_value=2, )), ('levels_bytes_accepted', Levels(title=_('Levels for Bytes Accepted'), unit=_('Bytes/s'), )), @@ -77,7 +77,6 @@ def _parameter_valuespec_checkpoint_vsx_system(): ('levels_packets_processed', Levels(title=_('Levels for Packets Processed'), unit=_('Packets/s'), )), # added by plugin discovery function -> hidden key ('policyname', TextUnicode()), - # added by plugin discovery function -> hidden key ('ha_state', TextUnicode()), ], hidden_keys=['policyname', 'ha_state'], diff --git a/packages/checkpoint_vsx_system b/packages/checkpoint_vsx_system index 65f7d43..52b851b 100644 --- a/packages/checkpoint_vsx_system +++ b/packages/checkpoint_vsx_system @@ -1,24 +1,40 @@ {'author': 'Th.L. (thl-cmk[at]outlook[dot]com)', - 'description': 'Monitor status of virtual systems in Check Point vsx/vsls ' - 'cluster.\n' + 'description': 'Monitors the status of a Check Point VSX/VSLS system\n' '\n' - ' - creates one check for each virtual system. \n' - ' - check goes critical if virtual system status is not ' - "'Active' or 'Standby'\n" - ' - long output gives details for each virtual system.\n' - ' - monitors VSX virtual system counters ' - '(connections/packets/bytes/logs).\n' - ' - supersedes checkpoint_vsx, checkpoint_vsx_connections, ' - 'checkpoint_vsx_traffic, checkpoint_vsx_packets and ' - 'checkpoint_vsx_status\n', + ' - creates one service for each discovered system (see ' + 'Discovery rules)\n' + ' Virtual Systems, VSX Gateways, Virtual Routers, Virtual ' + 'Switches \n' + ' - long output includes:\n' + ' System name, Main IP, VS ID and type, HA status, SIC ' + 'status, Weight, Policy name and type\n' + ' - performance data include:\n' + ' Connections: active/peak/limit\n' + ' Packets /s: processed/accepted/dropped/rejected\n' + ' Bytes /s: accepted/dropped/rejected\n' + ' Logs send /s\n' + ' - all performance data allow predictive monitoring\n' + ' - monitoring state can be configured for\n' + ' HA state not Active/Standby\n' + ' HA state has changed from discovery time\n' + ' no policy installed\n' + ' policy name has changed\n' + ' SIC is not established\n' + ' - supersedes the build in checks\n' + ' checkpoint_vsx\n' + ' checkpoint_vsx_connections\n' + ' checkpoint_vsx_traffic\n' + ' checkpoint_vsx_packets\n' + ' checkpoint_vsx_status\n' + ' \n', 'download_url': 'https://thl-cmk.hopto.org/gitlab/checkmk/check-point/gateway/checkpoint_vsx_system', 'files': {'agent_based': ['checkpoint_vsx_system.py'], 'checkman': ['checkpoint_vsx_system'], 'gui': ['metrics/checkpoint_vsx_system.py', 'wato/check_parameters/checkpoint_vsx_system.py']}, 'name': 'checkpoint_vsx_system', - 'title': 'Check Point VSX system status and counter', - 'version': '0.5.0-20230619', + 'title': 'Check Point VSX status and counters', + 'version': '0.5.1-20230626', 'version.min_required': '2.1.0b1', 'version.packaged': '2.2.0p2', 'version.usable_until': None} -- GitLab