diff --git a/agent_based/checkpoint_vsx.py b/agent_based/checkpoint_vsx.py index c0ad057b3ac9b66e49a23711740a0a2e4fbecbf6..878da36edd65f48bec2a54c3c735b5f82cdd793e 100644 --- a/agent_based/checkpoint_vsx.py +++ b/agent_based/checkpoint_vsx.py @@ -16,6 +16,9 @@ # 2020-06-08: changed snmp-scan function # 2021-09-06: rewritten for CMK 2.0 # +# ToDo: create WATO for discovery and check function, +# if we discover other than 'virtual system' we need to adjust parse/check function +# # snmpwalk sample # # .1.3.6.1.4.1.2620.1.16.22.1.1.1.3.0 = Gauge32: 2 @@ -81,7 +84,6 @@ class CheckpointVsx: vsxCountersConnNum: int vsxCountersConnPeakNum: int vsxCountersConnTableLimit: int - vsxCountersIsDataValid: str metrics_rate: List[Tuple[str, int]] @@ -93,43 +95,43 @@ def parse_checkpoint_vsx_system(string_table: StringTable) -> Optional[Dict[str, vsxStatusSicTrustState, vsxStatusHAState, vsxStatusVSWeight, vsxCountersConnNum, vsxCountersConnPeakNum, \ vsxCountersConnTableLimit, vsxCountersPackets, vsxCountersDroppedTotal, vsxCountersAcceptedTotal, \ vsxCountersRejectedTotal, vsxCountersBytesAcceptedTotal, vsxCountersBytesDroppedTotal, \ - vsxCountersBytesRejectedTotal, vsxCountersLoggedTotal, vsxCountersIsDataValid = entry + vsxCountersBytesRejectedTotal, vsxCountersLoggedTotal = 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=[ - ('packets_processed', int(vsxCountersPackets)), - ('packets_dropped', int(vsxCountersDroppedTotal)), - ('packets_accepted', int(vsxCountersAcceptedTotal)), - ('packets_rejected', int(vsxCountersRejectedTotal)), - ('bytes_accepted', int(vsxCountersBytesAcceptedTotal)), - ('bytes_dropped', int(vsxCountersBytesDroppedTotal)), - ('bytes_rejected', int(vsxCountersBytesRejectedTotal)), - ('loggs_send', int(vsxCountersLoggedTotal)), - ], - ) + # 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), + metrics_rate=[ + ('packets_processed', int(vsxCountersPackets)), + ('packets_dropped', int(vsxCountersDroppedTotal)), + ('packets_accepted', int(vsxCountersAcceptedTotal)), + ('packets_rejected', int(vsxCountersRejectedTotal)), + ('bytes_accepted', int(vsxCountersBytesAcceptedTotal)), + ('bytes_dropped', int(vsxCountersBytesDroppedTotal)), + ('bytes_rejected', int(vsxCountersBytesRejectedTotal)), + ('loggs_send', int(vsxCountersLoggedTotal)), + ], + ) return vsx_systems -def discovery_checkpoint_vsx_system(section: Dict[str, CheckpointVsx]) -> DiscoveryResult: +def discovery_checkpoint_vsx_system(params, section: Dict[str, CheckpointVsx]) -> DiscoveryResult: for key in section.keys(): - yield Service( - item=key, - parameters={'policyname': section[key].vsxStatusPolicyName, 'ha_state': section[key].vsxStatusHAState} - ) + if section[key].vsxStatusVsType.lower() in params['vsType']: + yield Service( + item=key, + parameters={'policyname': section[key].vsxStatusPolicyName, 'ha_state': section[key].vsxStatusHAState} + ) def check_checkpoint_vsx_system(item, params, section: Dict[str, CheckpointVsx]) -> CheckResult: @@ -139,66 +141,65 @@ def check_checkpoint_vsx_system(item, params, section: Dict[str, CheckpointVsx]) yield Result(state=State.UNKNOWN, notice='Item not found in SNMP data') return - now_time = time.time() - value_store = get_value_store() - metrics_prefix = 'checkpoint_vsx_' - - for key, value in vsx.metrics_rate: - try: - value = get_rate(value_store, f'{metrics_prefix}{key}', now_time, int(value), raise_overflow=True) - except GetRateError: - value = 0 - yield Metric(name=f'checkpoint_vsx_{key}', value=value, boundaries=(0, None)) + if not vsx.vsxStatusSicTrustState.lower() in ['trust established']: + yield Result(state=State.WARN, notice='SIC not established') - # system information - yield Result(state=State.OK, summary=f'Main IP: {vsx.vsxStatusMainIP}, VS ID: {vsx.vsxStatusVSId}', details=' ') - # Counters - # infotext = f'Connections: {vsx.vsxCountersConnNum:.0f}, ' \ - # f'Packets prosessed: {vsx.vsxCountersPackets:.0f}/s, ' \ - # f'Logs send: {vsx.vsxCountersLoggedTotal:0.2f}/s') + if vsx.vsxStatusVsType.lower() == 'virtual system': + yield Result(state=State.OK, notice=f'System name: {item}') + yield Result(state=State.OK, summary=f'Main IP: {vsx.vsxStatusMainIP}') + yield Result(state=State.OK, summary=f'VS ID: {vsx.vsxStatusVSId}', details='Virtual system ID:') + yield Result(state=State.OK, notice=f'System type: {vsx.vsxStatusVsType}') - yield Result(state=State.OK, notice=f'System name: {item}') - 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}') + if not vsx.vsxStatusHAState.lower() in ['active', 'standby']: + yield Result(state=State.WARN, summary=f'H/A Status: {vsx.vsxStatusHAState}') + else: + yield Result(state=State.OK, summary=f'H/A Status: {vsx.vsxStatusHAState}') - 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 not vsx.vsxStatusVsPolicyType.lower() in ['active']: + yield Result(state=State.CRIT, notice='No policy installed') - if vsx.vsxCountersConnTableLimit > 0: - yield Metric(value=vsx.vsxCountersConnNum, name=f'{metrics_prefix}connections', - boundaries=(0, vsx.vsxCountersConnTableLimit), - levels=(None, vsx.vsxCountersConnTableLimit)) - else: - yield Metric(value=vsx.vsxCountersConnNum, name=f'{metrics_prefix}connections') - yield Metric(value=vsx.vsxCountersConnPeakNum, name=f'{metrics_prefix}connections_peak') + if params['policyname'] != vsx.vsxStatusPolicyName: # policy changed + yield Result( + state=State.WARN, + notice=f'Policy name changed: expected {params["policyname"]}, found {vsx.vsxStatusPolicyName}' + ) - if not vsx.vsxStatusHAState.lower() in ['active', 'standby']: - yield Result(state=State.WARN, summary=f'H/A Status: {vsx.vsxStatusHAState}') - else: - yield Result(state=State.OK, summary=f'H/A Status: {vsx.vsxStatusHAState}') + if params['ha_state'] != vsx.vsxStatusHAState: # H/A state changed + yield Result( + state=State.WARN, + notice=f'State changed: expected/found {params["ha_state"]}/{vsx.vsxStatusHAState}' + ) - if not vsx.vsxStatusSicTrustState.lower() in ['trust established']: - yield Result(state=State.WARN, notice='SIC not established') + yield Result(state=State.OK, notice=f'SIC status: {vsx.vsxStatusSicTrustState}') + yield Result(state=State.OK, notice=f'Weight: {vsx.vsxStatusVSWeight}') + yield Result(state=State.OK, notice=f'Policy name: {vsx.vsxStatusPolicyName}') + yield Result(state=State.OK, notice=f'Policy type: {vsx.vsxStatusVsPolicyType}') - if not vsx.vsxStatusVsPolicyType.lower() in ['active']: - yield Result(state=State.CRIT, notice='No policy installed') + # metrics rate + now_time = time.time() + value_store = get_value_store() + metrics_prefix = 'checkpoint_vsx_' - if params['policyname'] != vsx.vsxStatusPolicyName: # policy changed - yield Result( - state=State.WARN, - notice=f'Policy name changed: expected {params["policyname"]}, found {vsx.vsxStatusPolicyName}' - ) + for key, value in vsx.metrics_rate: + try: + value = get_rate(value_store, f'{metrics_prefix}{key}', now_time, int(value), raise_overflow=True) + except GetRateError: + value = 0 + yield Metric(name=f'checkpoint_vsx_{key}', value=value, boundaries=(0, None)) - if params['ha_state'] != vsx.vsxStatusHAState: # H/A state changed - yield Result( - state=State.WARN, - notice=f'State changed: expected/found {params["ha_state"]}/{vsx.vsxStatusHAState}' - ) + # metrics count + if vsx.vsxCountersConnTableLimit > 0: + yield Metric(value=vsx.vsxCountersConnNum, name=f'{metrics_prefix}connections', + boundaries=(0, vsx.vsxCountersConnTableLimit), + levels=(None, vsx.vsxCountersConnTableLimit)) + else: + yield Metric(value=vsx.vsxCountersConnNum, name=f'{metrics_prefix}connections') + yield Metric(value=vsx.vsxCountersConnPeakNum, name=f'{metrics_prefix}connections_peak') + else: + yield Result(state=State.OK, notice=f'System name: {item}') + yield Result(state=State.OK, summary=f'Virtual system ID: {vsx.vsxStatusVSId}') + yield Result(state=State.OK, summary=f'System Type: {vsx.vsxStatusVsType}') + yield Result(state=State.OK, summary=f'SIC status: {vsx.vsxStatusSicTrustState}') register.snmp_section( @@ -234,7 +235,6 @@ register.snmp_section( '23.1.1.10', # vsxCountersBytesDroppedTotal '23.1.1.11', # vsxCountersBytesRejectedTotal '23.1.1.12', # vsxCountersLoggedTotal - '23.1.1.13', # vsxCountersIsDataValid ]), detect=any_of( startswith('.1.3.6.1.2.1.1.2.0', '.1.3.6.1.4.1.2620'), @@ -249,9 +249,11 @@ register.check_plugin( name='checkpoint_vsx_system', service_name='VSX System %s', discovery_function=discovery_checkpoint_vsx_system, - check_function=check_checkpoint_vsx_system, - check_ruleset_name='checkpoint_vsx_system', - check_default_parameters={ + discovery_default_parameters={ 'vsType': ['virtual system', 'vsx gateway', 'virtual switch', 'virtual router'] }, + discovery_ruleset_name='checkpoint_vsx_system', + check_function=check_checkpoint_vsx_system, + check_default_parameters={}, + check_ruleset_name='checkpoint_vsx_system', ) diff --git a/checkpoint_vsx.mkp b/checkpoint_vsx.mkp index daaecabfd99fbd0ffe02b7a9a423efb61f5cefc4..e525a9f0688635f90ce09cb9e890fcc109d818fd 100644 Binary files a/checkpoint_vsx.mkp and b/checkpoint_vsx.mkp differ diff --git a/web/plugins/metrics/checkpoint_vsx.py b/web/plugins/metrics/checkpoint_vsx.py index d423fd967109977d7106c2ef5c727669b968cfe2..a10e97649d63710b1e1e20679ebc7409f8bf7931 100644 --- a/web/plugins/metrics/checkpoint_vsx.py +++ b/web/plugins/metrics/checkpoint_vsx.py @@ -111,7 +111,7 @@ graph_info['checkpoint_vsx_bytes'] = { graph_info['checkpoint_vsx_logges_send'] = { 'title': _('Check Point VSX: Logs'), 'metrics': [ - ('checkpoint_vsx_logges_send', 'line'), + ('checkpoint_vsx_loggs_send', 'line'), ] }