Check for own special agent, check_mk 2.0

Hi, I have written my own special agent which is copied to local/share/check_mk/agents/special/agent_my_rest_api and then I have a corresponding “argument thingy” for putting together the arguments sent to the special agent, copied to local/share/check_mk/checks/agent_my_rest_api, as well as a web plugin at local/share/check_mk/web/plugins/wato/. I can configure a rule for the special agent in the UI, and assign it to a host.

So far so good. I then build a check to handle the special agent output, and I can get it to display ok, warn or critical when looking at the host services. However, I realised that the check is not the same as the docs here: Writing your own check plug-ins - I think I have written an old 1.6 check. So, I followed the docs from that link and I copied my new check into local/lib/check_mk/base/plugins/agent_based/.

I removed the site, added a new one, copied my files across, but now it seems like the new check doesn’t get called, and there is no service shown for the host.

How can I verify that the check is actually being called?

The special agent returns this:

    OMD[mysite]:~$ cmk -d localhost
    <<<my_rest_api>>>
    filespace.anttest 17248

Here is the check plugin:

from .agent_based_api.v1 import *


def discover_my_rest_api(section):
    yield Service()


def check_my_rest_api(section):
    print("\r\n\r\nANTHERE:\r\n============================")
    print("{}".format(section))
    for line in section:
        usage = line[1]
        msg = "Usage: {}".format(usage)
        if int(line[1]) > 10000: # TODO take from params
            yield Result(state=State.CRIT, summary=msg)
            return
    yield Result(state=State.OK, summary=msg)

register.check_plugin(
    name="my_rest_api",
    service_name="LucidLink CheckPlugin",
    discovery_function=discover_my_rest_api,
    check_function=check_my_rest_api,
)

I assumed that because the special agent outputs a section called my_rest_api, that would be used to find the check plugin, based on the name that I pass in the register function.

OMD[mysite]:~$ cmk -L | grep my_rest
my_rest_api                                 agent      (no man page present)
OMD[mysite]:~$ cmk --detect-plugins=my_rest_api -vI localhost
Discovering services and host labels on: localhost
localhost:
+ FETCHING DATA
[ProgramFetcher] Execute data source
No piggyback files for 'localhost'. Skip processing.
No piggyback files for '127.0.0.1'. Skip processing.
[PiggybackFetcher] Execute data source
+ PARSE FETCHER RESULTS
Received no piggyback data
+ EXECUTING HOST LABEL DISCOVERY
+ PERFORM HOST LABEL DISCOVERY
+ EXECUTING DISCOVERY PLUGINS (0)
SUCCESS - Found no new services, no new host labels
OMD[mysite]:~$ cmk --debug --check -v localhost
Checkmk version 2.0.0p12
+ FETCHING DATA
[ProgramFetcher] Execute data source
No piggyback files for 'localhost'. Skip processing.
No piggyback files for '127.0.0.1'. Skip processing.
[PiggybackFetcher] Execute data source
+ PARSE FETCHER RESULTS
Received no piggyback data
No piggyback files for 'localhost'. Skip processing.
No piggyback files for '127.0.0.1'. Skip processing.
[special_my_rest_api] Version: unknown, OS: unknown, execution time 1.1 sec | execution_time=1.140 user_time=0.010 system_time=0.000 children_user_time=0.160 children_system_time=0.020 cmk_time_ds=0.960 cmk_time_agent=0.000

The output from those last two calls to cmk makes me think that the check isnt being called - because the print statements aren’t being output.

more output follows. strangely i cant see the special agent output, but I can see it being called.

OMD[mysite]:~$ cmk --debug --checks=my_rest_api -vvn localhost
WARNING: '--checks' is deprecated in favour of option 'detect-plugins'
Checkmk version 2.0.0p12
Try license usage history update.
Trying to acquire lock on /omd/sites/mysite/var/check_mk/license_usage/next_run
Got lock on /omd/sites/mysite/var/check_mk/license_usage/next_run
Trying to acquire lock on /omd/sites/mysite/var/check_mk/license_usage/history.json
Got lock on /omd/sites/mysite/var/check_mk/license_usage/history.json
Next run time has not been reached yet. Abort.
Releasing lock on /omd/sites/mysite/var/check_mk/license_usage/history.json
Released lock on /omd/sites/mysite/var/check_mk/license_usage/history.json
Releasing lock on /omd/sites/mysite/var/check_mk/license_usage/next_run
Released lock on /omd/sites/mysite/var/check_mk/license_usage/next_run
Loading autochecks from /omd/sites/mysite/var/check_mk/autochecks/localhost.mk
+ FETCHING DATA
  Source: SourceType.HOST/FetcherType.PROGRAM
[cpu_tracking] Start [7f10680c9970]
Calling: /omd/sites/mysite/local/share/check_mk/agents/special/agent_my_rest_api '--ClientID' 'nottellingyou' '--ClientSecret' 'secret' '--FileSpaceName' 'filespace.anttest' '--WarningTiB' '1' '--CriticalTiB' '2'
[ProgramFetcher] Fetch with cache settings: DefaultAgentFileCache(base_path=PosixPath('/omd/sites/mysite/tmp/check_mk/data_source_cache/special_my_rest_api/localhost'), max_age=MaxAge(checking=0, discovery=120, inventory=120), disabled=False, use_outdated=False, simulation=False)
Not using cache (Mode Mode.FORCE_SECTIONS)
[ProgramFetcher] Execute data source
Not using cache (Mode Mode.FORCE_SECTIONS)
[cpu_tracking] Stop [7f10680c9970 - Snapshot(process=posix.times_result(user=0.0, system=0.0, children_user=0.16, children_system=0.02, elapsed=1.050000000745058))]
  Source: SourceType.HOST/FetcherType.PIGGYBACK
[cpu_tracking] Start [7f10680c9340]
No piggyback files for 'localhost'. Skip processing.
No piggyback files for '127.0.0.1'. Skip processing.
[PiggybackFetcher] Fetch with cache settings: NoCache(base_path=PosixPath('/omd/sites/mysite/tmp/check_mk/data_source_cache/piggyback/localhost'), max_age=MaxAge(checking=0, discovery=120, inventory=120), disabled=False, use_outdated=False, simulation=False)
Not using cache (Mode Mode.FORCE_SECTIONS)
[PiggybackFetcher] Execute data source
Not using cache (Mode Mode.FORCE_SECTIONS)
[cpu_tracking] Stop [7f10680c9340 - Snapshot(process=posix.times_result(user=0.0, system=0.0, children_user=0.0, children_system=0.0, elapsed=0.0))]
[cpu_tracking] Start [7f10680c9970]
+ PARSE FETCHER RESULTS
  Source: SourceType.HOST/FetcherType.PROGRAM
No persisted sections loaded
  -> Add sections: []
  Source: SourceType.HOST/FetcherType.PIGGYBACK
No persisted sections loaded
  -> Add sections: []
Received no piggyback data
Loading item states
Trying to acquire lock on /omd/sites/mysite/tmp/check_mk/counters/localhost
Got lock on /omd/sites/mysite/tmp/check_mk/counters/localhost
Releasing lock on /omd/sites/mysite/tmp/check_mk/counters/localhost
Released lock on /omd/sites/mysite/tmp/check_mk/counters/localhost
[cpu_tracking] Stop [7f10680c9970 - Snapshot(process=posix.times_result(user=0.0, system=0.0, children_user=0.0, children_system=0.0, elapsed=0.0))]
[special_my_rest_api] Version: unknown, OS: unknown, execution time 1.1 sec | execution_time=1.050 user_time=0.000 system_time=0.000 children_user_time=0.160 children_system_time=0.020 cmk_time_ds=0.870 cmk_time_agent=0.000

if i call the special agent the same way, there is output:

OMD[mysite]:~$ python3 /omd/sites/mysite/local/share/check_mk/agents/special/agent_my_rest_api '--ClientID' 'nottellingyou' '--ClientSecret' 'secret' '--FileSpaceName' 'filespace.anttest' '--WarningTiB' '1' '--CriticalTiB' '2'
<<<my_rest_api>>>
filespace.anttest 17248

Thanks of any tips on how to check what is going on under the hood.
Ant

In your plugin the “register.agent_section” is missing.
With your special agent and the shown section header it should look like

register.agent_section(
    name="my_rest_api",
    parse_function=parse_my_rest_api,
)

def parse_my_rest_api(string_table):
    parsed = {}
    for line in string_table:
        parsed[line[0]] = line[1]
    return parsed

The parse function can also something different but it is easier to have the output data in a well defined data structure.

Inside the “register.check_plugin” you should insert the line “sections=[“my_rest_api”],”

1 Like

Thanks @andreas-doehler . I also noticed that when I look at the host in the UI, I have a warning for the Check_MK Discovery Service: 1 unmonitored services (my_rest_api:1)

Is that normal, or can I make it automatically monitored?

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.