register.snmp_section( name="cisco_fp_entity_sensors", supersedes=["entity_sensors"], detect=all_of( startswith(OIDSysDescr, "Cisco Firepower"), contains(OIDSysDescr, "security appliance"), ), parsed_section_name="entity_sensors", parse_function=parse_cisco_fp_entity_sensors, fetch=[ SNMPTree( base=".1.3.6.1.2.1.47.1.1.1.1", # ENTITY-MIB oids=[ OIDEnd(), "7", # ENTITY-MIB::entPhysicalName ], ), SNMPTree( base=".1.3.6.1.4.1.9.9.91.1.1.1.1", # CISCO-ENTITY-SENSOR-MIB oids=[ OIDEnd(), "1", # entPhySensorType "2", # entPhySensorScale "4", # entPhySensorValue "5", # entPhySensorOperStatus "6", # entPhySensorUnitsDisplay ], ), ], )
yield Result( state=State.CRIT, summary= f'Failover link state is {_get_cisco_asa_state_name(section.failover_link_status)}', ) register.snmp_section( name='cisco_asa_failover', parse_function=parse_cisco_asa_failover, fetch=SNMPTree( base= '.1.3.6.1.4.1.9.9.147.1.2.1.1.1', # CISCO-FIREWALL-MIB::cfwHardwareStatusEntry oids=[ '2', # CISCO-FIREWALL-MIB::cfwHardwareInformation '3', # CISCO-FIREWALL-MIB::cfwHardwareStatusValue '4', # CISCO-FIREWALL-MIB::cfwHardwareStatusDetail ], ), detect=any_of( startswith('.1.3.6.1.2.1.1.1.0', 'cisco adaptive security'), contains('.1.3.6.1.2.1.1.1.0', 'cisco pix security'), ), ) register.check_plugin( name='cisco_asa_failover', service_name='Cluster Status', discovery_function=discovery_cisco_asa_failover, check_function=check_cisco_asa_failover, check_default_parameters={
register.snmp_section( name='cisco_fp_entity_sensors', supersedes=['entity_sensors'], detect=all_of( startswith(OIDSysDescr, 'Cisco Firepower'), contains(OIDSysDescr, 'security appliance'), ), parsed_section_name='entity_sensors', parse_function=parse_cisco_fp_entity_sensors, fetch=[ SNMPTree( base='.1.3.6.1.2.1.47.1.1.1.1', # ENTITY-MIB oids=[ OIDEnd(), '7', # ENTITY-MIB::entPhysicalName ], ), SNMPTree( base='.1.3.6.1.4.1.9.9.91.1.1.1.1', # CISCO-ENTITY-SENSOR-MIB oids=[ OIDEnd(), '1', # entPhySensorType '2', # entPhySensorScale '4', # entPhySensorValue '5', # entPhySensorOperStatus '6', # entPhySensorUnitsDisplay ], ), ], )
def parse(string_table: StringTable) -> Optional[Section]: """ assert parse([]) is None assert parse([["DSM 7", "0"]]) == Section(version="DSM 7", status=0) """ if not string_table: return None return Section.from_row(string_table[0]) register.snmp_section( name="synology_update", detect=synology.detect(), parse_function=parse, fetch=SNMPTree( base=".1.3.6.1.4.1.6574.3.1.1", oids=[ "3", # Version "4", # Status ], ), ) def discovery(section: Section) -> DiscoveryResult: yield Service() def check(params: Mapping[str, Any], section: Section) -> CheckResult: state = State.UNKNOWN if section.status in params["ok_states"]: state = State.OK
""" >>> assert parse([]) is None >>> assert parse([["model", "SN7", "DSM"]]) == Section(model="model", serialnumber="SN7", os="DSM") """ if not string_table: return None return Section.from_row(string_table[0]) register.snmp_section( name="synology_info", detect=synology.detect(), parse_function=parse, fetch=SNMPTree( base=".1.3.6.1.4.1.6574.1.5", oids=[ "1", # Model "2", # SerialNumber "3", # OS Version ], ), ) def discovery(section: Section) -> DiscoveryResult: yield Service() def check(section: Section) -> CheckResult: summary = f"Model: {section.model}, S/N: {section.serialnumber}, OS Version: {section.os}" yield Result(state=State.OK, summary=summary)
def parse_checkpoint_connections(string_table: StringTable) -> Section: """ >>> parse_checkpoint_connections([["19190"]]) Section(current=19190) """ return Section(int(string_table[0][0])) register.snmp_section( name="checkpoint_connections", parse_function=parse_checkpoint_connections, detect=checkpoint.DETECT, fetch=SNMPTree( base=".1.3.6.1.4.1.2620.1.1.25", oids=[ "3", # CHECKPOINT-MIB - fwNumConn - current connections ], ), ) def discover_checkpoint_connections(section: Section) -> DiscoveryResult: yield Service() def check_checkpoint_connections( params, section: Section, ) -> CheckResult:
def parse(string_table: StringTable) -> Optional[Section]: """ assert parse([]) is None assert parse([["1","1"]]) == Section(system=1, power=1) """ if not string_table: return None return Section.from_row(string_table[0]) register.snmp_section( name="synology_status", detect=synology.detect(), parse_function=parse, fetch=SNMPTree( base=".1.3.6.1.4.1.6574.1", oids=[ "1", # System Status "3", # Power Status ], ), ) def discovery(section: Section) -> DiscoveryResult: yield Service() def check(section: Section) -> CheckResult: if section.system != 1: yield Result(state=State.CRIT, summary="System Failure") else:
state=State(params["failover_link_state"]), summary=( f"Failover link {section.failover_link_name} state is " f"{_get_cisco_asa_state_name(section.failover_link_status)}"), ) register.snmp_section( name="cisco_asa_failover", parse_function=parse_cisco_asa_failover, fetch=SNMPTree( base= ".1.3.6.1.4.1.9.9.147.1.2.1.1.1", # CISCO-FIREWALL-MIB::cfwHardwareStatusEntry oids=[ "2", # CISCO-FIREWALL-MIB::cfwHardwareInformation "3", # CISCO-FIREWALL-MIB::cfwHardwareStatusValue "4", # CISCO-FIREWALL-MIB::cfwHardwareStatusDetail ], ), detect=any_of( startswith(".1.3.6.1.2.1.1.1.0", "cisco adaptive security"), contains(".1.3.6.1.2.1.1.1.0", "cisco pix security"), startswith(".1.3.6.1.2.1.1.1.0", "cisco firepower threat defense"), ), ) register.check_plugin( name="cisco_asa_failover", service_name="Failover state", discovery_function=discovery_cisco_asa_failover, check_function=check_cisco_asa_failover, check_default_parameters={
Section = Mapping[str, Disk] def parse_synology(string_table: StringTable) -> Section: return {row[0]: Disk.from_row(row) for row in string_table} register.snmp_section( name="synology_disks", detect=synology.detect(), parse_function=parse_synology, fetch=SNMPTree( base=".1.3.6.1.4.1.6574.2.1.1", oids=[ "2", # SYNOLOGY-DISK-MIB::diskID "3", # SYNOLOGY-DISK-MIB::diskModel "5", # SYNOLOGY-DISK-MIB::diskStatus "6", # SYNOLOGY-DISK-MIB::diskTemperature ], ), ) def discover_synology_disks(section: Section) -> DiscoveryResult: for item, disk in section.items(): # SSD and NVME used as cache are "not initialized". We remember that # here. TODO: Really true always in todays time and age? if (("SSD" in disk.model) or ("NVME" in disk.model)) and disk.state == 3: params = {"used_as_cache": True} else:
register.snmp_section( name='entity_sensors', detect=any_of( startswith(OIDSysDescr, "palo alto networks"), startswith(OIDSysDescr, "cisco adaptive security appliance"), ), parse_function=parse_entity_sensors, fetch=[ SNMPTree( base=".1.3.6.1.2.1.47.1.1.1.1", oids=[ OIDEnd(), "7", # ENTITY-MIB::entPhysicalName ], ), SNMPTree( base=".1.3.6.1.2.1.99.1.1.1", oids=[ OIDEnd(), "1", # entPhySensorType "2", # entPhySensorScale "4", # entPhySensorValue "5", # entPhySensorOperStatus "6", # entPhySensorUnitsDisplay ], ), ], )
register.snmp_section( name="juniper_trpz_aps_sessions", detect=any_of(startswith(".1.3.6.1.2.1.1.2.0", ".1.3.6.1.4.1.14525.3.1"), startswith(".1.3.6.1.2.1.1.2.0", ".1.3.6.1.4.1.14525.3.3")), parse_function=parse_juniper_trpz_aps_sessions, trees=[ SNMPTree( base=".1.3.6.1.4.1.14525.4.5.1.1.2.1", oids=[ OIDEnd(), "5", # trpzApStatApStatusMacApState -> status of access point "8", # trpzApStatApStatusMacApName -> name of access point ]), SNMPTree( base=".1.3.6.1.4.1.14525.4.5.1.1.10.1", oids=[ OIDEnd(), "3", # trpzApStatRadioOpStatsTxUniPkt -> unicast packets transmitted "4", # trpzApStatRadioOpStatsTxUniOct -> octets transmitted in unicast packets "5", # trpzApStatRadioOpStatsTxMultiPkt -> multicast packets transmitted "6", # trpzApStatRadioOpStatsTxMultiOct -> octets transmitted in multicast packets "7", # trpzApStatRadioOpStatsRxPkt -> packets received "8", # trpzApStatRadioOpStatsRxOctet -> octets received "11", # trpzApStatRadioOpStatsPhyErr -> nr. physical errors occurred "12", # trpzApStatRadioOpStatsResetCount -> nr. reset operations "14", # trpzApStatRadioOpStatsRxRetriesCount -> nr. transmission retries "15", # trpzApStatRadioOpStatsUserSessions -> current client sessions "16", # trpzApStatRadioOpStatsNoiseFloor -> noise floor (dBm) ]), ], )
return yield from check_temperature( reading=temperature, params=params, unique_name=item, value_store=get_value_store(), ) register.snmp_section( name="cisco_ie_temp", parse_function=parse, fetch=SNMPTree( base=".1.3.6.1.4.1.9.9.832.1.24.1.3.6.1", # cie1000SysutilStatusTemperatureMonitorEntry oids=[ OIDEnd(), "5", # cie1000SysutilStatusTemperatureMonitorTemperature ], ), detect=startswith(".1.3.6.1.2.1.1.1.0", "IE1000"), ) register.check_plugin( name="cisco_ie_temp", service_name="Temperature %s", discovery_function=discover, check_default_parameters={}, check_function=check, check_ruleset_name="temperature", )
""" >>> assert parse([]) is None >>> assert parse([["0","1"]]) == {"System": 0, "CPU": 1} """ if not string_table: return None row = string_table[0] return {"System": int(row[0]), "CPU": int(row[1])} register.snmp_section( name="synology_fans", detect=synology.detect(), parse_function=parse, fetch=SNMPTree( base=".1.3.6.1.4.1.6574.1.4", oids=[ "1", # System fan "2", # CPU fan ], ), ) def discovery(section: Section) -> DiscoveryResult: for item in section: yield Service(item=item) def check(item: str, section: Section) -> CheckResult: if section[item] != 1: state, summary = (State.OK, "No failure reported")
if item == id: yield Result(state=State.OK, summary="HWCache %s: ok" % item) yield Metric("read_utilization", int(ru)) yield Metric("write_utilization", int(wu)) yield Metric("mirror_write_utilization", int(mwu)) yield Metric("hit_ratio", int(hr)) register.snmp_section( name="huawei_storage_hwcache", #parse_function = parse_huawei_storage_hwcache, detect=startswith(".1.3.6.1.2.1.1.1.0", "ISM SNMP Agent"), fetch=SNMPTree( base='.1.3.6.1.4.1.34774.4.1.21.7.1', oids=[ '1', # hwPerfCacheID '2', # hwPerfCacheReadUtilization '3', # hwPerfCacheWriteUtilization '4', # hwPerfCacheMirrorWriteUtilization '5', # hwPerfCacheHitRatio ], ), ) register.check_plugin( name="huawei_storage_hwcache", service_name="HWCache %s", discovery_function=discovery_huawei_storage_hwcache, check_function=check_huawei_storage_hwcache, check_default_parameters={}, )