# DELL PowerEdge R820 by HTTP ## Overview This is a template for monitoring DELL PowerEdge R820 servers with iDRAC 8/9 firmware 4.32 and later with Redfish API enabled via Zabbix HTTP agent that works without any external scripts. ## Requirements Zabbix version: 7.0 and higher. ## Tested versions This template has been tested on: - DELL PowerEdge R820 ## 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 1\. Enable Redfish API in Dell iDRAC interface of your server. 2\. Create a user for monitoring with read-only permissions in Dell iDRAC interface. 3\. Create a host for Dell server with iDRAC IP as Zabbix agent interface. 4\. Link the template to the host. 5\. Customize values of {$API.URL}, {$API.USER}, {$API.PASSWORD} macros. ### Macros used |Name|Description|Default| |----|-----------|-------| |{$API.URL}|

The Dell iDRAC Redfish API URL in the format `://:`.

|``| |{$API.USER}|

The Dell iDRAC username.

|``| |{$API.PASSWORD}|

The Dell iDRAC user password.

|``| |{$IFCONTROL}|

Link status trigger will be fired only for interfaces that have the context macro equaled 1.

|`1`| ### Items |Name|Description|Type|Key and additional info| |----|-----------|----|-----------------------| |Dell R820: Get system|

Returns the metrics of a system.

|HTTP agent|dell.server.system.get

**Preprocessing**

  • JavaScript: `The text is too long. Please see the template.`

| |Dell R820: Overall system health status|

This attribute defines the overall rollup status of all components in the system being monitored by the remote access card. Includes system, storage, IO devices, iDRAC, CPU, memory, etc.

|Dependent item|dell.server.status

**Preprocessing**

  • JSON Path: `$.status`

  • Discard unchanged with heartbeat: `6h`

| |Dell R820: Hardware model name|

This attribute defines the model name of the system.

|Dependent item|dell.server.hw.model

**Preprocessing**

  • JSON Path: `$.model`

  • Discard unchanged with heartbeat: `6h`

| |Dell R820: Hardware serial number|

This attribute defines the service tag of the system.

|Dependent item|dell.server.hw.serialnumber

**Preprocessing**

  • JSON Path: `$.serialnumber`

  • Discard unchanged with heartbeat: `6h`

| |Dell R820: Firmware version|

This attribute defines the firmware version of a remote access card.

|Dependent item|dell.server.hw.firmware

**Preprocessing**

  • JSON Path: `$.firmware`

  • Discard unchanged with heartbeat: `6h`

| |Dell R820: Redfish API|

The availability of Redfish API on the server.

Possible values:

0 unavailable

1 available

|Simple check|net.tcp.service[https]| ### Triggers |Name|Description|Expression|Severity|Dependencies and additional info| |----|-----------|----------|--------|--------------------------------| |Dell R820: Server is in a critical state|

Please check the device for faults.

|`find(/DELL PowerEdge R820 by HTTP/dell.server.status,,"like","Critical")=1`|High|| |Dell R820: Server is in warning state|

Please check the device for warnings.

|`find(/DELL PowerEdge R820 by HTTP/dell.server.status,,"like","Warning")=1`|Warning|**Depends on**:
  • Dell R820: Server is in a critical state
| |Dell R820: Device has been replaced|

Device serial number has changed. Acknowledge to close the problem manually.

|`last(/DELL PowerEdge R820 by HTTP/dell.server.hw.serialnumber,#1)<>last(/DELL PowerEdge R820 by HTTP/dell.server.hw.serialnumber,#2) and length(last(/DELL PowerEdge R820 by HTTP/dell.server.hw.serialnumber))>0`|Info|**Manual close**: Yes| |Dell R820: Firmware has changed|

Firmware version has changed. Acknowledge to close the problem manually.

|`last(/DELL PowerEdge R820 by HTTP/dell.server.hw.firmware,#1)<>last(/DELL PowerEdge R820 by HTTP/dell.server.hw.firmware,#2) and length(last(/DELL PowerEdge R820 by HTTP/dell.server.hw.firmware))>0`|Info|**Manual close**: Yes| |Dell R820: Redfish API service is unavailable|

The service is unavailable or does not accept TCP connections.

|`last(/DELL PowerEdge R820 by HTTP/net.tcp.service[https])=0`|High|| ### LLD rule Temperature discovery |Name|Description|Type|Key and additional info| |----|-----------|----|-----------------------| |Temperature discovery|

Discovery of temperature sensors.

|HTTP agent|temp.discovery

**Preprocessing**

  • JavaScript: `The text is too long. Please see the template.`

  • Discard unchanged with heartbeat: `6h`

| ### Item prototypes for Temperature discovery |Name|Description|Type|Key and additional info| |----|-----------|----|-----------------------| |Dell R820: {#SENSOR_NAME} Get sensor|

Returns the metrics of a sensor.

|HTTP agent|dell.server.sensor.temp.get[{#SENSOR_NAME}]| |Dell R820: {#SENSOR_NAME} Value|

The sensor value.

|Dependent item|dell.server.sensor.temp.value[{#SENSOR_NAME}]

**Preprocessing**

  • JSON Path: `$.Reading`

| |Dell R820: {#SENSOR_NAME} Status|

The status of the job. Possible values: OK, Warning, Critical.

|Dependent item|dell.server.sensor.temp.status[{#SENSOR_NAME}]

**Preprocessing**

  • JSON Path: `$.Status.Health`

  • Discard unchanged with heartbeat: `6h`

| ### Trigger prototypes for Temperature discovery |Name|Description|Expression|Severity|Dependencies and additional info| |----|-----------|----------|--------|--------------------------------| |Dell R820: {#SENSOR_NAME} is in a critical state|

Please check the device for faults.

|`find(/DELL PowerEdge R820 by HTTP/dell.server.sensor.temp.status[{#SENSOR_NAME}],,"like","Critical")=1`|High|| |Dell R820: {#SENSOR_NAME} is in warning state|

Please check the device for warnings.

|`find(/DELL PowerEdge R820 by HTTP/dell.server.sensor.temp.status[{#SENSOR_NAME}],,"like","Warning")=1`|Warning|**Depends on**:
  • Dell R820: {#SENSOR_NAME} is in a critical state
| ### LLD rule PSU discovery |Name|Description|Type|Key and additional info| |----|-----------|----|-----------------------| |PSU discovery|

Discovery of PSU sensors.

|HTTP agent|psu.discovery

**Preprocessing**

  • JavaScript: `The text is too long. Please see the template.`

  • Discard unchanged with heartbeat: `6h`

| ### Item prototypes for PSU discovery |Name|Description|Type|Key and additional info| |----|-----------|----|-----------------------| |Dell R820: {#SENSOR_NAME} Get sensor|

Returns the metrics of a sensor.

|HTTP agent|dell.server.sensor.psu.get[{#SENSOR_NAME}]| |Dell R820: {#SENSOR_NAME} Status|

The status of the job. Possible values: OK, Warning, Critical.

|Dependent item|dell.server.sensor.psu.status[{#SENSOR_NAME}]

**Preprocessing**

  • JSON Path: `$.Status.Health`

  • Discard unchanged with heartbeat: `6h`

| ### Trigger prototypes for PSU discovery |Name|Description|Expression|Severity|Dependencies and additional info| |----|-----------|----------|--------|--------------------------------| |Dell R820: {#SENSOR_NAME} is in a critical state|

Please check the device for faults.

|`find(/DELL PowerEdge R820 by HTTP/dell.server.sensor.psu.status[{#SENSOR_NAME}],,"like","Critical")=1`|High|| |Dell R820: {#SENSOR_NAME} is in warning state|

Please check the device for warnings.

|`find(/DELL PowerEdge R820 by HTTP/dell.server.sensor.psu.status[{#SENSOR_NAME}],,"like","Warning")=1`|Warning|**Depends on**:
  • Dell R820: {#SENSOR_NAME} is in a critical state
| ### LLD rule FAN discovery |Name|Description|Type|Key and additional info| |----|-----------|----|-----------------------| |FAN discovery|

Discovery of FAN sensors.

|HTTP agent|fan.discovery

**Preprocessing**

  • JavaScript: `The text is too long. Please see the template.`

  • Discard unchanged with heartbeat: `6h`

| ### Item prototypes for FAN discovery |Name|Description|Type|Key and additional info| |----|-----------|----|-----------------------| |Dell R820: {#SENSOR_NAME} Get sensor|

Returns the metrics of a sensor.

|HTTP agent|dell.server.sensor.fan.get[{#SENSOR_NAME}]| |Dell R820: {#SENSOR_NAME} Speed|

The sensor value.

|Dependent item|dell.server.sensor.fan.speed[{#SENSOR_NAME}]

**Preprocessing**

  • JSON Path: `$.Reading`

| |Dell R820: {#SENSOR_NAME} Status|

The status of the job. Possible values: OK, Warning, Critical.

|Dependent item|dell.server.sensor.fan.status[{#SENSOR_NAME}]

**Preprocessing**

  • JSON Path: `$.Status.Health`

  • Discard unchanged with heartbeat: `6h`

| ### Trigger prototypes for FAN discovery |Name|Description|Expression|Severity|Dependencies and additional info| |----|-----------|----------|--------|--------------------------------| |Dell R820: {#SENSOR_NAME} is in a critical state|

Please check the device for faults.

|`find(/DELL PowerEdge R820 by HTTP/dell.server.sensor.fan.status[{#SENSOR_NAME}],,"like","Critical")=1`|High|| |Dell R820: {#SENSOR_NAME} is in warning state|

Please check the device for warnings.

|`find(/DELL PowerEdge R820 by HTTP/dell.server.sensor.fan.status[{#SENSOR_NAME}],,"like","Warning")=1`|Warning|**Depends on**:
  • Dell R820: {#SENSOR_NAME} is in a critical state
| ### LLD rule Array controller discovery |Name|Description|Type|Key and additional info| |----|-----------|----|-----------------------| |Array controller discovery|

Discovery of disk array controllers.

|HTTP agent|array.discovery

**Preprocessing**

  • JavaScript: `The text is too long. Please see the template.`

  • Discard unchanged with heartbeat: `6h`

| ### Item prototypes for Array controller discovery |Name|Description|Type|Key and additional info| |----|-----------|----|-----------------------| |Dell R820: {#CNTLR_NAME} in slot {#SLOT} Status|

The status of the job. Possible values: OK, Warning, Critical.

|HTTP agent|dell.server.hw.diskarray.status[{#CNTLR_NAME}{#SLOT}]

**Preprocessing**

  • JSON Path: `$.Status.Health`

  • Discard unchanged with heartbeat: `6h`

| ### Trigger prototypes for Array controller discovery |Name|Description|Expression|Severity|Dependencies and additional info| |----|-----------|----------|--------|--------------------------------| |Dell R820: {#CNTLR_NAME} in slot {#SLOT} is in a critical state|

Please check the device for faults.

|`find(/DELL PowerEdge R820 by HTTP/dell.server.hw.diskarray.status[{#CNTLR_NAME}{#SLOT}],,"like","Critical")=1`|High|| |Dell R820: {#CNTLR_NAME} in slot {#SLOT} is in warning state|

Please check the device for warnings.

|`find(/DELL PowerEdge R820 by HTTP/dell.server.hw.diskarray.status[{#CNTLR_NAME}{#SLOT}],,"like","Warning")=1`|Warning|**Depends on**:
  • Dell R820: {#CNTLR_NAME} in slot {#SLOT} is in a critical state
| ### LLD rule Array controller cache discovery |Name|Description|Type|Key and additional info| |----|-----------|----|-----------------------| |Array controller cache discovery|

Discovery of a cache of disk array controllers.

|HTTP agent|array.cache.discovery

**Preprocessing**

  • JavaScript: `The text is too long. Please see the template.`

  • Discard unchanged with heartbeat: `6h`

| ### Item prototypes for Array controller cache discovery |Name|Description|Type|Key and additional info| |----|-----------|----|-----------------------| |Dell R820: {#BATTERY_NAME} Status|

The status of the job. Possible values: OK, Warning, Critical.

|HTTP agent|dell.server.hw.diskarray.cache.battery.status[{#BATTERY_NAME}]

**Preprocessing**

  • JSON Path: `$.Oem.Dell.DellControllerBattery.PrimaryStatus`

  • Discard unchanged with heartbeat: `6h`

| ### Trigger prototypes for Array controller cache discovery |Name|Description|Expression|Severity|Dependencies and additional info| |----|-----------|----------|--------|--------------------------------| |Dell R820: {#BATTERY_NAME} is in a critical state|

Please check the device for faults.

|`find(/DELL PowerEdge R820 by HTTP/dell.server.hw.diskarray.cache.battery.status[{#BATTERY_NAME}],,"like","Critical")=1`|High|| |Dell R820: {#BATTERY_NAME} is in warning state|

Please check the device for warnings.

|`find(/DELL PowerEdge R820 by HTTP/dell.server.hw.diskarray.cache.battery.status[{#BATTERY_NAME}],,"like","Warning")=1`|Warning|**Depends on**:
  • Dell R820: {#BATTERY_NAME} is in a critical state
| ### LLD rule Physical disk discovery |Name|Description|Type|Key and additional info| |----|-----------|----|-----------------------| |Physical disk discovery|

Discovery of physical disks.

|HTTP agent|physicaldisk.discovery

**Preprocessing**

  • JavaScript: `The text is too long. Please see the template.`

  • Discard unchanged with heartbeat: `6h`

| ### Item prototypes for Physical disk discovery |Name|Description|Type|Key and additional info| |----|-----------|----|-----------------------| |Dell R820: {#DISK_NAME} Get disk|

Returns the metrics of a physical disk.

|HTTP agent|dell.server.hw.physicaldisk.get[{#DISK_NAME}]| |Dell R820: {#DISK_NAME} Status|

The status of the job. Possible values: OK, Warning, Critical.

|Dependent item|dell.server.hw.physicaldisk.status[{#DISK_NAME}]

**Preprocessing**

  • JSON Path: `$.Status.Health`

  • Discard unchanged with heartbeat: `6h`

| |Dell R820: {#DISK_NAME} Serial number|

The serial number of this drive.

|Dependent item|dell.server.hw.physicaldisk.serialnumber[{#DISK_NAME}]

**Preprocessing**

  • JSON Path: `$.SerialNumber`

  • Discard unchanged with heartbeat: `6h`

| |Dell R820: {#DISK_NAME} Model name|

The model number of the drive.

|Dependent item|dell.server.hw.physicaldisk.model[{#DISK_NAME}]

**Preprocessing**

  • JSON Path: `$.Model`

  • Discard unchanged with heartbeat: `6h`

| |Dell R820: {#DISK_NAME} Media type|

The type of media contained in this drive. Possible values: HDD, SSD, SMR, null.

|Dependent item|dell.server.hw.physicaldisk.media_type[{#DISK_NAME}]

**Preprocessing**

  • JSON Path: `$.MediaType`

  • Discard unchanged with heartbeat: `6h`

| |Dell R820: {#DISK_NAME} Size|

The size, in bytes, of this drive.

|Dependent item|dell.server.hw.physicaldisk.size[{#DISK_NAME}]

**Preprocessing**

  • JSON Path: `$.CapacityBytes`

  • Discard unchanged with heartbeat: `6h`

| ### Trigger prototypes for Physical disk discovery |Name|Description|Expression|Severity|Dependencies and additional info| |----|-----------|----------|--------|--------------------------------| |Dell R820: {#DISK_NAME} is in a critical state|

Please check the device for faults.

|`find(/DELL PowerEdge R820 by HTTP/dell.server.hw.physicaldisk.status[{#DISK_NAME}],,"like","Critical")=1`|High|| |Dell R820: {#DISK_NAME} is in warning state|

Please check the device for warnings.

|`find(/DELL PowerEdge R820 by HTTP/dell.server.hw.physicaldisk.status[{#DISK_NAME}],,"like","Warning")=1`|Warning|**Depends on**:
  • Dell R820: {#DISK_NAME} is in a critical state
| |Dell R820: {#DISK_NAME} has been replaced|

{#DISK_NAME} serial number has changed. Acknowledge to close the problem manually.

|`last(/DELL PowerEdge R820 by HTTP/dell.server.hw.physicaldisk.serialnumber[{#DISK_NAME}],#1)<>last(/DELL PowerEdge R820 by HTTP/dell.server.hw.physicaldisk.serialnumber[{#DISK_NAME}],#2) and length(last(/DELL PowerEdge R820 by HTTP/dell.server.hw.physicaldisk.serialnumber[{#DISK_NAME}]))>0`|Info|**Manual close**: Yes| ### LLD rule Virtual disk discovery |Name|Description|Type|Key and additional info| |----|-----------|----|-----------------------| |Virtual disk discovery|

Discovery of virtual disks.

|HTTP agent|virtualdisk.discovery

**Preprocessing**

  • JavaScript: `The text is too long. Please see the template.`

  • Discard unchanged with heartbeat: `6h`

| ### Item prototypes for Virtual disk discovery |Name|Description|Type|Key and additional info| |----|-----------|----|-----------------------| |Dell R820: {#DISK_NAME} Get disk|

Returns the metrics of a virtual disk.

|HTTP agent|dell.server.hw.virtualdisk.get[{#DISK_NAME}]| |Dell R820: {#DISK_NAME} Status|

The status of the job. Possible values: OK, Warning, Critical.

|Dependent item|dell.server.hw.virtualdisk.status[{#DISK_NAME}]

**Preprocessing**

  • JSON Path: `$.Status.Health`

  • Discard unchanged with heartbeat: `6h`

| |Dell R820: {#DISK_NAME} RAID status|

This property represents the RAID specific status. Possible values: Blocked, Degraded, Failed, Foreign, Offline, Online, Ready, Unknown, null.

|Dependent item|dell.server.hw.virtualdisk.raidstatus[{#DISK_NAME}]

**Preprocessing**

  • JSON Path: `$.Oem.Dell.DellVirtualDisk.RaidStatus`

  • Discard unchanged with heartbeat: `6h`

| |Dell R820: {#DISK_NAME} Size|

The size in bytes of this Volume.

|Dependent item|dell.server.hw.virtualdisk.size[{#DISK_NAME}]

**Preprocessing**

  • JSON Path: `$.CapacityBytes`

  • Discard unchanged with heartbeat: `6h`

| |Dell R820: {#DISK_NAME} Current state|

The known state of the Resource, for example, enabled. Possible values: Enabled, Disabled, StandbyOffline, StandbySpare, InTest, Starting, Absent, UnavailableOffline, Deferring, Quiesced, Updating, Qualified.

|Dependent item|dell.server.hw.virtualdisk.state[{#DISK_NAME}]

**Preprocessing**

  • JSON Path: `$.Status.State`

  • Discard unchanged with heartbeat: `6h`

| |Dell R820: {#DISK_NAME} Read policy|

Indicates the read cache policy setting for the Volume. Possible values: ReadAhead, AdaptiveReadAhead, Off.

|Dependent item|dell.server.hw.virtualdisk.readpolicy[{#DISK_NAME}]

**Preprocessing**

  • JSON Path: `$.Oem.Dell.DellVirtualDisk.ReadCachePolicy`

  • Discard unchanged with heartbeat: `6h`

| |Dell R820: {#DISK_NAME} Write policy|

Indicates the write cache policy setting for the Volume. Possible values: WriteThrough, ProtectedWriteBack, UnprotectedWriteBack.

|Dependent item|dell.server.hw.virtualdisk.writepolicy[{#DISK_NAME}]

**Preprocessing**

  • JSON Path: `$.Oem.Dell.DellVirtualDisk.WriteCachePolicy`

  • Discard unchanged with heartbeat: `6h`

| ### Trigger prototypes for Virtual disk discovery |Name|Description|Expression|Severity|Dependencies and additional info| |----|-----------|----------|--------|--------------------------------| |Dell R820: {#DISK_NAME} is in a critical state|

Please check the device for faults.

|`find(/DELL PowerEdge R820 by HTTP/dell.server.hw.virtualdisk.status[{#DISK_NAME}],,"like","Critical")=1`|High|| |Dell R820: {#DISK_NAME} is in warning state|

Please check the device for warnings.

|`find(/DELL PowerEdge R820 by HTTP/dell.server.hw.virtualdisk.status[{#DISK_NAME}],,"like","Warning")=1`|Warning|**Depends on**:
  • Dell R820: {#DISK_NAME} is in a critical state
| ### LLD rule Network interface discovery |Name|Description|Type|Key and additional info| |----|-----------|----|-----------------------| |Network interface discovery|

The NetworkInterface schema describes links to the NetworkAdapter and represents the functionality available to the containing system.

|HTTP agent|net.if.discovery

**Preprocessing**

  • JavaScript: `The text is too long. Please see the template.`

  • Discard unchanged with heartbeat: `6h`

| ### Item prototypes for Network interface discovery |Name|Description|Type|Key and additional info| |----|-----------|----|-----------------------| |Dell R820: {#IFNAME} Get interface|

Returns the metrics of a network interface.

|HTTP agent|dell.server.net.if.get[{#IFNAME}]| |Dell R820: {#IFNAME} Speed|

Network port current link speed.

|Dependent item|dell.server.net.if.speed[{#IFNAME}]

**Preprocessing**

  • JSON Path: `$.CurrentLinkSpeedMbps`

  • Discard unchanged with heartbeat: `6h`

| |Dell R820: {#IFNAME} Link status|

The status of the link between this port and its link partner. Possible values: Down, Up, null.

|Dependent item|dell.server.net.if.status[{#IFNAME}]

**Preprocessing**

  • JSON Path: `$.LinkStatus`

  • Discard unchanged with heartbeat: `6h`

| |Dell R820: {#IFNAME} State|

The known state of the Resource, for example, enabled. Possible values: Enabled, Disabled, StandbyOffline, StandbySpare, InTest, Starting, Absent, UnavailableOffline, Deferring, Quiesced, Updating, Qualified.

|Dependent item|dell.server.net.if.state[{#IFNAME}]

**Preprocessing**

  • JSON Path: `$.Status.State`

  • Discard unchanged with heartbeat: `6h`

| |Dell R820: {#IFNAME} Status|

The status of the job. Possible values: OK, Warning, Critical.

|Dependent item|dell.server.net.if.health[{#IFNAME}]

**Preprocessing**

  • JSON Path: `$.Status.Health`

  • Discard unchanged with heartbeat: `6h`

| ### Trigger prototypes for Network interface discovery |Name|Description|Expression|Severity|Dependencies and additional info| |----|-----------|----------|--------|--------------------------------| |Dell R820: {#IFNAME} Link down|

This trigger expression works as follows:
1. It can be triggered if the operations status is down.
2. `{$IFCONTROL:"{#IFNAME}"}=1` - a user can redefine context macro to value - 0. That marks this interface as not important. No new trigger will be fired if this interface is down.
3. `{TEMPLATE_NAME:METRIC.diff()}=1` - the trigger fires only if the operational status was up to (1) sometime before (so, do not fire for the 'eternal off' interfaces.)

WARNING: if closed manually - it will not fire again on the next poll, because of .diff.

|`{$IFCONTROL:"{#IFNAME}"}=1 and (find(/DELL PowerEdge R820 by HTTP/dell.server.net.if.status[{#IFNAME}],,"like")="Down" and last(/DELL PowerEdge R820 by HTTP/dell.server.net.if.status[{#IFNAME}],#1)<>last(/DELL PowerEdge R820 by HTTP/dell.server.net.if.status[{#IFNAME}],#2))`|Average|**Manual close**: Yes| |Dell R820: {#IFNAME} is in a critical state|

Please check the device for faults.

|`find(/DELL PowerEdge R820 by HTTP/dell.server.net.if.health[{#IFNAME}],,"like","Critical")=1`|High|| |Dell R820: {#IFNAME} is in warning state|

Please check the device for warnings.

|`find(/DELL PowerEdge R820 by HTTP/dell.server.net.if.health[{#IFNAME}],,"like","Warning")=1`|Warning|**Depends on**:
  • Dell R820: {#IFNAME} is in a critical state
| ## 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)