diff options
author | Maxim Chudinov <maxim.chudinov@zabbix.com> | 2021-12-20 10:09:15 +0300 |
---|---|---|
committer | Maxim Chudinov <maxim.chudinov@zabbix.com> | 2021-12-20 10:09:15 +0300 |
commit | 018fddf8e09884808ebb18ce3265e08fa67a0d2a (patch) | |
tree | 2aec933b884e51209670110f0a7522a2b15d52c5 /templates | |
parent | 93e65587c5fe69c60a529e9543c4cef2a930106d (diff) |
.........T [DEV-1998] fixed typos and changed README files for SAN templates
Diffstat (limited to 'templates')
6 files changed, 114 insertions, 111 deletions
diff --git a/templates/san/huawei_5300v5_snmp/README.md b/templates/san/huawei_5300v5_snmp/README.md index 0a38de6cee9..66949638f74 100644 --- a/templates/san/huawei_5300v5_snmp/README.md +++ b/templates/san/huawei_5300v5_snmp/README.md @@ -12,10 +12,11 @@ The template to monitor SAN Huawei OceanStor 5300 V5 by Zabbix SNMP agent. This template was tested on: - Huawei OceanStor 5300 V5 -- Zabbix, version 5.4 ## Setup +> See [Zabbix template operation](https://www.zabbix.com/documentation/5.4/manual/config/templates_out_of_the_box/network_devices) for basic instructions. + 1\. Create a host for Huawei OceanStor 5300 V5 with controller management IP as SNMPv2 interface. 2\. Link the template to the host. @@ -74,21 +75,21 @@ No specific Zabbix configuration is required. |Huawei |OceanStor 5300 V5: Status |<p>System running status.</p> |SNMP |huawei.5300.v5[status]<p>**Preprocessing**:</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | |Huawei |OceanStor 5300 V5: Version |<p>The device version.</p> |SNMP |huawei.5300.v5[version]<p>**Preprocessing**:</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | |Huawei |OceanStor 5300 V5: Capacity total |<p>Total capacity of a device.</p> |SNMP |huawei.5300.v5[totalCapacity]<p>**Preprocessing**:</p><p>- MULTIPLIER: `1048576`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `10m`</p> | -|Huawei |OceanStor 5300 V5: Capacity used |<p>Used capacity of a device.</p> |SNMP |huawei.5300.v5[usedCapacity]<p>**Preprocessing**:</p><p>- MULTIPLIER: `1048576`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `10m`</p> | +|Huawei |OceanStor 5300 V5: Capacity used |<p>Used capacity of a device.</p> |SNMP |huawei.5300.v5[usedCapacity]<p>**Preprocessing**:</p><p>- MULTIPLIER: `1048576`</p> | |Huawei |Controller {#ID}: Memory utilization |<p>Memory usage of a controller {#ID}.</p> |SNMP |huawei.5300.v5[hwInfoControllerMemoryUsage, "{#ID}"] | |Huawei |Controller {#ID}: Health status |<p>Controller health status. For details, see definition of Enum Values (HEALTH_STATUS_E).</p><p>https://support.huawei.com/enterprise/en/centralized-storage/oceanstor-5300-v5-pid-22462029?category=reference-guides&subcategory=mib-reference</p> |SNMP |huawei.5300.v5[hwInfoControllerHealthStatus, "{#ID}"]<p>**Preprocessing**:</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | |Huawei |Controller {#ID}: Running status |<p>Controller running status. For details, see definition of Enum Values (RUNNING_STATUS_E).</p><p>https://support.huawei.com/enterprise/en/centralized-storage/oceanstor-5300-v5-pid-22462029?category=reference-guides&subcategory=mib-reference</p> |SNMP |huawei.5300.v5[hwInfoControllerRunningStatus, "{#ID}"]<p>**Preprocessing**:</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | |Huawei |Controller {#ID}: Role |<p>Controller role..</p> |SNMP |huawei.5300.v5[hwInfoControllerRole, "{#ID}"]<p>**Preprocessing**:</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | |Huawei |Enclosure {#NAME}: Health status |<p>Enclosure health status. For details, see definition of Enum Values (HEALTH_STATUS_E).</p><p>https://support.huawei.com/enterprise/en/centralized-storage/oceanstor-5300-v5-pid-22462029?category=reference-guides&subcategory=mib-reference</p> |SNMP |huawei.5300.v5[hwInfoEnclosureHealthStatus, "{#NAME}"]<p>**Preprocessing**:</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | |Huawei |Enclosure {#NAME}: Running status |<p>Enclosure running status. For details, see definition of Enum Values (RUNNING_STATUS_E).</p><p>https://support.huawei.com/enterprise/en/centralized-storage/oceanstor-5300-v5-pid-22462029?category=reference-guides&subcategory=mib-reference</p> |SNMP |huawei.5300.v5[hwInfoEnclosureRunningStatus, "{#NAME}"]<p>**Preprocessing**:</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | -|Huawei |Enclosure {#NAME}: Temperature |<p>Enclosure temperature.</p> |SNMP |huawei.5300.v5[hwInfoEnclosureTemperature, "{#NAME}"]<p>**Preprocessing**:</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `10m`</p> | +|Huawei |Enclosure {#NAME}: Temperature |<p>Enclosure temperature.</p> |SNMP |huawei.5300.v5[hwInfoEnclosureTemperature, "{#NAME}"] | |Huawei |FAN {#ID} on {#LOCATION}: Health status |<p>Health status of a fan. For details, see definition of Enum Values (HEALTH_STATUS_E).</p><p>https://support.huawei.com/enterprise/en/centralized-storage/oceanstor-5300-v5-pid-22462029?category=reference-guides&subcategory=mib-reference</p> |SNMP |huawei.5300.v5[hwInfoFanHealthStatus, "{#ID}:{#LOCATION}"]<p>**Preprocessing**:</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | |Huawei |FAN {#ID} on {#LOCATION}: Running status |<p>Operating status of a fan. For details, see definition of Enum Values (RUNNING_STATUS_E).</p><p>https://support.huawei.com/enterprise/en/centralized-storage/oceanstor-5300-v5-pid-22462029?category=reference-guides&subcategory=mib-reference</p> |SNMP |huawei.5300.v5[hwInfoFanRunningStatus, "{#ID}:{#LOCATION}"]<p>**Preprocessing**:</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | |Huawei |BBU {#ID} on {#LOCATION}: Health status |<p>Health status of a BBU. For details, see definition of Enum Values (HEALTH_STATUS_E).</p><p>https://support.huawei.com/enterprise/en/centralized-storage/oceanstor-5300-v5-pid-22462029?category=reference-guides&subcategory=mib-reference</p> |SNMP |huawei.5300.v5[hwInfoBBUHealthStatus, "{#ID}:{#LOCATION}"]<p>**Preprocessing**:</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | |Huawei |BBU {#ID} on {#LOCATION}: Running status |<p>Running status of a BBU. For details, see definition of Enum Values (RUNNING_STATUS_E).</p><p>https://support.huawei.com/enterprise/en/centralized-storage/oceanstor-5300-v5-pid-22462029?category=reference-guides&subcategory=mib-reference</p> |SNMP |huawei.5300.v5[hwInfoBBURunningStatus, "{#ID}:{#LOCATION}"]<p>**Preprocessing**:</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | |Huawei |Disk {#MODEL} on {#LOCATION}: Health status |<p>Disk health status. For details, see definition of Enum Values (HEALTH_STATUS_E).</p><p>https://support.huawei.com/enterprise/en/centralized-storage/oceanstor-5300-v5-pid-22462029?category=reference-guides&subcategory=mib-reference</p> |SNMP |huawei.5300.v5[hwInfoDiskHealthStatus, "{#ID}"]<p>**Preprocessing**:</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | |Huawei |Disk {#MODEL} on {#LOCATION}: Running status |<p>Disk running status. For details, see definition of Enum Values (RUNNING_STATUS_E).</p><p>https://support.huawei.com/enterprise/en/centralized-storage/oceanstor-5300-v5-pid-22462029?category=reference-guides&subcategory=mib-reference</p> |SNMP |huawei.5300.v5[hwInfoDiskRunningStatus, "{#ID}"]<p>**Preprocessing**:</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | -|Huawei |Disk {#MODEL} on {#LOCATION}: Temperature |<p>Disk temperature.</p> |SNMP |huawei.5300.v5[hwInfoDiskTemperature, "{#ID}"]<p>**Preprocessing**:</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `10m`</p> | +|Huawei |Disk {#MODEL} on {#LOCATION}: Temperature |<p>Disk temperature.</p> |SNMP |huawei.5300.v5[hwInfoDiskTemperature, "{#ID}"] | |Huawei |Disk {#MODEL} on {#LOCATION}: Health score |<p>Health score of a disk. If the value is 255, indicating invalid.</p> |SNMP |huawei.5300.v5[hwInfoDiskHealthMark, "{#ID}"]<p>**Preprocessing**:</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | |Huawei |Node {#NODE}: Average I/O latency |<p>Average I/O latency of the node.</p> |SNMP |huawei.5300.v5[hwPerfNodeDelay, "{#NODE}"] | |Huawei |Node {#NODE}: Total I/O per second |<p>Total IOPS of the node.</p> |SNMP |huawei.5300.v5[hwPerfNodeTotalIOPS, "{#NODE}"] | @@ -113,35 +114,35 @@ No specific Zabbix configuration is required. |Huawei |Pool {#NAME}: Capacity total |<p>Total capacity of a storage pool.</p> |SNMP |huawei.5300.v5[hwInfoStoragePoolTotalCapacity, "{#NAME}"]<p>**Preprocessing**:</p><p>- MULTIPLIER: `1048576`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `10m`</p> | |Huawei |Pool {#NAME}: Capacity free |<p>Available capacity of a storage pool.</p> |SNMP |huawei.5300.v5[hwInfoStoragePoolFreeCapacity, "{#NAME}"]<p>**Preprocessing**:</p><p>- MULTIPLIER: `1048576`</p> | |Huawei |Pool {#NAME}: Capacity used |<p>Used capacity of a storage pool.</p> |SNMP |huawei.5300.v5[hwInfoStoragePoolSubscribedCapacity, "{#NAME}"]<p>**Preprocessing**:</p><p>- MULTIPLIER: `1048576`</p> | -|Huawei |Pool {#NAME}: Capacity used percentage |<p>Used capacity of a storage pool in percents.</p> |CALCULATED |huawei.5300.v5[hwInfoStoragePoolFreeCapacityPct, "{#NAME}"]<p>**Expression**:</p>`last("huawei.5300.v5[hwInfoStoragePoolSubscribedCapacity, \"{#NAME}\"]")/last("huawei.5300.v5[hwInfoStoragePoolTotalCapacity, \"{#NAME}\"]")*100` | +|Huawei |Pool {#NAME}: Capacity used percentage |<p>Used capacity of a storage pool in percents.</p> |CALCULATED |huawei.5300.v5[hwInfoStoragePoolFreeCapacityPct, "{#NAME}"]<p>**Expression**:</p>`last(//huawei.5300.v5[hwInfoStoragePoolSubscribedCapacity, "{#NAME}"])/last(//huawei.5300.v5[hwInfoStoragePoolTotalCapacity, "{#NAME}"])*100` | ## Triggers |Name|Description|Expression|Severity|Dependencies and additional info| |----|-----------|----|----|----| -|Controller {#ID}: High CPU utilization (over {$CPU.UTIL.CRIT}% for 5m) |<p>CPU utilization is too high. The system might be slow to respond.</p> |`{TEMPLATE_NAME:huawei.5300.v5[hwInfoControllerCPUUsage, "{#ID}"].min(5m)}>{$CPU.UTIL.CRIT}` |WARNING | | -|Node {#NODE}: High CPU utilization (over {$CPU.UTIL.CRIT}% for 5m) |<p>CPU utilization is too high. The system might be slow to respond.</p> |`{TEMPLATE_NAME:huawei.5300.v5[hwPerfNodeCPUUsage, "{#NODE}"].min(5m)}>{$CPU.UTIL.CRIT}` |WARNING | | -|OceanStor 5300 V5: Storage version has been changed |<p>OceanStor 5300 V5 version has changed. Ack to close.</p> |`{TEMPLATE_NAME:huawei.5300.v5[version].diff()}=1 and {TEMPLATE_NAME:huawei.5300.v5[version].strlen()}>0` |INFO |<p>Manual close: YES</p> | -|Controller {#ID}: Memory usage is too high (over {$HUAWEI.5300.MEM.MAX.WARN} for {$HUAWEI.5300.MEM.MAX.TIME}) |<p>-</p> |`{TEMPLATE_NAME:huawei.5300.v5[hwInfoControllerMemoryUsage, "{#ID}"].min({$HUAWEI.5300.MEM.MAX.TIME})}>{$HUAWEI.5300.MEM.MAX.WARN}` |AVERAGE | | -|Controller {#ID}: Health status is not Normal |<p>-</p> |`{TEMPLATE_NAME:huawei.5300.v5[hwInfoControllerHealthStatus, "{#ID}"].last()}<>1` |HIGH | | -|Controller {#ID}: Running status is not Online |<p>-</p> |`{TEMPLATE_NAME:huawei.5300.v5[hwInfoControllerRunningStatus, "{#ID}"].last()}<>27` |AVERAGE | | -|Controller {#ID}: Role has been changed |<p>-</p> |`{TEMPLATE_NAME:huawei.5300.v5[hwInfoControllerRole, "{#ID}"].diff()}=1` |WARNING |<p>Manual close: YES</p> | -|Enclosure {#NAME}: Health status is not Normal |<p>-</p> |`{TEMPLATE_NAME:huawei.5300.v5[hwInfoEnclosureHealthStatus, "{#NAME}"].last()}<>1` |HIGH | | -|Enclosure {#NAME}: Running status is not Online |<p>-</p> |`{TEMPLATE_NAME:huawei.5300.v5[hwInfoEnclosureRunningStatus, "{#NAME}"].last()}<>27` |AVERAGE | | -|Enclosure {#NAME}: Temperature is too high (over {$HUAWEI.5300.TEMP.MAX.WARN} for {$HUAWEI.5300.TEMP.MAX.TIME}) |<p>-</p> |`{TEMPLATE_NAME:huawei.5300.v5[hwInfoEnclosureTemperature, "{#NAME}"].min({$HUAWEI.5300.TEMP.MAX.TIME})}>{$HUAWEI.5300.TEMP.MAX.WARN}` |HIGH | | -|FAN {#ID} on {#LOCATION}: Health status is not Normal |<p>-</p> |`{TEMPLATE_NAME:huawei.5300.v5[hwInfoFanHealthStatus, "{#ID}:{#LOCATION}"].last()}<>1` |HIGH | | -|FAN {#ID} on {#LOCATION}: Running status is not Running |<p>-</p> |`{TEMPLATE_NAME:huawei.5300.v5[hwInfoFanRunningStatus, "{#ID}:{#LOCATION}"].last()}<>2` |AVERAGE | | -|BBU {#ID} on {#LOCATION}: Health status is not Normal |<p>-</p> |`{TEMPLATE_NAME:huawei.5300.v5[hwInfoBBUHealthStatus, "{#ID}:{#LOCATION}"].last()}<>1` |HIGH | | -|BBU {#ID} on {#LOCATION}: Running status is not Online |<p>-</p> |`{TEMPLATE_NAME:huawei.5300.v5[hwInfoBBURunningStatus, "{#ID}:{#LOCATION}"].last()}<>2` |AVERAGE | | -|Disk {#MODEL} on {#LOCATION}: Health status is not Normal |<p>-</p> |`{TEMPLATE_NAME:huawei.5300.v5[hwInfoDiskHealthStatus, "{#ID}"].last()}<>1` |HIGH | | -|Disk {#MODEL} on {#LOCATION}: Running status is not Online |<p>-</p> |`{TEMPLATE_NAME:huawei.5300.v5[hwInfoDiskRunningStatus, "{#ID}"].last()}<>27` |AVERAGE | | -|Disk {#MODEL} on {#LOCATION}: Temperature is too high (over {$HUAWEI.5300.DISK.TEMP.MAX.WARN:"{#MODEL}"} for {$HUAWEI.5300.DISK.TEMP.MAX.TIME}) |<p>-</p> |`{TEMPLATE_NAME:huawei.5300.v5[hwInfoDiskTemperature, "{#ID}"].min({$HUAWEI.5300.DISK.TEMP.MAX.TIME})}>{$HUAWEI.5300.DISK.TEMP.MAX.WARN:"{#MODEL}"}` |HIGH | | -|Node {#NODE}: Average I/O latency is too high (over {$HUAWEI.5300.NODE.IO.DELAY.MAX.WARN}ms for {$HUAWEI.5300.NODE.IO.DELAY.MAX.TIME}) |<p>-</p> |`{TEMPLATE_NAME:huawei.5300.v5[hwPerfNodeDelay, "{#NODE}"].min({$HUAWEI.5300.NODE.IO.DELAY.MAX.TIME})}>{$HUAWEI.5300.NODE.IO.DELAY.MAX.WARN}` |WARNING | | -|LUN {#NAME}: Status is not Normal |<p>-</p> |`{TEMPLATE_NAME:huawei.5300.v5[hwStorageLunStatus, "{#NAME}"].last()}<>1` |AVERAGE | | -|LUN {#NAME}: Average I/O response time is too high (over {$HUAWEI.5300.LUN.IO.TIME.MAX.WARN}ms for {$HUAWEI.5300.LUN.IO.TIME.MAX.TIME}) |<p>-</p> |`{TEMPLATE_NAME:huawei.5300.v5[hwPerfLunAverageIOResponseTime, "{#NAME}"].min({$HUAWEI.5300.LUN.IO.TIME.MAX.TIME})}>{$HUAWEI.5300.LUN.IO.TIME.MAX.WARN}` |WARNING | | -|Pool {#NAME}: Health status is not Normal |<p>-</p> |`{TEMPLATE_NAME:huawei.5300.v5[hwInfoStoragePoolHealthStatus, "{#NAME}"].last()}<>1` |HIGH | | -|Pool {#NAME}: Running status is not Online |<p>-</p> |`{TEMPLATE_NAME:huawei.5300.v5[hwInfoStoragePoolRunningStatus, "{#NAME}"].last()}<>27` |AVERAGE | | -|Pool {#NAME}: Used capacity is too high (over {#THRESHOLD}%) |<p>-</p> |`{TEMPLATE_NAME:huawei.5300.v5[hwInfoStoragePoolFreeCapacityPct, "{#NAME}"].min({$HUAWEI.5300.POOL.CAPACITY.THRESH.TIME})}>{#THRESHOLD}` |AVERAGE | | +|Controller {#ID}: High CPU utilization (over {$CPU.UTIL.CRIT}% for 5m) |<p>CPU utilization is too high. The system might be slow to respond.</p> |`min(/Huawei OceanStor 5300 V5 SNMP/huawei.5300.v5[hwInfoControllerCPUUsage, "{#ID}"],5m)>{$CPU.UTIL.CRIT}` |WARNING | | +|Node {#NODE}: High CPU utilization (over {$CPU.UTIL.CRIT}% for 5m) |<p>CPU utilization is too high. The system might be slow to respond.</p> |`min(/Huawei OceanStor 5300 V5 SNMP/huawei.5300.v5[hwPerfNodeCPUUsage, "{#NODE}"],5m)>{$CPU.UTIL.CRIT}` |WARNING | | +|OceanStor 5300 V5: Storage version has been changed |<p>OceanStor 5300 V5 version has changed. Ack to close.</p> |`last(/Huawei OceanStor 5300 V5 SNMP/huawei.5300.v5[version],#1)<>last(/Huawei OceanStor 5300 V5 SNMP/huawei.5300.v5[version],#2) and length(last(/Huawei OceanStor 5300 V5 SNMP/huawei.5300.v5[version]))>0` |INFO |<p>Manual close: YES</p> | +|Controller {#ID}: Memory usage is too high (over {$HUAWEI.5300.MEM.MAX.WARN} for {$HUAWEI.5300.MEM.MAX.TIME}) |<p>-</p> |`min(/Huawei OceanStor 5300 V5 SNMP/huawei.5300.v5[hwInfoControllerMemoryUsage, "{#ID}"],{$HUAWEI.5300.MEM.MAX.TIME})>{$HUAWEI.5300.MEM.MAX.WARN}` |AVERAGE | | +|Controller {#ID}: Health status is not Normal |<p>-</p> |`last(/Huawei OceanStor 5300 V5 SNMP/huawei.5300.v5[hwInfoControllerHealthStatus, "{#ID}"])<>1` |HIGH | | +|Controller {#ID}: Running status is not Online |<p>-</p> |`last(/Huawei OceanStor 5300 V5 SNMP/huawei.5300.v5[hwInfoControllerRunningStatus, "{#ID}"])<>27` |AVERAGE | | +|Controller {#ID}: Role has been changed |<p>-</p> |`last(/Huawei OceanStor 5300 V5 SNMP/huawei.5300.v5[hwInfoControllerRole, "{#ID}"],#1)<>last(/Huawei OceanStor 5300 V5 SNMP/huawei.5300.v5[hwInfoControllerRole, "{#ID}"],#2)` |WARNING |<p>Manual close: YES</p> | +|Enclosure {#NAME}: Health status is not Normal |<p>-</p> |`last(/Huawei OceanStor 5300 V5 SNMP/huawei.5300.v5[hwInfoEnclosureHealthStatus, "{#NAME}"])<>1` |HIGH | | +|Enclosure {#NAME}: Running status is not Online |<p>-</p> |`last(/Huawei OceanStor 5300 V5 SNMP/huawei.5300.v5[hwInfoEnclosureRunningStatus, "{#NAME}"])<>27` |AVERAGE | | +|Enclosure {#NAME}: Temperature is too high (over {$HUAWEI.5300.TEMP.MAX.WARN} for {$HUAWEI.5300.TEMP.MAX.TIME}) |<p>-</p> |`min(/Huawei OceanStor 5300 V5 SNMP/huawei.5300.v5[hwInfoEnclosureTemperature, "{#NAME}"],{$HUAWEI.5300.TEMP.MAX.TIME})>{$HUAWEI.5300.TEMP.MAX.WARN}` |HIGH | | +|FAN {#ID} on {#LOCATION}: Health status is not Normal |<p>-</p> |`last(/Huawei OceanStor 5300 V5 SNMP/huawei.5300.v5[hwInfoFanHealthStatus, "{#ID}:{#LOCATION}"])<>1` |HIGH | | +|FAN {#ID} on {#LOCATION}: Running status is not Running |<p>-</p> |`last(/Huawei OceanStor 5300 V5 SNMP/huawei.5300.v5[hwInfoFanRunningStatus, "{#ID}:{#LOCATION}"])<>2` |AVERAGE | | +|BBU {#ID} on {#LOCATION}: Health status is not Normal |<p>-</p> |`last(/Huawei OceanStor 5300 V5 SNMP/huawei.5300.v5[hwInfoBBUHealthStatus, "{#ID}:{#LOCATION}"])<>1` |HIGH | | +|BBU {#ID} on {#LOCATION}: Running status is not Online |<p>-</p> |`last(/Huawei OceanStor 5300 V5 SNMP/huawei.5300.v5[hwInfoBBURunningStatus, "{#ID}:{#LOCATION}"])<>2` |AVERAGE | | +|Disk {#MODEL} on {#LOCATION}: Health status is not Normal |<p>-</p> |`last(/Huawei OceanStor 5300 V5 SNMP/huawei.5300.v5[hwInfoDiskHealthStatus, "{#ID}"])<>1` |HIGH | | +|Disk {#MODEL} on {#LOCATION}: Running status is not Online |<p>-</p> |`last(/Huawei OceanStor 5300 V5 SNMP/huawei.5300.v5[hwInfoDiskRunningStatus, "{#ID}"])<>27` |AVERAGE | | +|Disk {#MODEL} on {#LOCATION}: Temperature is too high (over {$HUAWEI.5300.DISK.TEMP.MAX.WARN:"{#MODEL}"} for {$HUAWEI.5300.DISK.TEMP.MAX.TIME}) |<p>-</p> |`min(/Huawei OceanStor 5300 V5 SNMP/huawei.5300.v5[hwInfoDiskTemperature, "{#ID}"],{$HUAWEI.5300.DISK.TEMP.MAX.TIME})>{$HUAWEI.5300.DISK.TEMP.MAX.WARN:"{#MODEL}"}` |HIGH | | +|Node {#NODE}: Average I/O latency is too high (over {$HUAWEI.5300.NODE.IO.DELAY.MAX.WARN}ms for {$HUAWEI.5300.NODE.IO.DELAY.MAX.TIME}) |<p>-</p> |`min(/Huawei OceanStor 5300 V5 SNMP/huawei.5300.v5[hwPerfNodeDelay, "{#NODE}"],{$HUAWEI.5300.NODE.IO.DELAY.MAX.TIME})>{$HUAWEI.5300.NODE.IO.DELAY.MAX.WARN}` |WARNING | | +|LUN {#NAME}: Status is not Normal |<p>-</p> |`last(/Huawei OceanStor 5300 V5 SNMP/huawei.5300.v5[hwStorageLunStatus, "{#NAME}"])<>1` |AVERAGE | | +|LUN {#NAME}: Average I/O response time is too high (over {$HUAWEI.5300.LUN.IO.TIME.MAX.WARN}ms for {$HUAWEI.5300.LUN.IO.TIME.MAX.TIME}) |<p>-</p> |`min(/Huawei OceanStor 5300 V5 SNMP/huawei.5300.v5[hwPerfLunAverageIOResponseTime, "{#NAME}"],{$HUAWEI.5300.LUN.IO.TIME.MAX.TIME})>{$HUAWEI.5300.LUN.IO.TIME.MAX.WARN}` |WARNING | | +|Pool {#NAME}: Health status is not Normal |<p>-</p> |`last(/Huawei OceanStor 5300 V5 SNMP/huawei.5300.v5[hwInfoStoragePoolHealthStatus, "{#NAME}"])<>1` |HIGH | | +|Pool {#NAME}: Running status is not Online |<p>-</p> |`last(/Huawei OceanStor 5300 V5 SNMP/huawei.5300.v5[hwInfoStoragePoolRunningStatus, "{#NAME}"])<>27` |AVERAGE | | +|Pool {#NAME}: Used capacity is too high (over {#THRESHOLD}%) |<p>-</p> |`min(/Huawei OceanStor 5300 V5 SNMP/huawei.5300.v5[hwInfoStoragePoolFreeCapacityPct, "{#NAME}"],{$HUAWEI.5300.POOL.CAPACITY.THRESH.TIME})>{#THRESHOLD}` |AVERAGE | | ## Feedback diff --git a/templates/san/huawei_5300v5_snmp/template_san_huawei_5300v5_snmp.yaml b/templates/san/huawei_5300v5_snmp/template_san_huawei_5300v5_snmp.yaml index 316579a7376..d22607b3db8 100644 --- a/templates/san/huawei_5300v5_snmp/template_san_huawei_5300v5_snmp.yaml +++ b/templates/san/huawei_5300v5_snmp/template_san_huawei_5300v5_snmp.yaml @@ -1,6 +1,6 @@ zabbix_export: version: '5.4' - date: '2021-05-11T08:05:45Z' + date: '2021-12-20T07:06:50Z' groups: - uuid: 7c2cb727f85b492d88cd56e17127c64d @@ -15,7 +15,7 @@ zabbix_export: You can discuss this template or leave feedback on our forum https://www.zabbix.com/forum/zabbix-suggestions-and-feedback/418855-discussion-thread-for-official-zabbix-template-huawei-oceanstor - Template tooling version used: 0.38 + Template tooling version used: 0.40 templates: - name: 'Generic SNMP' diff --git a/templates/san/netapp_aff_a700_http/README.md b/templates/san/netapp_aff_a700_http/README.md index c02d8d5b108..7ce062f778e 100644 --- a/templates/san/netapp_aff_a700_http/README.md +++ b/templates/san/netapp_aff_a700_http/README.md @@ -63,21 +63,21 @@ There are no template links in this template. |General |Cluster name |<p>The name of the cluster.</p> |DEPENDENT |netapp.cluster.name<p>**Preprocessing**:</p><p>- JSONPATH: `$.name`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | |General |Cluster location |<p>The location of the cluster.</p> |DEPENDENT |netapp.cluster.location<p>**Preprocessing**:</p><p>- JSONPATH: `$.location`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | |General |Cluster status |<p>The status of the cluster: ok, error, partial_no_data, partial_no_response, partial_other_error, negative_delta, backfilled_data, inconsistent_delta_time, inconsistent_old_data.</p> |DEPENDENT |netapp.cluster.status<p>**Preprocessing**:</p><p>- JSONPATH: `$.statistics.status`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | -|General |Cluster throughput, other rate |<p>Throughput bytes observed at the storage object. Performance metric for other I/O operations. Other I/O operations can be metadata operations, such as directory lookups and so on.</p> |DEPENDENT |netapp.cluster.statistics.throughput.other.rate<p>**Preprocessing**:</p><p>- JSONPATH: `$.statistics.throughput_raw.other`</p><p>- CHANGE_PER_SECOND | -|General |Cluster throughput, read rate |<p>Throughput bytes observed at the storage object. Performance metric for read I/O operations.</p> |DEPENDENT |netapp.cluster.statistics.throughput.read.rate<p>**Preprocessing**:</p><p>- JSONPATH: `$.statistics.throughput_raw.read`</p><p>- CHANGE_PER_SECOND | -|General |Cluster throughput, write rate |<p>Throughput bytes observed at the storage object. Performance metric for write I/O operations.</p> |DEPENDENT |netapp.cluster.statistics.throughput.write.rate<p>**Preprocessing**:</p><p>- JSONPATH: `$.statistics.throughput_raw.write`</p><p>- CHANGE_PER_SECOND | -|General |Cluster throughput, total rate |<p>Throughput bytes observed at the storage object. Performance metric aggregated over all types of I/O operations.</p> |DEPENDENT |netapp.cluster.statistics.throughput.total.rate<p>**Preprocessing**:</p><p>- JSONPATH: `$.statistics.throughput_raw.total`</p><p>- CHANGE_PER_SECOND | -|General |Cluster IOPS, other rate |<p>The number of I/O operations observed at the storage object. Performance metric for other I/O operations. Other I/O operations can be metadata operations, such as directory lookups and so on.</p> |DEPENDENT |netapp.cluster.statistics.iops.other.rate<p>**Preprocessing**:</p><p>- JSONPATH: `$.statistics.iops_raw.other`</p><p>- CHANGE_PER_SECOND | -|General |Cluster IOPS, read rate |<p>The number of I/O operations observed at the storage object. Performance metric for read I/O operations.</p> |DEPENDENT |netapp.cluster.statistics.iops.read.rate<p>**Preprocessing**:</p><p>- JSONPATH: `$.statistics.iops_raw.read`</p><p>- CHANGE_PER_SECOND | -|General |Cluster IOPS, write rate |<p>The number of I/O operations observed at the storage object. Performance metric for write I/O operations.</p> |DEPENDENT |netapp.cluster.statistics.iops.write.rate<p>**Preprocessing**:</p><p>- JSONPATH: `$.statistics.iops_raw.write`</p><p>- CHANGE_PER_SECOND | -|General |Cluster IOPS, total rate |<p>The number of I/O operations observed at the storage object. Performance metric aggregated over all types of I/O operations.</p> |DEPENDENT |netapp.cluster.statistics.iops.total.rate<p>**Preprocessing**:</p><p>- JSONPATH: `$.statistics.iops_raw.total`</p><p>- CHANGE_PER_SECOND | -|General |Cluster latency, other |<p>The average latency per I/O operation in milliseconds observed at the storage object. Performance metric for other I/O operations. Other I/O operations can be metadata operations, such as directory lookups and so on.</p> |CALCULATED |netapp.cluster.statistics.latency.other<p>**Expression**:</p>`(last(netapp.cluster.statistics.latency_raw.other) - prev(netapp.cluster.statistics.latency_raw.other)) / (last(netapp.cluster.statistics.iops_raw.other) - prev(netapp.cluster.statistics.iops_raw.other) + (last(netapp.cluster.statistics.iops_raw.other) - prev(netapp.cluster.statistics.iops_raw.other) = 0) ) * 0.001 ` | -|General |Cluster latency, read |<p>The average latency per I/O operation in milliseconds observed at the storage object. Performance metric for read I/O operations.</p> |CALCULATED |netapp.cluster.statistics.latency.read<p>**Expression**:</p>`(last(netapp.cluster.statistics.latency_raw.read) - prev(netapp.cluster.statistics.latency_raw.read)) / ( last(netapp.cluster.statistics.iops_raw.read) - prev(netapp.cluster.statistics.iops_raw.read) + (last(netapp.cluster.statistics.iops_raw.read) - prev(netapp.cluster.statistics.iops_raw.read) = 0) ) * 0.001 ` | -|General |Cluster latency, write |<p>The average latency per I/O operation in milliseconds observed at the storage object. Performance metric for write I/O operations.</p> |CALCULATED |netapp.cluster.statistics.latency.write<p>**Expression**:</p>`(last(netapp.cluster.statistics.latency_raw.write) - prev(netapp.cluster.statistics.latency_raw.write)) / ( last(netapp.cluster.statistics.iops_raw.write) - prev(netapp.cluster.statistics.iops_raw.write) + (last(netapp.cluster.statistics.iops_raw.write) - prev(netapp.cluster.statistics.iops_raw.write) = 0) ) * 0.001 ` | -|General |Cluster latency, total |<p>The average latency per I/O operation in milliseconds observed at the storage object. Performance metric aggregated over all types of I/O operations.</p> |CALCULATED |netapp.cluster.statistics.latency.total<p>**Expression**:</p>`(last(netapp.cluster.statistics.latency_raw.total) - prev(netapp.cluster.statistics.latency_raw.total)) / ( last(netapp.cluster.statistics.iops_raw.total) - prev(netapp.cluster.statistics.iops_raw.total) + (last(netapp.cluster.statistics.iops_raw.total) - prev(netapp.cluster.statistics.iops_raw.total) = 0) ) * 0.001 ` | +|General |Cluster throughput, other rate |<p>Throughput bytes observed at the storage object. Performance metric for other I/O operations. Other I/O operations can be metadata operations, such as directory lookups and so on.</p> |DEPENDENT |netapp.cluster.statistics.throughput.other.rate<p>**Preprocessing**:</p><p>- JSONPATH: `$.statistics.throughput_raw.other`</p><p>- CHANGE_PER_SECOND</p> | +|General |Cluster throughput, read rate |<p>Throughput bytes observed at the storage object. Performance metric for read I/O operations.</p> |DEPENDENT |netapp.cluster.statistics.throughput.read.rate<p>**Preprocessing**:</p><p>- JSONPATH: `$.statistics.throughput_raw.read`</p><p>- CHANGE_PER_SECOND</p> | +|General |Cluster throughput, write rate |<p>Throughput bytes observed at the storage object. Performance metric for write I/O operations.</p> |DEPENDENT |netapp.cluster.statistics.throughput.write.rate<p>**Preprocessing**:</p><p>- JSONPATH: `$.statistics.throughput_raw.write`</p><p>- CHANGE_PER_SECOND</p> | +|General |Cluster throughput, total rate |<p>Throughput bytes observed at the storage object. Performance metric aggregated over all types of I/O operations.</p> |DEPENDENT |netapp.cluster.statistics.throughput.total.rate<p>**Preprocessing**:</p><p>- JSONPATH: `$.statistics.throughput_raw.total`</p><p>- CHANGE_PER_SECOND</p> | +|General |Cluster IOPS, other rate |<p>The number of I/O operations observed at the storage object. Performance metric for other I/O operations. Other I/O operations can be metadata operations, such as directory lookups and so on.</p> |DEPENDENT |netapp.cluster.statistics.iops.other.rate<p>**Preprocessing**:</p><p>- JSONPATH: `$.statistics.iops_raw.other`</p><p>- CHANGE_PER_SECOND</p> | +|General |Cluster IOPS, read rate |<p>The number of I/O operations observed at the storage object. Performance metric for read I/O operations.</p> |DEPENDENT |netapp.cluster.statistics.iops.read.rate<p>**Preprocessing**:</p><p>- JSONPATH: `$.statistics.iops_raw.read`</p><p>- CHANGE_PER_SECOND</p> | +|General |Cluster IOPS, write rate |<p>The number of I/O operations observed at the storage object. Performance metric for write I/O operations.</p> |DEPENDENT |netapp.cluster.statistics.iops.write.rate<p>**Preprocessing**:</p><p>- JSONPATH: `$.statistics.iops_raw.write`</p><p>- CHANGE_PER_SECOND</p> | +|General |Cluster IOPS, total rate |<p>The number of I/O operations observed at the storage object. Performance metric aggregated over all types of I/O operations.</p> |DEPENDENT |netapp.cluster.statistics.iops.total.rate<p>**Preprocessing**:</p><p>- JSONPATH: `$.statistics.iops_raw.total`</p><p>- CHANGE_PER_SECOND</p> | +|General |Cluster latency, other |<p>The average latency per I/O operation in milliseconds observed at the storage object. Performance metric for other I/O operations. Other I/O operations can be metadata operations, such as directory lookups and so on.</p> |CALCULATED |netapp.cluster.statistics.latency.other<p>**Expression**:</p>`(last(//netapp.cluster.statistics.latency_raw.other) - last(//netapp.cluster.statistics.latency_raw.other,#2)) / (last(//netapp.cluster.statistics.iops_raw.other) - last(//netapp.cluster.statistics.iops_raw.other,#2) + (last(//netapp.cluster.statistics.iops_raw.other) - last(//netapp.cluster.statistics.iops_raw.other,#2) = 0) ) * 0.001 ` | +|General |Cluster latency, read |<p>The average latency per I/O operation in milliseconds observed at the storage object. Performance metric for read I/O operations.</p> |CALCULATED |netapp.cluster.statistics.latency.read<p>**Expression**:</p>`(last(//netapp.cluster.statistics.latency_raw.read) - last(//netapp.cluster.statistics.latency_raw.read,#2)) / ( last(//netapp.cluster.statistics.iops_raw.read) - last(//netapp.cluster.statistics.iops_raw.read,#2) + (last(//netapp.cluster.statistics.iops_raw.read) - last(//netapp.cluster.statistics.iops_raw.read,#2) = 0) ) * 0.001 ` | +|General |Cluster latency, write |<p>The average latency per I/O operation in milliseconds observed at the storage object. Performance metric for write I/O operations.</p> |CALCULATED |netapp.cluster.statistics.latency.write<p>**Expression**:</p>`(last(//netapp.cluster.statistics.latency_raw.write) - last(//netapp.cluster.statistics.latency_raw.write,#2)) / ( last(//netapp.cluster.statistics.iops_raw.write) - last(//netapp.cluster.statistics.iops_raw.write,#2) + (last(//netapp.cluster.statistics.iops_raw.write) - last(//netapp.cluster.statistics.iops_raw.write,#2) = 0) ) * 0.001 ` | +|General |Cluster latency, total |<p>The average latency per I/O operation in milliseconds observed at the storage object. Performance metric aggregated over all types of I/O operations.</p> |CALCULATED |netapp.cluster.statistics.latency.total<p>**Expression**:</p>`(last(//netapp.cluster.statistics.latency_raw.total) - last(//netapp.cluster.statistics.latency_raw.total,#2)) / ( last(//netapp.cluster.statistics.iops_raw.total) - last(//netapp.cluster.statistics.iops_raw.total,#2) + (last(//netapp.cluster.statistics.iops_raw.total) - last(//netapp.cluster.statistics.iops_raw.total,#2) = 0) ) * 0.001 ` | |General |{#NODENAME}: Software version |<p>This returns the cluster version information. When the cluster has more than one node, the cluster version is equivalent to the lowest of generation, major, and minor versions on all nodes.</p> |DEPENDENT |netapp.node.version[{#NODENAME}]<p>**Preprocessing**:</p><p>- JSONPATH: `$.records[?(@.name=='{#NODENAME}')].version.full.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | |General |{#NODENAME}: Location |<p>The location of the node.</p> |DEPENDENT |netapp.nodes.location[{#NODENAME}]<p>**Preprocessing**:</p><p>- JSONPATH: `$.records[?(@.name=='{#NODENAME}')].location.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | -|General |{#NODENAME}: State |<p>State of the node:</p><p>up - Node is up and operational.</p><p>booting - Node is booting up.</p><p>down - Node has stopped or is dumping core.</p><p>taken_over - Node has been taken over by its HA partner and is not yet waiting for giveback.</p><p>waiting_for_giveback - Node has been taken over by its HA partner and is waiting for the HA partner to giveback disks.</p><p>degraded - Node has one or more critical services offline.</p><p>unknown - Node or its HA partner cannot be contacted and there is no information on the node’s state.</p> |DEPENDENT |netapp.nodes.state[{#NODENAME}]<p>**Preprocessing**:</p><p>- JSONPATH: `$.records[?(@.name=='{#NODENAME}')].state.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | +|General |{#NODENAME}: State |<p>State of the node:</p><p>up - Node is up and operational.</p><p>booting - Node is booting up.</p><p>down - Node has stopped or is dumping core.</p><p>taken_over - Node has been taken over by its HA partner and is not yet waiting for giveback.</p><p>waiting_for_giveback - Node has been taken over by its HA partner and is waiting for the HA partner to giveback disks.</p><p>degraded - Node has one or more critical services offline.</p><p>unknown - Node or its HA partner cannot be contacted and there is no information on the node's state.</p> |DEPENDENT |netapp.nodes.state[{#NODENAME}]<p>**Preprocessing**:</p><p>- JSONPATH: `$.records[?(@.name=='{#NODENAME}')].state.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | |General |{#NODENAME}: Membership |<p>Possible values:</p><p> available - If a node is available, this means it is detected on the internal cluster network and can be added to the cluster. Nodes that have a membership of “available” are not returned when a GET request is called when the cluster exists. A query on the “membership” property for available must be provided to scan for nodes on the cluster network. Nodes that have a membership of “available” are returned automatically before a cluster is created.</p><p> joining - Joining nodes are in the process of being added to the cluster. The node may be progressing through the steps to become a member or might have failed. The job to add the node or create the cluster provides details on the current progress of the node.</p><p> member - Nodes that are members have successfully joined the cluster.</p> |DEPENDENT |netapp.nodes.membership[{#NODENAME}]<p>**Preprocessing**:</p><p>- JSONPATH: `$.records[?(@.name=='{#NODENAME}')].membership.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | |General |{#NODENAME}: Uptime |<p>The total time, in seconds, that the node has been up.</p> |DEPENDENT |netapp.nodes.uptime[{#NODENAME}]<p>**Preprocessing**:</p><p>- JSONPATH: `$.records[?(@.name=='{#NODENAME}')].uptime.first()`</p> | |General |{#NODENAME}: Controller over temperature |<p>Specifies whether the hardware is currently operating outside of its recommended temperature range. The hardware shuts down if the temperature exceeds critical thresholds. Possible values: over, normal</p> |DEPENDENT |netapp.nodes.controller.over_temperature[{#NODENAME}]<p>**Preprocessing**:</p><p>- JSONPATH: `$.records[?(@.name=='{#NODENAME}')].controller.over_temperature.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | @@ -94,24 +94,24 @@ There are no template links in this template. |General |{#LUNNAME}: Space size |<p>The total provisioned size of the LUN.</p> |DEPENDENT |netapp.lun.space.size[{#SVMNAME},{#LUNNAME}]<p>**Preprocessing**:</p><p>- JSONPATH: `$.records[?(@.svm.name=='{#SVMNAME}'&&@.name=='{#LUNNAME}')].space.size.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | |General |{#LUNNAME}: Space used |<p>The amount of space consumed by the main data stream of the LUN.</p> |DEPENDENT |netapp.lun.space.used[{#SVMNAME},{#LUNNAME}]<p>**Preprocessing**:</p><p>- JSONPATH: `$.records[?(@.svm.name=='{#SVMNAME}'&&@.name=='{#LUNNAME}')].space.used.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | |General |{#VOLUMENAME}: Comment |<p>A comment for the volume.</p> |DEPENDENT |netapp.volume.comment[{#VOLUMENAME}]<p>**Preprocessing**:</p><p>- JSONPATH: `$.records[?(@.name=='{#VOLUMENAME}')].comment.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | -|General |{#VOLUMENAME}: State |<p>Volume state. A volume can only be brought online if it is offline. Taking a volume offline removes its junction path. The ‘mixed’ state applies to FlexGroup volumes only and cannot be specified as a target state. An ‘error’ state implies that the volume is not in a state to serve data.</p> |DEPENDENT |netapp.volume.state[{#VOLUMENAME}]<p>**Preprocessing**:</p><p>- JSONPATH: `$.records[?(@.name=='{#VOLUMENAME}')].state.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | -|General |{#VOLUMENAME}: Type |<p>Type of the volume.</p><p>rw ‐ read-write volume.</p><p>dp ‐ data-protection volume.</p><p>ls ‐ load-sharing dp volume.</p> |DEPENDENT |netapp.volume.type[{#VOLUMENAME}]<p>**Preprocessing**:</p><p>- JSONPATH: `$.records[?(@.name=='{#VOLUMENAME}')].type.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | +|General |{#VOLUMENAME}: State |<p>Volume state. A volume can only be brought online if it is offline. Taking a volume offline removes its junction path. The 'mixed' state applies to FlexGroup volumes only and cannot be specified as a target state. An 'error' state implies that the volume is not in a state to serve data.</p> |DEPENDENT |netapp.volume.state[{#VOLUMENAME}]<p>**Preprocessing**:</p><p>- JSONPATH: `$.records[?(@.name=='{#VOLUMENAME}')].state.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | +|General |{#VOLUMENAME}: Type |<p>Type of the volume.</p><p>rw - read-write volume.</p><p>dp - data-protection volume.</p><p>ls - load-sharing dp volume.</p> |DEPENDENT |netapp.volume.type[{#VOLUMENAME}]<p>**Preprocessing**:</p><p>- JSONPATH: `$.records[?(@.name=='{#VOLUMENAME}')].type.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | |General |{#VOLUMENAME}: SVM name |<p>The volume belongs this SVM.</p> |DEPENDENT |netapp.volume.svm_name[{#VOLUMENAME}]<p>**Preprocessing**:</p><p>- JSONPATH: `$.records[?(@.name=='{#VOLUMENAME}')].svm.name.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | |General |{#VOLUMENAME}: Space size |<p>Total provisioned size. The default size is equal to the minimum size of 20MB, in bytes.</p> |DEPENDENT |netapp.volume.space_size[{#VOLUMENAME}]<p>**Preprocessing**:</p><p>- JSONPATH: `$.records[?(@.name=='{#VOLUMENAME}')].space.size.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | |General |{#VOLUMENAME}: Available size |<p>The available space, in bytes.</p> |DEPENDENT |netapp.volume.space_available[{#VOLUMENAME}]<p>**Preprocessing**:</p><p>- JSONPATH: `$.records[?(@.name=='{#VOLUMENAME}')].space.available.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | |General |{#VOLUMENAME}: Used size |<p>The virtual space used (includes volume reserves) before storage efficiency, in bytes.</p> |DEPENDENT |netapp.volume.space_used[{#VOLUMENAME}]<p>**Preprocessing**:</p><p>- JSONPATH: `$.records[?(@.name=='{#VOLUMENAME}')].space.used.first()`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | -|General |{#VOLUMENAME}: Volume throughput, other rate |<p>Throughput bytes observed at the storage object. Performance metric for other I/O operations. Other I/O operations can be metadata operations, such as directory lookups and so on.</p> |DEPENDENT |netapp.volume.statistics.throughput.other.rate[{#VOLUMENAME}]<p>**Preprocessing**:</p><p>- JSONPATH: `$.records[?(@.name=='{#VOLUMENAME}')].statistics.throughput_raw.other.first()`</p><p>- CHANGE_PER_SECOND | -|General |{#VOLUMENAME}: Volume throughput, read rate |<p>Throughput bytes observed at the storage object. Performance metric for read I/O operations.</p> |DEPENDENT |netapp.volume.statistics.throughput.read.rate[{#VOLUMENAME}]<p>**Preprocessing**:</p><p>- JSONPATH: `$.records[?(@.name=='{#VOLUMENAME}')].statistics.throughput_raw.read.first()`</p><p>- CHANGE_PER_SECOND | -|General |{#VOLUMENAME}: Volume throughput, write rate |<p>Throughput bytes observed at the storage object. Performance metric for write I/O operations.</p> |DEPENDENT |netapp.volume.statistics.throughput.write.rate[{#VOLUMENAME}]<p>**Preprocessing**:</p><p>- JSONPATH: `$.records[?(@.name=='{#VOLUMENAME}')].statistics.throughput_raw.write.first()`</p><p>- CHANGE_PER_SECOND | -|General |{#VOLUMENAME}: Volume throughput, total rate |<p>Throughput bytes observed at the storage object. Performance metric aggregated over all types of I/O operations.</p> |DEPENDENT |netapp.volume.statistics.throughput.total.rate[{#VOLUMENAME}]<p>**Preprocessing**:</p><p>- JSONPATH: `$.records[?(@.name=='{#VOLUMENAME}')].statistics.throughput_raw.total.first()`</p><p>- CHANGE_PER_SECOND | -|General |{#VOLUMENAME}: Volume IOPS, other rate |<p>The number of I/O operations observed at the storage object. Performance metric for other I/O operations. Other I/O operations can be metadata operations, such as directory lookups and so on.</p> |DEPENDENT |netapp.volume.statistics.iops.other.rate[{#VOLUMENAME}]<p>**Preprocessing**:</p><p>- JSONPATH: `$.records[?(@.name=='{#VOLUMENAME}')].statistics.iops_raw.other.first()`</p><p>- CHANGE_PER_SECOND | -|General |{#VOLUMENAME}: Volume IOPS, read rate |<p>The number of I/O operations observed at the storage object. Performance metric for read I/O operations.</p> |DEPENDENT |netapp.volume.statistics.iops.read.rate[{#VOLUMENAME}]<p>**Preprocessing**:</p><p>- JSONPATH: `$.records[?(@.name=='{#VOLUMENAME}')].statistics.iops_raw.read.first()`</p><p>- CHANGE_PER_SECOND | -|General |{#VOLUMENAME}: Volume IOPS, write rate |<p>The number of I/O operations observed at the storage object. Performance metric for write I/O operations.</p> |DEPENDENT |netapp.volume.statistics.iops.write.rate[{#VOLUMENAME}]<p>**Preprocessing**:</p><p>- JSONPATH: `$.records[?(@.name=='{#VOLUMENAME}')].statistics.iops_raw.write.first()`</p><p>- CHANGE_PER_SECOND | -|General |{#VOLUMENAME}: Volume IOPS, total rate |<p>The number of I/O operations observed at the storage object. Performance metric aggregated over all types of I/O operations.</p> |DEPENDENT |netapp.volume.statistics.iops.total.rate[{#VOLUMENAME}]<p>**Preprocessing**:</p><p>- JSONPATH: `$.records[?(@.name=='{#VOLUMENAME}')].statistics.iops_raw.total.first()`</p><p>- CHANGE_PER_SECOND | -|General |{#VOLUMENAME}: Volume latency, other |<p>The average latency per I/O operation in milliseconds observed at the storage object. Performance metric for other I/O operations. Other I/O operations can be metadata operations, such as directory lookups and so on.</p> |CALCULATED |netapp.volume.statistics.latency.other[{#VOLUMENAME}]<p>**Expression**:</p>`(last(netapp.volume.statistics.latency_raw.other[{#VOLUMENAME}]) - prev(netapp.volume.statistics.latency_raw.other[{#VOLUMENAME}])) / ( last(netapp.volume.statistics.iops_raw.other[{#VOLUMENAME}]) - prev(netapp.volume.statistics.iops_raw.other[{#VOLUMENAME}]) + (last(netapp.volume.statistics.iops_raw.other[{#VOLUMENAME}]) - prev(netapp.volume.statistics.iops_raw.other[{#VOLUMENAME}]) = 0) ) * 0.001 ` | -|General |{#VOLUMENAME}: Volume latency, read |<p>The average latency per I/O operation in milliseconds observed at the storage object. Performance metric for read I/O operations.</p> |CALCULATED |netapp.volume.statistics.latency.read[{#VOLUMENAME}]<p>**Expression**:</p>`(last(netapp.volume.statistics.latency_raw.read[{#VOLUMENAME}]) - prev(netapp.volume.statistics.latency_raw.read[{#VOLUMENAME}])) / ( last(netapp.volume.statistics.iops_raw.read[{#VOLUMENAME}]) - prev(netapp.volume.statistics.iops_raw.read[{#VOLUMENAME}]) + (last(netapp.volume.statistics.iops_raw.read[{#VOLUMENAME}]) - prev(netapp.volume.statistics.iops_raw.read[{#VOLUMENAME}]) = 0)) * 0.001 ` | -|General |{#VOLUMENAME}: Volume latency, write |<p>The average latency per I/O operation in milliseconds observed at the storage object. Performance metric for write I/O operations.</p> |CALCULATED |netapp.volume.statistics.latency.write[{#VOLUMENAME}]<p>**Expression**:</p>`(last(netapp.volume.statistics.latency_raw.write[{#VOLUMENAME}]) - prev(netapp.volume.statistics.latency_raw.write[{#VOLUMENAME}])) / ( last(netapp.volume.statistics.iops_raw.write[{#VOLUMENAME}]) - prev(netapp.volume.statistics.iops_raw.write[{#VOLUMENAME}]) + (last(netapp.volume.statistics.iops_raw.write[{#VOLUMENAME}]) - prev(netapp.volume.statistics.iops_raw.write[{#VOLUMENAME}]) = 0) ) * 0.001 ` | -|General |{#VOLUMENAME}: Volume latency, total |<p>The average latency per I/O operation in milliseconds observed at the storage object. Performance metric aggregated over all types of I/O operations.</p> |CALCULATED |netapp.volume.statistics.latency.total[{#VOLUMENAME}]<p>**Expression**:</p>`(last(netapp.volume.statistics.latency_raw.total[{#VOLUMENAME}]) - prev(netapp.volume.statistics.latency_raw.total[{#VOLUMENAME}])) / ( last(netapp.volume.statistics.iops_raw.total[{#VOLUMENAME}]) - prev(netapp.volume.statistics.iops_raw.total[{#VOLUMENAME}]) + (last(netapp.volume.statistics.iops_raw.total[{#VOLUMENAME}]) - prev(netapp.volume.statistics.iops_raw.total[{#VOLUMENAME}]) = 0) ) * 0.001 ` | +|General |{#VOLUMENAME}: Volume throughput, other rate |<p>Throughput bytes observed at the storage object. Performance metric for other I/O operations. Other I/O operations can be metadata operations, such as directory lookups and so on.</p> |DEPENDENT |netapp.volume.statistics.throughput.other.rate[{#VOLUMENAME}]<p>**Preprocessing**:</p><p>- JSONPATH: `$.records[?(@.name=='{#VOLUMENAME}')].statistics.throughput_raw.other.first()`</p><p>- CHANGE_PER_SECOND</p> | +|General |{#VOLUMENAME}: Volume throughput, read rate |<p>Throughput bytes observed at the storage object. Performance metric for read I/O operations.</p> |DEPENDENT |netapp.volume.statistics.throughput.read.rate[{#VOLUMENAME}]<p>**Preprocessing**:</p><p>- JSONPATH: `$.records[?(@.name=='{#VOLUMENAME}')].statistics.throughput_raw.read.first()`</p><p>- CHANGE_PER_SECOND</p> | +|General |{#VOLUMENAME}: Volume throughput, write rate |<p>Throughput bytes observed at the storage object. Performance metric for write I/O operations.</p> |DEPENDENT |netapp.volume.statistics.throughput.write.rate[{#VOLUMENAME}]<p>**Preprocessing**:</p><p>- JSONPATH: `$.records[?(@.name=='{#VOLUMENAME}')].statistics.throughput_raw.write.first()`</p><p>- CHANGE_PER_SECOND</p> | +|General |{#VOLUMENAME}: Volume throughput, total rate |<p>Throughput bytes observed at the storage object. Performance metric aggregated over all types of I/O operations.</p> |DEPENDENT |netapp.volume.statistics.throughput.total.rate[{#VOLUMENAME}]<p>**Preprocessing**:</p><p>- JSONPATH: `$.records[?(@.name=='{#VOLUMENAME}')].statistics.throughput_raw.total.first()`</p><p>- CHANGE_PER_SECOND</p> | +|General |{#VOLUMENAME}: Volume IOPS, other rate |<p>The number of I/O operations observed at the storage object. Performance metric for other I/O operations. Other I/O operations can be metadata operations, such as directory lookups and so on.</p> |DEPENDENT |netapp.volume.statistics.iops.other.rate[{#VOLUMENAME}]<p>**Preprocessing**:</p><p>- JSONPATH: `$.records[?(@.name=='{#VOLUMENAME}')].statistics.iops_raw.other.first()`</p><p>- CHANGE_PER_SECOND</p> | +|General |{#VOLUMENAME}: Volume IOPS, read rate |<p>The number of I/O operations observed at the storage object. Performance metric for read I/O operations.</p> |DEPENDENT |netapp.volume.statistics.iops.read.rate[{#VOLUMENAME}]<p>**Preprocessing**:</p><p>- JSONPATH: `$.records[?(@.name=='{#VOLUMENAME}')].statistics.iops_raw.read.first()`</p><p>- CHANGE_PER_SECOND</p> | +|General |{#VOLUMENAME}: Volume IOPS, write rate |<p>The number of I/O operations observed at the storage object. Performance metric for write I/O operations.</p> |DEPENDENT |netapp.volume.statistics.iops.write.rate[{#VOLUMENAME}]<p>**Preprocessing**:</p><p>- JSONPATH: `$.records[?(@.name=='{#VOLUMENAME}')].statistics.iops_raw.write.first()`</p><p>- CHANGE_PER_SECOND</p> | +|General |{#VOLUMENAME}: Volume IOPS, total rate |<p>The number of I/O operations observed at the storage object. Performance metric aggregated over all types of I/O operations.</p> |DEPENDENT |netapp.volume.statistics.iops.total.rate[{#VOLUMENAME}]<p>**Preprocessing**:</p><p>- JSONPATH: `$.records[?(@.name=='{#VOLUMENAME}')].statistics.iops_raw.total.first()`</p><p>- CHANGE_PER_SECOND</p> | +|General |{#VOLUMENAME}: Volume latency, other |<p>The average latency per I/O operation in milliseconds observed at the storage object. Performance metric for other I/O operations. Other I/O operations can be metadata operations, such as directory lookups and so on.</p> |CALCULATED |netapp.volume.statistics.latency.other[{#VOLUMENAME}]<p>**Expression**:</p>`(last(//netapp.volume.statistics.latency_raw.other[{#VOLUMENAME}]) - last(//netapp.volume.statistics.latency_raw.other[{#VOLUMENAME}],#2)) / ( last(//netapp.volume.statistics.iops_raw.other[{#VOLUMENAME}]) - last(//netapp.volume.statistics.iops_raw.other[{#VOLUMENAME}],#2) + (last(//netapp.volume.statistics.iops_raw.other[{#VOLUMENAME}]) - last(//netapp.volume.statistics.iops_raw.other[{#VOLUMENAME}],#2) = 0) ) * 0.001 ` | +|General |{#VOLUMENAME}: Volume latency, read |<p>The average latency per I/O operation in milliseconds observed at the storage object. Performance metric for read I/O operations.</p> |CALCULATED |netapp.volume.statistics.latency.read[{#VOLUMENAME}]<p>**Expression**:</p>`(last(//netapp.volume.statistics.latency_raw.read[{#VOLUMENAME}]) - last(//netapp.volume.statistics.latency_raw.read[{#VOLUMENAME}],#2)) / ( last(//netapp.volume.statistics.iops_raw.read[{#VOLUMENAME}]) - last(//netapp.volume.statistics.iops_raw.read[{#VOLUMENAME}],#2) + (last(//netapp.volume.statistics.iops_raw.read[{#VOLUMENAME}]) - last(//netapp.volume.statistics.iops_raw.read[{#VOLUMENAME}],#2) = 0)) * 0.001 ` | +|General |{#VOLUMENAME}: Volume latency, write |<p>The average latency per I/O operation in milliseconds observed at the storage object. Performance metric for write I/O operations.</p> |CALCULATED |netapp.volume.statistics.latency.write[{#VOLUMENAME}]<p>**Expression**:</p>`(last(//netapp.volume.statistics.latency_raw.write[{#VOLUMENAME}]) - last(//netapp.volume.statistics.latency_raw.write[{#VOLUMENAME}],#2)) / ( last(//netapp.volume.statistics.iops_raw.write[{#VOLUMENAME}]) - last(//netapp.volume.statistics.iops_raw.write[{#VOLUMENAME}],#2) + (last(//netapp.volume.statistics.iops_raw.write[{#VOLUMENAME}]) - last(//netapp.volume.statistics.iops_raw.write[{#VOLUMENAME}],#2) = 0) ) * 0.001 ` | +|General |{#VOLUMENAME}: Volume latency, total |<p>The average latency per I/O operation in milliseconds observed at the storage object. Performance metric aggregated over all types of I/O operations.</p> |CALCULATED |netapp.volume.statistics.latency.total[{#VOLUMENAME}]<p>**Expression**:</p>`(last(//netapp.volume.statistics.latency_raw.total[{#VOLUMENAME}]) - last(//netapp.volume.statistics.latency_raw.total[{#VOLUMENAME}],#2)) / ( last(//netapp.volume.statistics.iops_raw.total[{#VOLUMENAME}]) - last(//netapp.volume.statistics.iops_raw.total[{#VOLUMENAME}],#2) + (last(//netapp.volume.statistics.iops_raw.total[{#VOLUMENAME}]) - last(//netapp.volume.statistics.iops_raw.total[{#VOLUMENAME}],#2) = 0) ) * 0.001 ` | |Zabbix_raw_items |Get cluster |<p>-</p> |HTTP_AGENT |netapp.cluster.get | |Zabbix_raw_items |Get nodes |<p>-</p> |HTTP_AGENT |netapp.nodes.get | |Zabbix_raw_items |Get disks |<p>-</p> |HTTP_AGENT |netapp.disks.get | @@ -143,21 +143,21 @@ There are no template links in this template. |Name|Description|Expression|Severity|Dependencies and additional info| |----|-----------|----|----|----| -|Version has changed (new version: {ITEM.VALUE}) |<p>__RESOURCE__ version has changed. Ack to close.</p> |`{TEMPLATE_NAME:netapp.cluster.version.diff()}=1 and {TEMPLATE_NAME:netapp.cluster.version.strlen()}>0` |INFO |<p>Manual close: YES</p> | -|Cluster status is abnormal |<p>Any errors associated with the sample. For example, if the aggregation of data over multiple nodes fails then any of the partial errors might be returned, “ok” on success, or “error” on any internal uncategorized failure. Whenever a sample collection is missed but done at a later time, it is back filled to the previous 15 second timestamp and tagged with "backfilled_data". “Inconsistent_ delta_time” is encountered when the time between two collections is not the same for all nodes. Therefore, the aggregated value might be over or under inflated. “Negative_delta” is returned when an expected monotonically increasing value has decreased in value. “Inconsistent_old_data” is returned when one or more nodes do not have the latest data.</p> |`({TEMPLATE_NAME:netapp.cluster.status.last()}<>"ok")` |AVERAGE | | -|{#NODENAME}: Version has changed (new version: {ITEM.VALUE}) |<p>{#NODENAME} version has changed. Ack to close.</p> |`{TEMPLATE_NAME:netapp.node.version[{#NODENAME}].diff()}=1 and {TEMPLATE_NAME:netapp.node.version[{#NODENAME}].strlen()}>0` |INFO |<p>Manual close: YES</p> | -|{#NODENAME}: Node state is abnormal |<p>The state of the node is different from up:</p><p>booting - Node is booting up.</p><p>down - Node has stopped or is dumping core.</p><p>taken_over - Node has been taken over by its HA partner and is not yet waiting for giveback.</p><p>waiting_for_giveback - Node has been taken over by its HA partner and is waiting for the HA partner to giveback disks.</p><p>degraded - Node has one or more critical services offline.</p><p>unknown - Node or its HA partner cannot be contacted and there is no information on the node’s state.</p> |`({TEMPLATE_NAME:netapp.nodes.state[{#NODENAME}].last()}<>"up")` |AVERAGE | | -|{#NODENAME}: Node has been restarted (uptime < 10m) |<p>Uptime is less than 10 minutes</p> |`{TEMPLATE_NAME:netapp.nodes.uptime[{#NODENAME}].last()}<10m` |INFO |<p>Manual close: YES</p> | -|{#NODENAME}: Node has over temperature |<p>The hardware shuts down if the temperature exceeds critical thresholds(item's value is "over").</p> |`({TEMPLATE_NAME:netapp.nodes.controller.over_temperature[{#NODENAME}].last()}<>"normal")` |AVERAGE | | -|{#ETHPORTNAME}: Ethernet port of the Node "{#NODENAME}" is down |<p>Something is wrong with the ethernet port.</p> |`({TEMPLATE_NAME:netapp.port.eth.state[{#NODENAME},{#ETHPORTNAME}].diff()}=1 and {TEMPLATE_NAME:netapp.port.eth.state[{#NODENAME},{#ETHPORTNAME}].last()}="down")`<p>Recovery expression:</p>`({TEMPLATE_NAME:netapp.port.eth.state[{#NODENAME},{#ETHPORTNAME}].diff()}=1 and {TEMPLATE_NAME:netapp.port.eth.state[{#NODENAME},{#ETHPORTNAME}].last()}="up")` |AVERAGE |<p>Manual close: YES</p> | -|{#FCPORTNAME}: FC port of the Node "{#NODENAME}" has state different from "online" |<p>Something is wrong with the FC port.</p> |`({TEMPLATE_NAME:netapp.port.fc.state[{#NODENAME},{#FCPORTNAME}].diff()}=1 and {TEMPLATE_NAME:netapp.port.fc.state[{#NODENAME},{#FCPORTNAME}].last()}<>"online")`<p>Recovery expression:</p>`({TEMPLATE_NAME:netapp.port.fc.state[{#NODENAME},{#FCPORTNAME}].diff()}=1 and {TEMPLATE_NAME:netapp.port.fc.state[{#NODENAME},{#FCPORTNAME}].last()}="online")` |AVERAGE |<p>Manual close: YES</p> | -|{#DISKNAME}: Disk of the Node "{#NODENAME}" has state different from "present" |<p>Something is wrong with the disk.</p> |`({TEMPLATE_NAME:netapp.disk.state[{#NODENAME},{#DISKNAME}].diff()}=1 and {TEMPLATE_NAME:netapp.disk.state[{#NODENAME},{#DISKNAME}].last()}<>"present")`<p>Recovery expression:</p>`({TEMPLATE_NAME:netapp.disk.state[{#NODENAME},{#DISKNAME}].diff()}=1 and {TEMPLATE_NAME:netapp.disk.state[{#NODENAME},{#DISKNAME}].last()}="present")` |AVERAGE |<p>Manual close: YES</p> | -|{#ID}: Chassis has something errors |<p>Something is wrong with the chassis.</p> |`({TEMPLATE_NAME:netapp.chassis.state[{#ID}].diff()}=1 and {TEMPLATE_NAME:netapp.chassis.state[{#ID}].last()}="error")`<p>Recovery expression:</p>`({TEMPLATE_NAME:netapp.chassis.state[{#ID}].diff()}=1 and {TEMPLATE_NAME:netapp.chassis.state[{#ID}].last()}="ok")` |AVERAGE |<p>Manual close: YES</p> | -|{#FRUID}: FRU of the chassis "{#ID}" state is error |<p>Something is wrong with the FRU.</p> |`({TEMPLATE_NAME:netapp.chassis.fru.state[{#CHASSISID},{#FRUID}].diff()}=1 and {TEMPLATE_NAME:netapp.chassis.fru.state[{#CHASSISID},{#FRUID}].last()}="error")`<p>Recovery expression:</p>`({TEMPLATE_NAME:netapp.chassis.fru.state[{#CHASSISID},{#FRUID}].diff()}=1 and {TEMPLATE_NAME:netapp.chassis.fru.state[{#CHASSISID},{#FRUID}].last()}="ok")` |AVERAGE |<p>Manual close: YES</p> | -|{#SVMNAME}: SVM state is abnormal |<p>Something is wrong with the SVM.</p> |`({TEMPLATE_NAME:netapp.svm.state[{#SVMNAME}].diff()}=1 and {TEMPLATE_NAME:netapp.svm.state[{#SVMNAME}].last()}<>"running")`<p>Recovery expression:</p>`({TEMPLATE_NAME:netapp.svm.state[{#SVMNAME}].diff()}=1 and {TEMPLATE_NAME:netapp.svm.state[{#SVMNAME}].last()}="running")` |AVERAGE |<p>Manual close: YES</p> | -|{#LUNNAME}: LUN of the SVM "{#SVMNAME}" has abnormal state |<p>Normal states for a LUN are online and offline. Other states indicate errors.</p> |`({TEMPLATE_NAME:netapp.lun.status.state[{#SVMNAME},{#LUNNAME}].diff()}=1 and {TEMPLATE_NAME:netapp.lun.status.state[{#SVMNAME},{#LUNNAME}].last()}<>"online")`<p>Recovery expression:</p>`({TEMPLATE_NAME:netapp.lun.status.state[{#SVMNAME},{#LUNNAME}].diff()}=1 and {TEMPLATE_NAME:netapp.lun.status.state[{#SVMNAME},{#LUNNAME}].last()}="online")` |AVERAGE |<p>Manual close: YES</p> | -|{#LUNNAME}: LUN of the SVM "{#SVMNAME}" has abnormal container state |<p>LUNs are only available when their containers are available.</p> |`({TEMPLATE_NAME:netapp.lun.status.container_state[{#SVMNAME},{#LUNNAME}].diff()}=1 and {TEMPLATE_NAME:netapp.lun.status.container_state[{#SVMNAME},{#LUNNAME}].last()}<>"online")`<p>Recovery expression:</p>`({TEMPLATE_NAME:netapp.lun.status.container_state[{#SVMNAME},{#LUNNAME}].diff()}=1 and {TEMPLATE_NAME:netapp.lun.status.container_state[{#SVMNAME},{#LUNNAME}].last()}="online")` |AVERAGE |<p>Manual close: YES</p> | -|{#VOLUMENAME}: Volume state is abnormal |<p>A volume can only be brought online if it is offline. Taking a volume offline removes its junction path. The ‘mixed’ state applies to FlexGroup volumes only and cannot be specified as a target state. An ‘error’ state implies that the volume is not in a state to serve data.</p> |`({TEMPLATE_NAME:netapp.volume.state[{#VOLUMENAME}].diff()}=1 and {TEMPLATE_NAME:netapp.volume.state[{#VOLUMENAME}].last()}<>"online")`<p>Recovery expression:</p>`({TEMPLATE_NAME:netapp.volume.state[{#VOLUMENAME}].diff()}=1 and {TEMPLATE_NAME:netapp.volume.state[{#VOLUMENAME}].last()}="online")` |AVERAGE |<p>Manual close: YES</p> | +|Version has changed (new version: {ITEM.VALUE}) |<p>__RESOURCE__ version has changed. Ack to close.</p> |`last(/NetApp AFF A700 by HTTP/netapp.cluster.version,#1)<>last(/NetApp AFF A700 by HTTP/netapp.cluster.version,#2) and length(last(/NetApp AFF A700 by HTTP/netapp.cluster.version))>0` |INFO |<p>Manual close: YES</p> | +|Cluster status is abnormal |<p>Any errors associated with the sample. For example, if the aggregation of data over multiple nodes fails then any of the partial errors might be returned, “ok” on success, or “error” on any internal uncategorized failure. Whenever a sample collection is missed but done at a later time, it is back filled to the previous 15 second timestamp and tagged with "backfilled_data". “Inconsistent_ delta_time” is encountered when the time between two collections is not the same for all nodes. Therefore, the aggregated value might be over or under inflated. “Negative_delta” is returned when an expected monotonically increasing value has decreased in value. “Inconsistent_old_data” is returned when one or more nodes do not have the latest data.</p> |`(last(/NetApp AFF A700 by HTTP/netapp.cluster.status)<>"ok")` |AVERAGE | | +|{#NODENAME}: Version has changed (new version: {ITEM.VALUE}) |<p>{#NODENAME} version has changed. Ack to close.</p> |`last(/NetApp AFF A700 by HTTP/netapp.node.version[{#NODENAME}],#1)<>last(/NetApp AFF A700 by HTTP/netapp.node.version[{#NODENAME}],#2) and length(last(/NetApp AFF A700 by HTTP/netapp.node.version[{#NODENAME}]))>0` |INFO |<p>Manual close: YES</p> | +|{#NODENAME}: Node state is abnormal |<p>The state of the node is different from up:</p><p>booting - Node is booting up.</p><p>down - Node has stopped or is dumping core.</p><p>taken_over - Node has been taken over by its HA partner and is not yet waiting for giveback.</p><p>waiting_for_giveback - Node has been taken over by its HA partner and is waiting for the HA partner to giveback disks.</p><p>degraded - Node has one or more critical services offline.</p><p>unknown - Node or its HA partner cannot be contacted and there is no information on the node's state.</p> |`(last(/NetApp AFF A700 by HTTP/netapp.nodes.state[{#NODENAME}])<>"up")` |AVERAGE | | +|{#NODENAME}: Node has been restarted (uptime < 10m) |<p>Uptime is less than 10 minutes</p> |`last(/NetApp AFF A700 by HTTP/netapp.nodes.uptime[{#NODENAME}])<10m` |INFO |<p>Manual close: YES</p> | +|{#NODENAME}: Node has over temperature |<p>The hardware shuts down if the temperature exceeds critical thresholds(item's value is "over").</p> |`(last(/NetApp AFF A700 by HTTP/netapp.nodes.controller.over_temperature[{#NODENAME}])<>"normal")` |AVERAGE | | +|{#ETHPORTNAME}: Ethernet port of the Node "{#NODENAME}" is down |<p>Something is wrong with the ethernet port.</p> |`(last(/NetApp AFF A700 by HTTP/netapp.port.eth.state[{#NODENAME},{#ETHPORTNAME}],#1)<>last(/NetApp AFF A700 by HTTP/netapp.port.eth.state[{#NODENAME},{#ETHPORTNAME}],#2) and last(/NetApp AFF A700 by HTTP/netapp.port.eth.state[{#NODENAME},{#ETHPORTNAME}])="down")`<p>Recovery expression:</p>`(last(/NetApp AFF A700 by HTTP/netapp.port.eth.state[{#NODENAME},{#ETHPORTNAME}],#1)<>last(/NetApp AFF A700 by HTTP/netapp.port.eth.state[{#NODENAME},{#ETHPORTNAME}],#2) and last(/NetApp AFF A700 by HTTP/netapp.port.eth.state[{#NODENAME},{#ETHPORTNAME}])="up")` |AVERAGE |<p>Manual close: YES</p> | +|{#FCPORTNAME}: FC port of the Node "{#NODENAME}" has state different from "online" |<p>Something is wrong with the FC port.</p> |`(last(/NetApp AFF A700 by HTTP/netapp.port.fc.state[{#NODENAME},{#FCPORTNAME}],#1)<>last(/NetApp AFF A700 by HTTP/netapp.port.fc.state[{#NODENAME},{#FCPORTNAME}],#2) and last(/NetApp AFF A700 by HTTP/netapp.port.fc.state[{#NODENAME},{#FCPORTNAME}])<>"online")`<p>Recovery expression:</p>`(last(/NetApp AFF A700 by HTTP/netapp.port.fc.state[{#NODENAME},{#FCPORTNAME}],#1)<>last(/NetApp AFF A700 by HTTP/netapp.port.fc.state[{#NODENAME},{#FCPORTNAME}],#2) and last(/NetApp AFF A700 by HTTP/netapp.port.fc.state[{#NODENAME},{#FCPORTNAME}])="online")` |AVERAGE |<p>Manual close: YES</p> | +|{#DISKNAME}: Disk of the Node "{#NODENAME}" has state different from "present" |<p>Something is wrong with the disk.</p> |`(last(/NetApp AFF A700 by HTTP/netapp.disk.state[{#NODENAME},{#DISKNAME}],#1)<>last(/NetApp AFF A700 by HTTP/netapp.disk.state[{#NODENAME},{#DISKNAME}],#2) and last(/NetApp AFF A700 by HTTP/netapp.disk.state[{#NODENAME},{#DISKNAME}])<>"present")`<p>Recovery expression:</p>`(last(/NetApp AFF A700 by HTTP/netapp.disk.state[{#NODENAME},{#DISKNAME}],#1)<>last(/NetApp AFF A700 by HTTP/netapp.disk.state[{#NODENAME},{#DISKNAME}],#2) and last(/NetApp AFF A700 by HTTP/netapp.disk.state[{#NODENAME},{#DISKNAME}])="present")` |AVERAGE |<p>Manual close: YES</p> | +|{#ID}: Chassis has something errors |<p>Something is wrong with the chassis.</p> |`(last(/NetApp AFF A700 by HTTP/netapp.chassis.state[{#ID}],#1)<>last(/NetApp AFF A700 by HTTP/netapp.chassis.state[{#ID}],#2) and last(/NetApp AFF A700 by HTTP/netapp.chassis.state[{#ID}])="error")`<p>Recovery expression:</p>`(last(/NetApp AFF A700 by HTTP/netapp.chassis.state[{#ID}],#1)<>last(/NetApp AFF A700 by HTTP/netapp.chassis.state[{#ID}],#2) and last(/NetApp AFF A700 by HTTP/netapp.chassis.state[{#ID}])="ok")` |AVERAGE |<p>Manual close: YES</p> | +|{#FRUID}: FRU of the chassis "{#ID}" state is error |<p>Something is wrong with the FRU.</p> |`(last(/NetApp AFF A700 by HTTP/netapp.chassis.fru.state[{#CHASSISID},{#FRUID}],#1)<>last(/NetApp AFF A700 by HTTP/netapp.chassis.fru.state[{#CHASSISID},{#FRUID}],#2) and last(/NetApp AFF A700 by HTTP/netapp.chassis.fru.state[{#CHASSISID},{#FRUID}])="error")`<p>Recovery expression:</p>`(last(/NetApp AFF A700 by HTTP/netapp.chassis.fru.state[{#CHASSISID},{#FRUID}],#1)<>last(/NetApp AFF A700 by HTTP/netapp.chassis.fru.state[{#CHASSISID},{#FRUID}],#2) and last(/NetApp AFF A700 by HTTP/netapp.chassis.fru.state[{#CHASSISID},{#FRUID}])="ok")` |AVERAGE |<p>Manual close: YES</p> | +|{#SVMNAME}: SVM state is abnormal |<p>Something is wrong with the SVM.</p> |`(last(/NetApp AFF A700 by HTTP/netapp.svm.state[{#SVMNAME}],#1)<>last(/NetApp AFF A700 by HTTP/netapp.svm.state[{#SVMNAME}],#2) and last(/NetApp AFF A700 by HTTP/netapp.svm.state[{#SVMNAME}])<>"running")`<p>Recovery expression:</p>`(last(/NetApp AFF A700 by HTTP/netapp.svm.state[{#SVMNAME}],#1)<>last(/NetApp AFF A700 by HTTP/netapp.svm.state[{#SVMNAME}],#2) and last(/NetApp AFF A700 by HTTP/netapp.svm.state[{#SVMNAME}])="running")` |AVERAGE |<p>Manual close: YES</p> | +|{#LUNNAME}: LUN of the SVM "{#SVMNAME}" has abnormal state |<p>Normal states for a LUN are online and offline. Other states indicate errors.</p> |`(last(/NetApp AFF A700 by HTTP/netapp.lun.status.state[{#SVMNAME},{#LUNNAME}],#1)<>last(/NetApp AFF A700 by HTTP/netapp.lun.status.state[{#SVMNAME},{#LUNNAME}],#2) and last(/NetApp AFF A700 by HTTP/netapp.lun.status.state[{#SVMNAME},{#LUNNAME}])<>"online")`<p>Recovery expression:</p>`(last(/NetApp AFF A700 by HTTP/netapp.lun.status.state[{#SVMNAME},{#LUNNAME}],#1)<>last(/NetApp AFF A700 by HTTP/netapp.lun.status.state[{#SVMNAME},{#LUNNAME}],#2) and last(/NetApp AFF A700 by HTTP/netapp.lun.status.state[{#SVMNAME},{#LUNNAME}])="online")` |AVERAGE |<p>Manual close: YES</p> | +|{#LUNNAME}: LUN of the SVM "{#SVMNAME}" has abnormal container state |<p>LUNs are only available when their containers are available.</p> |`(last(/NetApp AFF A700 by HTTP/netapp.lun.status.container_state[{#SVMNAME},{#LUNNAME}],#1)<>last(/NetApp AFF A700 by HTTP/netapp.lun.status.container_state[{#SVMNAME},{#LUNNAME}],#2) and last(/NetApp AFF A700 by HTTP/netapp.lun.status.container_state[{#SVMNAME},{#LUNNAME}])<>"online")`<p>Recovery expression:</p>`(last(/NetApp AFF A700 by HTTP/netapp.lun.status.container_state[{#SVMNAME},{#LUNNAME}],#1)<>last(/NetApp AFF A700 by HTTP/netapp.lun.status.container_state[{#SVMNAME},{#LUNNAME}],#2) and last(/NetApp AFF A700 by HTTP/netapp.lun.status.container_state[{#SVMNAME},{#LUNNAME}])="online")` |AVERAGE |<p>Manual close: YES</p> | +|{#VOLUMENAME}: Volume state is abnormal |<p>A volume can only be brought online if it is offline. Taking a volume offline removes its junction path. The 'mixed' state applies to FlexGroup volumes only and cannot be specified as a target state. An 'error' state implies that the volume is not in a state to serve data.</p> |`(last(/NetApp AFF A700 by HTTP/netapp.volume.state[{#VOLUMENAME}],#1)<>last(/NetApp AFF A700 by HTTP/netapp.volume.state[{#VOLUMENAME}],#2) and last(/NetApp AFF A700 by HTTP/netapp.volume.state[{#VOLUMENAME}])<>"online")`<p>Recovery expression:</p>`(last(/NetApp AFF A700 by HTTP/netapp.volume.state[{#VOLUMENAME}],#1)<>last(/NetApp AFF A700 by HTTP/netapp.volume.state[{#VOLUMENAME}],#2) and last(/NetApp AFF A700 by HTTP/netapp.volume.state[{#VOLUMENAME}])="online")` |AVERAGE |<p>Manual close: YES</p> | ## Feedback diff --git a/templates/san/netapp_aff_a700_http/template_san_netapp_aff_a700_http.yaml b/templates/san/netapp_aff_a700_http/template_san_netapp_aff_a700_http.yaml index 084626950e8..238d6eb14f8 100644 --- a/templates/san/netapp_aff_a700_http/template_san_netapp_aff_a700_http.yaml +++ b/templates/san/netapp_aff_a700_http/template_san_netapp_aff_a700_http.yaml @@ -1,6 +1,6 @@ zabbix_export: version: '5.4' - date: '2021-05-11T08:05:45Z' + date: '2021-12-20T07:06:51Z' groups: - uuid: 7c2cb727f85b492d88cd56e17127c64d @@ -15,7 +15,7 @@ zabbix_export: You can discuss this template or leave feedback on our forum https://www.zabbix.com/forum/zabbix-suggestions-and-feedback/ - Template tooling version used: 0.38 + Template tooling version used: 0.40 groups: - name: Templates/SAN @@ -1215,7 +1215,7 @@ zabbix_export: taken_over - Node has been taken over by its HA partner and is not yet waiting for giveback. waiting_for_giveback - Node has been taken over by its HA partner and is waiting for the HA partner to giveback disks. degraded - Node has one or more critical services offline. - unknown - Node or its HA partner cannot be contacted and there is no information on the node’s state. + unknown - Node or its HA partner cannot be contacted and there is no information on the node's state. preprocessing: - type: JSONPATH @@ -1244,7 +1244,7 @@ zabbix_export: taken_over - Node has been taken over by its HA partner and is not yet waiting for giveback. waiting_for_giveback - Node has been taken over by its HA partner and is waiting for the HA partner to giveback disks. degraded - Node has one or more critical services offline. - unknown - Node or its HA partner cannot be contacted and there is no information on the node’s state. + unknown - Node or its HA partner cannot be contacted and there is no information on the node's state. - uuid: 56e0b6df4dbd456880c2481bec40b41e name: '{#NODENAME}: Uptime' @@ -1638,7 +1638,7 @@ zabbix_export: history: 7d trends: '0' value_type: CHAR - description: 'Volume state. A volume can only be brought online if it is offline. Taking a volume offline removes its junction path. The ‘mixed’ state applies to FlexGroup volumes only and cannot be specified as a target state. An ‘error’ state implies that the volume is not in a state to serve data.' + description: 'Volume state. A volume can only be brought online if it is offline. Taking a volume offline removes its junction path. The ''mixed'' state applies to FlexGroup volumes only and cannot be specified as a target state. An ''error'' state implies that the volume is not in a state to serve data.' preprocessing: - type: JSONPATH @@ -1662,7 +1662,7 @@ zabbix_export: recovery_expression: '(last(/NetApp AFF A700 by HTTP/netapp.volume.state[{#VOLUMENAME}],#1)<>last(/NetApp AFF A700 by HTTP/netapp.volume.state[{#VOLUMENAME}],#2) and last(/NetApp AFF A700 by HTTP/netapp.volume.state[{#VOLUMENAME}])="online")' name: '{#VOLUMENAME}: Volume state is abnormal' priority: AVERAGE - description: 'A volume can only be brought online if it is offline. Taking a volume offline removes its junction path. The ‘mixed’ state applies to FlexGroup volumes only and cannot be specified as a target state. An ‘error’ state implies that the volume is not in a state to serve data.' + description: 'A volume can only be brought online if it is offline. Taking a volume offline removes its junction path. The ''mixed'' state applies to FlexGroup volumes only and cannot be specified as a target state. An ''error'' state implies that the volume is not in a state to serve data.' manual_close: 'YES' - uuid: cb4cfb0ce84f405ebfbf2e4a64c12ca2 @@ -2128,9 +2128,9 @@ zabbix_export: value_type: CHAR description: | Type of the volume. - rw ‐ read-write volume. - dp ‐ data-protection volume. - ls ‐ load-sharing dp volume. + rw - read-write volume. + dp - data-protection volume. + ls - load-sharing dp volume. preprocessing: - type: JSONPATH diff --git a/templates/san/netapp_fas3220_snmp/README.md b/templates/san/netapp_fas3220_snmp/README.md index 01583b9df04..9adf0b12c2c 100644 --- a/templates/san/netapp_fas3220_snmp/README.md +++ b/templates/san/netapp_fas3220_snmp/README.md @@ -12,7 +12,6 @@ The template to monitor SAN NetApp FAS3220 cluster by Zabbix SNMP agent. This template was tested on: - NetApp FAS3220, firmware version: 5.3.0 -- Zabbix, version 5.4 ## Setup @@ -66,15 +65,15 @@ No specific Zabbix configuration is required. |CPU discovery |<p>Discovery of CPU metrics per node</p> |SNMP |fas3220.cpu.discovery | |Cluster metrics discovery |<p>Discovery of Cluster metrics per node</p> |SNMP |fas3220.cluster.discovery | |HA discovery |<p>Discovery of high availability metrics per node</p> |SNMP |fas3220.ha.discovery | -|Filesystems discovery |<p>Filesystems discovery with filter.</p> |SNMP |fas3220.fs.discovery<p>**Filter**:</p>AND <p>- A: {#FSTYPE} MATCHES_REGEX `{$FAS3220.FS.TYPE.MATCHES}`</p><p>- B: {#FSTYPE} NOT_MATCHES_REGEX `{$FAS3220.FS.TYPE.NOT_MATCHES}`</p><p>- C: {#FSNAME} MATCHES_REGEX `{$FAS3220.FS.NAME.MATCHES}`</p><p>- D: {#FSNAME} NOT_MATCHES_REGEX `{$FAS3220.FS.NAME.NOT_MATCHES}`</p> | -|Network ports discovery |<p>Network interfaces discovery with filter.</p> |SNMP |fas3220.net.discovery<p>**Preprocessing**:</p><p>- JAVASCRIPT: `The text is too long. Please see the template.`</p><p>**Filter**:</p>AND <p>- A: {#TYPE} MATCHES_REGEX `{$FAS3220.NET.PORT.TYPE.MATCHES}`</p><p>- B: {#TYPE} NOT_MATCHES_REGEX `{$FAS3220.NET.PORT.TYPE.NOT_MATCHES}`</p><p>- C: {#ROLE} MATCHES_REGEX `{$FAS3220.NET.PORT.ROLE.MATCHES}`</p><p>- D: {#TYPE} NOT_MATCHES_REGEX `{$FAS3220.NET.PORT.ROLE.NOT_MATCHES}`</p><p>- E: {#IFNAME} MATCHES_REGEX `{$FAS3220.NET.PORT.NAME.MATCHES}`</p><p>- F: {#IFNAME} NOT_MATCHES_REGEX `{$FAS3220.NET.PORT.NAME.NOT_MATCHES}`</p> | +|Filesystems discovery |<p>Filesystems discovery with filter.</p> |SNMP |fas3220.fs.discovery<p>**Filter**:</p>AND <p>- {#FSTYPE} MATCHES_REGEX `{$FAS3220.FS.TYPE.MATCHES}`</p><p>- {#FSTYPE} NOT_MATCHES_REGEX `{$FAS3220.FS.TYPE.NOT_MATCHES}`</p><p>- {#FSNAME} MATCHES_REGEX `{$FAS3220.FS.NAME.MATCHES}`</p><p>- {#FSNAME} NOT_MATCHES_REGEX `{$FAS3220.FS.NAME.NOT_MATCHES}`</p><p>**Overrides:**</p><p>Do not discover aggregate metrics<br> - {#FSTYPE} MATCHES_REGEX `3|4`<br> - ITEM_PROTOTYPE LIKE `Saved` - NO_DISCOVER</p> | +|Network ports discovery |<p>Network interfaces discovery with filter.</p> |SNMP |fas3220.net.discovery<p>**Preprocessing**:</p><p>- JAVASCRIPT: `The text is too long. Please see the template.`</p><p>**Filter**:</p>AND <p>- {#TYPE} MATCHES_REGEX `{$FAS3220.NET.PORT.TYPE.MATCHES}`</p><p>- {#TYPE} NOT_MATCHES_REGEX `{$FAS3220.NET.PORT.TYPE.NOT_MATCHES}`</p><p>- {#ROLE} MATCHES_REGEX `{$FAS3220.NET.PORT.ROLE.MATCHES}`</p><p>- {#TYPE} NOT_MATCHES_REGEX `{$FAS3220.NET.PORT.ROLE.NOT_MATCHES}`</p><p>- {#IFNAME} MATCHES_REGEX `{$FAS3220.NET.PORT.NAME.MATCHES}`</p><p>- {#IFNAME} NOT_MATCHES_REGEX `{$FAS3220.NET.PORT.NAME.NOT_MATCHES}`</p> | ## Items collected |Group|Name|Description|Type|Key and additional info| |-----|----|-----------|----|---------------------| |CPU |Node {#NODE.NAME}: CPU utilization |<p>The average, over the last minute, of the percentage of time that this processor was not idle.</p> |SNMP |fas3220.cpu[cDOTCpuBusyTimePerCent, "{#NODE.NAME}"] | -|NetApp FAS3220 |NetApp FAS3220: Product version |<p>Version string for the software running on this platform.</p> |SNMP |fas3220.inventory[productVersion]<p>**Preprocessing**:</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | +|NetApp FAS3220 |NetApp FAS3220: Product version |<p>MIB: NETAPP-MIB</p><p>Version string for the software running on this platform.</p> |SNMP |fas3220.inventory[productVersion]<p>**Preprocessing**:</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | |NetApp FAS3220 |NetApp FAS3220: Product firmware version |<p>Version string for the firmware running on this platform.</p> |SNMP |fas3220.inventory[productFirmwareVersion]<p>**Preprocessing**:</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | |NetApp FAS3220 |NetApp FAS3220: Failed disks count |<p>The number of disks that are currently broken.</p> |SNMP |fas3220.disk[diskFailedCount]<p>**Preprocessing**:</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `10m`</p> | |NetApp FAS3220 |NetApp FAS3220: Failed disks message |<p>If diskFailedCount is non-zero, this is a string describing the failed disk or disks. Each failed disk is described.</p> |SNMP |fas3220.disk[diskFailedMessage]<p>**Preprocessing**:</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | @@ -100,36 +99,36 @@ No specific Zabbix configuration is required. |NetApp FAS3220 |Node {#NODE}: port {#IFNAME} ({#TYPE}): Up by an administrator |<p>Indicates whether the port status is set 'UP' by an administrator.</p> |SNMP |fas3220.net.port[netportUpAdmin, "{#NODE}", "{#IFNAME}"]<p>**Preprocessing**:</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | |NetApp FAS3220 |Node {#NODE}: port {#IFNAME} ({#TYPE}): Role |<p>Role of the port. A port must have one of the following roles: cluster(1), data(2), mgmt(3), intercluster(4), cluster-mgmt(5) or undef(0). The cluster port is used to communicate to other node(s) in the cluster. The data port services clients' requests. It is where all the file requests come in. The management port is used by administrator to manage resources within a node. The intercluster port is used to communicate to other cluster. The cluster-mgmt port is used to manage resources within the cluster. The undef role is for the port that has not yet been assigned a role.</p> |SNMP |fas3220.net.port[netportRole, "{#NODE}", "{#IFNAME}"]<p>**Preprocessing**:</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | |NetApp FAS3220 |Node {#NODE}: port {#IFNAME} ({#TYPE}): Speed |<p>The speed appears on the port. It can be either undef(0), auto(1), ten Mb/s(2), hundred Mb/s(3), one Gb/s(4), or ten Gb/s(5).</p> |SNMP |fas3220.net.port[netportSpeedOper, "{#NODE}", "{#IFNAME}"]<p>**Preprocessing**:</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | -|NetApp FAS3220 |Node {#NODE}: port {#IFNAME} ({#TYPE}): Bits received |<p>The total number of octets received on the interface, including framing characters.</p> |SNMP |fas3220.net.if[if64InOctets, "{#NODE}", "{#IFNAME}"]<p>**Preprocessing**:</p><p>- MULTIPLIER: `8`</p><p>- CHANGE_PER_SECOND | -|NetApp FAS3220 |Node {#NODE}: port {#IFNAME} ({#TYPE}): Bits sent |<p>The total number of octets transmitted out of the interface, including framing characters.</p> |SNMP |fas3220.net.if[if64OutOctets, "{#NODE}", "{#IFNAME}"]<p>**Preprocessing**:</p><p>- MULTIPLIER: `8`</p><p>- CHANGE_PER_SECOND | +|NetApp FAS3220 |Node {#NODE}: port {#IFNAME} ({#TYPE}): Bits received |<p>The total number of octets received on the interface, including framing characters.</p> |SNMP |fas3220.net.if[if64InOctets, "{#NODE}", "{#IFNAME}"]<p>**Preprocessing**:</p><p>- MULTIPLIER: `8`</p><p>- CHANGE_PER_SECOND</p> | +|NetApp FAS3220 |Node {#NODE}: port {#IFNAME} ({#TYPE}): Bits sent |<p>The total number of octets transmitted out of the interface, including framing characters.</p> |SNMP |fas3220.net.if[if64OutOctets, "{#NODE}", "{#IFNAME}"]<p>**Preprocessing**:</p><p>- MULTIPLIER: `8`</p><p>- CHANGE_PER_SECOND</p> | |NetApp FAS3220 |Node {#NODE}: port {#IFNAME} ({#TYPE}): State |<p>The link-state of the port. Normally it is either UP(2) or DOWN(3).</p> |SNMP |fas3220.net.port[netportLinkState, "{#NODE}", "{#IFNAME}"]<p>**Preprocessing**:</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | |NetApp FAS3220 |Node {#NODE}: port {#IFNAME} ({#TYPE}): Health |<p>The health status of the port.</p> |SNMP |fas3220.net.port[netportHealthStatus, "{#NODE}", "{#IFNAME}"]<p>**Preprocessing**:</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | |NetApp FAS3220 |Node {#NODE}: port {#IFNAME} ({#TYPE}): Health degraded reason |<p>The list of reasons why the port is marked as degraded.</p> |SNMP |fas3220.net.port[netportDegradedReason, "{#NODE}", "{#IFNAME}"]<p>**Preprocessing**:</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p> | -|Network_interfaces |Node {#NODE}: port {#IFNAME} ({#TYPE}): Inbound packets with errors |<p>MIB: IF-MIB</p><p>The number of inbound packets that contained errors preventing them from being deliverable to a higher-layer protocol.</p> |SNMP |fas3220.net.if[if64InErrors, "{#NODE}", "{#IFNAME}"]<p>**Preprocessing**:</p><p>- CHANGE_PER_SECOND | -|Network_interfaces |Node {#NODE}: port {#IFNAME} ({#TYPE}): Outbound packets with errors |<p>MIB: IF-MIB</p><p>The number of outbound packets that could not be transmitted because of errors.</p> |SNMP |fas3220.net.if[if64OutErrors, "{#NODE}", "{#IFNAME}"]<p>**Preprocessing**:</p><p>- CHANGE_PER_SECOND | -|Network_interfaces |Node {#NODE}: port {#IFNAME} ({#TYPE}): Inbound packets discarded |<p>MIB: IF-MIB</p><p>The number of inbound packets that were chosen to be discarded even though no errors had been detected to prevent their being deliverable to a higher-layer protocol. One possible reason for discarding such a packet could be to free up buffer space.</p> |SNMP |fas3220.net.if[if64InDiscards, "{#NODE}", "{#IFNAME}"]<p>**Preprocessing**:</p><p>- CHANGE_PER_SECOND | -|Network_interfaces |Node {#NODE}: port {#IFNAME} ({#TYPE}): Outbound packets discarded |<p>MIB: IF-MIB</p><p>The number of outbound packets that were chosen to be discarded even though no errors had been detected to prevent their being transmitted. One possible reason for discarding such a packet could be to free up buffer space.</p> |SNMP |fas3220.net.if[if64OutDiscards, "{#NODE}", "{#IFNAME}"]<p>**Preprocessing**:</p><p>- CHANGE_PER_SECOND | +|Network_interfaces |Node {#NODE}: port {#IFNAME} ({#TYPE}): Inbound packets with errors |<p>MIB: IF-MIB</p><p>The number of inbound packets that contained errors preventing them from being deliverable to a higher-layer protocol.</p> |SNMP |fas3220.net.if[if64InErrors, "{#NODE}", "{#IFNAME}"]<p>**Preprocessing**:</p><p>- CHANGE_PER_SECOND</p> | +|Network_interfaces |Node {#NODE}: port {#IFNAME} ({#TYPE}): Outbound packets with errors |<p>MIB: IF-MIB</p><p>The number of outbound packets that could not be transmitted because of errors.</p> |SNMP |fas3220.net.if[if64OutErrors, "{#NODE}", "{#IFNAME}"]<p>**Preprocessing**:</p><p>- CHANGE_PER_SECOND</p> | +|Network_interfaces |Node {#NODE}: port {#IFNAME} ({#TYPE}): Inbound packets discarded |<p>MIB: IF-MIB</p><p>The number of inbound packets that were chosen to be discarded even though no errors had been detected to prevent their being deliverable to a higher-layer protocol. One possible reason for discarding such a packet could be to free up buffer space.</p> |SNMP |fas3220.net.if[if64InDiscards, "{#NODE}", "{#IFNAME}"]<p>**Preprocessing**:</p><p>- CHANGE_PER_SECOND</p> | +|Network_interfaces |Node {#NODE}: port {#IFNAME} ({#TYPE}): Outbound packets discarded |<p>MIB: IF-MIB</p><p>The number of outbound packets that were chosen to be discarded even though no errors had been detected to prevent their being transmitted. One possible reason for discarding such a packet could be to free up buffer space.</p> |SNMP |fas3220.net.if[if64OutDiscards, "{#NODE}", "{#IFNAME}"]<p>**Preprocessing**:</p><p>- CHANGE_PER_SECOND</p> | ## Triggers |Name|Description|Expression|Severity|Dependencies and additional info| |----|-----------|----|----|----| -|Node {#NODE.NAME}: High CPU utilization (over {$CPU.UTIL.CRIT}% for 5m) |<p>CPU utilization is too high. The system might be slow to respond.</p> |`{TEMPLATE_NAME:fas3220.cpu[cDOTCpuBusyTimePerCent, "{#NODE.NAME}"].min(5m)}>{$CPU.UTIL.CRIT}` |WARNING | | -|NetApp FAS3220: Number of failed disks has changed |<p>{{ITEM.LASTVALUE2}.regsub("(.*)", \1)}</p> |`{TEMPLATE_NAME:fas3220.disk[diskFailedCount].last()}>0 and {NetApp FAS3220 SNMP:fas3220.disk[diskFailedMessage].diff()}=1`<p>Recovery expression:</p>`{TEMPLATE_NAME:fas3220.disk[diskFailedCount].last()}=0` |WARNING | | -|Node {#NODE.NAME}: has been restarted (uptime < 10m) |<p>Uptime is less than 10 minutes</p> |`{TEMPLATE_NAME:fas3220.cluster[nodeUptime, "{#NODE.NAME}"].last()}<10m` |INFO |<p>Manual close: YES</p> | -|Node {#NODE.NAME}: Node can not communicate with the cluster |<p>-</p> |`{TEMPLATE_NAME:fas3220.cluster[nodeHealth, "{#NODE.NAME}"].last()}=0` |HIGH |<p>Manual close: YES</p> | -|Node {#NODE.NAME}: NVRAM battery status is not OK |<p>-</p> |`{TEMPLATE_NAME:fas3220.cluster[nodeNvramBatteryStatus, "{#NODE.NAME}"].last()}<>1` |AVERAGE |<p>Manual close: YES</p> | -|Node {#NODE.NAME}: Temperature is over than recommended |<p>The hardware will shutdown if the temperature exceeds critical thresholds.</p> |`{TEMPLATE_NAME:fas3220.cluster[nodeEnvOverTemperature, "{#NODE.NAME}"].last()}=2` |HIGH | | -|Node {#NODE.NAME}: Failed FAN count is over than zero |<p>{{ITEM.VALUE2}.regsub("(.*)", \1)}</p> |`{TEMPLATE_NAME:fas3220.cluster[nodeEnvFailedFanCount, "{#NODE.NAME}"].last()}>0 and {NetApp FAS3220 SNMP:fas3220.cluster[nodeEnvFailedFanMessage, "{#NODE.NAME}"].last()}={NetApp FAS3220 SNMP:fas3220.cluster[nodeEnvFailedFanMessage, "{#NODE.NAME}"].last()}` |HIGH | | -|Node {#NODE.NAME}: Degraded power supplies count is more than zero |<p>{{ITEM.VALUE2}.regsub("(.*)", \1)}</p> |`{TEMPLATE_NAME:fas3220.cluster[nodeEnvFailedPowerSupplyCount, "{#NODE.NAME}"].last()}>0 and {NetApp FAS3220 SNMP:fas3220.cluster[nodeEnvFailedPowerSupplyMessage, "{#NODE.NAME}"].last()}={NetApp FAS3220 SNMP:fas3220.cluster[nodeEnvFailedPowerSupplyMessage, "{#NODE.NAME}"].last()}` |AVERAGE | | -|Node {#NODE.NAME}: Node cannot takeover it's HA partner {#PARTNER.NAME}. Reason: {ITEM.VALUE} |<p>Possible reasons:</p><p> unknownReason(2),</p><p> disabledByOperator(3),</p><p> interconnectOffline(4),</p><p> disabledByPartner(5),</p><p> takeoverFailed(6),</p><p> mailboxIsInDegradedState(7),</p><p> partnermailboxIsInUninitialisedState(8),</p><p> mailboxVersionMismatch(9),</p><p> nvramSizeMismatch(10),</p><p> kernelVersionMismatch(11),</p><p> partnerIsInBootingStage(12),</p><p> diskshelfIsTooHot(13),</p><p> partnerIsPerformingRevert(14),</p><p> nodeIsPerformingRevert(15),</p><p> sametimePartnerIsAlsoTryingToTakeUsOver(16),</p><p> alreadyInTakenoverMode(17),</p><p> nvramLogUnsynchronized(18),</p><p> stateofBackupMailboxIsDoubtful(19).</p> |`{TEMPLATE_NAME:fas3220.ha[haCannotTakeoverCause, "{#NODE.NAME}"].last()}<>1` |HIGH | | -|Node {#NODE.NAME}: Node has been taken over |<p>The thisNodeDead(5) setting indicates that this node has been takenover.</p> |`{TEMPLATE_NAME:fas3220.ha[haSettings, "{#NODE.NAME}"].last()}=5` |HIGH | | -|Node {#NODE.NAME}: HA is not licensed |<p>The value notConfigured(1) indicates that the HA is not licensed.</p> |`{TEMPLATE_NAME:fas3220.ha[haSettings, "{#NODE.NAME}"].last()}=1` |AVERAGE | | -|{#VSERVER}{#FSNAME}: Disk space is too low (below {$FAS3220.FS.AVAIL.MIN.CRIT:"{#FSNAME}"} for {$FAS3220.FS.TIME:"{#FSNAME}"}) |<p>-</p> |`{TEMPLATE_NAME:fas3220.fs[df64AvailKBytes, "{#VSERVER}{#FSNAME}"].min({$FAS3220.FS.TIME:"{#FSNAME}"})}<{$FAS3220.FS.AVAIL.MIN.CRIT:"{#FSNAME}"} and {$FAS3220.FS.USE.PCT:"{#FSNAME}"}=0` |HIGH | | -|{#VSERVER}{#FSNAME}: Disk space is too low (used over {$FAS3220.FS.PUSED.MAX.CRIT:"{#FSNAME}"}% for {$FAS3220.FS.TIME:"{#FSNAME}"}) |<p>-</p> |`{TEMPLATE_NAME:fas3220.fs[dfPerCentKBytesCapacity, "{#VSERVER}{#FSNAME}"].max({$FAS3220.FS.TIME:"{#FSNAME}"})}>{$FAS3220.FS.PUSED.MAX.CRIT:"{#FSNAME}"} and {$FAS3220.FS.USE.PCT:"{#FSNAME}"}=1` |HIGH | | -|Node {#NODE}: port {#IFNAME} ({#TYPE}): Link down |<p>Link state is not UP and the port status is set 'UP' by an administrator.</p> |`{TEMPLATE_NAME:fas3220.net.port[netportLinkState, "{#NODE}", "{#IFNAME}"].last()}<>2 and {NetApp FAS3220 SNMP:fas3220.net.port[netportUpAdmin, "{#NODE}", "{#IFNAME}"].last()}=1` |AVERAGE |<p>Manual close: YES</p> | -|Node {#NODE}: port {#IFNAME} ({#TYPE}): Port is not healthy |<p>{{ITEM.LASTVALUE2}.regsub("(.*)", \1)}</p> |`{TEMPLATE_NAME:fas3220.net.port[netportHealthStatus, "{#NODE}", "{#IFNAME}"].last()}<>0 and {NetApp FAS3220 SNMP:fas3220.net.port[netportDegradedReason, "{#NODE}", "{#IFNAME}"].strlen()}>0` |INFO | | -|Node {#NODE}: port {#IFNAME} ({#TYPE}): High error rate (>{$IF.ERRORS.WARN:"{#IFNAME}"} for 5m) |<p>Recovers when below 80% of {$IF.ERRORS.WARN:"{#IFNAME}"} threshold</p> |`{TEMPLATE_NAME:fas3220.net.if[if64InErrors, "{#NODE}", "{#IFNAME}"].min(5m)}>{$IF.ERRORS.WARN:"{#IFNAME}"} or {NetApp FAS3220 SNMP:fas3220.net.if[if64OutErrors, "{#NODE}", "{#IFNAME}"].min(5m)}>{$IF.ERRORS.WARN:"{#IFNAME}"}`<p>Recovery expression:</p>`{TEMPLATE_NAME:fas3220.net.if[if64InErrors, "{#NODE}", "{#IFNAME}"].max(5m)}<{$IF.ERRORS.WARN:"{#IFNAME}"}*0.8 and {NetApp FAS3220 SNMP:fas3220.net.if[if64OutErrors, "{#NODE}", "{#IFNAME}"].max(5m)}<{$IF.ERRORS.WARN:"{#IFNAME}"}*0.8` |WARNING |<p>Manual close: YES</p> | +|Node {#NODE.NAME}: High CPU utilization (over {$CPU.UTIL.CRIT}% for 5m) |<p>CPU utilization is too high. The system might be slow to respond.</p> |`min(/NetApp FAS3220 SNMP/fas3220.cpu[cDOTCpuBusyTimePerCent, "{#NODE.NAME}"],5m)>{$CPU.UTIL.CRIT}` |WARNING | | +|NetApp FAS3220: Number of failed disks has changed |<p>{{ITEM.LASTVALUE2}.regsub("(.*)", \1)}</p> |`last(/NetApp FAS3220 SNMP/fas3220.disk[diskFailedCount])>0 and last(/NetApp FAS3220 SNMP/fas3220.disk[diskFailedMessage],#1)<>last(/NetApp FAS3220 SNMP/fas3220.disk[diskFailedMessage],#2)`<p>Recovery expression:</p>`last(/NetApp FAS3220 SNMP/fas3220.disk[diskFailedCount])=0` |WARNING | | +|Node {#NODE.NAME}: has been restarted (uptime < 10m) |<p>Uptime is less than 10 minutes</p> |`last(/NetApp FAS3220 SNMP/fas3220.cluster[nodeUptime, "{#NODE.NAME}"])<10m` |INFO |<p>Manual close: YES</p> | +|Node {#NODE.NAME}: Node can not communicate with the cluster |<p>-</p> |`last(/NetApp FAS3220 SNMP/fas3220.cluster[nodeHealth, "{#NODE.NAME}"])=0` |HIGH |<p>Manual close: YES</p> | +|Node {#NODE.NAME}: NVRAM battery status is not OK |<p>-</p> |`last(/NetApp FAS3220 SNMP/fas3220.cluster[nodeNvramBatteryStatus, "{#NODE.NAME}"])<>1` |AVERAGE |<p>Manual close: YES</p> | +|Node {#NODE.NAME}: Temperature is over than recommended |<p>The hardware will shutdown if the temperature exceeds critical thresholds.</p> |`last(/NetApp FAS3220 SNMP/fas3220.cluster[nodeEnvOverTemperature, "{#NODE.NAME}"])=2` |HIGH | | +|Node {#NODE.NAME}: Failed FAN count is over than zero |<p>{{ITEM.VALUE2}.regsub("(.*)", \1)}</p> |`last(/NetApp FAS3220 SNMP/fas3220.cluster[nodeEnvFailedFanCount, "{#NODE.NAME}"])>0 and last(/NetApp FAS3220 SNMP/fas3220.cluster[nodeEnvFailedFanMessage, "{#NODE.NAME}"])=last(/NetApp FAS3220 SNMP/fas3220.cluster[nodeEnvFailedFanMessage, "{#NODE.NAME}"])` |HIGH | | +|Node {#NODE.NAME}: Degraded power supplies count is more than zero |<p>{{ITEM.VALUE2}.regsub("(.*)", \1)}</p> |`last(/NetApp FAS3220 SNMP/fas3220.cluster[nodeEnvFailedPowerSupplyCount, "{#NODE.NAME}"])>0 and last(/NetApp FAS3220 SNMP/fas3220.cluster[nodeEnvFailedPowerSupplyMessage, "{#NODE.NAME}"])=last(/NetApp FAS3220 SNMP/fas3220.cluster[nodeEnvFailedPowerSupplyMessage, "{#NODE.NAME}"])` |AVERAGE | | +|Node {#NODE.NAME}: Node cannot takeover it's HA partner {#PARTNER.NAME}. Reason: {ITEM.VALUE} |<p>Possible reasons:</p><p> unknownReason(2),</p><p> disabledByOperator(3),</p><p> interconnectOffline(4),</p><p> disabledByPartner(5),</p><p> takeoverFailed(6),</p><p> mailboxIsInDegradedState(7),</p><p> partnermailboxIsInUninitialisedState(8),</p><p> mailboxVersionMismatch(9),</p><p> nvramSizeMismatch(10),</p><p> kernelVersionMismatch(11),</p><p> partnerIsInBootingStage(12),</p><p> diskshelfIsTooHot(13),</p><p> partnerIsPerformingRevert(14),</p><p> nodeIsPerformingRevert(15),</p><p> sametimePartnerIsAlsoTryingToTakeUsOver(16),</p><p> alreadyInTakenoverMode(17),</p><p> nvramLogUnsynchronized(18),</p><p> stateofBackupMailboxIsDoubtful(19).</p> |`last(/NetApp FAS3220 SNMP/fas3220.ha[haCannotTakeoverCause, "{#NODE.NAME}"])<>1` |HIGH | | +|Node {#NODE.NAME}: Node has been taken over |<p>The thisNodeDead(5) setting indicates that this node has been takenover.</p> |`last(/NetApp FAS3220 SNMP/fas3220.ha[haSettings, "{#NODE.NAME}"])=5` |HIGH | | +|Node {#NODE.NAME}: HA is not licensed |<p>The value notConfigured(1) indicates that the HA is not licensed.</p> |`last(/NetApp FAS3220 SNMP/fas3220.ha[haSettings, "{#NODE.NAME}"])=1` |AVERAGE | | +|{#VSERVER}{#FSNAME}: Disk space is too low (below {$FAS3220.FS.AVAIL.MIN.CRIT:"{#FSNAME}"} for {$FAS3220.FS.TIME:"{#FSNAME}"}) |<p>-</p> |`min(/NetApp FAS3220 SNMP/fas3220.fs[df64AvailKBytes, "{#VSERVER}{#FSNAME}"],{$FAS3220.FS.TIME:"{#FSNAME}"})<{$FAS3220.FS.AVAIL.MIN.CRIT:"{#FSNAME}"} and {$FAS3220.FS.USE.PCT:"{#FSNAME}"}=0` |HIGH | | +|{#VSERVER}{#FSNAME}: Disk space is too low (used over {$FAS3220.FS.PUSED.MAX.CRIT:"{#FSNAME}"}% for {$FAS3220.FS.TIME:"{#FSNAME}"}) |<p>-</p> |`max(/NetApp FAS3220 SNMP/fas3220.fs[dfPerCentKBytesCapacity, "{#VSERVER}{#FSNAME}"],{$FAS3220.FS.TIME:"{#FSNAME}"})>{$FAS3220.FS.PUSED.MAX.CRIT:"{#FSNAME}"} and {$FAS3220.FS.USE.PCT:"{#FSNAME}"}=1` |HIGH | | +|Node {#NODE}: port {#IFNAME} ({#TYPE}): Link down |<p>Link state is not UP and the port status is set 'UP' by an administrator.</p> |`last(/NetApp FAS3220 SNMP/fas3220.net.port[netportLinkState, "{#NODE}", "{#IFNAME}"])<>2 and last(/NetApp FAS3220 SNMP/fas3220.net.port[netportUpAdmin, "{#NODE}", "{#IFNAME}"])=1` |AVERAGE |<p>Manual close: YES</p> | +|Node {#NODE}: port {#IFNAME} ({#TYPE}): Port is not healthy |<p>{{ITEM.LASTVALUE2}.regsub("(.*)", \1)}</p> |`last(/NetApp FAS3220 SNMP/fas3220.net.port[netportHealthStatus, "{#NODE}", "{#IFNAME}"])<>0 and length(last(/NetApp FAS3220 SNMP/fas3220.net.port[netportDegradedReason, "{#NODE}", "{#IFNAME}"]))>0` |INFO | | +|Node {#NODE}: port {#IFNAME} ({#TYPE}): High error rate (>{$IF.ERRORS.WARN:"{#IFNAME}"} for 5m) |<p>Recovers when below 80% of {$IF.ERRORS.WARN:"{#IFNAME}"} threshold</p> |`min(/NetApp FAS3220 SNMP/fas3220.net.if[if64InErrors, "{#NODE}", "{#IFNAME}"],5m)>{$IF.ERRORS.WARN:"{#IFNAME}"} or min(/NetApp FAS3220 SNMP/fas3220.net.if[if64OutErrors, "{#NODE}", "{#IFNAME}"],5m)>{$IF.ERRORS.WARN:"{#IFNAME}"} `<p>Recovery expression:</p>`max(/NetApp FAS3220 SNMP/fas3220.net.if[if64InErrors, "{#NODE}", "{#IFNAME}"],5m)<{$IF.ERRORS.WARN:"{#IFNAME}"}*0.8 and max(/NetApp FAS3220 SNMP/fas3220.net.if[if64OutErrors, "{#NODE}", "{#IFNAME}"],5m)<{$IF.ERRORS.WARN:"{#IFNAME}"}*0.8 ` |WARNING |<p>Manual close: YES</p> | ## Feedback diff --git a/templates/san/netapp_fas3220_snmp/template_san_netapp_fas3220_snmp.yaml b/templates/san/netapp_fas3220_snmp/template_san_netapp_fas3220_snmp.yaml index edb682c5323..58f80835e30 100644 --- a/templates/san/netapp_fas3220_snmp/template_san_netapp_fas3220_snmp.yaml +++ b/templates/san/netapp_fas3220_snmp/template_san_netapp_fas3220_snmp.yaml @@ -1,6 +1,6 @@ zabbix_export: version: '5.4' - date: '2021-06-30T13:54:35Z' + date: '2021-12-20T07:06:52Z' groups: - uuid: 7c2cb727f85b492d88cd56e17127c64d @@ -15,10 +15,11 @@ zabbix_export: MIBs used: NETAPP-MIB + IF-MIB You can discuss this template or leave feedback on our forum https://www.zabbix.com/forum/zabbix-suggestions-and-feedback/416694-discussion-thread-for-official-zabbix-template-netapp-fas3220 - Template tooling version used: 0.38 + Template tooling version used: 0.40 templates: - name: 'Generic SNMP' @@ -90,7 +91,9 @@ zabbix_export: history: 7d trends: '0' value_type: CHAR - description: 'Version string for the software running on this platform.' + description: | + MIB: NETAPP-MIB + Version string for the software running on this platform. preprocessing: - type: DISCARD_UNCHANGED_HEARTBEAT @@ -1084,7 +1087,7 @@ zabbix_export: elem["{#TYPE}"] = 'undef'; break; }; - + out.push(elem); } }); |