Collection of CheckMK checks (see https://checkmk.com/). All checks and plugins are provided as is. Absolutely no warranty. Send any comments to thl-cmk[at]outlook[dot]com

Skip to content
Snippets Groups Projects
Commit c3b84a51 authored by thl-cmk's avatar thl-cmk :flag_na:
Browse files

update project

parent 4acf90d2
No related branches found
No related tags found
No related merge requests found
#!/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={},
)
No preview for this file type
{'author': u'Th.L. (thl-cmk[at]outlook[dot]com)', {'author': 'Th.L. (thl-cmk[at]outlook[dot]com)',
'description': u'Monitor Check Point Maestro SMO performance counters', 'description': 'Monitor Check Point Maestro SMO performance counters\n',
'download_url': 'http://thl-cmk.hopto.org/', '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', 'name': 'checkpoint_asg_smo_counters',
'num_files': 1, 'num_files': 1,
'title': u'Check Point Maestro SMO performance counters', 'title': 'Check Point Maestro SMO performance counters',
'version': '20201110.v0.1', 'version': '20210910.v0.2',
'version.min_required': '1.4.0p38', 'version.min_required': '2.0.0',
'version.packaged': '1.6.0p15', 'version.packaged': '2021.07.14',
'version.usable_until': None} 'version.usable_until': None}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment