본문 바로가기

Monitoring Tools/Zabbix

[zabbix] proxmox VE API(pvesh) 사용 VM discovery 만들기

반응형

zabbix server version 5.4

 

HTTP API를 사용하는 방식이 아닌 zabbix agent를 이용한 pvesh로 값을 얻어오는 방식이다.

 

API 자세한 내용 참조 : https://pve.proxmox.com/pve-docs/api-viewer/

 

Proxmox VE API Documentation

 

pve.proxmox.com

 

간단하게 vmid를  discovery로 얻어오게 만들고 vm name을 item으로 하는 template을 만든다.

 

 

 

PVE Zabbix Agent 작업


zabbix agent config

  • pve.qemu.discovery 이름으로 pvesh_qemu.py 를 실행하여 VMID json 출력
    • $1 = node name (pvesh get /nodes)
  • pve.qemu.vm.name 은 discovery item
    • $1 = node name (pvesh get /nodes)
    • $2 = vmid
> cat /etc/zabbix/zabbix_agentd.conf.d/pvesh_qemu.conf 
UserParameter=pve.qemu.vm.count[*], /usr/bin/pvesh get /nodes/"$1"/qemu --output-format json | jq '. | length'
UserParameter=pve.qemu.discovery[*], /usr/bin/python3 /etc/zabbix/zabbix_agentd.conf.d/pvesh_qemu.py $1
UserParameter=pve.qemu.vm.name[*], /usr/bin/pvesh get /nodes/"$1"/qemu/"$2"/config --output-format json | jq -r .name

 

pvesh_qemu.py

#!/usr/bin/python3

import sys
import os
import subprocess
import json

node = sys.argv[1]

cmd = "/usr/bin/pvesh get /nodes/{a}/qemu --output-format json | jq '.[] | .vmid'".format(a=node)
result = subprocess.check_output(cmd, shell=True, universal_newlines=True).split('\n')

data = [{}]

for i in range(0,len(result)):
    if result[i]:
        if i == 0:
            data[i]['{#VMID}'] = int(result[i])
        else:
            data.append({"{#VMID}":int(result[i])})

print(json.dumps(data))

 

 

 

zabbix server


 

Macros

 

discovery 

 

 

discovery item

 

반응형