Custom check plugin SNMP based

Version 2.3.0p21

Hi, I am using the checkmk for the first time, I read the documentation but there are some things I don’t understand. I have custom MIB file which needs to be used and for that as I understood I need to make custom SNMP based plugin. First I created host in the checkmk UI and next I tried doing that, I wrote the plugin with help of the documentation:

#!/usr/bin/env python3
from cmk.agent_based.v2 import (
    CheckPlugin,
    CheckResult,
    DiscoveryResult,
    Result,
    Service,
    SimpleSNMPSection,
    SNMPTree,
    State,
    startswith,
    exists,
    StringTable,
    OIDEnd,
)

def parse_unac(string_table: StringTable) -> dict:
    if not string_table:
        print("No data received in string_table")
        return {}

    print(string_table)
    result = {}
    for oid, value in string_table:
        result[oid] = value
    return result

def discover_unac(section) -> DiscoveryResult:
    for oid in section.keys():
        yield Service(item=oid)

def check_unac(section):
    for item in section.keys():
        value = section.get(item)
        if value is not None:
            yield CheckResult(
                state=State.OK,
                summary=f"UNAC {item}: {value}",
            )
        else:
          yield CheckResult(
            state=State.CRIT,
            summary=f"UNAC {item}: No data found",
          )

snmp_section_unac = SimpleSNMPSection(
    name="unac_info",
    parse_function=parse_unac,
    detect=exists(".1.3.6.1.4.1.50449"),
    fetch=SNMPTree(
        base=".1.3.6.1.4.1.50449",
        oids=[
           OIDEnd(),
           '1',
        ],

    ),
check_plugin_unac = CheckPlugin(
    name="unac_check",
    sections=["unac_info"],
    service_name="UNAC Check",
    discovery_function=discover_unac,
    check_function=check_unac,
)


and I put it on path local/lib/python3/cmk_addons/plugins/unac/agent_based/unac-test.py
and my custom MIB file I put in on path local/share/check_mk/mibs/

But when I try
“cmk --debug -vvn hostname”:

value store: synchronizing
Trying to acquire lock on /omd/sites/checkmk/tmp/check_mk/counters/unac-test
Got lock on /omd/sites/checkmk/tmp/check_mk/counters/unac-test
value store: loading from disk
Releasing lock on /omd/sites/checkmk/tmp/check_mk/counters/unac-test
Released lock on /omd/sites/checkmk/tmp/check_mk/counters/unac-test
Checkmk version 2.3.0p21
+ FETCHING DATA
  Source: SourceInfo(hostname='unac-test', ipaddress='192.168.182.132', ident='snmp', fetcher_type=<FetcherType.SNMP: 7>, source_type=<SourceType.HOST: 1>)
[cpu_tracking] Start [7febd08748f0]
Read from cache: SNMPFileCache(unac-test, path_template=/omd/sites/checkmk/tmp/check_mk/data_source_cache/snmp/{mode}/{hostname}, max_age=MaxAge(checking=0, discovery=90.0, inventory=90.0), simulation=False, use_only_cache=False, file_cache_mode=6)
Not using cache (Too old. Age is 55 sec, allowed is 0 sec)
  SNMP scan:
       Skipping system description OID (Set .1.3.6.1.2.1.1.1.0 and .1.3.6.1.2.1.1.2.0 to "")
       Using cached OID .1.3.6.1.2.1.1.2.0: ''
       Using cached OID .1.3.6.1.2.1.1.1.0: ''
       Using cached OID .1.3.6.1.2.1.1.2.0: ''
       Using cached OID .1.3.6.1.2.1.1.1.0: ''
       Getting OID .1.3.6.1.4.1.1139.21.2.2.8.1.*: Running 'snmpgetnext -Cf -v2c -c public -m "" -M "" -On -OQ -Oe -Ot 192.168.182.132 .1.3.6.1.4.1.1139.21.2.2.8.1'
SNMP answer: ==> [0]
failed.
       Using cached OID .1.3.6.1.2.1.1.1.0: ''
       Using cached OID .1.3.6.1.2.1.1.1.0: ''
       Using cached OID .1.3.6.1.2.1.1.1.0: ''
       Using cached OID .1.3.6.1.2.1.1.1.0: ''
       Using cached OID .1.3.6.1.2.1.1.1.0: ''
       Getting OID .1.3.6.1.2.1.2.2.1.*: Running 'snmpgetnext -Cf -v2c -c public -m "" -M "" -On -OQ -Oe -Ot 192.168.182.132 .1.3.6.1.2.1.2.2.1'
SNMP answer: ==> [1]
b'1'
       Using cached OID .1.3.6.1.2.1.1.2.0: ''
       Using cached OID .1.3.6.1.2.1.1.2.0: ''
       Using cached OID .1.3.6.1.2.1.1.1.0: ''
       Using cached OID .1.3.6.1.2.1.1.1.0: ''
       Using cached OID .1.3.6.1.2.1.1.1.0: ''
       Using cached OID .1.3.6.1.2.1.1.1.0: ''
       Using cached OID .1.3.6.1.2.1.1.2.0: ''
       Using cached OID .1.3.6.1.2.1.1.2.0: ''
       Using cached OID .1.3.6.1.2.1.1.2.0: ''
       Using cached OID .1.3.6.1.2.1.1.1.0: ''
       Using cached OID .1.3.6.1.2.1.1.1.0: ''
       Using cached OID .1.3.6.1.2.1.1.1.0: ''
       Using cached OID .1.3.6.1.2.1.1.1.0: ''
       Using cached OID .1.3.6.1.2.1.1.1.0: ''
       Using cached OID .1.3.6.1.2.1.1.1.0: ''
       Using cached OID .1.3.6.1.2.1.1.1.0: ''
       Using cached OID .1.3.6.1.2.1.1.1.0: ''
       Using cached OID .1.3.6.1.2.1.1.1.0: ''
       Using cached OID .1.3.6.1.2.1.1.1.0: ''
       Using cached OID .1.3.6.1.2.1.1.1.0: ''
       Using cached OID .1.3.6.1.2.1.1.1.0: ''
       Using cached OID .1.3.6.1.2.1.1.1.0: ''
       Using cached OID .1.3.6.1.2.1.1.1.0: ''
       Using cached OID .1.3.6.1.2.1.1.2.0: ''
   SNMP scan found                    hr_mem if snmp_uptime
Trying to acquire lock on /omd/sites/checkmk/tmp/check_mk/snmp_scan_cache/unac-test.192.168.182.132
Got lock on /omd/sites/checkmk/tmp/check_mk/snmp_scan_cache/unac-test.192.168.182.132
Releasing lock on /omd/sites/checkmk/tmp/check_mk/snmp_scan_cache/unac-test.192.168.182.132
Released lock on /omd/sites/checkmk/tmp/check_mk/snmp_scan_cache/unac-test.192.168.182.132
hr_fs: Fetching data (SNMP walk cache is enabled: Use any locally cached information)
Running 'snmpbulkwalk -Cr10 -v2c -c public -m "" -M "" -Cc -OQ -OU -On -Ot 192.168.182.132 .1.3.6.1.2.1.25.2.3.1.2'
Running 'snmpbulkwalk -Cr10 -v2c -c public -m "" -M "" -Cc -OQ -OU -On -Ot 192.168.182.132 .1.3.6.1.2.1.25.2.3.1.3'
Running 'snmpbulkwalk -Cr10 -v2c -c public -m "" -M "" -Cc -OQ -OU -On -Ot 192.168.182.132 .1.3.6.1.2.1.25.2.3.1.4'
Running 'snmpbulkwalk -Cr10 -v2c -c public -m "" -M "" -Cc -OQ -OU -On -Ot 192.168.182.132 .1.3.6.1.2.1.25.2.3.1.5'
Running 'snmpbulkwalk -Cr10 -v2c -c public -m "" -M "" -Cc -OQ -OU -On -Ot 192.168.182.132 .1.3.6.1.2.1.25.2.3.1.6'
hr_mem: Fetching data (SNMP walk cache is enabled: Use any locally cached information)
Already fetched OID: .1.3.6.1.2.1.25.2.3.1.2
Already fetched OID: .1.3.6.1.2.1.25.2.3.1.3
Already fetched OID: .1.3.6.1.2.1.25.2.3.1.4
Already fetched OID: .1.3.6.1.2.1.25.2.3.1.5
Already fetched OID: .1.3.6.1.2.1.25.2.3.1.6
if: Fetching data (SNMP walk cache is enabled: Use any locally cached information)
Running 'snmpbulkwalk -Cr10 -v2c -c public -m "" -M "" -Cc -OQ -OU -On -Ot 192.168.182.132 .1.3.6.1.2.1.2.2.1.1'
Running 'snmpbulkwalk -Cr10 -v2c -c public -m "" -M "" -Cc -OQ -OU -On -Ot 192.168.182.132 .1.3.6.1.2.1.2.2.1.2'
Running 'snmpbulkwalk -Cr10 -v2c -c public -m "" -M "" -Cc -OQ -OU -On -Ot 192.168.182.132 .1.3.6.1.2.1.2.2.1.3'
Running 'snmpbulkwalk -Cr10 -v2c -c public -m "" -M "" -Cc -OQ -OU -On -Ot 192.168.182.132 .1.3.6.1.2.1.2.2.1.5'
Running 'snmpbulkwalk -Cr10 -v2c -c public -m "" -M "" -Cc -OQ -OU -On -Ot 192.168.182.132 .1.3.6.1.2.1.2.2.1.8'
Running 'snmpbulkwalk -Cr10 -v2c -c public -m "" -M "" -Cc -OQ -OU -On -Ot 192.168.182.132 .1.3.6.1.2.1.2.2.1.10'
Running 'snmpbulkwalk -Cr10 -v2c -c public -m "" -M "" -Cc -OQ -OU -On -Ot 192.168.182.132 .1.3.6.1.2.1.2.2.1.11'
Running 'snmpbulkwalk -Cr10 -v2c -c public -m "" -M "" -Cc -OQ -OU -On -Ot 192.168.182.132 .1.3.6.1.2.1.2.2.1.12'
Running 'snmpbulkwalk -Cr10 -v2c -c public -m "" -M "" -Cc -OQ -OU -On -Ot 192.168.182.132 .1.3.6.1.2.1.2.2.1.13'
Running 'snmpbulkwalk -Cr10 -v2c -c public -m "" -M "" -Cc -OQ -OU -On -Ot 192.168.182.132 .1.3.6.1.2.1.2.2.1.14'
Running 'snmpbulkwalk -Cr10 -v2c -c public -m "" -M "" -Cc -OQ -OU -On -Ot 192.168.182.132 .1.3.6.1.2.1.2.2.1.16'
Running 'snmpbulkwalk -Cr10 -v2c -c public -m "" -M "" -Cc -OQ -OU -On -Ot 192.168.182.132 .1.3.6.1.2.1.2.2.1.17'
Running 'snmpbulkwalk -Cr10 -v2c -c public -m "" -M "" -Cc -OQ -OU -On -Ot 192.168.182.132 .1.3.6.1.2.1.2.2.1.18'
Running 'snmpbulkwalk -Cr10 -v2c -c public -m "" -M "" -Cc -OQ -OU -On -Ot 192.168.182.132 .1.3.6.1.2.1.2.2.1.19'
Running 'snmpbulkwalk -Cr10 -v2c -c public -m "" -M "" -Cc -OQ -OU -On -Ot 192.168.182.132 .1.3.6.1.2.1.2.2.1.20'
Running 'snmpbulkwalk -Cr10 -v2c -c public -m "" -M "" -Cc -OQ -OU -On -Ot 192.168.182.132 .1.3.6.1.2.1.2.2.1.21'
Running 'snmpbulkwalk -Cr10 -v2c -c public -m "" -M "" -Cc -OQ -OU -On -Ot 192.168.182.132 .1.3.6.1.2.1.2.2.1.6'
snmp_uptime: Fetching data (SNMP walk cache is enabled: Use any locally cached information)
Running 'snmpbulkwalk -Cr10 -v2c -c public -m "" -M "" -Cc -OQ -OU -On -Ot 192.168.182.132 .1.3.6.1.2.1.1.3'
Running 'snmpbulkwalk -Cr10 -v2c -c public -m "" -M "" -Cc -OQ -OU -On -Ot 192.168.182.132 .1.3.6.1.2.1.25.1.1'
ucd_diskio: Fetching data (SNMP walk cache is enabled: Use any locally cached information)
Running 'snmpbulkwalk -Cr10 -v2c -c public -m "" -M "" -Cc -OQ -OU -On -Ot 192.168.182.132 .1.3.6.1.4.1.2021.13.15.1.1.1'
Running 'snmpbulkwalk -Cr10 -v2c -c public -m "" -M "" -Cc -OQ -OU -On -Ot 192.168.182.132 .1.3.6.1.4.1.2021.13.15.1.1.2'
Running 'snmpbulkwalk -Cr10 -v2c -c public -m "" -M "" -Cc -OQ -OU -On -Ot 192.168.182.132 .1.3.6.1.4.1.2021.13.15.1.1.3'
Running 'snmpbulkwalk -Cr10 -v2c -c public -m "" -M "" -Cc -OQ -OU -On -Ot 192.168.182.132 .1.3.6.1.4.1.2021.13.15.1.1.4'
Running 'snmpbulkwalk -Cr10 -v2c -c public -m "" -M "" -Cc -OQ -OU -On -Ot 192.168.182.132 .1.3.6.1.4.1.2021.13.15.1.1.5'
Running 'snmpbulkwalk -Cr10 -v2c -c public -m "" -M "" -Cc -OQ -OU -On -Ot 192.168.182.132 .1.3.6.1.4.1.2021.13.15.1.1.6'
ucd_mem: Fetching data (SNMP walk cache is enabled: Use any locally cached information)
Running 'snmpbulkwalk -Cr10 -v2c -c public -m "" -M "" -Cc -OQ -OU -On -Ot 192.168.182.132 .1.3.6.1.4.1.2021.4.5'
Running 'snmpbulkwalk -Cr10 -v2c -c public -m "" -M "" -Cc -OQ -OU -On -Ot 192.168.182.132 .1.3.6.1.4.1.2021.4.6'
Running 'snmpbulkwalk -Cr10 -v2c -c public -m "" -M "" -Cc -OQ -OU -On -Ot 192.168.182.132 .1.3.6.1.4.1.2021.4.3'
Running 'snmpbulkwalk -Cr10 -v2c -c public -m "" -M "" -Cc -OQ -OU -On -Ot 192.168.182.132 .1.3.6.1.4.1.2021.4.4'
Running 'snmpbulkwalk -Cr10 -v2c -c public -m "" -M "" -Cc -OQ -OU -On -Ot 192.168.182.132 .1.3.6.1.4.1.2021.4.11'
Running 'snmpbulkwalk -Cr10 -v2c -c public -m "" -M "" -Cc -OQ -OU -On -Ot 192.168.182.132 .1.3.6.1.4.1.2021.4.12'
Running 'snmpbulkwalk -Cr10 -v2c -c public -m "" -M "" -Cc -OQ -OU -On -Ot 192.168.182.132 .1.3.6.1.4.1.2021.4.13'
Running 'snmpbulkwalk -Cr10 -v2c -c public -m "" -M "" -Cc -OQ -OU -On -Ot 192.168.182.132 .1.3.6.1.4.1.2021.4.14'
Running 'snmpbulkwalk -Cr10 -v2c -c public -m "" -M "" -Cc -OQ -OU -On -Ot 192.168.182.132 .1.3.6.1.4.1.2021.4.15'
Running 'snmpbulkwalk -Cr10 -v2c -c public -m "" -M "" -Cc -OQ -OU -On -Ot 192.168.182.132 .1.3.6.1.4.1.2021.4.100'
Running 'snmpbulkwalk -Cr10 -v2c -c public -m "" -M "" -Cc -OQ -OU -On -Ot 192.168.182.132 .1.3.6.1.4.1.2021.4.2'
Running 'snmpbulkwalk -Cr10 -v2c -c public -m "" -M "" -Cc -OQ -OU -On -Ot 192.168.182.132 .1.3.6.1.4.1.2021.4.101'
Write data to cache file /omd/sites/checkmk/tmp/check_mk/data_source_cache/snmp/checking/unac-test
Trying to acquire lock on /omd/sites/checkmk/tmp/check_mk/data_source_cache/snmp/checking/unac-test
Got lock on /omd/sites/checkmk/tmp/check_mk/data_source_cache/snmp/checking/unac-test
Releasing lock on /omd/sites/checkmk/tmp/check_mk/data_source_cache/snmp/checking/unac-test
Released lock on /omd/sites/checkmk/tmp/check_mk/data_source_cache/snmp/checking/unac-test
[cpu_tracking] Stop [7febd08748f0 - Snapshot(process=posix.times_result(user=0.029999999999999805, system=0.009999999999999995, children_user=0.1, children_system=0.04, elapsed=0.2199999988079071))]
[cpu_tracking] Start [7febd1757530]
+ PARSE FETCHER RESULTS
  HostKey(hostname='unac-test', source_type=<SourceType.HOST: 1>)  -> Add sections: ['hr_fs', 'hr_mem', 'if', 'snmp_uptime', 'ucd_diskio', 'ucd_mem']
Received no piggyback data
Disk IO dm-0         [5], Read: 0.00 B/s, Write: 1.33 kB/s
Disk IO dm-1         [6], Read: 0.00 B/s, Write: 0.00 B/s
Disk IO sda          [1], Read: 0.00 B/s, Write: 1.33 kB/s
Disk IO sda1         [2], Read: 0.00 B/s, Write: 0.00 B/s
Disk IO sda2         [3], Read: 0.00 B/s, Write: 1.33 kB/s
Disk IO sr0          [4], Read: 0.00 B/s, Write: 0.00 B/s
Filesystem /         Used: 72.86% - 12.4 GiB of 17.0 GiB, trend per 1 day 0 hours: -18.7 MiB, trend per 1 day 0 hours: -0.11%
Filesystem /boot     Used: 23.47% - 238 MiB of 1014 MiB, trend per 1 day 0 hours: +0 B, trend per 1 day 0 hours: +0%
Filesystem /dev/shm  Used: 0% - 0 B of 1.84 GiB, trend per 1 day 0 hours: +0 B, trend per 1 day 0 hours: +0%
Filesystem /run      Used: 0.62% - 11.6 MiB of 1.84 GiB, trend per 1 day 0 hours: +67.6 KiB, trend per 1 day 0 hours: +<0.01%
Filesystem /run/user/0 Used: 0% - 0 B of 377 MiB, trend per 1 day 0 hours: +0 B, trend per 1 day 0 hours: +0%
Filesystem /sys/fs/cgroup Used: 0% - 0 B of 1.84 GiB, trend per 1 day 0 hours: +0 B, trend per 1 day 0 hours: +0%
Interface 2          [eth0], (up), MAC: 00:0C:29:A9:57:B6, Speed: 1 GBit/s, In: 598 B/s (<0.01%), Out: 845 B/s (<0.01%)
Interface 3          [eth4], (up), MAC: 00:0C:29:A9:57:C0, Speed: 1 GBit/s, In: 9.64 B/s (<0.01%), Out: 47.3 B/s (<0.01%)
Memory               Total (RAM + Swap): 25.93% - 978 MiB of 3.68 GiB RAM, RAM: 25.93% - 978 MiB of 3.68 GiB, Swap: 0% - 0 B of 2.00 GiB
Memory               RAM: 25.87% - 976 MiB of 3.68 GiB, Swap: 0% - 0 B of 2.00 GiB, Total virtual memory: 16.77% - 976 MiB of 5.68 GiB
Uptime               Up since 2024-11-29 07:14:21, Uptime: 4 hours 24 minutes
[cpu_tracking] Stop [7febd1757530 - Snapshot(process=posix.times_result(user=0.0, system=0.0, children_user=0.0, children_system=0.0, elapsed=0.010000001639127731))]
[snmp] Success, execution time 0.2 sec | execution_time=0.230 user_time=0.030 system_time=0.010 children_user_time=0.100 children_system_time=0.040 cmk_time_snmp=0.040

I see other plugins are used and I can see only services that can be translated only using that plugins, but I don’t see my custom plugin is being used.
I tried a lot of things and I am out of ideas what can be wrong.Can you help me please and tell me what I am doing wrong and what should I change?

When I try cmk --debug -vvn --detect-plugins unac-check unac-test

Trying to acquire lock on /omd/sites/checkmk/tmp/check_mk/counters/unac-test
Got lock on /omd/sites/checkmk/tmp/check_mk/counters/unac-test
value store: loading from disk
Releasing lock on /omd/sites/checkmk/tmp/check_mk/counters/unac-test
Released lock on /omd/sites/checkmk/tmp/check_mk/counters/unac-test
Checkmk version 2.3.0p21
+ FETCHING DATA
  Source: SourceInfo(hostname='unac-test', ipaddress='192.168.182.132', ident='snmp', fetcher_type=<FetcherType.SNMP: 7>, source_type=<SourceType.HOST: 1>)
[cpu_tracking] Start [7f67363cbb90]
Read from cache: SNMPFileCache(unac-test, path_template=/omd/sites/checkmk/tmp/check_mk/data_source_cache/snmp/{mode}/{hostname}, max_age=MaxAge(checking=0, discovery=90.0, inventory=90.0), simulation=False, use_only_cache=False, file_cache_mode=6)
Not using cache (Mode Mode.FORCE_SECTIONS)
unac_info: Fetching data (SNMP walk cache cleared)
Running 'snmpbulkwalk -Cr10 -v2c -c public -m "" -M "" -Cc -OQ -OU -On -Ot 192.168.182.132 .1.3.6.1.4.1.50449.1'
Not using cache (Mode Mode.FORCE_SECTIONS)
[cpu_tracking] Stop [7f67363cbb90 - Snapshot(process=posix.times_result(user=0.0, system=0.0, children_user=0.0, children_system=0.0, elapsed=0.009999997913837433))]
[cpu_tracking] Start [7f6736a67770]
+ PARSE FETCHER RESULTS
  HostKey(hostname='unac-test', source_type=<SourceType.HOST: 1>)  -> Add sections: ['unac_info']
Received no piggyback data
[cpu_tracking] Stop [7f6736a67770 - Snapshot(process=posix.times_result(user=0.0, system=0.0, children_user=0.0, children_system=0.0, elapsed=0.0))]
[snmp] Success, execution time 0.0 sec | execution_time=0.010 user_time=0.000 system_time=0.000 children_user_time=0.000 children_system_time=0.000 cmk_time_snmp=0.010

snmpbulkwalk -Cr10 -v2c -c public -m “” -M “” -Cc -OQ -OU -On -Ot 192.168.182.132

.1.3.6.1.4.1.50449.1
.1.3.6.1.4.1.50449.1.1.1.1.1.0 = 1
.1.3.6.1.4.1.50449.1.1.1.1.2.0 = 1
.1.3.6.1.4.1.50449.1.1.1.1.3.0 = 1
.1.3.6.1.4.1.50449.1.1.1.1.4.0 = 1
.1.3.6.1.4.1.50449.1.1.1.1.5.0 = 1
.1.3.6.1.4.1.50449.1.1.1.2.1.0 = 74
.1.3.6.1.4.1.50449.1.1.1.2.2.0 = 60
.1.3.6.1.4.1.50449.1.1.1.2.3.0 = 100
.1.3.6.1.4.1.50449.1.1.1.3.1.0 = 27
.1.3.6.1.4.1.50449.1.1.1.3.1.0 = No more variables left in this MIB View (It is past the end of the MIB tree)

It does not look like the OID .1.3.6.1.4.1.50449 exists on its own. The detect function from your SNMP section definition will not match.

You should check other OIDs like .1.3.6.1.2.1.1.2.0 that could be unique to the device. This also makes the detection faster as these first OIDs are already cached.

And how can I discover multiple services and all those to have dynamically given names?

This topic was automatically closed 365 days after the last reply. New replies are no longer allowed. Contact an admin if you think this should be re-opened.