18 KiB
Cisco Meraki dashboard by HTTP
Overview
This template is designed for the effortless deployment of Cisco Meraki dashboard 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:
- Cisco Meraki API 1.24.0
Configuration
Zabbix should be configured according to the instructions in the Templates out of the box section.
Setup
You must set {$MERAKI.TOKEN} and {$MERAKI.API.URL} macros.
Create the token in the Meraki dashboard (see Meraki documentation for instructions). Set this token as {$MERAKI.TOKEN} macro value in Zabbix.
Set your Meraki dashboard URl as {$MERAKI.API.URL} macro value in Zabbix (e.g., api.meraki.com/api/v1).
Macros used
Name | Description | Default |
---|---|---|
{$MERAKI.TOKEN} | Cisco Meraki Dashboard API Token. |
|
{$MERAKI.API.URL} | Cisco Meraki Dashboard API URL. e.g api.meraki.com/api/v1 |
api.meraki.com/api/v1 |
{$MERAKI.ORGANIZATION.NAME.MATCHES} | This macro is used in organizations discovery. Can be overridden on the host or linked template level. |
.+ |
{$MERAKI.ORGANIZATION.NAME.NOT_MATCHES} | This macro is used in organizations discovery. Can be overridden on the host or linked template level. |
CHANGE_IF_NEEDED |
{$MERAKI.DEVICE.NAME.MATCHES} | This macro is used in devices discovery. Can be overridden on the host or linked template level. |
.+ |
{$MERAKI.DEVICE.NAME.NOT_MATCHES} | This macro is used in devices discovery. Can be overridden on the host or linked template level. |
CHANGE_IF_NEEDED |
{$MERAKI.HTTP_PROXY} | HTTP proxy for API requests. You can specify it using the format [protocol://][username[:password]@]proxy.example.com[:port]. See documentation at https://www.zabbix.com/documentation/7.0/manual/config/items/itemtypes/http |
Items
Name | Description | Type | Key and additional info |
---|---|---|---|
Meraki: Get data | Item for gathering all the organizations and devices from Meraki API. |
Script | meraki.get.data |
Meraki: Data item errors | Item for gathering all the data item errors. |
Dependent item | meraki.get.data.errors Preprocessing
|
Triggers
Name | Description | Expression | Severity | Dependencies and additional info |
---|---|---|---|---|
Meraki: There are errors in 'Get data' metric | length(last(/Cisco Meraki dashboard by HTTP/meraki.get.data.errors))>0 |
Warning |
LLD rule Organizations discovery
Name | Description | Type | Key and additional info |
---|---|---|---|
Organizations discovery | Dependent item | meraki.organization.discovery Preprocessing
|
LLD rule Devices discovery
Name | Description | Type | Key and additional info |
---|---|---|---|
Devices discovery | Dependent item | meraki.devices.discovery Preprocessing
|
Cisco Meraki organization by HTTP
Macros used
Name | Description | Default |
---|---|---|
{$MERAKI.TOKEN} | Cisco Meraki Dashboard API Token. |
|
{$MERAKI.API.URL} | Cisco Meraki Dashboard API URL. e.g api.meraki.com/api/v1 |
api.meraki.com/api/v1 |
{$MERAKI.LICENSE.EXPIRE} | Time in seconds for license to expire. |
86400 |
{$MERAKI.CONFIG.CHANGE.TIMESPAN} | Timespan for gathering config change log. Used in the metric config and in the URL query. |
1200 |
{$MERAKI.HTTP_PROXY} | HTTP proxy for API requests. You can specify it using the format [protocol://][username[:password]@]proxy.example.com[:port]. See documentation at https://www.zabbix.com/documentation/7.0/manual/config/items/itemtypes/http |
Items
Name | Description | Type | Key and additional info |
---|---|---|---|
Meraki: Get list of the networks | Item for gathering all the networks of organization from Meraki API. |
Script | meraki.get.networks |
Meraki: Networks item errors | Item for gathering all the networks item errors. |
Dependent item | meraki.get.networks.errors Preprocessing
|
Meraki: Get list of the vpn stats | Item for gathering all the vpn stats of the organization. |
Script | meraki.get.vpn.stats |
Meraki: VPN item errors | Item for gathering all the vpn item errors. |
Dependent item | meraki.get.vpn.stats.errors Preprocessing
|
Meraki: Get list of configuration changes | Item for viewing the Change Log for your organization.\nGathering once per 20m by default. |
HTTP agent | meraki.get.configuration.changes Preprocessing
|
Meraki: Get list of adaptive policy aggregate statistics | Item for adaptive policy aggregate statistics for an organization. |
HTTP agent | meraki.get.adaptive.policy |
Meraki: Groups | Meraki adaptive policy groups count. |
Dependent item | meraki.policies.groups Preprocessing
|
Meraki: Custom ACLs | Meraki adaptive policy custom ACLs count. |
Dependent item | meraki.policies.custom.acls Preprocessing
|
Meraki: Policies | Meraki adaptive policies count. |
Dependent item | meraki.policies Preprocessing
|
Meraki: Allow policies | Meraki adaptive allow policies count. |
Dependent item | meraki.policies.allow Preprocessing
|
Meraki: Deny policies | Meraki adaptive deny policies count. |
Dependent item | meraki.policies.deny Preprocessing
|
Meraki: Get licenses info | Return an overview of the license state for an organization. |
HTTP agent | meraki.get.licenses |
Meraki: License status | Meraki license status. |
Dependent item | meraki.license.status Preprocessing
|
Meraki: License expire | Meraki license expire time in seconds left. |
Dependent item | meraki.license.expire Preprocessing
|
Triggers
Name | Description | Expression | Severity | Dependencies and additional info |
---|---|---|---|---|
Meraki: There are errors in 'Get networks' metric | length(last(/Cisco Meraki organization by HTTP/meraki.get.networks.errors))>0 |
Warning | ||
Meraki: There are errors in 'Get VPNs' metric | length(last(/Cisco Meraki organization by HTTP/meraki.get.vpn.stats.errors))>0 |
Warning | ||
Meraki: Configuration has been changed | length(last(/Cisco Meraki organization by HTTP/meraki.get.configuration.changes))>3 |
Warning | ||
Meraki: License status is not OK | last(/Cisco Meraki organization by HTTP/meraki.license.status)<>1 |
Warning | ||
Meraki: License expires in less than {$MERAKI.LICENSE.EXPIRE} seconds | last(/Cisco Meraki organization by HTTP/meraki.license.expire)<{$MERAKI.LICENSE.EXPIRE} and last(/Cisco Meraki organization by HTTP/meraki.license.expire)>=0 |
Warning |
LLD rule Uplinks discovery
Name | Description | Type | Key and additional info |
---|---|---|---|
Uplinks discovery | Dependent item | meraki.uplinks.discovery Preprocessing
|
Item prototypes for Uplinks discovery
Name | Description | Type | Key and additional info |
---|---|---|---|
Uplink [{#INTERFACE}]: [{#UPLINK.ROLE}]: [{#NETWORK.NAME}]: status | Network uplink status. |
Dependent item | meraki.uplink.status[{#NETWORK.NAME}, {#INTERFACE}, {#UPLINK.ROLE}] Preprocessing
|
Trigger prototypes for Uplinks discovery
Name | Description | Expression | Severity | Dependencies and additional info |
---|---|---|---|---|
Uplink [{#INTERFACE}]: [{#UPLINK.ROLE}]: [{#NETWORK.NAME}]: status is failed | last(/Cisco Meraki organization by HTTP/meraki.uplink.status[{#NETWORK.NAME}, {#INTERFACE}, {#UPLINK.ROLE}])=0 |
Warning |
LLD rule VPN stats discovery
Name | Description | Type | Key and additional info |
---|---|---|---|
VPN stats discovery | Dependent item | meraki.vpn.stats.discovery Preprocessing
|
Item prototypes for VPN stats discovery
Name | Description | Type | Key and additional info |
---|---|---|---|
VPN [{#NETWORK.NAME}]=>[{#PEER.NETWORK.NAME}]: stats raw | VPN connection stats raw. |
Dependent item | meraki.vpn.stat.raw[{#NETWORK.ID}, {#SENDER.UPLINK}, {#PEER.NETWORK.ID}, {#RECEIVER.UPLINK}] Preprocessing
|
VPN [{#NETWORK.NAME}][{#SENDER.UPLINK}]=>[{#PEER.NETWORK.NAME}][{#RECEIVER.UPLINK}]: latency avg | VPN connection avg latency. |
Dependent item | meraki.vpn.stat.latency.avg[{#NETWORK.ID}, {#SENDER.UPLINK}, {#PEER.NETWORK.ID}, {#RECEIVER.UPLINK}] Preprocessing
|
VPN [{#NETWORK.NAME}][{#SENDER.UPLINK}]=>[{#PEER.NETWORK.NAME}][{#RECEIVER.UPLINK}]: latency min | VPN connection min latency. |
Dependent item | meraki.vpn.stat.latency.min[{#NETWORK.ID}, {#SENDER.UPLINK}, {#PEER.NETWORK.ID}, {#RECEIVER.UPLINK}] Preprocessing
|
VPN [{#NETWORK.NAME}][{#SENDER.UPLINK}]=>[{#PEER.NETWORK.NAME}][{#RECEIVER.UPLINK}]: latency max | VPN connection max latency. |
Dependent item | meraki.vpn.stat.latency.max[{#NETWORK.ID}, {#SENDER.UPLINK}, {#PEER.NETWORK.ID}, {#RECEIVER.UPLINK}] Preprocessing
|
VPN [{#NETWORK.NAME}][{#SENDER.UPLINK}]=>[{#PEER.NETWORK.NAME}][{#RECEIVER.UPLINK}]: loss avg, % | VPN connection loss avg. |
Dependent item | meraki.vpn.stat.loss.avg[{#NETWORK.ID}, {#SENDER.UPLINK}, {#PEER.NETWORK.ID}, {#RECEIVER.UPLINK}] Preprocessing
|
VPN [{#NETWORK.NAME}][{#SENDER.UPLINK}]=>[{#PEER.NETWORK.NAME}][{#RECEIVER.UPLINK}]: loss min, % | VPN connection loss min. |
Dependent item | meraki.vpn.stat.loss.min[{#NETWORK.ID}, {#SENDER.UPLINK}, {#PEER.NETWORK.ID}, {#RECEIVER.UPLINK}] Preprocessing
|
VPN [{#NETWORK.NAME}][{#SENDER.UPLINK}]=>[{#PEER.NETWORK.NAME}][{#RECEIVER.UPLINK}]: loss max, % | VPN connection loss max. |
Dependent item | meraki.vpn.stat.loss.max[{#NETWORK.ID}, {#SENDER.UPLINK}, {#PEER.NETWORK.ID}, {#RECEIVER.UPLINK}] Preprocessing
|
VPN [{#NETWORK.NAME}][{#SENDER.UPLINK}]=>[{#PEER.NETWORK.NAME}][{#RECEIVER.UPLINK}]: jitter avg | VPN connection jitter avg. |
Dependent item | meraki.vpn.stat.jitter.avg[{#NETWORK.ID}, {#SENDER.UPLINK}, {#PEER.NETWORK.ID}, {#RECEIVER.UPLINK}] Preprocessing
|
VPN [{#NETWORK.NAME}][{#SENDER.UPLINK}]=>[{#PEER.NETWORK.NAME}][{#RECEIVER.UPLINK}]: jitter min | VPN connection jitter min. |
Dependent item | meraki.vpn.stat.jitter.min[{#NETWORK.ID}, {#SENDER.UPLINK}, {#PEER.NETWORK.ID}, {#RECEIVER.UPLINK}] Preprocessing
|
VPN [{#NETWORK.NAME}][{#SENDER.UPLINK}]=>[{#PEER.NETWORK.NAME}][{#RECEIVER.UPLINK}]: jitter max | VPN connection jitter max. |
Dependent item | meraki.vpn.stat.jitter.max[{#NETWORK.ID}, {#SENDER.UPLINK}, {#PEER.NETWORK.ID}, {#RECEIVER.UPLINK}] Preprocessing
|
VPN [{#NETWORK.NAME}][{#SENDER.UPLINK}]=>[{#PEER.NETWORK.NAME}][{#RECEIVER.UPLINK}]: mos avg | VPN connection mos avg. |
Dependent item | meraki.vpn.stat.mos.avg[{#NETWORK.ID}, {#SENDER.UPLINK}, {#PEER.NETWORK.ID}, {#RECEIVER.UPLINK}] Preprocessing
|
VPN [{#NETWORK.NAME}][{#SENDER.UPLINK}]=>[{#PEER.NETWORK.NAME}][{#RECEIVER.UPLINK}]: mos min | VPN connection mos min. |
Dependent item | meraki.vpn.stat.mos.min[{#NETWORK.ID}, {#SENDER.UPLINK}, {#PEER.NETWORK.ID}, {#RECEIVER.UPLINK}] Preprocessing
|
VPN [{#NETWORK.NAME}][{#SENDER.UPLINK}]=>[{#PEER.NETWORK.NAME}][{#RECEIVER.UPLINK}]: mos max | VPN connection mos max. |
Dependent item | meraki.vpn.stat.mos.max[{#NETWORK.ID}, {#SENDER.UPLINK}, {#PEER.NETWORK.ID}, {#RECEIVER.UPLINK}] Preprocessing
|
Cisco Meraki device by HTTP
Macros used
Name | Description | Default |
---|---|---|
{$MERAKI.TOKEN} | Cisco Meraki Dashboard API Token. |
|
{$MERAKI.API.URL} | Cisco Meraki Dashboard API URL. e.g api.meraki.com/api/v1 |
api.meraki.com/api/v1 |
{$MERAKI.DEVICE.LOSS} | Devices uplink loss threshold in percents. |
15 |
{$MERAKI.DEVICE.LATENCY} | Devices uplink latency threshold in seconds. |
0.15 |
{$MERAKI.HTTP_PROXY} | HTTP proxy for API requests. You can specify it using the format [protocol://][username[:password]@]proxy.example.com[:port]. See documentation at https://www.zabbix.com/documentation/7.0/manual/config/items/itemtypes/http |
|
{$MERAKI.DEVICE.UPLINK.MATCHES} | This macro is used in loss and latency checks discovery. Can be overridden on the host or linked template level. |
.+ |
{$MERAKI.DEVICE.UPLINK.NOT_MATCHES} | This macro is used in loss and latency checks discovery. Can be overridden on the host or linked template level. |
^$ |
{$MERAKI.DEVICE.LOSS.LATENCY.IP.MATCHES} | This macro is used in loss and latency checks discovery. Can be overridden on the host or linked template level. |
^((25[0-5]|(2[0-4]|1\d|[1-9]|)\d)\.?\b){4}$ |
{$MERAKI.DEVICE.LOSS.LATENCY.IP.NOT_MATCHES} | This macro is used in loss and latency checks discovery. Can be overridden on the host or linked template level. |
^$ |
Items
Name | Description | Type | Key and additional info |
---|---|---|---|
Meraki: Get device data | Item for gathering device data from Meraki API. |
Script | meraki.get.device |
Meraki: Device data item errors | Item for gathering errors of the device item. |
Dependent item | meraki.get.device.errors Preprocessing
|
Meraki: status | Device operational status Network: {$NETWORK.ID} MAC: {$MAC} |
Dependent item | meraki.device.status Preprocessing
|
Meraki: public ip | Device public ip Network: {$NETWORK.ID} MAC: {$MAC} |
Dependent item | meraki.device.public.ip Preprocessing
|
Triggers
Name | Description | Expression | Severity | Dependencies and additional info |
---|---|---|---|---|
Meraki: There are errors in 'Get Device data' metric | length(last(/Cisco Meraki device by HTTP/meraki.get.device.errors))>0 |
Warning | ||
Meraki: Status is not online | last(/Cisco Meraki device by HTTP/meraki.device.status)<>1 |
Warning |
LLD rule Uplinks loss and quality discovery
Name | Description | Type | Key and additional info |
---|---|---|---|
Uplinks loss and quality discovery | Dependent item | meraki.device.uplinks.discovery Preprocessing
|
Item prototypes for Uplinks loss and quality discovery
Name | Description | Type | Key and additional info |
---|---|---|---|
Uplink [{#IP}]: [{#UPLINK}]: Loss, % | Loss percent of the device uplink. Network: {#NETWORK.ID}. Device serial: {#SERIAL}. |
Dependent item | meraki.device.loss.pct[{#IP},{#UPLINK}] Preprocessing
|
Uplink [{#IP}]: [{#UPLINK}]: Latency | Latency of the device uplink. Network: {#NETWORK.ID}. Device serial: {#SERIAL}. |
Dependent item | meraki.device.latency[{#IP},{#UPLINK}] Preprocessing
|
Trigger prototypes for Uplinks loss and quality discovery
Name | Description | Expression | Severity | Dependencies and additional info |
---|---|---|---|---|
Uplink [{#IP}]: [{#UPLINK}]: loss > {$MERAKI.DEVICE.LOSS}% | min(/Cisco Meraki device by HTTP/meraki.device.loss.pct[{#IP},{#UPLINK}],#3)>{$MERAKI.DEVICE.LOSS} |
Warning | ||
Uplink [{#IP}]: [{#UPLINK}]: latency > {$MERAKI.DEVICE.LATENCY} | min(/Cisco Meraki device by HTTP/meraki.device.latency[{#IP},{#UPLINK}],#3)>{$MERAKI.DEVICE.LATENCY} |
Warning |
Feedback
Please report any issues with the template at https://support.zabbix.com
You can also provide feedback, discuss the template, or ask for help at ZABBIX forums