# 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). You can explore the API documentation at http://pve.proxmox.com/pve-docs/api-viewer/index.html ## 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](https://www.zabbix.com/documentation/7.0/manual/config/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). For the created API token and user, provide the necessary access levels: * Check: ["perm","/",["Sys.Audit"]] * Check: ["perm","/nodes/{node}",["Sys.Audit"]] * Check: ["perm","/vms/{vmid}",["VM.Audit"]] Copy the resulting Token ID and Secret into host macros. ### Macros used |Name|Description|Default| |----|-----------|-------| |{$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| |----|-----------|----|-----------------------| |Proxmox: Get cluster resources|

Resources index.

|HTTP agent|proxmox.cluster.resources

**Preprocessing**

| |Proxmox: Get cluster status|

Get cluster status information.

|HTTP agent|proxmox.cluster.status

**Preprocessing**

| |Proxmox: API service status|

Get API service status.

|Script|proxmox.api.available

**Preprocessing**

| ### Triggers |Name|Description|Expression|Severity|Dependencies and additional info| |----|-----------|----------|--------|--------------------------------| |Proxmox: 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| |----|-----------|----|-----------------------| |Proxmox: 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| |----|-----------|----------|--------|--------------------------------| |Proxmox: 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| |----|-----------|----|-----------------------| |Proxmox: Node [{#NODE.NAME}]: Status|

Indicates if the node is online or offline.

|Dependent item|proxmox.node.online[{#NODE.NAME}]

**Preprocessing**

| |Proxmox: Node [{#NODE.NAME}]: Status|

Read node status.

|HTTP agent|proxmox.node.status[{#NODE.NAME}]| |Proxmox: Node [{#NODE.NAME}]: RRD statistics|

Read node RRD statistics.

|HTTP agent|proxmox.node.rrd[{#NODE.NAME}]

**Preprocessing**

| |Proxmox: Node [{#NODE.NAME}]: Time|

Read server time and time zone settings.

|HTTP agent|proxmox.node.time[{#NODE.NAME}]| |Proxmox: 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**

| |Proxmox: Node [{#NODE.NAME}]: PVE version|

PVE manager version.

|Dependent item|proxmox.node.pveversion[{#NODE.NAME}]

**Preprocessing**

| |Proxmox: Node [{#NODE.NAME}]: Kernel version|

Kernel version info.

|Dependent item|proxmox.node.kernelversion[{#NODE.NAME}]

**Preprocessing**

| |Proxmox: Node [{#NODE.NAME}]: Root filesystem, used|

Root filesystem usage.

|Dependent item|proxmox.node.rootused[{#NODE.NAME}]

**Preprocessing**

| |Proxmox: Node [{#NODE.NAME}]: Root filesystem, total|

Root filesystem total.

|Dependent item|proxmox.node.roottotal[{#NODE.NAME}]

**Preprocessing**

| |Proxmox: Node [{#NODE.NAME}]: Memory, used|

Memory usage.

|Dependent item|proxmox.node.memused[{#NODE.NAME}]

**Preprocessing**

| |Proxmox: Node [{#NODE.NAME}]: Memory, total|

Memory total.

|Dependent item|proxmox.node.memtotal[{#NODE.NAME}]

**Preprocessing**

| |Proxmox: Node [{#NODE.NAME}]: CPU, usage|

CPU usage.

|Dependent item|proxmox.node.cpu[{#NODE.NAME}]

**Preprocessing**

| |Proxmox: Node [{#NODE.NAME}]: Outgoing data, rate|

Network usage.

|Dependent item|proxmox.node.netout[{#NODE.NAME}]

**Preprocessing**

| |Proxmox: Node [{#NODE.NAME}]: Incoming data, rate|

Network usage.

|Dependent item|proxmox.node.netin[{#NODE.NAME}]

**Preprocessing**

| |Proxmox: Node [{#NODE.NAME}]: CPU, loadavg|

CPU average load.

|Dependent item|proxmox.node.loadavg[{#NODE.NAME}]

**Preprocessing**

| |Proxmox: Node [{#NODE.NAME}]: CPU, iowait|

CPU iowait time.

|Dependent item|proxmox.node.iowait[{#NODE.NAME}]

**Preprocessing**

| |Proxmox: Node [{#NODE.NAME}]: Swap filesystem, total|

Swap total.

|Dependent item|proxmox.node.swaptotal[{#NODE.NAME}]

**Preprocessing**

| |Proxmox: Node [{#NODE.NAME}]: Swap filesystem, used|

Swap used.

|Dependent item|proxmox.node.swapused[{#NODE.NAME}]

**Preprocessing**

| |Proxmox: Node [{#NODE.NAME}]: Time zone|

Time zone.

|Dependent item|proxmox.node.timezone[{#NODE.NAME}]

**Preprocessing**

| |Proxmox: Node [{#NODE.NAME}]: Localtime|

Seconds since 1970-01-01 00:00:00 (local time).

|Dependent item|proxmox.node.localtime[{#NODE.NAME}]

**Preprocessing**

| |Proxmox: 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| |----|-----------|----------|--------|--------------------------------| |Proxmox: Node [{#NODE.NAME}] offline|

Node offline.

|`last(/Proxmox VE by HTTP/proxmox.node.online[{#NODE.NAME}]) <> 1`|High|| |Proxmox: 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**:
| |Proxmox: 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| |Proxmox: 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| |Proxmox: 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|| |Proxmox: 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|| |Proxmox: 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|| |Proxmox: Node [{#NODE.NAME}] high root filesystem 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| |----|-----------|----|-----------------------| |Proxmox: Storage [{#NODE.NAME}/{#STORAGE.NAME}]: Type|

More specific type, if available.

|Dependent item|proxmox.node.plugintype[{#NODE.NAME},{#STORAGE.NAME}]

**Preprocessing**

| |Proxmox: Storage [{#NODE.NAME}/{#STORAGE.NAME}]: Size|

Storage size in bytes.

|Dependent item|proxmox.node.maxdisk[{#NODE.NAME},{#STORAGE.NAME}]

**Preprocessing**

| |Proxmox: Storage [{#NODE.NAME}/{#STORAGE.NAME}]: Content|

Allowed storage content types.

|Dependent item|proxmox.node.content[{#NODE.NAME},{#STORAGE.NAME}]

**Preprocessing**

| |Proxmox: 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| |----|-----------|----------|--------|--------------------------------| |Proxmox: 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| |----|-----------|----|-----------------------| |Proxmox: VM [{#NODE.NAME}/{#QEMU.NAME} ({#QEMU.ID})]: Disk write, rate|

Disk write.

|Dependent item|proxmox.qemu.diskwrite[{#QEMU.ID}]

**Preprocessing**

| |Proxmox: VM [{#NODE.NAME}/{#QEMU.NAME} ({#QEMU.ID})]: Disk read, rate|

Disk read.

|Dependent item|proxmox.qemu.diskread[{#QEMU.ID}]

**Preprocessing**

| |Proxmox: VM [{#NODE.NAME}/{#QEMU.NAME} ({#QEMU.ID})]: Memory usage|

Used memory in bytes.

|Dependent item|proxmox.qemu.mem[{#QEMU.ID}]

**Preprocessing**

| |Proxmox: VM [{#NODE.NAME}/{#QEMU.NAME} ({#QEMU.ID})]: Memory total|

The total memory expressed in bytes.

|Dependent item|proxmox.qemu.maxmem[{#QEMU.ID}]

**Preprocessing**

| |Proxmox: VM [{#NODE.NAME}/{#QEMU.NAME} ({#QEMU.ID})]: Incoming data, rate|

Incoming data rate.

|Dependent item|proxmox.qemu.netin[{#QEMU.ID}]

**Preprocessing**

| |Proxmox: VM [{#NODE.NAME}/{#QEMU.NAME} ({#QEMU.ID})]: Outgoing data, rate|

Outgoing data rate.

|Dependent item|proxmox.qemu.netout[{#QEMU.ID}]

**Preprocessing**

| |Proxmox: VM [{#NODE.NAME}/{#QEMU.NAME} ({#QEMU.ID})]: CPU usage|

CPU load.

|Dependent item|proxmox.qemu.cpu[{#QEMU.ID}]

**Preprocessing**

| |Proxmox: VM [{#NODE.NAME}/{#QEMU.NAME}]: Status|

Read VM status.

|HTTP agent|proxmox.qemu.status[{#QEMU.ID}]| |Proxmox: 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**

| |Proxmox: VM [{#NODE.NAME}/{#QEMU.NAME} ({#QEMU.ID})]: Status||Dependent item|proxmox.qemu.vmstatus[{#QEMU.ID}]

**Preprocessing**

| ### Trigger prototypes for QEMU discovery |Name|Description|Expression|Severity|Dependencies and additional info| |----|-----------|----------|--------|--------------------------------| |Proxmox: 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|| |Proxmox: 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|| |Proxmox: 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**:
| |Proxmox: 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| |----|-----------|----|-----------------------| |Proxmox: LXC [{#LXC.NAME}/{#LXC.NAME}]: Status|

Read LXC status.

|HTTP agent|proxmox.lxc.status[{#LXC.ID}]| |Proxmox: 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**

| |Proxmox: LXC [{#NODE.NAME}/{#LXC.NAME} ({#LXC.ID})]: Status||Dependent item|proxmox.lxc.vmstatus[{#LXC.ID}]

**Preprocessing**

| |Proxmox: LXC [{#NODE.NAME}/{#LXC.NAME} ({#LXC.ID})]: Disk write, rate|

Disk write.

|Dependent item|proxmox.lxc.diskwrite[{#LXC.ID}]

**Preprocessing**

| |Proxmox: LXC [{#NODE.NAME}/{#LXC.NAME} ({#LXC.ID})]: Disk read, rate|

Disk read.

|Dependent item|proxmox.lxc.diskread[{#LXC.ID}]

**Preprocessing**

| |Proxmox: LXC [{#NODE.NAME}/{#LXC.NAME} ({#LXC.ID})]: Memory usage|

Used memory in bytes.

|Dependent item|proxmox.lxc.mem[{#LXC.ID}]

**Preprocessing**

| |Proxmox: LXC [{#NODE.NAME}/{#LXC.NAME} ({#LXC.ID})]: Memory total|

The total memory expressed in bytes.

|Dependent item|proxmox.lxc.maxmem[{#LXC.ID}]

**Preprocessing**

| |Proxmox: LXC [{#NODE.NAME}/{#LXC.NAME} ({#LXC.ID})]: Incoming data, rate|

Incoming data rate.

|Dependent item|proxmox.lxc.netin[{#LXC.ID}]

**Preprocessing**

| |Proxmox: LXC [{#NODE.NAME}/{#LXC.NAME} ({#LXC.ID})]: Outgoing data, rate|

Outgoing data rate.

|Dependent item|proxmox.lxc.netout[{#LXC.ID}]

**Preprocessing**

| |Proxmox: 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| |----|-----------|----------|--------|--------------------------------| |Proxmox: 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**:
| |Proxmox: 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|| |Proxmox: 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|| |Proxmox: 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`](https://support.zabbix.com) You can also provide feedback, discuss the template, or ask for help at [`ZABBIX forums`](https://www.zabbix.com/forum/zabbix-suggestions-and-feedback)