diff --git a/agent_based/checkpoint_asg_smo_counters.py b/agent_based/checkpoint_asg_smo_counters.py new file mode 100644 index 0000000000000000000000000000000000000000..f67256fb873ba0241c9218c82c8a635ef0f05c47 --- /dev/null +++ b/agent_based/checkpoint_asg_smo_counters.py @@ -0,0 +1,235 @@ +#!/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 : 2020-11-09 +# +# Monitor Check Point Maestro SMO SGM Counters +# +# 2021-09-10: rewritten for CMK 2.0 +# +# +# sample snmpwalk +# .1.3.6.1.4.1.2620.1.48.20.1.0 = STRING: "111802" +# .1.3.6.1.4.1.2620.1.48.20.2.0 = STRING: "0" +# .1.3.6.1.4.1.2620.1.48.20.3.0 = STRING: "84" +# .1.3.6.1.4.1.2620.1.48.20.4.0 = STRING: "91" +# .1.3.6.1.4.1.2620.1.48.20.5.0 = STRING: "N/A" +# .1.3.6.1.4.1.2620.1.48.20.6.0 = STRING: "0" +# .1.3.6.1.4.1.2620.1.48.20.7.0 = STRING: "0" +# .1.3.6.1.4.1.2620.1.48.20.8.0 = STRING: "9" +# .1.3.6.1.4.1.2620.1.48.20.9.0 = STRING: "79" +# .1.3.6.1.4.1.2620.1.48.20.10.0 = STRING: "1" +# .1.3.6.1.4.1.2620.1.48.20.11.0 = STRING: "0" +# .1.3.6.1.4.1.2620.1.48.20.12.0 = STRING: "0" +# .1.3.6.1.4.1.2620.1.48.20.13.0 = STRING: "0" +# .1.3.6.1.4.1.2620.1.48.20.14.0 = STRING: "1" +# .1.3.6.1.4.1.2620.1.48.20.15.0 = STRING: "0" +# .1.3.6.1.4.1.2620.1.48.20.16.0 = STRING: "7" +# .1.3.6.1.4.1.2620.1.48.20.17.0 = STRING: "0" +# .1.3.6.1.4.1.2620.1.48.20.18.0 = STRING: "0" +# .1.3.6.1.4.1.2620.1.48.20.19.0 = STRING: "0" +# .1.3.6.1.4.1.2620.1.48.20.20.0 = STRING: "0" +# .1.3.6.1.4.1.2620.1.48.20.21.0 = STRING: "N/A" +# +# sample info +# [[u'111802', u'0', u'84', u'91', u'N/A', u'0', u'0', u'9', u'79', u'1', u'0', u'0', u'0', u'1', u'0', u'7', u'0', u'0', u'0', u'0', u'N/A']] +# +import time +from dataclasses import dataclass +from typing import List, Dict, NamedTuple, Optional + +from cmk.base.plugins.agent_based.agent_based_api.v1 import ( + register, + Service, + Result, + Metric, + State, + SNMPTree, + all_of, + startswith, + any_of, + equals, + check_levels, + render, +) +from cmk.base.plugins.agent_based.agent_based_api.v1.type_defs import ( + DiscoveryResult, + CheckResult, + StringTable, +) + + +def parse_checkpoint_asg_smo_counters(string_table: StringTable) -> Dict[str, Dict[str, int]]: + items = {} + for entry in string_table: + asgThroughput, asgConnectionRate, asgPacketRate, asgConcurrConn, asgClearConn, asgAccelConnectionRate, \ + asgNonAccelConnectionRate, asgAccelConcurrConn, asgNonAccelConcurrConn, asgLoad, asgAccelLoadAvg, \ + asgAccelLoadMin, asgAccelLoadMax, asgInstancesLoadAvg, asgInstancesLoadMin, asgInstancesLoadMax, \ + asgVpnThroughput, asgVpnConn, asgNatConnRate, asgNatConn, asgVsxCpu1MinAvg = entry + + items['Concurrent connections'] = { + 'asgConcurrConn': int(asgConcurrConn), + 'asgAccelConcurrConn': int(asgAccelConcurrConn), + 'asgNonAccelConcurrConn': int(asgNonAccelConcurrConn), + } + items['Connection rate'] = { + 'asgConnectionRate': int(asgConnectionRate), + 'asgAccelConnectionRate': int(asgAccelConnectionRate), + 'asgNonAccelConnectionRate': int(asgNonAccelConnectionRate), + } + + items['Load'] = { + 'asgLoad': int(asgLoad), + 'asgAccelLoadAvg': int(asgAccelLoadAvg), + 'asgAccelLoadMin': int(asgAccelLoadMin), + 'asgAccelLoadMax': int(asgAccelLoadMax), + } + + items['Instances load'] = { + 'asgInstancesLoadAvg': int(asgInstancesLoadAvg), + 'asgInstancesLoadMin': int(asgInstancesLoadMin), + 'asgInstancesLoadMax': int(asgInstancesLoadMax), + } + items['NAT'] = { + 'asgNatConnRate': int(asgNatConnRate), + 'asgNatConn': int(asgNatConn), + } + items['VPN'] = { + 'asgVpnThroughput': int(asgVpnThroughput), + 'asgVpnConn': int(asgVpnConn), + } + items['Throughput'] = { + 'asgThroughput': int(asgThroughput), + } + items['Packet rate'] = { + 'asgPacketRate': int(asgPacketRate), + } + return items + + +def discovery_checkpoint_asg_smo_counters(section:Dict[str, Dict[str, int]]) -> DiscoveryResult: + # sample parsed + # { + # 'Load': {'asgAccelLoadAvg': 0, 'asgAccelLoadMin': 0, 'asgLoad': 1, 'asgAccelLoadMax': 0}, + # 'Connection rate': {'asgConnectionRate': 0, 'asgNonAccelConnectionRate': 0, 'asgAccelConnectionRate': 0}, + # 'Instances load': {'asgInstancesLoadMin': 0, 'asgInstancesLoadMax': 7, 'asgInstancesLoadAvg': 1}, + # 'Throughput': {'asgThroughput': 111802}, + # 'Concurrent connections': {'asgAccelConcurrConn': 9, 'asgNonAccelConcurrConn': 79, 'asgConcurrConn': 91}, + # 'NAT': {'asgNatConn': 0, 'asgNatConnRate': 0}, + # 'VPN': {'asgVpnConn': 0, 'asgVpnThroughput': 0}, + # 'Packet rate': {'asgPacketRate': 84}} + # + + for item in section.keys(): + yield Service(item=item) + + +def check_checkpoint_asg_smo_counters(item, params, section:Dict[str, Dict[str, int]]) -> CheckResult: + try: + entry = section[item] + except KeyError: + yield Result(state=State.UNKNOWN, notice='Item not found in SNMP data') + return + + for key in entry.keys(): + yield Metric(value=entry[key], name=f'checkpoint_asg_mso_counters_{key}') + + if item.lower() == 'concurrent connections': + yield Result( + state=State.OK, + summary=f'all/accelerated/non accelerated: {entry["asgConcurrConn"]:d}/{entry["asgAccelConcurrConn"]:d}/{entry["asgNonAccelConcurrConn"]:d}' + ) + + elif item.lower() == 'load': + yield Result( + state=State.OK, + summary=f'current/average/min/max: {entry["asgLoad"]:d}/{entry["asgAccelLoadAvg"]:d}/{entry["asgAccelLoadMin"]:d}/{entry["asgAccelLoadMax"]:d}' + ) + + elif item.lower() == 'connection rate': + yield Result( + state=State.OK, + summary=f'all/accelerated/non accelerated: {entry["asgConnectionRate"]:d}/{entry["asgAccelConnectionRate"]:d}/{entry["asgNonAccelConnectionRate"]:d}' + ) + + elif item.lower() == 'instances load': + yield Result( + state=State.OK, + summary=f'average/min/max: {entry["asgInstancesLoadAvg"]:d}/{entry["asgInstancesLoadMin"]:d}/{entry["asgInstancesLoadMax"]:d}' + ) + + elif item.lower() == 'throughput': + yield Result( + state=State.OK, + summary=f'Throughput: {entry["asgThroughput"]:d}' + ) + + elif item.lower() == 'packet rate': + yield Result( + state=State.OK, + summary=f'Packet Rate: {entry["asgPacketRate"]:d}' + ) + + elif item.lower() == 'nat': + yield Result( + state=State.OK, + summary=f'NAT Connections/NAT connection rate: {entry["asgNatConn"]:d}/{entry["asgNatConn"]:d}' + ) + + elif item.lower() == 'vpn': + yield Result( + state=State.OK, + summary=f'VPN Connections/VPN Throughput: {entry["asgVpnConn"]:d}/{entry["asgVpnThroughput"]:d}' + ) + + +register.snmp_section( + name='checkpoint_asg_smo_counters', + parse_function=parse_checkpoint_asg_smo_counters, + fetch=SNMPTree( + base='.1.3.6.1.4.1.2620.1.48.20', # CHECKPOINT-MIB::asgIPv4PerformanceCounters + oids=[ + '1', # asgThroughput + '2', # asgConnectionRate + '3', # asgPacketRate + '4', # asgConcurrConn + '5', # asgClearConn + '6', # asgAccelConnectionRate + '7', # asgNonAccelConnectionRate + '8', # asgAccelConcurrConn + '9', # asgNonAccelConcurrConn + '10', # asgLoad + '11', # asgAccelLoadAvg + '12', # asgAccelLoadMin + '13', # asgAccelLoadMax + '14', # asgInstancesLoadAvg + '15', # asgInstancesLoadMin + '16', # asgInstancesLoadMax + '17', # asgVpnThroughput + '18', # asgVpnConn + '19', # asgNatConnRate + '20', # asgNatConn + '21', # asgVsxCpu1MinAvg + ] + ), + 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_asg_smo_counters', + service_name='ASG SMO counters %s', + discovery_function=discovery_checkpoint_asg_smo_counters, + check_function=check_checkpoint_asg_smo_counters, + check_ruleset_name='checkpoint_asg_smo_counters', + check_default_parameters={}, +) diff --git a/checkpoint_asg_smo_counters.mkp b/checkpoint_asg_smo_counters.mkp index 8da2e24319a8daf55b64a9d9934c86bdf0132650..12a3e8c8a121b008617504a9f0b1343b8d0323d2 100644 Binary files a/checkpoint_asg_smo_counters.mkp and b/checkpoint_asg_smo_counters.mkp differ diff --git a/packages/checkpoint_asg_smo_counters b/packages/checkpoint_asg_smo_counters index eb3414bdf9523f0839e6d471a7aeeccb5082ee5a..aa77eade9e4db47493b64b0eb02dbe25c70b7b4c 100644 --- a/packages/checkpoint_asg_smo_counters +++ b/packages/checkpoint_asg_smo_counters @@ -1,11 +1,11 @@ -{'author': u'Th.L. (thl-cmk[at]outlook[dot]com)', - 'description': u'Monitor Check Point Maestro SMO performance counters', +{'author': 'Th.L. (thl-cmk[at]outlook[dot]com)', + 'description': 'Monitor Check Point Maestro SMO performance counters\n', 'download_url': 'http://thl-cmk.hopto.org/', - 'files': {'checks': ['checkpoint_asg_smo_counters']}, + 'files': {'agent_based': ['checkpoint_asg_smo_counters.py']}, 'name': 'checkpoint_asg_smo_counters', 'num_files': 1, - 'title': u'Check Point Maestro SMO performance counters', - 'version': '20201110.v0.1', - 'version.min_required': '1.4.0p38', - 'version.packaged': '1.6.0p15', + 'title': 'Check Point Maestro SMO performance counters', + 'version': '20210910.v0.2', + 'version.min_required': '2.0.0', + 'version.packaged': '2021.07.14', 'version.usable_until': None} \ No newline at end of file