You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

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

  • JSON Path: $.error

  • Discard unchanged with heartbeat: 1h

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

  • JSON Path: $.organizations

LLD rule Devices discovery

Name Description Type Key and additional info
Devices discovery Dependent item meraki.devices.discovery

Preprocessing

  • JSON Path: $.devices

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

  • JSON Path: $.error

  • Discard unchanged with heartbeat: 1h

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

  • JSON Path: $.error

  • Discard unchanged with heartbeat: 1h

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

  • Discard unchanged with heartbeat: 2h

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

  • JSON Path: $.counts.groups

Meraki: Custom ACLs

Meraki adaptive policy custom ACLs count.

Dependent item meraki.policies.custom.acls

Preprocessing

  • JSON Path: $.counts.customAcls

Meraki: Policies

Meraki adaptive policies count.

Dependent item meraki.policies

Preprocessing

  • JSON Path: $.counts.policies

Meraki: Allow policies

Meraki adaptive allow policies count.

Dependent item meraki.policies.allow

Preprocessing

  • JSON Path: $.counts.allowPolicies

Meraki: Deny policies

Meraki adaptive deny policies count.

Dependent item meraki.policies.deny

Preprocessing

  • JSON Path: $.counts.denyPolicies

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

  • JSON Path: $.status

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

Meraki: License expire

Meraki license expire time in seconds left.

Dependent item meraki.license.expire

Preprocessing

  • JSON Path: $.expirationDate

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

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
Name Description Type Key and additional info
Uplinks discovery Dependent item meraki.uplinks.discovery

Preprocessing

  • JSON Path: $.uplinks

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

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

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

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

  • JSON Path: $.vpnStats

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

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

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

  • JSON Path: $.avgLatencyMs

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

  • JSON Path: $.minLatencyMs

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

  • JSON Path: $.maxLatencyMs

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

  • JSON Path: $.avgLossPercentage

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

  • JSON Path: $.minLossPercentage

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

  • JSON Path: $.maxLossPercentage

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

  • JSON Path: $.avgJitter

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

  • JSON Path: $.minJitter

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

  • JSON Path: $.maxJitter

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

  • JSON Path: $.avgMos

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

  • JSON Path: $.minMos

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

  • JSON Path: $.maxMos

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

  • JSON Path: $.error

  • Discard unchanged with heartbeat: 1h

Meraki: status

Device operational status

Network: {$NETWORK.ID}

MAC: {$MAC}

Dependent item meraki.device.status

Preprocessing

  • JSON Path: $.device[0].status

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

Meraki: public ip

Device public ip

Network: {$NETWORK.ID}

MAC: {$MAC}

Dependent item meraki.device.public.ip

Preprocessing

  • JSON Path: $.device[0].publicIp

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
Name Description Type Key and additional info
Uplinks loss and quality discovery Dependent item meraki.device.uplinks.discovery

Preprocessing

  • JSON Path: $.uplinksLL

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

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

    Custom on fail: Set value to: -1

Uplink [{#IP}]: [{#UPLINK}]: Latency

Latency of the device uplink.

Network: {#NETWORK.ID}.

Device serial: {#SERIAL}.

Dependent item meraki.device.latency[{#IP},{#UPLINK}]

Preprocessing

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

    Custom on fail: Set value to: -1000

  • Custom multiplier: 0.001

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