
# VeloCloud SD-WAN Edge by HTTP

## Overview

This template is designed for the effortless deployment of VeloCloud SD-WAN Edge monitoring by Zabbix via HTTP and doesn't require any external scripts.

## Requirements

Zabbix version: 7.0 and higher.

## Tested versions

This template has been tested on:
- VeloCloud SD-WAN Orchestrator 6.4.0

## 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


- Set the `{$VELOCLOUD.TOKEN}` and `{$VELOCLOUD.URL}` macros.

- Create an API token in the VeloCloud SD-WAN Orchestrator and use it in the `{$VELOCLOUD.TOKEN}` macros. See [Arista documentation](https://www.arista.com/en/global-settings-guide-vc-6-4/sase-6-4-user-management) for details.

- Set the Orchestrator URL for `{$VELOCLOUD.URL}`, e.g., `example.com`, where you replace "example.com" with the actual URL the Orchestrator is running on.

- Set the `{$VELOCLOUD.EDGE.FREQUENCY}` macro to define how often data should be collected from the VeloCloud Edge device (default is 15m). See [Arista API Rate Limiting and Throttling documentation](https://arista.my.site.com/AristaCommunity/s/article/API-Fair-Usage-Policy-for-Arista-VeloCloud-Orchestrator) for details on adjusting frequency.

### Macros used

|Name|Description|Default|
|----|-----------|-------|
|{$VELOCLOUD.TOKEN}|
VeloCloud SD-WAN Orchestrator API token.
||
|{$VELOCLOUD.URL}|
VeloCloud SD-WAN Orchestrator URL, e.g., `vco.velocloud.net`.
||
|{$VELOCLOUD.ENTERPRISE.ID}|
SD-WAN Enterprise ID.
||
|{$VELOCLOUD.EDGE.ID}|
SD-WAN Edge ID.
||
|{$VELOCLOUD.EDGE.MEMORY.UTIL.WARN}|
Warning threshold of cluster memory utilization expressed in percent.
|`70`|
|{$VELOCLOUD.EDGE.CPU.UTIL.WARN}|
Warning threshold of cluster service CPU utilization expressed in percent.
|`80`|
|{$VELOCLOUD.EDGE.FREQUENCY}|
Update interval for raw item collection.
|`15m`|
|{$VELOCLOUD.EDGE.DATA.TIMEOUT}|
Response timeout for API.
|`15s`|
|{$VELOCLOUD.LLD.LINKS.NAME.FILTER.MATCHES}|
Filter for discoverable links by name.
|`.*`|
|{$VELOCLOUD.LLD.LINKS.NAME.FILTER.NOT_MATCHES}|
Filter to exclude discovered links by name.
|`CHANGE_IF_NEEDED`|

### Items

|Name|Description|Type|Key and additional info|
|----|-----------|----|-----------------------|
|Get edge peer data|
Edge peer metric data in JSON format.
|Script|velocloud.edge.get.peer.data|
|Get link metric data|
Link metric data in JSON format.
|HTTP agent|velocloud.edge.link.get.data|
|Get edge data|
Edge data in JSON format.
|HTTP agent|velocloud.edge.get.data|
|Get edge data collection errors|
Verify that data collection completed without errors.
|Dependent item|velocloud.edge.get.data.error
**Preprocessing**

- 
JSON Path: `$.error`

⛔️Custom on fail: Set value to

- 
Discard unchanged with heartbeat: `3h`

|
|Activation state|
Edge activation state.
|Dependent item|velocloud.edge.activation
**Preprocessing**

- 
JSON Path: `$..activationState.first()`

- 
Discard unchanged with heartbeat: `1h`

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

|
|Description|
Edge description.
|Dependent item|velocloud.edge.description
**Preprocessing**

- 
JSON Path: `$..description.first()`

- 
Replace: `null -> `

- 
Discard unchanged with heartbeat: `12h`

|
|HA state|
Edge high availability state.
|Dependent item|velocloud.edge.ha_state
**Preprocessing**

- 
JSON Path: `$..haState.first()`

- 
Discard unchanged with heartbeat: `1h`

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

|
|Model number|
Edge model number.
|Dependent item|velocloud.edge.model
**Preprocessing**

- 
JSON Path: `$..modelNumber.first()`

- 
Discard unchanged with heartbeat: `12h`

|
|Service uptime|
Edge service uptime.
|Dependent item|velocloud.edge.service_uptime
**Preprocessing**

- 
JSON Path: `$..serviceUpSince.first()`

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

|
|Software version|
Edge software version.
|Dependent item|velocloud.edge.software_version
**Preprocessing**

- 
JSON Path: `$..softwareVersion.first()`

- 
Discard unchanged with heartbeat: `12h`

|
|State|
Edge state.
|Dependent item|velocloud.edge.state
**Preprocessing**

- 
JSON Path: `$..edgeState.first()`

- 
Discard unchanged with heartbeat: `1h`

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

|
|System uptime|
Edge system uptime.
|Dependent item|velocloud.edge.system_uptime
**Preprocessing**

- 
JSON Path: `$..systemUpSince.first()`

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

|
|Get edge status metrics|
Edge status metrics in JSON format.
|HTTP agent|velocloud.edge.status.metric.get|
|Tunnel count|
Total number of active tunnels.
|Dependent item|velocloud.edge.tunnel.count
**Preprocessing**

- 
JSON Path: `$.tunnelCount.max`

⛔️Custom on fail: Discard value

- 
Discard unchanged with heartbeat: `1h`

|
|Memory usage in percent|
Percentage of memory usage.
|Dependent item|velocloud.edge.memory.usage
**Preprocessing**

- 
JSON Path: `$.memoryPct.max`

⛔️Custom on fail: Discard value

- 
Discard unchanged with heartbeat: `1h`

|
|Flow count|
Number of flows.
|Dependent item|velocloud.edge.flow.count
**Preprocessing**

- 
JSON Path: `$.flowCount.max`

⛔️Custom on fail: Discard value

- 
Discard unchanged with heartbeat: `1h`

|
|CPU usage in percent|
CPU usage as a percentage.
|Dependent item|velocloud.edge.cpu.usage
**Preprocessing**

- 
JSON Path: `$.cpuPct.max`

⛔️Custom on fail: Discard value

- 
Discard unchanged with heartbeat: `1h`

|
|CPU core temperature|
Temperature of the CPU core.
|Dependent item|velocloud.edge.cpu.core.temp
**Preprocessing**

- 
JSON Path: `$.cpuCoreTemp.max`

⛔️Custom on fail: Discard value

- 
Discard unchanged with heartbeat: `1h`

|
|Handoff queue drops|
Packets dropped from the handoff queue.
|Dependent item|velocloud.edge.handoff.queue.drops
**Preprocessing**

- 
JSON Path: `$.handoffQueueDrops.max`

⛔️Custom on fail: Discard value

- 
Discard unchanged with heartbeat: `1h`

|
|Tunnel count V6|
Total number of IPv6 tunnels.
|Dependent item|velocloud.edge.tunnel.count.v6
**Preprocessing**

- 
JSON Path: `$.tunnelCountV6.max`

⛔️Custom on fail: Discard value

- 
Discard unchanged with heartbeat: `1h`

|
|Site country|
Edge site country.
|Script|velocloud.edge.site.country
**Preprocessing**

- 
Discard unchanged with heartbeat: `12h`

|
|Site city|
Edge site city.
|Script|velocloud.edge.site.city
**Preprocessing**

- 
Discard unchanged with heartbeat: `12h`

|
|Site state|
Edge site state.
|Script|velocloud.edge.site.state
**Preprocessing**

- 
Discard unchanged with heartbeat: `12h`

|
|Site contact name|
Edge site contact name.
|Script|velocloud.edge.site.contact.name
**Preprocessing**

- 
Discard unchanged with heartbeat: `12h`

|
|Site contact email|
Edge site contact email.
|Script|velocloud.edge.site.contact.email
**Preprocessing**

- 
Discard unchanged with heartbeat: `12h`

|
|Site latitude|
Edge site location latitude.
|Script|velocloud.edge.site.latitude
**Preprocessing**

- 
Discard unchanged with heartbeat: `12h`

|
|Site longitude|
Edge site location longitude.
|Script|velocloud.edge.site.longitude
**Preprocessing**

- 
Discard unchanged with heartbeat: `12h`

|

### Triggers

|Name|Description|Expression|Severity|Dependencies and additional info|
|----|-----------|----------|--------|--------------------------------|
|VeloCloud Edge: Failed to get metric data|
Failed to get API metrics for Edge.
|`length(last(/VeloCloud SD-WAN Edge by HTTP/velocloud.edge.get.data.error))>0`|Warning||
|VeloCloud Edge: HA state is in "FAILED" state|
High availability state is "FAILED".
|`last(/VeloCloud SD-WAN Edge by HTTP/velocloud.edge.ha_state)=3`|Warning||
|VeloCloud Edge: Edge is in "OFFLINE" state|
Edge state is "OFFLINE".
|`last(/VeloCloud SD-WAN Edge by HTTP/velocloud.edge.state)=0`|Warning||
|VeloCloud Edge: Edge has been restarted|
Edge was restarted.
|`last(/VeloCloud SD-WAN Edge by HTTP/velocloud.edge.system_uptime)>0 and last(/VeloCloud SD-WAN Edge by HTTP/velocloud.edge.system_uptime)<600`|Warning||
|VeloCloud Edge: High memory utilization|
The system is running out of free memory.
|`min(/VeloCloud SD-WAN Edge by HTTP/velocloud.edge.memory.usage,15m)>{$VELOCLOUD.EDGE.MEMORY.UTIL.WARN}`|Warning||
|VeloCloud Edge: High CPU utilization|
The system is experiencing high CPU usage.
|`min(/VeloCloud SD-WAN Edge by HTTP/velocloud.edge.cpu.usage,15m)>{$VELOCLOUD.EDGE.CPU.UTIL.WARN}`|Warning||

### LLD rule Link metric discovery

|Name|Description|Type|Key and additional info|
|----|-----------|----|-----------------------|
|Link metric discovery|
Metrics for link statistics.
|Dependent item|velocloud.link.discovery
**Preprocessing**

- 
Discard unchanged with heartbeat: `1h`

|

### Item prototypes for Link metric discovery

|Name|Description|Type|Key and additional info|
|----|-----------|----|-----------------------|
|Link [{#NAME}]:[{#IP}]: Raw data|
Raw data for this VeloCloud link.
|Dependent item|velocloud.get.link[{#ID}]
**Preprocessing**

- 
JSON Path: `$.[?(@.linkId=='{#ID}')].first()`

|
|Link [{#NAME}]:[{#IP}]: Best latency rx, ms|
Best receive latency in milliseconds.
|Dependent item|velocloud.link.best_latency_rx[{#ID}]
**Preprocessing**

- 
JSON Path: `$.bestLatencyMsRx`

|
|Link [{#NAME}]:[{#IP}]: Best latency tx, ms|
Best transmit latency in milliseconds.
|Dependent item|velocloud.link.best_latency_tx[{#ID}]
**Preprocessing**

- 
JSON Path: `$.bestLatencyMsTx`

|
|Link [{#NAME}]:[{#IP}]: Best loss rx, %|
Best receive loss in percent.
|Dependent item|velocloud.link.best_loss_rx.pct[{#ID}]
**Preprocessing**

- 
JSON Path: `$.bestLossPctRx`

|
|Link [{#NAME}]:[{#IP}]: Best loss tx, %|
Best transmit loss in percent.
|Dependent item|velocloud.link.best_loss_tx.pct[{#ID}]
**Preprocessing**

- 
JSON Path: `$.bestLossPctTx`

|
|Link [{#NAME}]:[{#IP}]: Bytes in|
Received bytes for link.
|Dependent item|velocloud.link.bytes_rx[{#ID}]
**Preprocessing**

- 
JSON Path: `$.bytesRx`

|
|Link [{#NAME}]:[{#IP}]: Bytes out|
Transmitted bytes for link.
|Dependent item|velocloud.link.bytes_tx[{#ID}]
**Preprocessing**

- 
JSON Path: `$.bytesTx`

|
|Link [{#NAME}]:[{#IP}]: Last active|
Time since last activity for link, in seconds.
|Dependent item|velocloud.link.last_active[{#ID}]
**Preprocessing**

- 
JSON Path: `$.link.linkLastActive`

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

|
|Link [{#NAME}]:[{#IP}]: Packets in|
Received packets for link.
|Dependent item|velocloud.link.packets_rx[{#ID}]
**Preprocessing**

- 
JSON Path: `$.packetsRx`

|
|Link [{#NAME}]:[{#IP}]: Packets out|
Transmitted packets for link.
|Dependent item|velocloud.link.packets_tx[{#ID}]
**Preprocessing**

- 
JSON Path: `$.packetsTx`

|
|Link [{#NAME}]:[{#IP}]: State|
Link state.
|Dependent item|velocloud.link.state[{#ID}]
**Preprocessing**

- 
JSON Path: `$.link.linkState`

- 
Discard unchanged with heartbeat: `1h`

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

|
|Link [{#NAME}]:[{#IP}]: Total bytes|
Total bytes for link.
|Dependent item|velocloud.link.total_bytes[{#ID}]
**Preprocessing**

- 
JSON Path: `$.totalBytes`

|
|Link [{#NAME}]:[{#IP}]: Total packets|
Total packets for link.
|Dependent item|velocloud.link.total_packets[{#ID}]
**Preprocessing**

- 
JSON Path: `$.totalPackets`

|

### Trigger prototypes for Link metric discovery

|Name|Description|Expression|Severity|Dependencies and additional info|
|----|-----------|----------|--------|--------------------------------|
|VeloCloud Edge: Link [{#NAME}]:[{#IP}]: Link state is not "STABLE"|
Link state is not "STABLE".
|`last(/VeloCloud SD-WAN Edge by HTTP/velocloud.link.state[{#ID}])<>1`|Warning||

### LLD rule SD-WAN peer metric discovery

|Name|Description|Type|Key and additional info|
|----|-----------|----|-----------------------|
|SD-WAN peer metric discovery|
Metrics for SD-WAN peers.
|Dependent item|velocloud.sdwan.peer.discovery
**Preprocessing**

- 
JSON Path: `$.edgeSDWan`

- 
Discard unchanged with heartbeat: `1h`

|

### Item prototypes for SD-WAN peer metric discovery

|Name|Description|Type|Key and additional info|
|----|-----------|----|-----------------------|
|SD-WAN Peer [{#NAME}]:[{#TYPE}]: Raw data|
Raw data for VeloCloud SD-WAN peer.
|Dependent item|velocloud.get.sdwan.peer[{#EDGE.ID}/{#ID}]
**Preprocessing**

- 
JSON Path: `The text is too long. Please see the template.`

|
|SD-WAN Peer [{#NAME}]:[{#TYPE}]: Description|
Description of SD-WAN peer.
|Dependent item|velocloud.sdwan.peer.description[{#EDGE.ID}/{#ID}]
**Preprocessing**

- 
JSON Path: `$.description`

- 
Replace: `null -> `

- 
Discard unchanged with heartbeat: `12h`

|
|SD-WAN Peer [{#NAME}]:[{#TYPE}]: Stable path|
Number of stable paths for SD-WAN peer.
|Dependent item|velocloud.sdwan.peer.stable_path[{#EDGE.ID}/{#ID}]
**Preprocessing**

- 
JSON Path: `$.pathStatusCount.stable`

|
|SD-WAN Peer [{#NAME}]:[{#TYPE}]: Unstable path|
Number of unstable paths for SD-WAN peer.
|Dependent item|velocloud.sdwan.peer.unstable_path[{#EDGE.ID}/{#ID}]
**Preprocessing**

- 
JSON Path: `$.pathStatusCount.unstable`

|
|SD-WAN Peer [{#NAME}]:[{#TYPE}]: Standby path|
Number of standby paths for SD-WAN peer.
|Dependent item|velocloud.sdwan.peer.standby_path[{#EDGE.ID}/{#ID}]
**Preprocessing**

- 
JSON Path: `$.pathStatusCount.standby`

|
|SD-WAN Peer [{#NAME}]:[{#TYPE}]: Dead path|
Number of dead paths for SD-WAN peer.
|Dependent item|velocloud.sdwan.peer.dead_path[{#EDGE.ID}/{#ID}]
**Preprocessing**

- 
JSON Path: `$.pathStatusCount.dead`

|
|SD-WAN Peer [{#NAME}]:[{#TYPE}]: Unknown path|
Number of unknown paths for SD-WAN peer.
|Dependent item|velocloud.sdwan.peer.unknown_path[{#EDGE.ID}/{#ID}]
**Preprocessing**

- 
JSON Path: `$.pathStatusCount.unknown`

|
|SD-WAN Peer [{#NAME}]:[{#TYPE}]: Total path|
Number of total paths for SD-WAN peer.
|Dependent item|velocloud.sdwan.peer.total_path[{#EDGE.ID}/{#ID}]
**Preprocessing**

- 
JSON Path: `$.pathStatusCount.total`

|

### LLD rule SD-WAN peer path metric discovery

|Name|Description|Type|Key and additional info|
|----|-----------|----|-----------------------|
|SD-WAN peer path metric discovery|
Metrics for SD-WAN peer paths.
|Dependent item|velocloud.sdwan.path.discovery
**Preprocessing**

- 
JSON Path: `$.edgeSDWanPath`

- 
Discard unchanged with heartbeat: `1h`

|

### Item prototypes for SD-WAN peer path metric discovery

|Name|Description|Type|Key and additional info|
|----|-----------|----|-----------------------|
|Path [{#NAME}]:[{#SOURCE} => {#DESTINATION}]: Raw data|
Raw data for VeloCloud SD-WAN peer path.
|Dependent item|velocloud.get.sdwan_path[{#NAME}/{#SOURCE}/{#DESTINATION}/{#LINK.LOGICAL.ID}]
**Preprocessing**

- 
JSON Path: `The text is too long. Please see the template.`

|
|Path [{#NAME}]:[{#SOURCE} => {#DESTINATION}]: Bytes in|
Bytes received for SD-WAN peer path.
|Dependent item|velocloud.sdwan.path.bytes_rx[{#NAME}/{#SOURCE}/{#DESTINATION}/{#LINK.LOGICAL.ID}]
**Preprocessing**

- 
JSON Path: `$.metrics.bytesRx`

|
|Path [{#NAME}]:[{#SOURCE} => {#DESTINATION}]: Bytes out|
Bytes transmitted for SD-WAN peer path.
|Dependent item|velocloud.sdwan.path.bytes_tx[{#NAME}/{#SOURCE}/{#DESTINATION}/{#LINK.LOGICAL.ID}]
**Preprocessing**

- 
JSON Path: `$.metrics.bytesTx`

|
|Path [{#NAME}]:[{#SOURCE} => {#DESTINATION}]: Bytes total|
Total bytes for SD-WAN peer path.
|Dependent item|velocloud.sdwan.path.total_bytes[{#NAME}/{#SOURCE}/{#DESTINATION}/{#LINK.LOGICAL.ID}]
**Preprocessing**

- 
JSON Path: `$.metrics.totalBytes`

|
|Path [{#NAME}]:[{#SOURCE} => {#DESTINATION}]: Packets in|
Packets received for SD-WAN peer path.
|Dependent item|velocloud.sdwan.path.packets_rx[{#NAME}/{#SOURCE}/{#DESTINATION}/{#LINK.LOGICAL.ID}]
**Preprocessing**

- 
JSON Path: `$.metrics.packetsRx`

|
|Path [{#NAME}]:[{#SOURCE} => {#DESTINATION}]: Packets out|
Packets transmitted for SD-WAN peer path.
|Dependent item|velocloud.sdwan.path.packets_tx[{#NAME}/{#SOURCE}/{#DESTINATION}/{#LINK.LOGICAL.ID}]
**Preprocessing**

- 
JSON Path: `$.metrics.packetsTx`

|
|Path [{#NAME}]:[{#SOURCE} => {#DESTINATION}]: Total packets|
Total packets for SD-WAN peer path.
|Dependent item|velocloud.sdwan.path.total_packets[{#NAME}/{#SOURCE}/{#DESTINATION}/{#LINK.LOGICAL.ID}]
**Preprocessing**

- 
JSON Path: `$.metrics.totalPackets`

|
|Path [{#NAME}]:[{#SOURCE} => {#DESTINATION}]: Packet loss in|
Received packet loss for SD-WAN peer path.
|Dependent item|velocloud.sdwan.path.packet_loss_rx[{#NAME}/{#SOURCE}/{#DESTINATION}/{#LINK.LOGICAL.ID}]
**Preprocessing**

- 
JSON Path: `$.metrics.packetLossRx`

|
|Path [{#NAME}]:[{#SOURCE} => {#DESTINATION}]: Packet loss out|
Transmitted packet loss for SD-WAN peer path.
|Dependent item|velocloud.sdwan.path.packet_loss_tx[{#NAME}/{#SOURCE}/{#DESTINATION}/{#LINK.LOGICAL.ID}]
**Preprocessing**

- 
JSON Path: `$.metrics.packetLossTx`

|

# VeloCloud SD-WAN by HTTP

## Overview

This template is designed for the effortless deployment of VeloCloud SD-WAN monitoring by Zabbix via HTTP and doesn't require any external scripts.

## Requirements

Zabbix version: 7.0 and higher.

## Tested versions

This template has been tested on:
- VeloCloud SD-WAN Orchestrator 6.4.0

## 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

- Set the `{$VELOCLOUD.TOKEN}` and `{$VELOCLOUD.URL}` macros.

- Create an API token in the VeloCloud SD-WAN Orchestrator and use it in the `{$VELOCLOUD.TOKEN}` macros. See [Arista documentation](https://www.arista.com/en/global-settings-guide-vc-6-4/sase-6-4-user-management) for details.

- Set the Orchestrator URL for `{$VELOCLOUD.URL}`, e.g., `example.com`, where you replace "example.com" with the actual URL the Orchestrator is running on.

- Set the `{$VELOCLOUD.SDWAN.FREQUENCY}` macro to define how often data should be collected from the VeloCloud Edge device (default is 15m). See [Arista API Rate Limiting and Throttling documentation](https://arista.my.site.com/AristaCommunity/s/article/API-Fair-Usage-Policy-for-Arista-VeloCloud-Orchestrator) for details on adjusting frequency.

### Macros used

|Name|Description|Default|
|----|-----------|-------|
|{$VELOCLOUD.TOKEN}|
VeloCloud SD-WAN Orchestrator API token.
||
|{$VELOCLOUD.URL}|
VeloCloud SD-WAN Orchestrator URL, e.g., `vco.velocloud.net`.
||
|{$VELOCLOUD.ENTERPRISE.ID}|
VeloCloud SD-WAN Enterprise ID. Specify a single Enterprise ID (requires READ EDGE privileges). By default parameter is empty, data will be retrieved for all Enterprises (privileges required: READ ENTERPRISE and READ EDGE).
||
|{$VELOCLOUD.SDWAN.FREQUENCY}|
Update interval for raw item, expressed in hours.
|`1h`|
|{$VELOCLOUD.SDWAN.DATA.TIMEOUT}|
Response timeout for API.
|`15s`|
|{$VELOCLOUD.HTTP_PROXY}|
The HTTP proxy for script items (set if needed). If the macro is empty, then no proxy is used.
||
|{$VELOCLOUD.LLD.EDGES.NAME.FILTER.MATCHES}|
Filter for discoverable Edges by name.
|`.*`|
|{$VELOCLOUD.LLD.EDGES.NAME.FILTER.NOT_MATCHES}|
Filter to exclude discovered Edges by name.
|`CHANGE_IF_NEEDED`|
|{$VELOCLOUD.LLD.EDGES.STATE.FILTER.MATCHES}|
Filter for discoverable Edges by state.
|`.*`|
|{$VELOCLOUD.LLD.EDGES.STATE.FILTER.NOT_MATCHES}|
Filter to exclude discovered Edges by state.
|`CHANGE_IF_NEEDED`|
|{$VELOCLOUD.LLD.GATEWAYS.FILTER.MATCHES}|
Filter for discoverable gateways.
|`.*`|
|{$VELOCLOUD.LLD.GATEWAYS.FILTER.NOT_MATCHES}|
Filter to exclude discovered gateways.
|`CHANGE_IF_NEEDED`|

### Items

|Name|Description|Type|Key and additional info|
|----|-----------|----|-----------------------|
|Get data|
JSON result from VeloCloud API requests.
|Script|velocloud.get|
|Get network gateways|
Gets network gateway information.
|HTTP agent|velocloud.network.gateway.get
**Preprocessing**

- 
Discard unchanged with heartbeat: `12h`

|
|Get version info data|
Gets system version information.
|HTTP agent|velocloud.version.info.get
**Preprocessing**

- 
Discard unchanged with heartbeat: `12h`

|
|Get version info errors|
Errors from version info response.
|Dependent item|velocloud.info.get.error
**Preprocessing**

- 
JSON Path: `$.error`

⛔️Custom on fail: Set value to

- 
Discard unchanged with heartbeat: `3h`

|
|Orchestrator API version|
Version of VeloCloud SD-WAN Orchestrator API.
|Dependent item|velocloud.orchestrator.api_version
**Preprocessing**

- 
JSON Path: `$.apiVersion`

|
|Orchestrator build|
Build of VeloCloud SD-WAN Orchestrator API.
|Dependent item|velocloud.orchestrator.build
**Preprocessing**

- 
JSON Path: `$.build`

- 
Discard unchanged with heartbeat: `12h`

|
|Orchestrator version|
Version of VMware SD-WAN Orchestrator API.
|Dependent item|velocloud.orchestrator.version
**Preprocessing**

- 
JSON Path: `$.version`

- 
Discard unchanged with heartbeat: `12h`

|
|Get data collection errors|
Errors from aggregate data collection.
|Dependent item|velocloud.get.error
**Preprocessing**

- 
JSON Path: `$.error`

⛔️Custom on fail: Set value to

- 
Discard unchanged with heartbeat: `3h`

|
|Get network gateway data collection errors|
Errors from aggregate data collection for network gateways.
|Dependent item|velocloud.get.edges.error
**Preprocessing**

- 
JSON Path: `$.error`

⛔️Custom on fail: Set value to

- 
Discard unchanged with heartbeat: `1h`

|
|System properties|
System properties of VMware SD-WAN.
|HTTP agent|velocloud.system.properties
**Preprocessing**

- 
Discard unchanged with heartbeat: `12h`

|

### Triggers

|Name|Description|Expression|Severity|Dependencies and additional info|
|----|-----------|----------|--------|--------------------------------|
|VeloCloud: There are errors in version info item|
There are errors in the version info item.
|`length(last(/VeloCloud SD-WAN by HTTP/velocloud.info.get.error))>0`|Warning||
|VeloCloud: Orchestrator API version has changed|
The VeloCloud Orchestrator API version has changed.
|`last(/VeloCloud SD-WAN by HTTP/velocloud.orchestrator.api_version,#1)<>last(/VeloCloud SD-WAN by HTTP/velocloud.orchestrator.api_version,#2) and length(last(/VeloCloud SD-WAN by HTTP/velocloud.orchestrator.api_version))>0`|Average|**Manual close**: Yes|
|VeloCloud: Orchestrator build has changed|
The VeloCloud Orchestrator build has changed.
|`last(/VeloCloud SD-WAN by HTTP/velocloud.orchestrator.build,#1)<>last(/VeloCloud SD-WAN by HTTP/velocloud.orchestrator.build,#2) and length(last(/VeloCloud SD-WAN by HTTP/velocloud.orchestrator.build))>0`|Info|**Manual close**: Yes|
|VeloCloud: Orchestrator version has changed|
The VeloCloud Orchestrator version has changed.
|`last(/VeloCloud SD-WAN by HTTP/velocloud.orchestrator.version,#1)<>last(/VeloCloud SD-WAN by HTTP/velocloud.orchestrator.version,#2) and length(last(/VeloCloud SD-WAN by HTTP/velocloud.orchestrator.version))>0`|Info|**Manual close**: Yes|
|VeloCloud: There are errors in aggregate script item|
There are errors in the aggregate script item.
|`length(last(/VeloCloud SD-WAN by HTTP/velocloud.get.error))>0`|Warning||
|VeloCloud: There are errors in network gateways item|
There are errors in the aggregate script item for network gateways.
|`length(last(/VeloCloud SD-WAN by HTTP/velocloud.get.edges.error))>0`|Warning||
|VeloCloud: System properties have changed|
The system properties have changed.
|`last(/VeloCloud SD-WAN by HTTP/velocloud.system.properties,#1)<>last(/VeloCloud SD-WAN by HTTP/velocloud.system.properties,#2)`|Info|**Manual close**: Yes|

### LLD rule Edge discovery

|Name|Description|Type|Key and additional info|
|----|-----------|----|-----------------------|
|Edge discovery|
Get Edge instances.
|Dependent item|velocloud.edge.discovery
**Preprocessing**

- 
JSON Path: `$.edges`

- 
Discard unchanged with heartbeat: `1h`

|

### LLD rule Gateway metric discovery

|Name|Description|Type|Key and additional info|
|----|-----------|----|-----------------------|
|Gateway metric discovery|
Metrics for gateway statistics.
|Dependent item|velocloud.gateway.discovery
**Preprocessing**

- 
Discard unchanged with heartbeat: `1h`

|

### Item prototypes for Gateway metric discovery

|Name|Description|Type|Key and additional info|
|----|-----------|----|-----------------------|
|Gateway [{#NAME}]: Raw data|
Raw data for VeloCloud gateway.
|Dependent item|velocloud.get.gateway[{#ID}]
**Preprocessing**

- 
JSON Path: `$.[?(@.id=='{#ID}')].first()`

|
|Gateway [{#NAME}]: Connected edges|
Edges connected to gateway.
|Dependent item|velocloud.gateway.connected_edges[{#ID}]
**Preprocessing**

- 
JSON Path: `$.connectedEdges`

|
|Gateway [{#NAME}]: Description|
Gateway description.
|Dependent item|velocloud.gateway.description[{#ID}]
**Preprocessing**

- 
JSON Path: `$.description`

- 
Replace: `null -> `

- 
Discard unchanged with heartbeat: `12h`

|
|Gateway [{#NAME}]: IP address|
Gateway IP address.
|Dependent item|velocloud.gateway.ip_address[{#ID}]
**Preprocessing**

- 
JSON Path: `$.ipAddress`

- 
Discard unchanged with heartbeat: `1h`

|
|Gateway [{#NAME}]: Service uptime|
Gateway service uptime.
|Dependent item|velocloud.gateway.service_uptime[{#ID}]
**Preprocessing**

- 
JSON Path: `$.serviceUpSince`

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

|
|Gateway [{#NAME}]: State|
Gateway state.
|Dependent item|velocloud.gateway.state[{#ID}]
**Preprocessing**

- 
JSON Path: `$.gatewayState`

- 
Discard unchanged with heartbeat: `1h`

|
|Gateway [{#NAME}]: System uptime|
Gateway system uptime.
|Dependent item|velocloud.gateway.system_uptime[{#ID}]
**Preprocessing**

- 
JSON Path: `$.systemUpSince`

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

|
|Gateway [{#NAME}]: Utilization CPU|
Gateway CPU utilization.
|Dependent item|velocloud.gateway.utilization.cpu[{#ID}]
**Preprocessing**

- 
JSON Path: `$.utilizationDetail.cpu`

|
|Gateway [{#NAME}]: Utilization load|
Gateway load.
|Dependent item|velocloud.gateway.utilization.load[{#ID}]
**Preprocessing**

- 
JSON Path: `$.utilizationDetail.load`

|
|Gateway [{#NAME}]: Utilization memory|
Gateway memory utilization.
|Dependent item|velocloud.gateway.utilization.memory[{#ID}]
**Preprocessing**

- 
JSON Path: `$.utilizationDetail.memory`

|
|Gateway [{#NAME}]: Utilization overall|
Gateway overall utilization.
|Dependent item|velocloud.gateway.utilization.overall[{#ID}]
**Preprocessing**

- 
JSON Path: `$.utilizationDetail.overall`

|

### Trigger prototypes for Gateway metric discovery

|Name|Description|Expression|Severity|Dependencies and additional info|
|----|-----------|----------|--------|--------------------------------|
|VeloCloud: Gateway [{#NAME}]: The number of connected edges has changed|
The number of connected Edges has changed.
|`last(/VeloCloud SD-WAN by HTTP/velocloud.gateway.connected_edges[{#ID}],#1)<>last(/VeloCloud SD-WAN by HTTP/velocloud.gateway.connected_edges[{#ID}],#2)`|Warning|**Manual close**: Yes|
|VeloCloud: Gateway [{#NAME}]: Gateway has been restarted|
Gateway was restarted.
|`last(/VeloCloud SD-WAN by HTTP/velocloud.gateway.system_uptime[{#ID}])>0 and last(/VeloCloud SD-WAN by HTTP/velocloud.gateway.system_uptime[{#ID}])<600`|Warning||

## Feedback

Please report any issues with the template at [`https://support.zabbix.com`](https://support.zabbix.com)

You can also provide feedback, discuss the template, or ask for help at [`ZABBIX forums`](https://www.zabbix.com/forum/zabbix-suggestions-and-feedback)

