Proxmox_special_agent (check_mk 2.0) ... json response

mensinck

Renowned Member
Oct 19, 2015
29
1
68
Kiel, germany
Ich versuche Proxmox VE 6.4 Cluster mit einem upgegradeten

check_mk der Version 2.0 zu monitoren.

Check_mk 2.0 liefert einen special Agent, der die Proxmox API nutzt.

Auf einem Cluster (beide Cluster haben den gleichen Patch Stand) bekomme ich auch brauchbare Antworten aus der API:

Auf dem check_mk Monitoring host: Check gegen einen Host im Cluster 1:

Bash:
./share/check_mk/agents/special/agent_proxmox_ve '-u' 'cmk@pve' '-p' '**********' '--port' 8006 '--no-cert-check' 'Host_on_Cluster1'

<<<<pve11>>>>
<<<proxmox_ve_node_info:sep(0)>>>
{"lxc": [], "proxmox_ve_version": {"release": "6.4", "repoid": "9f411e79", "version": "6.4-13"}, "qemu": ["100", "206025", "254050", "256025", "258020", "258021", "258022", "258023", "258024", "258030", "258035", "258055", "258060", "260005", "260009", "260010", "260015", "260020", "260021", "260022", "260026", "260031", "260055", "260110", "260855", "260901"], "status": "online", "subscription": {"status": "NotFound"}}
<<<proxmox_ve_mem_usage:sep(0)>>>
{"max_mem": 202792255488, "mem": 100950446080}
<<<uptime>>>
1548214
<<<<>>>>
<<<<pve12>>>>
...

Dort bekomme ich, was ich sehen möchte. Alles gut so weit....

Allerdings auf dem Monitoring host Check gegen Host im Cluster2 bekomme ich einen parse Error

Bash:
./share/check_mk/agents/special/agent_proxmox_ve '-u' 'cmk@pve' '-p' '*****' '--port' 8006 '--no-cert-check' 'Host_on_cluster2'


Unhandled exception: JSONDecodeError('Expecting value: line 1 column 1 (char 0)')
Selbstverständlich ist getestet, dass die Authentifizierung auch auf dem Cluster 2 korrekt ist und Zugriff vorhanden ist.

So, nun hoffe ich, Tipps zu bekommen, wo ich das debuggen auf dem Cluster beginnen soll.

Danke Lukas
 
Ich kenne cmk zwar (allerdings ist das wissen etwas rostig und von älteren Versionen) - was liefert der 2. node denn zurück?

damals war das mit `cmk -d <hostname> ` auf dem cmk host machbar

Sonst würde es sich anbieten mal in den support channels von Check MK zu fragen.

Ich hoffe das hilft!
 
Hallo Stoiko Ivanov,

Danke für die Rückmeldung. cmk -d hostname fürhrt sowohl den agent check auf dem Host aus, der tadellos funktioniert, wie auch den oben beschriebenen ,,spezial Agent". Dieser fragt per https vom cmk-host den Proxmox Cluster über die Proxmox api ab.

Der Aufruf erwartet eine JSON Antowrt aus der API. Dafür wird im cluster ein User mit den rechten ,,PVEAuditor" angelegt, der in dem Aufruf genutzt wird.

Bei dem funktionierenden Cluster erhalte ich pro PVE Host und pro VM im cluster eine Anwort, die wie folgt ausschaut:


Pro Host im Cluster:
Code:
<<<<pve11>>>>

<<<proxmox_ve_node_info:sep(0)>>>
{"lxc": [], "proxmox_ve_version": {"release": "6.4", "repoid": "9f411e79", "version": "6.4-13"}, "qemu": ["100", "206025", "254050", "256025", "258020", "258021", "258022", "258023", "258024", "258030", "258035", "258055", "258060", "260005", "260009", "260010", "260015"
, "260020", "260021", "260022", "260026", "260031", "260055", "260110", "260855", "260901"], "status": "online", "subscription": {"status": "NotFound"}}
<<<proxmox_ve_mem_usage:sep(0)>>>
{"max_mem": 202792255488, "mem": 106089607168}
<<<uptime>>>
1717437
<<<<>>>>
........

Pro VM im cluster:

Code:
<<<<mgmt01>>>>
<<<proxmox_ve_vm_info:sep(0)>>>
{"name": "mgmt01", "node": "pve12", "status": "running", "type": "qemu", "vmid": "206025"}
<<<proxmox_ve_mem_usage:sep(0)>>>
{"max_mem": 8589934592, "mem": 2094292992}
<<<proxmox_ve_vm_backup_status:sep(0)>>>
{"last_backup": null}
<<<<>>>>


Das ist natürlich der geparste JSON Content der Antwort.
Ich würde gerne einmal die JSON Antowrt des Clusters direkt aufrufen und zwischen den Clustern vergleichen, damit ich sehe, ob der nicht funktionierende Cluster brauchbaren Content auf die Anfrage liefert.


'In den cmk Forren habeich natürlich aug gefragt..... aber im ,,Grundsatz" läuft der Check in cmk ja, da ich brauchbare Antworten aus einem Cluster erhalte.

Gruss L. mensinck
 
Bei dem funktionierenden Cluster erhalte ich pro PVE Host und pro VM im cluster eine Anwort, die wie folgt ausschaut:
und was kommt bei dem nicht funktionierenden cluster/node als antwort?

habe jetzt auf die schnell aus dem agent sourcecode nicht herausgefunden welche api-pfade aufgerufen werden
 
Leider nur ein:


Code:
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

ein mitgegebenes --debug dann noch diesen trace:

Code:
Traceback (most recent call last):
  File "/omd/sites/mc/share/check_mk/agents/special/agent_proxmox_ve", line 10, in <module>
    main()
  File "/omd/sites/mc/lib/python3/cmk/special_agents/agent_proxmox_ve.py", line 720, in main
    special_agent_main(parse_arguments, agent_proxmox_ve_main)
  File "/omd/sites/mc/lib/python3/cmk/special_agents/utils/agent_common.py", line 159, in special_agent_main
    _special_agent_main_core(parse_arguments, main_fn, sys.argv[1:])
  File "/omd/sites/mc/lib/python3/cmk/special_agents/utils/agent_common.py", line 141, in _special_agent_main_core
    main_fn(args)
  File "/omd/sites/mc/lib/python3/cmk/special_agents/agent_proxmox_ve.py", line 421, in agent_proxmox_ve_main
    data = session.get_tree({
  File "/omd/sites/mc/lib/python3/cmk/special_agents/agent_proxmox_ve.py", line 715, in get_tree
    return rec_get_tree(None, requested_structure, [])
  File "/omd/sites/mc/lib/python3/cmk/special_agents/agent_proxmox_ve.py", line 687, in rec_get_tree
    return {
  File "/omd/sites/mc/lib/python3/cmk/special_agents/agent_proxmox_ve.py", line 688, in <dictcomp>
    key: rec_get_tree(key, subtree[key], next_path)
  File "/omd/sites/mc/lib/python3/cmk/special_agents/agent_proxmox_ve.py", line 704, in rec_get_tree
    return [{
  File "/omd/sites/mc/lib/python3/cmk/special_agents/agent_proxmox_ve.py", line 706, in <listcomp>
    **(rec_get_tree(
  File "/omd/sites/mc/lib/python3/cmk/special_agents/agent_proxmox_ve.py", line 687, in rec_get_tree
    return {
  File "/omd/sites/mc/lib/python3/cmk/special_agents/agent_proxmox_ve.py", line 688, in <dictcomp>
    key: rec_get_tree(key, subtree[key], next_path)
  File "/omd/sites/mc/lib/python3/cmk/special_agents/agent_proxmox_ve.py", line 675, in rec_get_tree
    response = self._session.get_api_element("/".join(next_path))
  File "/omd/sites/mc/lib/python3/cmk/special_agents/agent_proxmox_ve.py", line 602, in get_api_element
    response_json = self.get_raw("api2/json/" + path).json()
  File "/omd/sites/mc/lib/python3/requests/models.py", line 897, in json
    return complexjson.loads(self.text, **kwargs)
  File "/omd/sites/mc/lib/python3.8/json/__init__.py", line 357, in loads
    return _default_decoder.decode(s)
  File "/omd/sites/mc/lib/python3.8/json/decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/omd/sites/mc/lib/python3.8/json/decoder.py", line 355, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
 
OK,.... was ich gefunden habe ist, dass ich beide cluster per curl erreichen kann und abfragen:

z.B. /nodes

Auf den ,,laufenden Cluster", der per cmk special-agent abgefragt werden kann....

Code:
curl --insecure --cookie "$(<cookie)" https://10.1.0.11:8006/api2/json/nodes/

Code:
{"data":[{"maxdisk":72917082112,"level":"","uptime":1737838,"ssl_fingerprint":"40:FB:1F:BC:AF:84:AD:17:00:8E:1F:6E:C6:D4:4E:ED:76:EE:53:E4:00:77:46:51:10:CF:1C:FD:BA:B4:CC:56","node":"pve11","maxmem":202792255488,"cpu":0.0392048424043194,"mem":106509987840,"status":"online","id":"node/pve11","maxcpu":24,"type":"node","disk":6425444352},{"id":"node/pve13","status":"online","mem":110634098688,"cpu":0.0325383434460698,"disk":12424396800,"type":"node","maxcpu":24,"level":"","maxdisk":72917082112,"maxmem":202792255488,"ssl_fingerprint":"2B:AA:33:BF:4B:F1:6B:E2:11:38:CF:6F:7C:15:0B:E4:45:80:D6:22:B1:3C:DD:23:11:88:F0:F8:98:DC:C3:3D","node":"pve13","uptime":1742170},{"node":"pve12","ssl_fingerprint":"F8:BD:F6:E5:7B:A2:B1:66:D4:94:79:6D:BB:31:E0:EA:03:0E:A4:1F:28:67:CF:22:5F:19:A0:B9:3A:D5:7D:3D","uptime":1740224,"maxmem":202792366080,"maxdisk":72917082112,"level":"","type":"node","maxcpu":12,"disk":6132224000,"mem":89475149824,"status":"online","id":"node/pve12","cpu":0.081519469246617}]}


der Cluster, bei dem cmk's special-agent den parse error liefert:

Code:
curl --insecure --cookie "$(<cookie)" https://192.168.120.143:8006/api2/json/nodes/

Code:
{"data":[{"id":"node/pve145","ssl_fingerprint":"0F:E8:73:9C:42:8C:77:4B:54:48:03:B8:F5:16:0F:A0:52:5B:83:70:AD:BB:E8:2A:E1:59:34:53:EC:91:DD:76","status":"offline","node":"pve145","type":"node"},{"status":"online","cpu":0.0321348301827427,"node":"pve149","ssl_fingerprint":"D7:DA:28:8F:8C:88:28:B6:78:98:20:8F:03:8A:8D:8E:10:2A:75:AF:50:30:4F:D7:08:3F:61:F5:CF:41:FC:DB","uptime":946312,"maxdisk":72917082112,"level":"","maxmem":135146557440,"mem":64010133504,"type":"node","id":"node/pve149","disk":13713842176,"maxcpu":32},{"status":"offline","ssl_fingerprint":"02:BB:D6:A7:D1:C7:22:C8:D2:25:E2:78:5D:B9:4A:AF:D0:FE:57:28:3A:2B:A6:9D:2C:06:DA:39:71:A9:69:24","node":"pve152","type":"node","id":"node/pve152"},{"id":"node/pve147","node":"pve147","type":"node","ssl_fingerprint":"04:5D:D2:CD:F8:5F:06:2A:C0:59:A5:D8:57:88:5C:92:B1:00:49:D2:9B:5A:00:F7:2C:B4:E2:59:83:6E:63:FC","status":"offline"},{"id":"node/pve153","status":"offline","ssl_fingerprint":"03:CE:88:96:06:24:62:DE:A8:B4:F4:36:60:68:01:20:55:67:94:A4:3F:13:03:AC:24:C5:62:DE:3E:B6:D5:B6","node":"pve153","type":"node"},{"ssl_fingerprint":"11:2A:F7:23:E4:21:51:A1:10:05:56:EF:1B:70:82:30:40:8F:49:32:3B:1D:F9:5D:21:C7:09:48:08:CC:81:D4","status":"offline","type":"node","node":"pve151","id":"node/pve151"},{"ssl_fingerprint":"BC:89:C2:31:76:C0:DD:97:A7:58:0C:39:24:5D:BC:62:D0:60:70:7F:8B:45:96:70:AF:FB:61:5C:67:52:47:9B","node":"pve144","maxdisk":17568661504,"uptime":944280,"level":"","maxmem":126724317184,"status":"online","cpu":0.0692345936366371,"disk":7880556544,"id":"node/pve144","maxcpu":16,"mem":69064015872,"type":"node"},{"type":"node","mem":57873694720,"maxcpu":32,"disk":5036539904,"id":"node/pve143","status":"online","cpu":0.0502879591951435,"node":"pve143","ssl_fingerprint":"05:A8:75:94:60:CB:0B:AF:76:8D:B5:94:00:B7:E9:C6:2F:45:49:34:7A:13:E8:03:78:19:87:81:55:FC:A5:28","maxmem":160513699840,"level":"","uptime":1584794,"maxdisk":72917082112}]}

Erreichen kann ich also beide Cluster und die api liefert auch ,,Ergebnisse". Der Unterschied, den ich sehe ist, dass Cluster2 nodes hat, die offline sind.

Also doch der Interpreter des JSON auf cmk Seite?
 
Hey All,

Das schein dann doch ein Bug in Check_mk.

Alle Cluster können korrekt abgefragt werden.

Sobald aber in einem Cluster ein Host down ist (auch beabsichtigt), läuft der special Agent auf den JSONDecode Error. Sobald alles hosts wieder Up, kommt ein korrekter Output.

Gruss Lukas
 

About

The Proxmox community has been around for many years and offers help and support for Proxmox VE, Proxmox Backup Server, and Proxmox Mail Gateway.
We think our community is one of the best thanks to people like you!

Get your subscription!

The Proxmox team works very hard to make sure you are running the best software and getting stable updates and security enhancements, as well as quick enterprise support. Tens of thousands of happy customers have a Proxmox subscription. Get yours easily in our online shop.

Buy now!