Available solutions




This template is for Zabbix version: 7.0
Also available for: 6.4 6.2 6.0

Source: https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/net/meraki_http?at=release/7.0

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).

Set filters with macros if you want to override default filter parameters.

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.DATA.TIMEOUT}

Response timeout for an API.

60
{$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.DEVICE.STATUS.MATCHES}

This macro is used in devices discovery. Can be overridden on the host or linked template level.

.*
{$MERAKI.DEVICE.STATUS.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
Get data

Item for gathering all the organizations and devices from Meraki API.

Script meraki.get.data
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
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.DATA.TIMEOUT}

Response timeout for an API.

60
{$MERAKI.LICENSE.EXPIRE}

Time in seconds for license to expire.

86400
{$MERAKI.VPN.LOSS.PERCENTILE}

Average VPN connection loss percentage. Used in the trigger expression

90
{$MERAKI.CONFIG.CHANGE.TIMESPAN}

Timespan in seconds for gathering configuration change log. Used in the metric configuration and in the URL query.

1200
{$MERAKI.VPN.STATS.TIMESPAN}

Timespan in seconds for getting organization appliance VPN stats. Used in the metric configuration and in the JavaScript API query. Must be between 1 and 86400 seconds.

180
{$MERAKI.LICENSE.TYPE.MATCHES}

Filter of discoverable license.

.*
{$MERAKI.LICENSE.TYPE.NOT_MATCHES}

Filter to exclude discovered license.

CHANGE_IF_NEEDED
{$MERAKI.LICENSE.STATE.MATCHES}

Filter of discoverable license.

.*
{$MERAKI.LICENSE.STATE.NOT_MATCHES}

Filter to exclude discovered license.

CHANGE_IF_NEEDED
{$MERAKI.SAML.ORG.ACCESS.MATCHES}

Filter of discoverable SAML role.

.*
{$MERAKI.SAML.ORG.ACCESS.NOT_MATCHES}

Filter to exclude discovered SAML role.

CHANGE_IF_NEEDED
{$MERAKI.SAML.ROLE.MATCHES}

Filter of discoverable SAML role.

.*
{$MERAKI.SAML.ROLE.NOT_MATCHES}

Filter to exclude discovered SAML role.

CHANGE_IF_NEEDED
{$MERAKI.ADMIN.NAME.MATCHES}

Filter of discoverable admins in organization.

.*
{$MERAKI.ADMIN.NAME.NOT_MATCHES}

Filter to exclude discovered admins in organization.

CHANGE_IF_NEEDED
{$MERAKI.ADMIN.ORG.ACCESS.MATCHES}

Filter of discoverable admins in organization.

.*
{$MERAKI.ADMIN.ORG.ACCESS.NOT_MATCHES}

Filter to exclude discovered admins in organization.

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

{$MERAKI.LLD.UPLINK.NETWORK.NAME.MATCHES}

This macro is used in uplinks discovery. Can be overridden on the host or linked template level.

.*
{$MERAKI.LLD.UPLINK.NETWORK.NAME.NOT_MATCHES}

This macro is used in uplinks discovery. Can be overridden on the host or linked template level.

CHANGE_IF_NEEDED
{$MERAKI.LLD.UPLINK.ROLE.MATCHES}

This macro is used in uplinks discovery. Can be overridden on the host or linked template level.

.*
{$MERAKI.LLD.UPLINK.ROLE.NOT_MATCHES}

This macro is used in uplinks discovery. Can be overridden on the host or linked template level.

CHANGE_IF_NEEDED
{$MERAKI.LLD.VPN.NETWORK.NAME.MATCHES}

This macro is used in VPN stats discovery. Can be overridden on the host or linked template level.

.*
{$MERAKI.LLD.VPN.NETWORK.NAME.NOT_MATCHES}

This macro is used in VPN stats discovery. Can be overridden on the host or linked template level.

CHANGE_IF_NEEDED
{$MERAKI.LLD.VPN.PEER.NETWORK.NAME.MATCHES}

This macro is used in VPN stats discovery. Can be overridden on the host or linked template level.

.*
{$MERAKI.LLD.VPN.PEER.NETWORK.NAME.NOT_MATCHES}

This macro is used in VPN stats discovery. Can be overridden on the host or linked template level.

CHANGE_IF_NEEDED
{$MERAKI.LLD.VPN.SENDER.UPLINK.MATCHES}

This macro is used in VPN stats discovery. Can be overridden on the host or linked template level.

.*
{$MERAKI.LLD.VPN.SENDER.UPLINK.NOT_MATCHES}

This macro is used in VPN stats discovery. Can be overridden on the host or linked template level.

CHANGE_IF_NEEDED
{$MERAKI.LLD.VPN.RECEIVER.UPLINK.MATCHES}

This macro is used in VPN stats discovery. Can be overridden on the host or linked template level.

.*
{$MERAKI.LLD.VPN.RECEIVER.UPLINK.NOT_MATCHES}

This macro is used in VPN stats discovery. Can be overridden on the host or linked template level.

CHANGE_IF_NEEDED

Items

Name Description Type Key and additional info
Get list of the networks

Item for gathering all the networks of organization from Meraki API.

Script meraki.get.networks
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

Get list of the VPN stats

Item for gathering all the VPN stats of the organization.

Script meraki.get.vpn.stats
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

Get list of configuration changes

Item for viewing the change log for your organization. Gathering once per 20m by default.

HTTP agent meraki.get.configuration.changes

Preprocessing

  • Discard unchanged with heartbeat: 2h

Get list of adaptive policy aggregate statistics

Item for adaptive policy aggregate statistics for the organization.

HTTP agent meraki.get.adaptive.policy
Groups

Meraki adaptive policy groups count.

Dependent item meraki.policies.groups

Preprocessing

  • JSON Path: $.counts.groups

Custom ACLs

Meraki adaptive policy custom ACLs count.

Dependent item meraki.policies.custom.acls

Preprocessing

  • JSON Path: $.counts.customAcls

Policies

Meraki adaptive policies count.

Dependent item meraki.policies

Preprocessing

  • JSON Path: $.counts.policies

Allow policies

Meraki adaptive allow policies count.

Dependent item meraki.policies.allow

Preprocessing

  • JSON Path: $.counts.allowPolicies

Deny policies

Meraki adaptive deny policies count.

Dependent item meraki.policies.deny

Preprocessing

  • JSON Path: $.counts.denyPolicies

Get licenses overview

Return overview of the license state for the organization.

HTTP agent meraki.get.licenses
License status

Meraki license status.

Dependent item meraki.license.status

Preprocessing

  • JSON Path: $.status

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

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.

Get list licenses

Return list of the licenses for the organization.

Script meraki.get.list.licenses
Get SAML SSO

Return the enabled SAML SSO settings for the organization.

HTTP agent meraki.get.saml

Preprocessing

  • JSON Path: $.enabled

  • Boolean to decimal
Get SAML roles

Get list of the SAML roles for this organization.

HTTP agent meraki.get.saml.roles
Get admin's account

Get list of the dashboard administrators in this organization.

HTTP agent meraki.get.admins
Get login security

Return the login security settings for the organization.

HTTP agent meraki.get.login.security
Account lockout attempts

Number of consecutive failed login attempts after which users' accounts will be locked.

Dependent item meraki.account.lockout.attempts

Preprocessing

  • JSON Path: $.accountLockoutAttempts

Idle timeout minutes

Number of minutes users can remain idle before being logged out of their accounts.

Dependent item meraki.idle.timeout.minutes

Preprocessing

  • JSON Path: $.idleTimeoutMinutes

Number of different passwords

Number of recent passwords that new password must be distinct from.

Dependent item meraki.login.num.different.passwords

Preprocessing

  • JSON Path: $.numDifferentPasswords

Password expiration days

Number of days after which users will be forced to change their password.

Dependent item meraki.login.password.expiration.days

Preprocessing

  • JSON Path: $.passwordExpirationDays

Enforce account lockout

Boolean indicating whether users' dashboard accounts will be locked out after a specified number of consecutive failed login attempts.

Dependent item meraki.login.enforce.account.lockout

Preprocessing

  • JSON Path: $.enforceAccountLockout

  • Boolean to decimal
Enforce different passwords

Boolean indicating whether users, when setting a new password, are forced to choose a new password that is different from any past passwords.

Dependent item meraki.login.enforce.different.passwords

Preprocessing

  • JSON Path: $.enforceDifferentPasswords

  • Boolean to decimal
Enforce idle timeout

Boolean indicating whether users will be logged out after being idle for the specified number of minutes.

Dependent item meraki.login.enforce.idle.timeout

Preprocessing

  • JSON Path: $.enforceIdleTimeout

  • Boolean to decimal
Enforce login IP ranges

Boolean indicating whether organization will restrict access to the dashboard (including the API) from certain IP addresses.

Dependent item meraki.login.enforce.login.ip.ranges

Preprocessing

  • JSON Path: $.enforceLoginIpRanges

  • Boolean to decimal
Enforce password expiration

Boolean indicating whether users are forced to change their password every X days.

Dependent item meraki.login.enforce.password.expiration

Preprocessing

  • JSON Path: $.enforcePasswordExpiration

  • Boolean to decimal
Enforce 2FA

Boolean indicating whether users in this organization will be required to use an extra verification code when logging in to the dashboard. This code will be sent to their mobile phones via SMS or can be generated by the authenticator application.

Dependent item meraki.login.enforce.two.factor.auth

Preprocessing

  • JSON Path: $.enforceTwoFactorAuth

  • Boolean to decimal

Triggers

Name Description Expression Severity Dependencies and additional info
There are errors in 'Get networks' metric length(last(/Cisco Meraki organization by HTTP/meraki.get.networks.errors))>0 Warning
There are errors in 'Get VPNs' metric length(last(/Cisco Meraki organization by HTTP/meraki.get.vpn.stats.errors))>0 Warning
Configuration has been changed length(last(/Cisco Meraki organization by HTTP/meraki.get.configuration.changes))>3 Warning
License status is not OK last(/Cisco Meraki organization by HTTP/meraki.license.status)<>1 Warning
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

  • JSON Path: $.uplinks

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

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

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

Uplink [{#INTERFACE}]: [{#UPLINK.ROLE}]: [{#NETWORK.NAME}]: interface

Network uplink interface.

Dependent item meraki.uplink.interface[{#NETWORK.NAME}, {#INTERFACE}, {#UPLINK.ROLE}]

Preprocessing

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

Uplink [{#INTERFACE}]: [{#UPLINK.ROLE}]: [{#NETWORK.NAME}]: public IP

Network uplink public IP.

Dependent item meraki.uplink.public.ip[{#NETWORK.NAME}, {#INTERFACE}, {#UPLINK.ROLE}]

Preprocessing

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

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 Networks discovery

Name Description Type Key and additional info
Networks discovery Dependent item meraki.networks.discovery

Preprocessing

  • JSON Path: $.networks

Item prototypes for Networks discovery

Name Description Type Key and additional info
Network [{#NETWORK.NAME}]: time zone

Timezone of the network.

Dependent item meraki.network.timezone[{#NETWORK.ID}]

Preprocessing

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

LLD rule VPN statuses discovery

Name Description Type Key and additional info
VPN statuses discovery Dependent item meraki.vpn.statuses.discovery

Preprocessing

  • JSON Path: $.vpnStatuses

Item prototypes for VPN statuses discovery

Name Description Type Key and additional info
VPN [{#NETWORK.NAME}]: statuses raw

VPN statuses raw.

Dependent item meraki.vpn.statuses.raw[{#NETWORK.ID}, {#NETWORK.NAME}]

Preprocessing

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

VPN [{#NETWORK.NAME}]: mode

VPN network mode.

Dependent item meraki.vpn.statuses.mode[{#NETWORK.ID}, {#NETWORK.NAME}]

Preprocessing

  • JSON Path: $.vpnMode

VPN [{#NETWORK.NAME}]: peers network name

VPN network name Meraki VPN peers.

Dependent item meraki.vpn.statuses.peers.network.name[{#NETWORK.ID}, {#NETWORK.NAME}]

Preprocessing

  • JSON Path: $.merakiVpnPeers..networkName.first()

    ⛔️Custom on fail: Discard value

VPN [{#NETWORK.NAME}]: peers network ID

VPN network ID.

Dependent item meraki.vpn.statuses.peers.network.id[{#NETWORK.ID}, {#NETWORK.NAME}]

Preprocessing

  • JSON Path: $.merakiVpnPeers..networkId.first()

    ⛔️Custom on fail: Discard value

VPN [{#NETWORK.NAME}]: peers network reachability

VPN network Meraki VPN peers reachability.

Dependent item meraki.vpn.statuses.peers.reachability[{#NETWORK.ID}, {#NETWORK.NAME}]

Preprocessing

  • JSON Path: $.merakiVpnPeers..reachability.first()

    ⛔️Custom on fail: Discard value

VPN [{#NETWORK.NAME}]: third-party peers network name

Return network name of the third-party VPN peers for the organization.

Dependent item meraki.vpn.statuses.third.party.peers.network.name[{#NETWORK.ID}, {#NETWORK.NAME}]

Preprocessing

  • JSON Path: $.thirdPartyVpnPeers..networkName.first()

    ⛔️Custom on fail: Discard value

VPN [{#NETWORK.NAME}]: third-party peers network ID

Return network ID of the third-party VPN peers for the organization.

Dependent item meraki.vpn.statuses.third.party.peers.network.id[{#NETWORK.ID}, {#NETWORK.NAME}]

Preprocessing

  • JSON Path: $.thirdPartyVpnPeers..networkId.first()

    ⛔️Custom on fail: Discard value

VPN [{#NETWORK.NAME}]: third-party peers network reachability

Return network reachability of the third-party VPN peers for the organization.

Dependent item meraki.vpn.statuses.third.party.peers.reachability[{#NETWORK.ID}, {#NETWORK.NAME}]

Preprocessing

  • JSON Path: $.thirdPartyVpnPeers..reachability.first()

    ⛔️Custom on fail: Discard value

VPN [{#NETWORK.NAME}]: device serial

VPN network device serial.

Dependent item meraki.vpn.statuses.device.serial[{#NETWORK.ID}, {#NETWORK.NAME}]

Preprocessing

  • JSON Path: $.deviceSerial

VPN [{#NETWORK.NAME}]: device status

VPN network device status.

Dependent item meraki.vpn.statuses.device.status[{#NETWORK.ID}, {#NETWORK.NAME}]

Preprocessing

  • JSON Path: $.deviceStatus

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

Trigger prototypes for VPN stats discovery

Name Description Expression Severity Dependencies and additional info
VPN [{#NETWORK.NAME}][{#SENDER.UPLINK}]=>[{#PEER.NETWORK.NAME}][{#RECEIVER.UPLINK}]: High average VPN connection loss (over >= {$MERAKI.VPN.LOSS.PERCENTILE%) count(/Cisco Meraki organization by HTTP/meraki.vpn.stat.loss.avg[{#NETWORK.ID}, {#SENDER.UPLINK}, {#PEER.NETWORK.ID}, {#RECEIVER.UPLINK}],#3,,"{$MERAKI.VPN.LOSS.PERCENTILE}")>=3 Average

LLD rule License discovery

Name Description Type Key and additional info
License discovery Dependent item meraki.license.discovery

Preprocessing

  • JSON Path: $.licenses

Item prototypes for License discovery

Name Description Type Key and additional info
License [{#LICENSE.ID}]: get data

Raw data for a license.

Dependent item meraki.license.get[{#LICENSE.ID}]

Preprocessing

  • JSON Path: $.licenses.[?(@.id == "{#LICENSE.ID}")].first()

License [{#LICENSE.ID}]: activation date

The date the license started burning.

Dependent item meraki.license.activation.date[{#LICENSE.ID}]

Preprocessing

  • JSON Path: $.activationDate

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

License [{#LICENSE.ID}]: expiration date

The date the license will expire.

Dependent item meraki.license.expiration.date[{#LICENSE.ID}]

Preprocessing

  • JSON Path: $.expirationDate

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

License [{#LICENSE.ID}]: total duration in days

The duration of the license plus all permanently queued licenses associated with it.

Dependent item meraki.license.total.duration[{#LICENSE.ID}]

Preprocessing

  • JSON Path: $.totalDurationInDays

  • JavaScript: `return days = Math.floor(value)

License [{#LICENSE.ID}]: device serial

Serial number of the device the license is assigned to.

Dependent item meraki.license.device.serial[{#LICENSE.ID}]

Preprocessing

  • JSON Path: $.deviceSerial

License [{#LICENSE.ID}]: device name

Name of the device the license is assigned to.

Dependent item meraki.license.device.name[{#LICENSE.ID}]

Preprocessing

  • JSON Path: $.deviceName

License [{#LICENSE.ID}]: key

License key.

Dependent item meraki.license.key[{#LICENSE.ID}]

Preprocessing

  • JSON Path: $.licenseKey

License [{#LICENSE.ID}]: state

The state of the license. All queued licenses have a status of 'recently queued'.

Dependent item meraki.license.state[{#LICENSE.ID}]

Preprocessing

  • JSON Path: $.state

LLD rule SAML roles discovery

Name Description Type Key and additional info
SAML roles discovery Dependent item meraki.saml.roles.discovery

Item prototypes for SAML roles discovery

Name Description Type Key and additional info
SAML role [{#SAML.ROLE}]: get data

Raw data for SAML roles.

Dependent item meraki.saml.get[{#SAML.ID}]

Preprocessing

  • JSON Path: $.[?(@.id == "{#SAML.ID}")].first()

SAML role [{#SAML.ROLE}]: organization access

The privilege of the SAML administrator in the organization.

Dependent item meraki.saml.org.access[{#SAML.ID}]

Preprocessing

  • JSON Path: $.orgAccess

LLD rule Administrators discovery

Name Description Type Key and additional info
Administrators discovery Dependent item meraki.admins.discovery

Item prototypes for Administrators discovery

Name Description Type Key and additional info
Admin [{#ADMIN.NAME}]: get data

Raw data for admin in this organization.

Dependent item meraki.admin.get[{#ADMIN.ID}]

Preprocessing

  • JSON Path: $.[?(@.id == "{#ADMIN.ID}")].first()

Admin [{#ADMIN.NAME}]: account status

Status of the admin's account.

Dependent item meraki.admin.account.status[{#ADMIN.ID}]

Preprocessing

  • JSON Path: $.accountStatus

Admin [{#ADMIN.NAME}]: authentication method

Admin's authentication method.

Dependent item meraki.admin.account.auth.method[{#ADMIN.ID}]

Preprocessing

  • JSON Path: $.authenticationMethod

Admin [{#ADMIN.NAME}]: organization access

Admin's level of access to the organization.

Dependent item meraki.admin.account.org.access[{#ADMIN.ID}]

Preprocessing

  • JSON Path: $.orgAccess

Admin [{#ADMIN.NAME}]: 2FA enabled

Indicates whether two-factor authentication is enabled.

Dependent item meraki.admin.account.two.factor.auth[{#ADMIN.ID}]

Preprocessing

  • JSON Path: $.twoFactorAuthEnabled

  • Boolean to decimal

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 percent.

15
{$MERAKI.DEVICE.LATENCY}

Devices uplink latency threshold, in seconds.

0.15
{$MERAKI.GET.STATUS.INTERVAL}

Update interval for get status item.

300
{$MERAKI.DATA.TIMEOUT}

Response timeout for an API.

60
{$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.UPLINK.LL.TIMESPAN}

Timespan in seconds for getting device uplinks loss and quality stats. Used in the metric configuration and in the JavaScript API query. Must be between 1 and 86400 seconds.

180
{$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.

^null$
{$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.

^null$

Items

Name Description Type Key and additional info
Get device data

Item for gathering device data from Meraki API.

Script meraki.get.device
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

Get status

Item for gathering device status from Meraki API.

HTTP agent meraki.device.get.status

Preprocessing

  • JSON Path: $[0]

status

Device operational status

Network: {$NETWORK.ID}

MAC: {$MAC}

Dependent item meraki.device.status

Preprocessing

  • JSON Path: $.status

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

public IP

Device public IP

Network: {$NETWORK.ID}

MAC: {$MAC}

Dependent item meraki.device.public.ip

Preprocessing

  • JSON Path: $.publicIp

Triggers

Name Description Expression Severity Dependencies and additional info
There are errors in 'Get device data' metric length(last(/Cisco Meraki device by HTTP/meraki.get.device.errors))>0 Warning
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

  • JSON Path: $.uplinksLL

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

  • 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

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

Articles and documentation

+ Propose new article

Didn't find what you are looking for?