CMK version:
2.0.0p39.cre
Server address:
http://10.11.1.47/MubeaPRO/check_mk
(running on local virtual server)
Monitored system address:
10.11.66.104
OS version:
Ubuntu 22.04.5 LTS on Checkmk server / Debian GNU / Linux 12 (bookworm) on monitored system
Error description:
Hello, community. I would like to use Check_MK to monitor multiple Raspberry Pi devices. It is already able to read multiple services from IP address of each Raspberry Pi (as soon as an agent has been installed) like CPU utilization, memory, temperature, but some important ones are missing and I am trying to parse them using scripts created with ChatGPT. I am not able to make CMK read the services from a plugin, but at least it seems that everything on the Raspberry side is working correctly so far.
Let’s start with RPi:
/usr/lib/check_mk_agent/plugins/raspberry_info.sh
#!/bin/bash
echo "<<<raspberry_info>>>"
echo "Model: $(cat /proc/device-tree/model)"
echo "OS Version: $(lsb_release -d | awk -F'\t' '{print $2}')"
echo "Kernel Version: $(uname -r)"
/etc/xinetd.d/check_mk contains (amongst the default content) one uncommented line with server IP address:
only_from = 10.11.1.47
Should it contain complete server address?
Now the Check_MK server side:
/omd/sites/MubeaPRO/local/share/check_mk/checks/raspberry_info.py
def parse_raspberry_info(section):
parsed = {}
for row in section:
if len(row) > 0:
line = row[0]
if isinstance(line, str):
if line.startswith("Model:"):
parsed["model"] = line.split(":", 1)[1].strip()
elif line.startswith("OS Version:"):
parsed["os_version"] = line.split(":", 1)[1].strip()
elif line.startswith("Kernel Version:"):
parsed["kernel_version"] = line.split(":", 1)[1].strip()
return parsed
def inventory_raspberry_info(parsed):
inventory = []
if "model" in parsed:
inventory.append(("model", parsed["model"]))
if "os_version" in parsed:
inventory.append(("os_version", parsed["os_version"]))
if "kernel_version" in parsed:
inventory.append(("kernel_version", parsed["kernel_version"]))
return inventory
def check_raspberry_info(item, params, parsed):
model = parsed.get("model", "Unknown Model")
os_version = parsed.get("os_version", "Unknown OS")
kernel_version = parsed.get("kernel_version", "Unknown Kernel")
message = f"Model: {model}, OS: {os_version}, Kernel: {kernel_version}"
return (0, message)
check_info["raspberry_info"] = {
"parse_function": parse_raspberry_info,
"inventory_function": inventory_raspberry_info,
"check_function": check_raspberry_info,
"service_description": "Raspberry Info",
"has_perfdata": False,
"default_levels_variable": None,
}
Output of “cmk --debug -vII hostname”:
Discovering services and host labels on: 10.11.66.104
10.11.66.104:
+ FETCHING DATA
Using data from cache file /omd/sites/MubeaPRO/tmp/check_mk/cache/10.11.66.104
[TCPFetcher] Use cached data
[PiggybackFetcher] Execute data source
No piggyback files for '10.11.66.104'. Skip processing.
No piggyback files for '10.11.66.104'. Skip processing.
+ PARSE FETCHER RESULTS
Received no piggyback data
+ EXECUTING HOST LABEL DISCOVERY
+ PERFORM HOST LABEL DISCOVERY
+ EXECUTING DISCOVERY PLUGINS (31)
Traceback (most recent call last):
File "/omd/sites/MubeaPRO/lib/python3/cmk/base/api/agent_based/register/check_plugins_legacy.py", line 130, in _resolve_string_parameters
return eval(params_unresolved, context, context)
File "<string>", line 0
^
SyntaxError: unexpected EOF while parsing
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/omd/sites/MubeaPRO/bin/cmk", line 92, in <module>
exit_status = modes.call(mode_name, mode_args, opts, args)
File "/omd/sites/MubeaPRO/lib/python3/cmk/base/modes/__init__.py", line 69, in call
return handler(*handler_args)
File "/omd/sites/MubeaPRO/lib/python3/cmk/base/modes/check_mk.py", line 1542, in mode_discover
discovery.do_discovery(
File "/omd/sites/MubeaPRO/lib/python3/cmk/base/discovery.py", line 378, in do_discovery
_do_discovery_for(
File "/omd/sites/MubeaPRO/lib/python3/cmk/base/discovery.py", line 435, in _do_discovery_for
discovered_services, host_label_discovery_result = _discover_host_labels_and_services(
File "/omd/sites/MubeaPRO/lib/python3/cmk/base/discovery.py", line 1431, in _discover_host_labels_and_services
discovered_services = [] if discovery_parameters.only_host_labels else _discover_services(
File "/omd/sites/MubeaPRO/lib/python3/cmk/base/discovery.py", line 1480, in _discover_services
service_table.update({
File "/omd/sites/MubeaPRO/lib/python3/cmk/base/discovery.py", line 1480, in <dictcomp>
service_table.update({
File "/omd/sites/MubeaPRO/lib/python3/cmk/base/discovery.py", line 1548, in _execute_discovery
yield from _enriched_discovered_services(hostname, check_plugin.name, plugins_services)
File "/omd/sites/MubeaPRO/lib/python3/cmk/base/discovery.py", line 1562, in _enriched_discovered_services
for service in plugins_services:
File "/omd/sites/MubeaPRO/lib/python3/cmk/base/api/agent_based/register/check_plugins.py", line 72, in filtered_generator
for element in generator(*args, **kwargs):
File "/omd/sites/MubeaPRO/lib/python3/cmk/base/api/agent_based/register/check_plugins_legacy.py", line 94, in discovery_migration_wrapper
parameters = _resolve_string_parameters(raw_params, check_name, get_check_context)
File "/omd/sites/MubeaPRO/lib/python3/cmk/base/api/agent_based/register/check_plugins_legacy.py", line 132, in _resolve_string_parameters
raise ValueError("Invalid check parameter string '%s' found in discovered service %r" %
ValueError: Invalid check parameter string '' found in discovered service 'raspberry_info'
Could you please help me to get it working?


