# VMWare SD-WAN VeloCloud by HTTP ## Overview This template is designed for the effortless deployment of VMWare SD-WAN VeloCloud 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: - VMware SD-WAN Orchestrator 4.0.2 ## 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 You must set {$VELOCLOUD.TOKEN} and {$VELOCLOUD.URL} macros. You have to create API token in Orchestrator and use it in {$VELOCLOUD.TOKEN} macros. Read detailed instructions how to create token in VMWare documentation [documentation](https://docs.vmware.com/en/VMware-SD-WAN/4.0/vmware-sd-wan-operator-guide/GUID-C150D536-A75F-47C1-8AFF-17C417F40C1D.html) Set Orchestrator URl for {$VELOCLOUD.URL}. e.g. example.com (where you replace example.com with the actual url VMWare SD-WAN Orchestrator is running on) ### Macros used |Name|Description|Default| |----|-----------|-------| |{$VELOCLOUD.TOKEN}|
VMware SD-WAN Orchestrator API Token.
|| |{$VELOCLOUD.URL}|VMware SD-WAN Orchestrator URL. e.g vco.velocloud.net.
|| |{$VELOCLOUD.LLD.EDGES.FILTER.MATCHES}|Filter for discoverable edges.
|`.*`| |{$VELOCLOUD.LLD.EDGES.FILTER.NOT_MATCHES}|Filter to exclude discovered edges.
|`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`| |{$VELOCLOUD.LLD.LINKS.FILTER.MATCHES}|Filter for discoverable links.
|`.*`| |{$VELOCLOUD.LLD.LINKS.FILTER.NOT_MATCHES}|Filter to exclude discovered links.
|`CHANGE_IF_NEEDED`| ### Items |Name|Description|Type|Key and additional info| |----|-----------|----|-----------------------| |Velocloud: Get data|The JSON with result of Velocloud API requests.
|Script|velocloud.get| |Velocloud: Clear data|Clear metrics for data without errors.
|Dependent item|velocloud.get.clear_metrics**Preprocessing**
Check for error in JSON: `$.error`
⛔️Custom on fail: Discard value
Version of VMware SD-WAN Orchestrator API.
|Dependent item|velocloud.orchestrator.api_version**Preprocessing**
JSON Path: `$.info.apiVersion`
Build of VMware SD-WAN Orchestrator API.
|Dependent item|velocloud.orchestrator.build**Preprocessing**
JSON Path: `$.info.build`
Discard unchanged with heartbeat: `12h`
Version of VMware SD-WAN Orchestrator API.
|Dependent item|velocloud.orchestrator.version**Preprocessing**
JSON Path: `$.info.version`
Discard unchanged with heartbeat: `12h`
Errors of aggregate script item.
|Dependent item|velocloud.get.error**Preprocessing**
JSON Path: `$.error`
Discard unchanged with heartbeat: `1h`
System properties of VMware SD-WAN.
|HTTP agent|velocloud.system.properties**Preprocessing**
Discard unchanged with heartbeat: `12h`
Zabbix has not received any data for items for the last 30 minutes.
|`nodata(/VMWare SD-WAN VeloCloud by HTTP/velocloud.orchestrator.api_version,30m)=1`|Average|**Manual close**: Yes| |Velocloud: Orchestrator build has been changed|Velocloud Orchestrator build has been changed.
|`last(/VMWare SD-WAN VeloCloud by HTTP/velocloud.orchestrator.build,#1)<>last(/VMWare SD-WAN VeloCloud by HTTP/velocloud.orchestrator.build,#2) and length(last(/VMWare SD-WAN VeloCloud by HTTP/velocloud.orchestrator.build))>0`|Info|**Manual close**: Yes| |Velocloud: Orchestrator version has been changed|Velocloud Orchestrator version has been changed.
|`last(/VMWare SD-WAN VeloCloud by HTTP/velocloud.orchestrator.version,#1)<>last(/VMWare SD-WAN VeloCloud by HTTP/velocloud.orchestrator.version,#2) and length(last(/VMWare SD-WAN VeloCloud by HTTP/velocloud.orchestrator.version))>0`|Info|**Manual close**: Yes| |Velocloud: There are errors in aggregate script item|There are errors in aggregate script item.
|`length(last(/VMWare SD-WAN VeloCloud by HTTP/velocloud.get.error))>0`|Warning|| |Velocloud: System properties have changed|System properties have changed.
|`last(/VMWare SD-WAN VeloCloud by HTTP/velocloud.system.properties,#1)<>last(/VMWare SD-WAN VeloCloud by HTTP/velocloud.system.properties,#2)`|Info|**Manual close**: Yes| ### LLD rule Edges metrics discovery |Name|Description|Type|Key and additional info| |----|-----------|----|-----------------------| |Edges metrics discovery|Metrics for edges statistics.
|Dependent item|velocloud.edges.discovery**Preprocessing**
JSON Path: `$.edges`
Discard unchanged with heartbeat: `1h`
Raw data for velocloud edge.
|Dependent item|velocloud.get.edge[{#ID}]**Preprocessing**
JSON Path: `$.edges[?(@.id=='{#ID}')].first()`
Edge activation state.
|Dependent item|velocloud.edge.activation[{#ID}]**Preprocessing**
JSON Path: `$.activationState`
Discard unchanged with heartbeat: `1h`
JavaScript: `The text is too long. Please see the template.`
Edge description.
|Dependent item|velocloud.edge.description[{#ID}]**Preprocessing**
JSON Path: `$.description`
Discard unchanged with heartbeat: `12h`
Edge high availability state.
|Dependent item|velocloud.edge.ha_state[{#ID}]**Preprocessing**
JSON Path: `$.haState`
Discard unchanged with heartbeat: `1h`
JavaScript: `The text is too long. Please see the template.`
Edge model number.
|Dependent item|velocloud.edge.model[{#ID}]**Preprocessing**
JSON Path: `$.modelNumber`
Discard unchanged with heartbeat: `12h`
Edge service uptime.
|Dependent item|velocloud.edge.service_uptime[{#ID}]**Preprocessing**
JSON Path: `$.serviceUpSince`
JavaScript: `The text is too long. Please see the template.`
Edge software version.
|Dependent item|velocloud.edge.software_version[{#ID}]**Preprocessing**
JSON Path: `$.softwareVersion`
Discard unchanged with heartbeat: `12h`
Edge state.
|Dependent item|velocloud.edge.state[{#ID}]**Preprocessing**
JSON Path: `$.edgeState`
Discard unchanged with heartbeat: `1h`
JavaScript: `The text is too long. Please see the template.`
Edge system uptime.
|Dependent item|velocloud.edge.system_uptime[{#ID}]**Preprocessing**
JSON Path: `$.systemUpSince`
JavaScript: `The text is too long. Please see the template.`
High availability state is "FAILED".
|`last(/VMWare SD-WAN VeloCloud by HTTP/velocloud.edge.ha_state[{#ID}])=3`|Warning|| |Edge [{#NAME}]: Edge is in "OFFLINE" state|Edge state is "OFFLINE".
|`last(/VMWare SD-WAN VeloCloud by HTTP/velocloud.edge.state[{#ID}])=0`|Warning|| |Edge [{#NAME}]: Edge has been restarted|Edge was restarted.
|`last(/VMWare SD-WAN VeloCloud by HTTP/velocloud.edge.system_uptime[{#ID}])>0 and last(/VMWare SD-WAN VeloCloud by HTTP/velocloud.edge.system_uptime[{#ID}])<600`|Warning|| ### LLD rule Gateways metrics discovery |Name|Description|Type|Key and additional info| |----|-----------|----|-----------------------| |Gateways metrics discovery|Metrics for gateways statistics.
|Dependent item|velocloud.gateways.discovery**Preprocessing**
JSON Path: `$.gateways`
Discard unchanged with heartbeat: `1h`
Raw data for velocloud gateway.
|Dependent item|velocloud.get.gateway[{#ID}]**Preprocessing**
JSON Path: `$.gateways[?(@.id=='{#ID}')].first()`
Gateway connected edges.
|Dependent item|velocloud.gateway.connected_edges[{#ID}]**Preprocessing**
JSON Path: `$.connectedEdges`
Gateway description.
|Dependent item|velocloud.gateway.description[{#ID}]**Preprocessing**
JSON Path: `$.description`
Discard unchanged with heartbeat: `12h`
Gateway ip address.
|Dependent item|velocloud.gateway.ip_address[{#ID}]**Preprocessing**
JSON Path: `$.ipAddress`
Discard unchanged with heartbeat: `1h`
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 state.
|Dependent item|velocloud.gateway.state[{#ID}]**Preprocessing**
JSON Path: `$.gatewayState`
Discard unchanged with heartbeat: `1h`
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 CPU utilization.
|Dependent item|velocloud.gateway.utilization.cpu[{#ID}]**Preprocessing**
JSON Path: `$.utilizationDetail.cpu`
Gateway load.
|Dependent item|velocloud.gateway.utilization.load[{#ID}]**Preprocessing**
JSON Path: `$.utilizationDetail.load`
Gateway memory utilization.
|Dependent item|velocloud.gateway.utilization.memory[{#ID}]**Preprocessing**
JSON Path: `$.utilizationDetail.memory`
Gateway overall utilization.
|Dependent item|velocloud.gateway.utilization.overall[{#ID}]**Preprocessing**
JSON Path: `$.utilizationDetail.overall`
The number of connected edges is changed.
|`last(/VMWare SD-WAN VeloCloud by HTTP/velocloud.gateway.connected_edges[{#ID}],#1)<>last(/VMWare SD-WAN VeloCloud by HTTP/velocloud.gateway.connected_edges[{#ID}],#2)`|Warning|**Manual close**: Yes| |Gateway [{#NAME}]: Gateway has been restarted|Gateway was restarted.
|`last(/VMWare SD-WAN VeloCloud by HTTP/velocloud.gateway.system_uptime[{#ID}])>0 and last(/VMWare SD-WAN VeloCloud by HTTP/velocloud.gateway.system_uptime[{#ID}])<600`|Warning|| ### LLD rule Links metrics discovery |Name|Description|Type|Key and additional info| |----|-----------|----|-----------------------| |Links metrics discovery|Metrics for links statistics.
|Dependent item|velocloud.links.discovery**Preprocessing**
JSON Path: `$.links`
Discard unchanged with heartbeat: `1h`
Raw data for velocloud link.
|Dependent item|velocloud.get.link[{#ID}]**Preprocessing**
JSON Path: `$.links[?(@.linkId=='{#ID}')].first()`
Link receive best loss.
|Dependent item|velocloud.link.best_loss_rx.pct[{#ID}]**Preprocessing**
JSON Path: `$.bestLossPctRx`
Link transmit best loss.
|Dependent item|velocloud.link.best_loss_tx.pct[{#ID}]**Preprocessing**
JSON Path: `$.bestLossPctTx`
Link received bytes.
|Dependent item|velocloud.link.bytes_rx[{#ID}]**Preprocessing**
JSON Path: `$.bytesRx`
Link transmitted bytes.
|Dependent item|velocloud.link.bytes_tx[{#ID}]**Preprocessing**
JSON Path: `$.bytesTx`
Link last active in seconds ago.
|Dependent item|velocloud.link.last_active[{#ID}]**Preprocessing**
JSON Path: `$.link.linkLastActive`
JavaScript: `The text is too long. Please see the template.`
Link received packets.
|Dependent item|velocloud.link.packets_rx[{#ID}]**Preprocessing**
JSON Path: `$.packetsRx`
Link transmitted packets.
|Dependent item|velocloud.link.packets_tx[{#ID}]**Preprocessing**
JSON Path: `$.packetsTx`
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 Total bytes.
|Dependent item|velocloud.link.total_bytes[{#ID}]**Preprocessing**
JSON Path: `$.totalBytes`
Link total packets.
|Dependent item|velocloud.link.total_packets[{#ID}]**Preprocessing**
JSON Path: `$.totalPackets`
Link state is not "STABLE".
|`last(/VMWare SD-WAN VeloCloud by HTTP/velocloud.link.state[{#ID}])<>1`|Warning|| ### LLD rule SDWAN peers metrics discovery |Name|Description|Type|Key and additional info| |----|-----------|----|-----------------------| |SDWAN peers metrics discovery|Metrics for SDWAN peers.
|Dependent item|velocloud.sdwanpeers.discovery**Preprocessing**
JSON Path: `$.edgeSDWan`
Discard unchanged with heartbeat: `1h`
Raw data for velocloud sdwan peer.
|Dependent item|velocloud.get.sdwan_peer[{#EDGE.ID}/{#ID}]**Preprocessing**
JSON Path: `The text is too long. Please see the template.`
Description of SDWAN peer.
|Dependent item|velocloud.sdwanpeer.description[{#EDGE.ID}/{#ID}]**Preprocessing**
JSON Path: `$.description`
Discard unchanged with heartbeat: `12h`
Count of stable path of SDWAN peer.
|Dependent item|velocloud.sdwanpeer.stable_path[{#EDGE.ID}/{#ID}]**Preprocessing**
JSON Path: `$.pathStatusCount.stable`
Count of unstable path of SDWAN peer.
|Dependent item|velocloud.sdwanpeer.unstable_path[{#EDGE.ID}/{#ID}]**Preprocessing**
JSON Path: `$.pathStatusCount.unstable`
Count of standby path of SDWAN peer.
|Dependent item|velocloud.sdwanpeer.standby_path[{#EDGE.ID}/{#ID}]**Preprocessing**
JSON Path: `$.pathStatusCount.standby`
Count of dead path of SDWAN peer.
|Dependent item|velocloud.sdwanpeer.dead_path[{#EDGE.ID}/{#ID}]**Preprocessing**
JSON Path: `$.pathStatusCount.dead`
Count of unknown path of SDWAN peer.
|Dependent item|velocloud.sdwanpeer.unknown_path[{#EDGE.ID}/{#ID}]**Preprocessing**
JSON Path: `$.pathStatusCount.unknown`
Count of total path of SDWAN peer.
|Dependent item|velocloud.sdwanpeer.total_path[{#EDGE.ID}/{#ID}]**Preprocessing**
JSON Path: `$.pathStatusCount.total`
Metrics for SDWAN peers path.
|Dependent item|velocloud.sdwanpath.discovery**Preprocessing**
JSON Path: `$.edgeSDWanPath`
Discard unchanged with heartbeat: `1h`
Raw data for velocloud sdwan peer path.
|Dependent item|velocloud.get.sdwan_path[{{#NAME}/{#SOURCE}/{#DESTINATION}]**Preprocessing**
JSON Path: `The text is too long. Please see the template.`
Bytes received of SDWAN peer path.
|Dependent item|velocloud.sdwanpath.bytes_rx[{#NAME}/{#SOURCE}/{#DESTINATION}]**Preprocessing**
JSON Path: `$.metrics.bytesRx`
Bytes transmitted of SDWAN peer path.
|Dependent item|velocloud.sdwanpath.bytes_tx[{#NAME}/{#SOURCE}/{#DESTINATION}]**Preprocessing**
JSON Path: `$.metrics.bytesTx`
Total bytes of SDWAN peer path.
|Dependent item|velocloud.sdwanpath.total_bytes[{#NAME}/{#SOURCE}/{#DESTINATION}]**Preprocessing**
JSON Path: `$.metrics.totalBytes`
Packets received of SDWAN peer path.
|Dependent item|velocloud.sdwanpath.packets_rx[{#NAME}/{#SOURCE}/{#DESTINATION}]**Preprocessing**
JSON Path: `$.metrics.packetsRx`
Packets transmitted of SDWAN peer path.
|Dependent item|velocloud.sdwanpath.packets_tx[{#NAME}/{#SOURCE}/{#DESTINATION}]**Preprocessing**
JSON Path: `$.metrics.packetsTx`
Total packets of SDWAN peer path.
|Dependent item|velocloud.sdwanpath.total_packets[{#NAME}/{#SOURCE}/{#DESTINATION}]**Preprocessing**
JSON Path: `$.metrics.totalPackets`
Received packet loss of SDWAN peer path.
|Dependent item|velocloud.sdwanpath.packet_loss_rx[{#NAME}/{#SOURCE}/{#DESTINATION}]**Preprocessing**
JSON Path: `$.metrics.packetLossRx`
Transmitted packet loss of SDWAN peer path.
|Dependent item|velocloud.sdwanpath.packet_loss_tx[{#NAME}/{#SOURCE}/{#DESTINATION}]**Preprocessing**
JSON Path: `$.metrics.packetLossTx`