# NetApp AFF A700 by HTTP ## Overview The template to monitor SAN NetApp AFF A700 cluster by Zabbix HTTP agent. ## Requirements Zabbix version: 7.0 and higher. ## Tested versions This template has been tested on: - NetApp AFF A700 9.7 ## Configuration > Zabbix should be configured according to the instructions in the [Templates out of the box](https://www.zabbix.com/documentation/7.0/manual/config/templates_out_of_the_box) section. ## Setup 1\. Create a host for AFF A700 with cluster management IP as the Zabbix agent interface. 2\. Link the template to the host. 3\. Customize macro values if needed. ### Macros used |Name|Description|Default| |----|-----------|-------| |{$URL}|
AFF700 cluster URL address.
|| |{$USERNAME}|AFF700 user name.
|| |{$PASSWORD}|AFF700 user password.
|| |{$HTTP.AGENT.TIMEOUT}|The HTTP agent timeout to wait for a response from AFF700.
|`3s`| ### Items |Name|Description|Type|Key and additional info| |----|-----------|----|-----------------------| |NetApp AFF A700: Get cluster||HTTP agent|netapp.cluster.get| |NetApp AFF A700: Get nodes||HTTP agent|netapp.nodes.get| |NetApp AFF A700: Get disks||HTTP agent|netapp.disks.get| |NetApp AFF A700: Get volumes||HTTP agent|netapp.volumes.get| |NetApp AFF A700: Get ethernet ports||HTTP agent|netapp.ports.eth.get| |NetApp AFF A700: Get FC ports||HTTP agent|netapp.ports.fc.get| |NetApp AFF A700: Get SVMs||HTTP agent|netapp.svms.get| |NetApp AFF A700: Get LUNs||HTTP agent|netapp.luns.get| |NetApp AFF A700: Get chassis||HTTP agent|netapp.chassis.get| |NetApp AFF A700: Get FRUs||HTTP agent|netapp.frus.get**Preprocessing**
JavaScript: `The text is too long. Please see the template.`
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.
|Dependent item|netapp.cluster.version**Preprocessing**
JSON Path: `$.version.full`
Discard unchanged with heartbeat: `6h`
The name of the cluster.
|Dependent item|netapp.cluster.name**Preprocessing**
JSON Path: `$.name`
Discard unchanged with heartbeat: `6h`
The location of the cluster.
|Dependent item|netapp.cluster.location**Preprocessing**
JSON Path: `$.location`
Discard unchanged with heartbeat: `6h`
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.
|Dependent item|netapp.cluster.status**Preprocessing**
JSON Path: `$.statistics.status`
Discard unchanged with heartbeat: `6h`
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.
|Dependent item|netapp.cluster.statistics.throughput.other.rate**Preprocessing**
JSON Path: `$.statistics.throughput_raw.other`
Throughput bytes observed at the storage object. Performance metric for read I/O operations.
|Dependent item|netapp.cluster.statistics.throughput.read.rate**Preprocessing**
JSON Path: `$.statistics.throughput_raw.read`
Throughput bytes observed at the storage object. Performance metric for write I/O operations.
|Dependent item|netapp.cluster.statistics.throughput.write.rate**Preprocessing**
JSON Path: `$.statistics.throughput_raw.write`
Throughput bytes observed at the storage object. Performance metric aggregated over all types of I/O operations.
|Dependent item|netapp.cluster.statistics.throughput.total.rate**Preprocessing**
JSON Path: `$.statistics.throughput_raw.total`
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.
|Dependent item|netapp.cluster.statistics.iops.other.rate**Preprocessing**
JSON Path: `$.statistics.iops_raw.other`
The number of I/O operations observed at the storage object. Performance metric for read I/O operations.
|Dependent item|netapp.cluster.statistics.iops.read.rate**Preprocessing**
JSON Path: `$.statistics.iops_raw.read`
The number of I/O operations observed at the storage object. Performance metric for write I/O operations.
|Dependent item|netapp.cluster.statistics.iops.write.rate**Preprocessing**
JSON Path: `$.statistics.iops_raw.write`
The number of I/O operations observed at the storage object. Performance metric aggregated over all types of I/O operations.
|Dependent item|netapp.cluster.statistics.iops.total.rate**Preprocessing**
JSON Path: `$.statistics.iops_raw.total`
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.
|Calculated|netapp.cluster.statistics.latency.other| |NetApp AFF A700: Cluster latency, read|The average latency per I/O operation in milliseconds observed at the storage object. Performance metric for read I/O operations.
|Calculated|netapp.cluster.statistics.latency.read| |NetApp AFF A700: Cluster latency, write|The average latency per I/O operation in milliseconds observed at the storage object. Performance metric for write I/O operations.
|Calculated|netapp.cluster.statistics.latency.write| |NetApp AFF A700: Cluster latency, total|The average latency per I/O operation in milliseconds observed at the storage object. Performance metric aggregated over all types of I/O operations.
|Calculated|netapp.cluster.statistics.latency.total| |NetApp AFF A700: Cluster latency raw, other|The raw latency in microseconds observed at the storage object. This can be divided by the raw IOPS value to calculate the average latency per I/O operation. Performance metric for other I/O operations. Other I/O operations can be metadata operations, such as directory lookups and so on.
|Dependent item|netapp.cluster.statistics.latency_raw.other**Preprocessing**
JSON Path: `$.statistics.latency_raw.other`
The raw latency in microseconds observed at the storage object. This can be divided by the raw IOPS value to calculate the average latency per I/O operation. Performance metric for read I/O operations.
|Dependent item|netapp.cluster.statistics.latency_raw.read**Preprocessing**
JSON Path: `$.statistics.latency_raw.read`
The raw latency in microseconds observed at the storage object. This can be divided by the raw IOPS value to calculate the average latency per I/O operation. Performance metric for write I/O operations.
|Dependent item|netapp.cluster.statistics.latency_raw.write**Preprocessing**
JSON Path: `$.statistics.latency_raw.write`
The raw latency in microseconds observed at the storage object. This can be divided by the raw IOPS value to calculate the average latency per I/O operation. Performance metric aggregated over all types of I/O operations.
|Dependent item|netapp.cluster.statistics.latency_raw.total**Preprocessing**
JSON Path: `$.statistics.latency_raw.total`
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.
|Dependent item|netapp.cluster.statistics.iops_raw.other**Preprocessing**
JSON Path: `$.statistics.iops_raw.other`
The number of I/O operations observed at the storage object. Performance metric for read I/O operations.
|Dependent item|netapp.cluster.statistics.iops_raw.read**Preprocessing**
JSON Path: `$.statistics.iops_raw.read`
The number of I/O operations observed at the storage object. Performance metric for write I/O operations.
|Dependent item|netapp.cluster.statistics.iops_raw.write**Preprocessing**
JSON Path: `$.statistics.iops_raw.write`
The number of I/O operations observed at the storage object. Performance metric aggregated over all types of I/O operations.
|Dependent item|netapp.cluster.statistics.iops_raw.total**Preprocessing**
JSON Path: `$.statistics.iops_raw.total`
The NetApp AFF A700 version has changed. Acknowledge to close the problem manually.
|`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|**Manual close**: Yes| |NetApp AFF A700: Cluster status is abnormal|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.
|`(last(/NetApp AFF A700 by HTTP/netapp.cluster.status)<>"ok")`|Average|| ### LLD rule Nodes discovery |Name|Description|Type|Key and additional info| |----|-----------|----|-----------------------| |Nodes discovery||HTTP agent|netapp.nodes.discovery**Preprocessing**
JavaScript: `The text is too long. Please see the template.`
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.
|Dependent item|netapp.node.version[{#NODENAME}]**Preprocessing**
JSON Path: `$.records[?(@.name=='{#NODENAME}')].version.full.first()`
Discard unchanged with heartbeat: `6h`
The location of the node.
|Dependent item|netapp.nodes.location[{#NODENAME}]**Preprocessing**
JSON Path: `$.records[?(@.name=='{#NODENAME}')].location.first()`
Discard unchanged with heartbeat: `6h`
State of the node:
up - Node is up and operational.
booting - Node is booting up.
down - Node has stopped or is dumping core.
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.
|Dependent item|netapp.nodes.state[{#NODENAME}]**Preprocessing**
JSON Path: `$.records[?(@.name=='{#NODENAME}')].state.first()`
Discard unchanged with heartbeat: `6h`
Possible values:
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.
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.
member - Nodes that are members have successfully joined the cluster.
|Dependent item|netapp.nodes.membership[{#NODENAME}]**Preprocessing**
JSON Path: `$.records[?(@.name=='{#NODENAME}')].membership.first()`
Discard unchanged with heartbeat: `6h`
The total time, in seconds, that the node has been up.
|Dependent item|netapp.nodes.uptime[{#NODENAME}]**Preprocessing**
JSON Path: `$.records[?(@.name=='{#NODENAME}')].uptime.first()`
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
|Dependent item|netapp.nodes.controller.over_temperature[{#NODENAME}]**Preprocessing**
JSON Path: `The text is too long. Please see the template.`
Discard unchanged with heartbeat: `6h`
{#NODENAME} version has changed. Acknowledge to close the problem manually.
|`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|**Manual close**: Yes| |{#NODENAME}: Node state is abnormal|The state of the node is different from up:
booting - Node is booting up.
down - Node has stopped or is dumping core.
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.
Uptime is less than 10 minutes.
|`last(/NetApp AFF A700 by HTTP/netapp.nodes.uptime[{#NODENAME}])<10m`|Info|**Manual close**: Yes| |{#NODENAME}: Node has over temperature|The hardware shuts down if the temperature exceeds critical thresholds(item's value is "over").
|`(last(/NetApp AFF A700 by HTTP/netapp.nodes.controller.over_temperature[{#NODENAME}])<>"normal")`|Average|| ### LLD rule Ethernet ports discovery |Name|Description|Type|Key and additional info| |----|-----------|----|-----------------------| |Ethernet ports discovery||HTTP agent|netapp.ports.ether.discovery**Preprocessing**
JavaScript: `The text is too long. Please see the template.`
The operational state of the port. Possible values: up, down.
|Dependent item|netapp.port.eth.state[{#NODENAME},{#ETHPORTNAME}]**Preprocessing**
JSON Path: `$.records[?(@.name=='{#ETHPORTNAME}')].state.first()`
Discard unchanged with heartbeat: `6h`
Something is wrong with the ethernet port.
|`(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")`|Average|**Manual close**: Yes| ### LLD rule FC ports discovery |Name|Description|Type|Key and additional info| |----|-----------|----|-----------------------| |FC ports discovery||HTTP agent|netapp.ports.fc.discovery**Preprocessing**
JavaScript: `The text is too long. Please see the template.`
A description of the FC port.
|Dependent item|netapp.port.fc.description[{#NODENAME},{#FCPORTNAME}]**Preprocessing**
JSON Path: `$.records[?(@.name=='{#FCPORTNAME}')].description.first()`
Discard unchanged with heartbeat: `6h`
The operational state of the FC port. Possible values:
startup - The port is booting up.
link_not_connected - The port has finished initialization, but a link with the fabric is not established.
online - The port is initialized and a link with the fabric has been established.
link_disconnected - The link was present at one point on this port but is currently not established.
offlined_by_user - The port is administratively disabled.
offlined_by_system - The port is set to offline by the system. This happens when the port encounters too many errors.
node_offline - The state information for the port cannot be retrieved. The node is offline or inaccessible.
|Dependent item|netapp.port.fc.state[{#NODENAME},{#FCPORTNAME}]**Preprocessing**
JSON Path: `$.records[?(@.name=='{#FCPORTNAME}')].state.first()`
Discard unchanged with heartbeat: `6h`
Something is wrong with the FC port.
|`(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|**Manual close**: Yes| ### LLD rule Disks discovery |Name|Description|Type|Key and additional info| |----|-----------|----|-----------------------| |Disks discovery||HTTP agent|netapp.disks.discovery**Preprocessing**
JavaScript: `The text is too long. Please see the template.`
The state of the disk. Possible values: broken, copy, maintenance, partner, pending, present, reconstructing, removed, spare, unfail, zeroing
|Dependent item|netapp.disk.state[{#NODENAME},{#DISKNAME}]**Preprocessing**
JSON Path: `The text is too long. Please see the template.`
Discard unchanged with heartbeat: `6h`
Something is wrong with the disk.
|`(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|**Manual close**: Yes| ### LLD rule Chassis discovery |Name|Description|Type|Key and additional info| |----|-----------|----|-----------------------| |Chassis discovery||HTTP agent|netapp.chassis.discovery**Preprocessing**
JavaScript: `The text is too long. Please see the template.`
The chassis state: ok, error.
|Dependent item|netapp.chassis.state[{#ID}]**Preprocessing**
JSON Path: `$.records[?(@.id=='{#ID}')].state.first()`
Discard unchanged with heartbeat: `6h`
Something is wrong with the chassis.
|`(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")`|Average|**Manual close**: Yes| ### LLD rule FRUs discovery |Name|Description|Type|Key and additional info| |----|-----------|----|-----------------------| |FRUs discovery||Dependent item|netapp.frus.discovery**Preprocessing**
JavaScript: `The text is too long. Please see the template.`
Discard unchanged with heartbeat: `6h`
The FRU state: ok, error.
|Dependent item|netapp.chassis.fru.state[{#CHASSISID},{#FRUID}]**Preprocessing**
JSON Path: `The text is too long. Please see the template.`
Discard unchanged with heartbeat: `6h`
Something is wrong with the FRU.
|`(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")`|Average|**Manual close**: Yes| ### LLD rule SVMs discovery |Name|Description|Type|Key and additional info| |----|-----------|----|-----------------------| |SVMs discovery||HTTP agent|netapp.svms.discovery**Preprocessing**
JavaScript: `The text is too long. Please see the template.`
SVM state: starting, running, stopping, stopped, deleting.
|Dependent item|netapp.svm.state[{#SVMNAME}]**Preprocessing**
JSON Path: `$.records[?(@.name=='{#SVMNAME}')].state.first()`
Discard unchanged with heartbeat: `6h`
The comment for the SVM.
|Dependent item|netapp.svm.comment[{#SVMNAME}]**Preprocessing**
JSON Path: `$.records[?(@.name=='{#SVMNAME}')].comment.first()`
Discard unchanged with heartbeat: `6h`
Something is wrong with the SVM.
|`(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|**Manual close**: Yes| ### LLD rule LUNs discovery |Name|Description|Type|Key and additional info| |----|-----------|----|-----------------------| |LUNs discovery||HTTP agent|netapp.luns.discovery**Preprocessing**
JavaScript: `The text is too long. Please see the template.`
The state of the LUN. Normal states for a LUN are online and offline. Other states indicate errors. Possible values: foreign_lun_error, nvfail, offline, online, space_error.
|Dependent item|netapp.lun.status.state[{#SVMNAME},{#LUNNAME}]**Preprocessing**
JSON Path: `The text is too long. Please see the template.`
Discard unchanged with heartbeat: `6h`
The state of the volume and aggregate that contain the LUN: online, aggregate_offline, volume_offline. LUNs are only available when their containers are available.
|Dependent item|netapp.lun.status.container_state[{#SVMNAME},{#LUNNAME}]**Preprocessing**
JSON Path: `The text is too long. Please see the template.`
Discard unchanged with heartbeat: `6h`
The total provisioned size of the LUN.
|Dependent item|netapp.lun.space.size[{#SVMNAME},{#LUNNAME}]**Preprocessing**
JSON Path: `The text is too long. Please see the template.`
Discard unchanged with heartbeat: `6h`
The amount of space consumed by the main data stream of the LUN.
|Dependent item|netapp.lun.space.used[{#SVMNAME},{#LUNNAME}]**Preprocessing**
JSON Path: `The text is too long. Please see the template.`
Discard unchanged with heartbeat: `6h`
Normal states for a LUN are online and offline. Other states indicate errors.
|`(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|**Manual close**: Yes| |{#LUNNAME}: LUN of the SVM "{#SVMNAME}" has abnormal container state|LUNs are only available when their containers are available.
|`(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|**Manual close**: Yes| ### LLD rule Volumes discovery |Name|Description|Type|Key and additional info| |----|-----------|----|-----------------------| |Volumes discovery||HTTP agent|netapp.volumes.discovery**Preprocessing**
JavaScript: `The text is too long. Please see the template.`
A comment for the volume.
|Dependent item|netapp.volume.comment[{#VOLUMENAME}]**Preprocessing**
JSON Path: `$.records[?(@.name=='{#VOLUMENAME}')].comment.first()`
Discard unchanged with heartbeat: `6h`
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.
|Dependent item|netapp.volume.state[{#VOLUMENAME}]**Preprocessing**
JSON Path: `$.records[?(@.name=='{#VOLUMENAME}')].state.first()`
Discard unchanged with heartbeat: `6h`
Type of the volume.
rw - read-write volume.
dp - data-protection volume.
ls - load-sharing dp volume.
|Dependent item|netapp.volume.type[{#VOLUMENAME}]**Preprocessing**
JSON Path: `$.records[?(@.name=='{#VOLUMENAME}')].type.first()`
Discard unchanged with heartbeat: `6h`
The volume belongs this SVM.
|Dependent item|netapp.volume.svm_name[{#VOLUMENAME}]**Preprocessing**
JSON Path: `$.records[?(@.name=='{#VOLUMENAME}')].svm.name.first()`
Discard unchanged with heartbeat: `6h`
Total provisioned size. The default size is equal to the minimum size of 20MB, in bytes.
|Dependent item|netapp.volume.space_size[{#VOLUMENAME}]**Preprocessing**
JSON Path: `$.records[?(@.name=='{#VOLUMENAME}')].space.size.first()`
Discard unchanged with heartbeat: `6h`
The available space, in bytes.
|Dependent item|netapp.volume.space_available[{#VOLUMENAME}]**Preprocessing**
JSON Path: `The text is too long. Please see the template.`
Discard unchanged with heartbeat: `6h`
The virtual space used (includes volume reserves) before storage efficiency, in bytes.
|Dependent item|netapp.volume.space_used[{#VOLUMENAME}]**Preprocessing**
JSON Path: `$.records[?(@.name=='{#VOLUMENAME}')].space.used.first()`
Discard unchanged with heartbeat: `6h`
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.
|Dependent item|netapp.volume.statistics.throughput.other.rate[{#VOLUMENAME}]**Preprocessing**
JSON Path: `The text is too long. Please see the template.`
Throughput bytes observed at the storage object. Performance metric for read I/O operations.
|Dependent item|netapp.volume.statistics.throughput.read.rate[{#VOLUMENAME}]**Preprocessing**
JSON Path: `The text is too long. Please see the template.`
Throughput bytes observed at the storage object. Performance metric for write I/O operations.
|Dependent item|netapp.volume.statistics.throughput.write.rate[{#VOLUMENAME}]**Preprocessing**
JSON Path: `The text is too long. Please see the template.`
Throughput bytes observed at the storage object. Performance metric aggregated over all types of I/O operations.
|Dependent item|netapp.volume.statistics.throughput.total.rate[{#VOLUMENAME}]**Preprocessing**
JSON Path: `The text is too long. Please see the template.`
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.
|Dependent item|netapp.volume.statistics.iops.other.rate[{#VOLUMENAME}]**Preprocessing**
JSON Path: `The text is too long. Please see the template.`
The number of I/O operations observed at the storage object. Performance metric for read I/O operations.
|Dependent item|netapp.volume.statistics.iops.read.rate[{#VOLUMENAME}]**Preprocessing**
JSON Path: `The text is too long. Please see the template.`
The number of I/O operations observed at the storage object. Performance metric for write I/O operations.
|Dependent item|netapp.volume.statistics.iops.write.rate[{#VOLUMENAME}]**Preprocessing**
JSON Path: `The text is too long. Please see the template.`
The number of I/O operations observed at the storage object. Performance metric aggregated over all types of I/O operations.
|Dependent item|netapp.volume.statistics.iops.total.rate[{#VOLUMENAME}]**Preprocessing**
JSON Path: `The text is too long. Please see the template.`
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.
|Calculated|netapp.volume.statistics.latency.other[{#VOLUMENAME}]| |{#VOLUMENAME}: Volume latency, read|The average latency per I/O operation in milliseconds observed at the storage object. Performance metric for read I/O operations.
|Calculated|netapp.volume.statistics.latency.read[{#VOLUMENAME}]| |{#VOLUMENAME}: Volume latency, write|The average latency per I/O operation in milliseconds observed at the storage object. Performance metric for write I/O operations.
|Calculated|netapp.volume.statistics.latency.write[{#VOLUMENAME}]| |{#VOLUMENAME}: Volume latency, total|The average latency per I/O operation in milliseconds observed at the storage object. Performance metric aggregated over all types of I/O operations.
|Calculated|netapp.volume.statistics.latency.total[{#VOLUMENAME}]| |{#VOLUMENAME}: Volume latency raw, other|The raw latency in microseconds 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.
|Dependent item|netapp.volume.statistics.latency_raw.other[{#VOLUMENAME}]**Preprocessing**
JSON Path: `The text is too long. Please see the template.`
The raw latency in microseconds observed at the storage object. Performance metric for read I/O operations.
|Dependent item|netapp.volume.statistics.latency_raw.read[{#VOLUMENAME}]**Preprocessing**
JSON Path: `The text is too long. Please see the template.`
The raw latency in microseconds observed at the storage object. Performance metric for write I/O operations.
|Dependent item|netapp.volume.statistics.latency_raw.write[{#VOLUMENAME}]**Preprocessing**
JSON Path: `The text is too long. Please see the template.`
The raw latency in microseconds observed at the storage object. Performance metric aggregated over all types of I/O operations.
|Dependent item|netapp.volume.statistics.latency_raw.total[{#VOLUMENAME}]**Preprocessing**
JSON Path: `The text is too long. Please see the template.`
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.
|Dependent item|netapp.volume.statistics.iops_raw.other[{#VOLUMENAME}]**Preprocessing**
JSON Path: `The text is too long. Please see the template.`
The number of I/O operations observed at the storage object. Performance metric for read I/O operations.
|Dependent item|netapp.volume.statistics.iops_raw.read[{#VOLUMENAME}]**Preprocessing**
JSON Path: `The text is too long. Please see the template.`
The number of I/O operations observed at the storage object. Performance metric for write I/O operations.
|Dependent item|netapp.volume.statistics.iops_raw.write[{#VOLUMENAME}]**Preprocessing**
JSON Path: `The text is too long. Please see the template.`
The number of I/O operations observed at the storage object. Performance metric aggregated over all types of I/O operations.
|Dependent item|netapp.volume.statistics.iops_raw.total[{#VOLUMENAME}]**Preprocessing**
JSON Path: `The text is too long. Please see the template.`
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.
|`(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|**Manual close**: Yes| ## Feedback Please report any issues with the template at [`https://support.zabbix.com`](https://support.zabbix.com) You can also provide feedback, discuss the template, or ask for help at [`ZABBIX forums`](https://www.zabbix.com/forum/zabbix-suggestions-and-feedback)