From cc13535eee0c84a0de46008436ee7e0e3352befa Mon Sep 17 00:00:00 2001 From: OMD site cmk16x <thl-cmk@outlook.com> Date: Thu, 9 Mar 2023 23:24:04 +0100 Subject: [PATCH] update project --- agent_based/cisco_fw_nat_translations.py | 117 ++++++++++++++++++ cisco_fw_nat_translations.mkp | Bin 0 -> 2557 bytes packages/cisco_fw_nat_translations | 12 ++ .../metrics/cisco_fw_nat_translations.py | 69 +++++++++++ web/plugins/wato/cisco_fw_nat_translations.py | 55 ++++++++ 5 files changed, 253 insertions(+) create mode 100644 agent_based/cisco_fw_nat_translations.py create mode 100644 cisco_fw_nat_translations.mkp create mode 100644 packages/cisco_fw_nat_translations create mode 100644 web/plugins/metrics/cisco_fw_nat_translations.py create mode 100644 web/plugins/wato/cisco_fw_nat_translations.py diff --git a/agent_based/cisco_fw_nat_translations.py b/agent_based/cisco_fw_nat_translations.py new file mode 100644 index 0000000..d37bd9d --- /dev/null +++ b/agent_based/cisco_fw_nat_translations.py @@ -0,0 +1,117 @@ +#!/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 : 2023-03-09 +# +# Monitors Cisco Firewall NAT Translations +# +# +# sample snmp walk +# +# .1.3.6.1.4.1.9.9.532.1.1.1.1.1 = Gauge32: 2 +# .1.3.6.1.4.1.9.9.532.1.1.1.2.1 = Gauge32: 2 +# +# CISCO-NAT-EXT-MIB::cneAddrTranslationNumActive.1 = Gauge32: 2 Number of address translation entries +# CISCO-NAT-EXT-MIB::cneAddrTranslationNumPeak.1 = Gauge32: 2 Number of address translation entries +# +# + +from typing import NamedTuple, Optional + +from cmk.base.plugins.agent_based.agent_based_api.v1.type_defs import ( + DiscoveryResult, + CheckResult, + StringTable, +) + +from cmk.base.plugins.agent_based.agent_based_api.v1 import ( + register, + Service, + check_levels, + check_levels_predictive, + SNMPTree, + startswith, + contains, + any_of, +) + + +class CiscoFwNatTranslations(NamedTuple): + active: int + peak: int + + +# [['1102', '2290']] +def parse_cisco_fw_nat_translations(string_table: StringTable) -> Optional[CiscoFwNatTranslations]: + try: + return CiscoFwNatTranslations( + active=int(string_table[0][0]), + peak=int(string_table[0][1]) + ) + except IndexError: + return + + +# CiscoFwNatTranslations(active=1102, peak=2290) +def discovery_cisco_fw_nat_translations(section: CiscoFwNatTranslations) -> DiscoveryResult: + yield Service() + + +def check_cisco_fw_nat_translations(params, section: CiscoFwNatTranslations) -> CheckResult: + levels_upper = params.get('levels_upper', None) + levels_lower = params.get('levels_lower', None) + yield from check_levels_predictive( + value=section.active, + label='Active', + metric_name='fw_nat_active', + render_func=lambda v: str(v), + levels=levels_upper, + boundaries=(0, None), + ) if isinstance(levels_upper, dict) else check_levels( + value=section.active, + label='Active', + levels_lower=levels_lower, + levels_upper=levels_upper, + metric_name='fw_nat_active', + render_func=lambda v: str(v), + ) + + yield from check_levels( + value=section.peak, + label='Peak (since system startup)', + metric_name='fw_nat_peak', + render_func=lambda v: '%s' % str(v), + ) + + +register.snmp_section( + name='cisco_fw_nat_translations', + parse_function=parse_cisco_fw_nat_translations, + fetch=SNMPTree( + # CISCO-NAT-EXT-MIB::cneAddrTranslationStatsEntry + base='.1.3.6.1.4.1.9.9.532.1.1.1', + oids=[ + '1', # cneAddrTranslationNumActive + '2', # cneAddrTranslationNumPeak + ] + ), + detect=any_of( + # startswith('.1.3.6.1.2.1.1.1.0', 'cisco adaptive security'), + startswith('.1.3.6.1.2.1.1.1.0', 'cisco firepower threat defense'), + startswith('.1.3.6.1.2.1.1.1.0', 'cisco firewall services'), + # contains('.1.3.6.1.2.1.1.1.0', 'cisco pix security'), + ) +) + +register.check_plugin( + name='cisco_fw_nat_translations', + service_name='Firewall NAT translations', + discovery_function=discovery_cisco_fw_nat_translations, + check_function=check_cisco_fw_nat_translations, + check_default_parameters={}, + check_ruleset_name='cisco_fw_nat_translations' +) \ No newline at end of file diff --git a/cisco_fw_nat_translations.mkp b/cisco_fw_nat_translations.mkp new file mode 100644 index 0000000000000000000000000000000000000000..cb1c447e9fc83435a878274ec21a5e84bfce61ed GIT binary patch literal 2557 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 B@xTB8 literal 0 HcmV?d00001 diff --git a/packages/cisco_fw_nat_translations b/packages/cisco_fw_nat_translations new file mode 100644 index 0000000..0346694 --- /dev/null +++ b/packages/cisco_fw_nat_translations @@ -0,0 +1,12 @@ +{'author': 'Th.L. (thl-cmk[at]outlook[dot]com)', + 'description': 'Monitor Cisco Firewall NAT translations\n', + 'download_url': 'https://thl-cmk.hopto.org', + 'files': {'agent_based': ['cisco_fw_nat_translations.py'], + 'web': ['plugins/metrics/cisco_fw_nat_translations.py', + 'plugins/wato/cisco_fw_nat_translations.py']}, + 'name': 'cisco_fw_nat_translations', + 'title': 'Cisco Firewall NAT Translations', + 'version': '20230309.v0.0.1', + 'version.min_required': '2.0.0', + 'version.packaged': '2.1.0p22', + 'version.usable_until': None} \ No newline at end of file diff --git a/web/plugins/metrics/cisco_fw_nat_translations.py b/web/plugins/metrics/cisco_fw_nat_translations.py new file mode 100644 index 0000000..272eeb9 --- /dev/null +++ b/web/plugins/metrics/cisco_fw_nat_translations.py @@ -0,0 +1,69 @@ +#!/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 : 2023-03-09 +# +# Cisco Firewall NAT translations metrics plugin +# + +from cmk.gui.i18n import _ + +from cmk.gui.plugins.metrics import ( + metric_info, + graph_info, + check_metrics, + perfometer_info, +) + +# for predictive monitoring +check_metrics["check_mk-cisco_fw_nat_translations"] = { + "predict_fw_nat_active": {"auto_graph": False}, +} +metric_info['predict_fw_nat_active'] = { + 'title': _('_Predicted NAT translations'), + 'unit': 'count', + 'color': '26/b', +} +# + +metric_info['fw_nat_active'] = { + 'title': _('Active'), + 'unit': 'count', + 'color': '26/a', +} + +metric_info['fw_nat_peak'] = { + 'title': _('Peak'), + 'unit': 'count', + 'color': '16/a', +} + +graph_info['cisco_fw_nat_translations'] = { + 'title': _('NAT translatins'), + 'metrics': [ + ('predict_fw_nat_active', 'line'), + ('fw_nat_peak', 'line'), + ('fw_nat_active', 'area'), + ], + 'scalars': [ + ('fw_nat_active:crit'), # , _('CRIT') + ('fw_nat_active:warn'), # , _('WARN') + ], + 'optional_metrics': [ + 'predict_fw_nat_active', + ], + +} + +perfometer_info.append( + { + 'type': 'logarithmic', + 'metric': 'fw_nat_active', + 'half_value': 100000.0, + 'exponent': 2, + } +) diff --git a/web/plugins/wato/cisco_fw_nat_translations.py b/web/plugins/wato/cisco_fw_nat_translations.py new file mode 100644 index 0000000..a1e77fa --- /dev/null +++ b/web/plugins/wato/cisco_fw_nat_translations.py @@ -0,0 +1,55 @@ +#!/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 : 2023-03-09 +# +# Cisco Firewall NAT translations WATO plugin +# + +from cmk.gui.i18n import _ +from cmk.gui.valuespec import ( + Dictionary, + Integer, + Tuple, +) + +from cmk.gui.plugins.wato import ( + CheckParameterRulespecWithoutItem, + rulespec_registry, + RulespecGroupCheckParametersApplications, + Levels, +) + + +def _parameter_valuespec_cisco_fw_nat_translations(): + return Dictionary(elements=[ + ('levels_upper', + Levels( + title=_('NAT translations'), + unit=_('Translations'), + )), + ('levels_lower', + Tuple( + help=_('This rule sets lower levels to the active number of NAT translations through the firewall. ' + 'Will only be used if NAT translations is not predictive levels.'), + title=_('NAT translations lower levels'), + elements=[ + Integer(title=_('Warning if below'), unit='Translations'), + Integer(title=_('Critical if below'), unit='Translations'), + ], + )), + ],) + + +rulespec_registry.register( + CheckParameterRulespecWithoutItem( + check_group_name='cisco_fw_nat_translations', + group=RulespecGroupCheckParametersApplications, + match_type='dict', + parameter_valuespec=_parameter_valuespec_cisco_fw_nat_translations, + title=lambda: _('Firewall NAT translatins'), + )) -- GitLab