Source: https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/app/proxmox?at=release/7.0
Proxmox VE by HTTP
Overview
This template is designed for the effortless deployment of Proxmox VE monitoring by Zabbix via HTTP and doesn't require any external scripts.
Proxmox VE uses a REST like API. The concept is described in Resource Oriented Architecture (ROA).
Check the API documentation
for details.
Requirements
Zabbix version: 7.0 and higher.
Tested versions
This template has been tested on:
- Proxmox VE
Configuration
Zabbix should be configured according to the instructions in the Templates out of the box section.
Setup
- Create an API token for the monitoring user. Important note: for security reasons, it is recommended to create a separate user (Datacenter - Permissions).
Please provide the necessary access levels for both the User and the Token:
- Check: ["perm","/",["Sys.Audit"]]
- Check: ["perm","/storage",["Datastore.Audit"]]
- Check: ["perm","/vms",["VM.Audit"]]
-
Copy the resulting Token ID and Secret into the host macros
{$PVE.TOKEN.ID}
and{$PVE.TOKEN.SECRET}
. -
Set the hostname or IP address of the Proxmox API VE host in the
{$PVE.URL.HOST}
macro. You can also change the API port in the{$PVE.URL.PORT}
macro if necessary.
Macros used
Name | Description | Default |
---|---|---|
{$PVE.URL.HOST} | The hostname or IP address of the Proxmox VE API host. |
<SET PVE HOST> |
{$PVE.URL.PORT} | The API uses the HTTPS protocol and the server listens to port 8006 by default. |
8006 |
{$PVE.TOKEN.ID} | API tokens allow stateless access to most parts of the REST API by another system, software or API client. |
USER@REALM!TOKENID |
{$PVE.TOKEN.SECRET} | Secret key. |
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx |
{$PVE.ROOT.PUSE.MAX.WARN} | Maximum used root space in percentage. |
90 |
{$PVE.MEMORY.PUSE.MAX.WARN} | Maximum used memory in percentage. |
90 |
{$PVE.CPU.PUSE.MAX.WARN} | Maximum used CPU in percentage. |
90 |
{$PVE.SWAP.PUSE.MAX.WARN} | Maximum used swap space in percentage. |
90 |
{$PVE.VM.MEMORY.PUSE.MAX.WARN} | Maximum used memory in percentage. |
90 |
{$PVE.VM.CPU.PUSE.MAX.WARN} | Maximum used CPU in percentage. |
90 |
{$PVE.LXC.MEMORY.PUSE.MAX.WARN} | Maximum used memory in percentage. |
90 |
{$PVE.LXC.CPU.PUSE.MAX.WARN} | Maximum used CPU in percentage. |
90 |
{$PVE.STORAGE.PUSE.MAX.WARN} | Maximum used storage space in percentage. |
90 |
Items
Name | Description | Type | Key and additional info |
---|---|---|---|
Get cluster resources | Resources index. |
HTTP agent | proxmox.cluster.resources Preprocessing
|
Get cluster status | Get cluster status information. |
HTTP agent | proxmox.cluster.status Preprocessing
|
API service status | Get API service status. |
Script | proxmox.api.available Preprocessing
|
Triggers
Name | Description | Expression | Severity | Dependencies and additional info |
---|---|---|---|---|
API service not available | The API service is not available. Check your network and authorization settings. |
last(/Proxmox VE by HTTP/proxmox.api.available) <> 200 |
High |
LLD rule Cluster discovery
Name | Description | Type | Key and additional info |
---|---|---|---|
Cluster discovery | Dependent item | proxmox.cluster.discovery |
Item prototypes for Cluster discovery
Name | Description | Type | Key and additional info |
---|---|---|---|
Cluster [{#RESOURCE.NAME}]: Quorate | Indicates if there is a majority of nodes online to make decisions. |
Dependent item | proxmox.cluster.quorate[{#RESOURCE.NAME}] Preprocessing
|
Trigger prototypes for Cluster discovery
Name | Description | Expression | Severity | Dependencies and additional info |
---|---|---|---|---|
Cluster [{#RESOURCE.NAME}] not quorum | Proxmox VE use a quorum-based technique to provide a consistent state among all cluster nodes. |
last(/Proxmox VE by HTTP/proxmox.cluster.quorate[{#RESOURCE.NAME}]) <> 1 |
High |
LLD rule Node discovery
Name | Description | Type | Key and additional info |
---|---|---|---|
Node discovery | Dependent item | proxmox.node.discovery |
Item prototypes for Node discovery
Name | Description | Type | Key and additional info |
---|---|---|---|
Node [{#NODE.NAME}]: Status | Indicates if the node is online or offline. |
Dependent item | proxmox.node.online[{#NODE.NAME}] Preprocessing
|
Node [{#NODE.NAME}]: Status | Read node status. |
HTTP agent | proxmox.node.status[{#NODE.NAME}] |
Node [{#NODE.NAME}]: RRD statistics | Read node RRD statistics. |
HTTP agent | proxmox.node.rrd[{#NODE.NAME}] Preprocessing
|
Node [{#NODE.NAME}]: Time | Read server time and time zone settings. |
HTTP agent | proxmox.node.time[{#NODE.NAME}] |
Node [{#NODE.NAME}]: Uptime | The system uptime expressed in the following format: "N days, hh:mm:ss". |
Dependent item | proxmox.node.uptime[{#NODE.NAME}] Preprocessing
|
Node [{#NODE.NAME}]: PVE version | PVE manager version. |
Dependent item | proxmox.node.pveversion[{#NODE.NAME}] Preprocessing
|
Node [{#NODE.NAME}]: Kernel version | Kernel version info. |
Dependent item | proxmox.node.kernelversion[{#NODE.NAME}] Preprocessing
|
Node [{#NODE.NAME}]: Root filesystem, used | Root filesystem usage. |
Dependent item | proxmox.node.rootused[{#NODE.NAME}] Preprocessing
|
Node [{#NODE.NAME}]: Root filesystem, total | Root filesystem total. |
Dependent item | proxmox.node.roottotal[{#NODE.NAME}] Preprocessing
|
Node [{#NODE.NAME}]: Memory, used | Memory usage. |
Dependent item | proxmox.node.memused[{#NODE.NAME}] Preprocessing
|
Node [{#NODE.NAME}]: Memory, total | Memory total. |
Dependent item | proxmox.node.memtotal[{#NODE.NAME}] Preprocessing
|
Node [{#NODE.NAME}]: CPU, usage | CPU usage. |
Dependent item | proxmox.node.cpu[{#NODE.NAME}] Preprocessing
|
Node [{#NODE.NAME}]: Outgoing data, rate | Network usage. |
Dependent item | proxmox.node.netout[{#NODE.NAME}] Preprocessing
|
Node [{#NODE.NAME}]: Incoming data, rate | Network usage. |
Dependent item | proxmox.node.netin[{#NODE.NAME}] Preprocessing
|
Node [{#NODE.NAME}]: CPU, loadavg | CPU average load. |
Dependent item | proxmox.node.loadavg[{#NODE.NAME}] Preprocessing
|
Node [{#NODE.NAME}]: CPU, iowait | CPU iowait time. |
Dependent item | proxmox.node.iowait[{#NODE.NAME}] Preprocessing
|
Node [{#NODE.NAME}]: Swap filesystem, total | Swap total. |
Dependent item | proxmox.node.swaptotal[{#NODE.NAME}] Preprocessing
|
Node [{#NODE.NAME}]: Swap filesystem, used | Swap used. |
Dependent item | proxmox.node.swapused[{#NODE.NAME}] Preprocessing
|
Node [{#NODE.NAME}]: Time zone | Time zone. |
Dependent item | proxmox.node.timezone[{#NODE.NAME}] Preprocessing
|
Node [{#NODE.NAME}]: Localtime | Seconds since 1970-01-01 00:00:00 (local time). |
Dependent item | proxmox.node.localtime[{#NODE.NAME}] Preprocessing
|
Node [{#NODE.NAME}]: Time | Seconds since 1970-01-01 00:00:00 UTC. |
Dependent item | proxmox.node.utctime[{#NODE.NAME}] Preprocessing
|
Trigger prototypes for Node discovery
Name | Description | Expression | Severity | Dependencies and additional info |
---|---|---|---|---|
Node [{#NODE.NAME}] offline | Node offline. |
last(/Proxmox VE by HTTP/proxmox.node.online[{#NODE.NAME}]) <> 1 |
High | |
Node [{#NODE.NAME}]: has been restarted | Uptime is less than 10 minutes. |
last(/Proxmox VE by HTTP/proxmox.node.uptime[{#NODE.NAME}])<10m |
Info | Manual close: Yes Depends on:
|
Node [{#NODE.NAME}]: PVE manager has changed | Firmware version has changed. Acknowledge to close the problem manually. |
last(/Proxmox VE by HTTP/proxmox.node.pveversion[{#NODE.NAME}],#1)<>last(/Proxmox VE by HTTP/proxmox.node.pveversion[{#NODE.NAME}],#2) and length(last(/Proxmox VE by HTTP/proxmox.node.pveversion[{#NODE.NAME}]))>0 |
Info | Manual close: Yes |
Node [{#NODE.NAME}]: Kernel version has changed | Firmware version has changed. Acknowledge to close the problem manually. |
last(/Proxmox VE by HTTP/proxmox.node.kernelversion[{#NODE.NAME}],#1)<>last(/Proxmox VE by HTTP/proxmox.node.kernelversion[{#NODE.NAME}],#2) and length(last(/Proxmox VE by HTTP/proxmox.node.kernelversion[{#NODE.NAME}]))>0 |
Info | Manual close: Yes |
Node [{#NODE.NAME}] high root filesystem space usage | Root filesystem space usage. |
min(/Proxmox VE by HTTP/proxmox.node.rootused[{#NODE.NAME}],5m) / last(/Proxmox VE by HTTP/proxmox.node.roottotal[{#NODE.NAME}]) * 100 >{$PVE.ROOT.PUSE.MAX.WARN:"{#NODE.NAME}"} |
Warning | |
Node [{#NODE.NAME}] high memory usage | Memory usage. |
min(/Proxmox VE by HTTP/proxmox.node.memused[{#NODE.NAME}],5m) / last(/Proxmox VE by HTTP/proxmox.node.memtotal[{#NODE.NAME}]) * 100 >{$PVE.MEMORY.PUSE.MAX.WARN:"{#NODE.NAME}"} |
Warning | |
Node [{#NODE.NAME}] high CPU usage | CPU usage. |
min(/Proxmox VE by HTTP/proxmox.node.cpu[{#NODE.NAME}],5m) > {$PVE.CPU.PUSE.MAX.WARN:"{#NODE.NAME}"} |
Warning | |
Node [{#NODE.NAME}] high swap space usage | If there is no swap configured, this trigger is ignored. |
min(/Proxmox VE by HTTP/proxmox.node.swapused[{#NODE.NAME}],5m) / last(/Proxmox VE by HTTP/proxmox.node.swaptotal[{#NODE.NAME}]) * 100 > {$PVE.SWAP.PUSE.MAX.WARN:"{#NODE.NAME}"} and last(/Proxmox VE by HTTP/proxmox.node.swaptotal[{#NODE.NAME}]) > 0 |
Warning |
LLD rule Storage discovery
Name | Description | Type | Key and additional info |
---|---|---|---|
Storage discovery | Dependent item | proxmox.storage.discovery |
Item prototypes for Storage discovery
Name | Description | Type | Key and additional info |
---|---|---|---|
Storage [{#NODE.NAME}/{#STORAGE.NAME}]: Type | More specific type, if available. |
Dependent item | proxmox.node.plugintype[{#NODE.NAME},{#STORAGE.NAME}] Preprocessing
|
Storage [{#NODE.NAME}/{#STORAGE.NAME}]: Size | Storage size in bytes. |
Dependent item | proxmox.node.maxdisk[{#NODE.NAME},{#STORAGE.NAME}] Preprocessing
|
Storage [{#NODE.NAME}/{#STORAGE.NAME}]: Content | Allowed storage content types. |
Dependent item | proxmox.node.content[{#NODE.NAME},{#STORAGE.NAME}] Preprocessing
|
Storage [{#NODE.NAME}/{#STORAGE.NAME}]: Used | Used disk space in bytes. |
Dependent item | proxmox.node.disk[{#NODE.NAME},{#STORAGE.NAME}] Preprocessing
|
Trigger prototypes for Storage discovery
Name | Description | Expression | Severity | Dependencies and additional info |
---|---|---|---|---|
Storage [{#NODE.NAME}/{#STORAGE.NAME}] high filesystem space usage | Root filesystem space usage. |
min(/Proxmox VE by HTTP/proxmox.node.disk[{#NODE.NAME},{#STORAGE.NAME}],5m) / last(/Proxmox VE by HTTP/proxmox.node.maxdisk[{#NODE.NAME},{#STORAGE.NAME}]) * 100 >{$PVE.STORAGE.PUSE.MAX.WARN:"{#NODE.NAME}/{#STORAGE.NAME}"} |
Warning |
LLD rule QEMU discovery
Name | Description | Type | Key and additional info |
---|---|---|---|
QEMU discovery | Dependent item | proxmox.qemu.discovery |
Item prototypes for QEMU discovery
Name | Description | Type | Key and additional info |
---|---|---|---|
VM [{#NODE.NAME}/{#QEMU.NAME} ({#QEMU.ID})]: Disk write, rate | Disk write. |
Dependent item | proxmox.qemu.diskwrite[{#QEMU.ID}] Preprocessing
|
VM [{#NODE.NAME}/{#QEMU.NAME} ({#QEMU.ID})]: Disk read, rate | Disk read. |
Dependent item | proxmox.qemu.diskread[{#QEMU.ID}] Preprocessing
|
VM [{#NODE.NAME}/{#QEMU.NAME} ({#QEMU.ID})]: Memory usage | Used memory in bytes. |
Dependent item | proxmox.qemu.mem[{#QEMU.ID}] Preprocessing
|
VM [{#NODE.NAME}/{#QEMU.NAME} ({#QEMU.ID})]: Memory total | The total memory expressed in bytes. |
Dependent item | proxmox.qemu.maxmem[{#QEMU.ID}] Preprocessing
|
VM [{#NODE.NAME}/{#QEMU.NAME} ({#QEMU.ID})]: Incoming data, rate | Incoming data rate. |
Dependent item | proxmox.qemu.netin[{#QEMU.ID}] Preprocessing
|
VM [{#NODE.NAME}/{#QEMU.NAME} ({#QEMU.ID})]: Outgoing data, rate | Outgoing data rate. |
Dependent item | proxmox.qemu.netout[{#QEMU.ID}] Preprocessing
|
VM [{#NODE.NAME}/{#QEMU.NAME} ({#QEMU.ID})]: CPU usage | CPU load. |
Dependent item | proxmox.qemu.cpu[{#QEMU.ID}] Preprocessing
|
VM [{#NODE.NAME}/{#QEMU.NAME}]: Get data | Get VM status data. |
HTTP agent | proxmox.qemu.get.data[{#QEMU.ID}] |
VM [{#NODE.NAME}/{#QEMU.NAME} ({#QEMU.ID})]: Uptime | The system uptime expressed in the following format: "N days, hh:mm:ss". |
Dependent item | proxmox.qemu.uptime[{#QEMU.ID}] Preprocessing
|
VM [{#NODE.NAME}/{#QEMU.NAME} ({#QEMU.ID})]: Status | Status of Virtual Machine. |
Dependent item | proxmox.qemu.vmstatus[{#QEMU.ID}] Preprocessing
|
Trigger prototypes for QEMU discovery
Name | Description | Expression | Severity | Dependencies and additional info |
---|---|---|---|---|
VM [{#NODE.NAME}/{#QEMU.NAME} ({#QEMU.ID})] high memory usage | Memory usage. |
min(/Proxmox VE by HTTP/proxmox.qemu.mem[{#QEMU.ID}],5m) / last(/Proxmox VE by HTTP/proxmox.qemu.maxmem[{#QEMU.ID}]) * 100 >{$PVE.VM.MEMORY.PUSE.MAX.WARN:"{#QEMU.ID}"} |
Warning | |
VM [{#NODE.NAME}/{#QEMU.NAME} ({#QEMU.ID})] high CPU usage | CPU usage. |
min(/Proxmox VE by HTTP/proxmox.qemu.cpu[{#QEMU.ID}],5m) > {$PVE.VM.CPU.PUSE.MAX.WARN:"{#QEMU.ID}"} |
Warning | |
VM [{#NODE.NAME}/{#QEMU.NAME}]: has been restarted | Uptime is less than 10 minutes. |
last(/Proxmox VE by HTTP/proxmox.qemu.uptime[{#QEMU.ID}])<10m |
Info | Manual close: Yes Depends on:
|
VM [{#NODE.NAME}/{#QEMU.NAME} ({#QEMU.ID})]: Not running | VM state is not "running". |
last(/Proxmox VE by HTTP/proxmox.qemu.vmstatus[{#QEMU.ID}])<>"running" |
Average |
LLD rule LXC discovery
Name | Description | Type | Key and additional info |
---|---|---|---|
LXC discovery | Dependent item | proxmox.lxc.discovery |
Item prototypes for LXC discovery
Name | Description | Type | Key and additional info |
---|---|---|---|
LXC [{#NODE.NAME}/{#LXC.NAME}]: Get data | Get LXC status data. |
HTTP agent | proxmox.lxc.get.data[{#LXC.ID}] |
LXC [{#NODE.NAME}/{#LXC.NAME} ({#LXC.ID})]: Uptime | The system uptime expressed in the following format: "N days, hh:mm:ss". |
Dependent item | proxmox.lxc.uptime[{#LXC.ID}] Preprocessing
|
LXC [{#NODE.NAME}/{#LXC.NAME} ({#LXC.ID})]: Status | Status of LXC container. |
Dependent item | proxmox.lxc.vmstatus[{#LXC.ID}] Preprocessing
|
LXC [{#NODE.NAME}/{#LXC.NAME} ({#LXC.ID})]: Disk write, rate | Disk write. |
Dependent item | proxmox.lxc.diskwrite[{#LXC.ID}] Preprocessing
|
LXC [{#NODE.NAME}/{#LXC.NAME} ({#LXC.ID})]: Disk read, rate | Disk read. |
Dependent item | proxmox.lxc.diskread[{#LXC.ID}] Preprocessing
|
LXC [{#NODE.NAME}/{#LXC.NAME} ({#LXC.ID})]: Memory usage | Used memory in bytes. |
Dependent item | proxmox.lxc.mem[{#LXC.ID}] Preprocessing
|
LXC [{#NODE.NAME}/{#LXC.NAME} ({#LXC.ID})]: Memory total | The total memory expressed in bytes. |
Dependent item | proxmox.lxc.maxmem[{#LXC.ID}] Preprocessing
|
LXC [{#NODE.NAME}/{#LXC.NAME} ({#LXC.ID})]: Incoming data, rate | Incoming data rate. |
Dependent item | proxmox.lxc.netin[{#LXC.ID}] Preprocessing
|
LXC [{#NODE.NAME}/{#LXC.NAME} ({#LXC.ID})]: Outgoing data, rate | Outgoing data rate. |
Dependent item | proxmox.lxc.netout[{#LXC.ID}] Preprocessing
|
LXC [{#NODE.NAME}/{#LXC.NAME} ({#LXC.ID})]: CPU usage | CPU load. |
Dependent item | proxmox.lxc.cpu[{#LXC.ID}] Preprocessing
|
Trigger prototypes for LXC discovery
Name | Description | Expression | Severity | Dependencies and additional info |
---|---|---|---|---|
LXC [{#NODE.NAME}/{#LXC.NAME}]: has been restarted | Uptime is less than 10 minutes. |
last(/Proxmox VE by HTTP/proxmox.lxc.uptime[{#LXC.ID}])<10m |
Info | Manual close: Yes Depends on:
|
LXC [{#NODE.NAME}/{#LXC.NAME} ({#LXC.ID})]: Not running | LXC state is not "running". |
last(/Proxmox VE by HTTP/proxmox.lxc.vmstatus[{#LXC.ID}])<>"running" |
Average | |
LXC [{#NODE.NAME}/{#LXC.NAME} ({#LXC.ID})] high memory usage | Memory usage. |
min(/Proxmox VE by HTTP/proxmox.lxc.mem[{#LXC.ID}],5m) / last(/Proxmox VE by HTTP/proxmox.lxc.maxmem[{#LXC.ID}]) * 100 >{$PVE.LXC.MEMORY.PUSE.MAX.WARN:"{#LXC.ID}"} |
Warning | |
LXC [{#NODE.NAME}/{#LXC.NAME} ({#LXC.ID})] high CPU usage | CPU usage. |
min(/Proxmox VE by HTTP/proxmox.lxc.cpu[{#LXC.ID}],5m) > {$PVE.LXC.CPU.PUSE.MAX.WARN:"{#LXC.ID}"} |
Warning |
Feedback
Please report any issues with the template at https://support.zabbix.com
You can also provide feedback, discuss the template, or ask for help at ZABBIX forums