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.
1748 lines
70 KiB
1748 lines
70 KiB
zabbix_export:
|
|
version: '7.0'
|
|
template_groups:
|
|
- uuid: a571c0d144b14fd4a87a9d9b2aa9fcd6
|
|
name: Templates/Applications
|
|
- uuid: 36bff6c29af64692839d077febfc7079
|
|
name: 'Templates/Network devices'
|
|
host_groups:
|
|
- uuid: a571c0d144b14fd4a87a9d9b2aa9fcd6
|
|
name: Applications
|
|
templates:
|
|
- uuid: 2fca6b60914b4fa98132b1a7885ab014
|
|
template: 'Cisco Meraki dashboard by HTTP'
|
|
name: 'Cisco Meraki dashboard by HTTP'
|
|
description: |
|
|
Template for monitoring Cisco Meraki dashboard https://meraki.cisco.com/products/meraki-dashboard/
|
|
|
|
You can discuss this template or leave feedback on our forum https://www.zabbix.com/forum/zabbix-suggestions-and-feedback/
|
|
|
|
Generated by official Zabbix template tool "Templator" 2.0.0
|
|
vendor:
|
|
name: Zabbix
|
|
version: 7.0-0
|
|
groups:
|
|
- name: Templates/Applications
|
|
- name: 'Templates/Network devices'
|
|
items:
|
|
- uuid: d1a5f3c79a604bae98c314d2aed64ff4
|
|
name: 'Meraki: Get data'
|
|
type: SCRIPT
|
|
key: meraki.get.data
|
|
delay: 1h
|
|
history: '0'
|
|
trends: '0'
|
|
value_type: TEXT
|
|
params: |
|
|
var params = JSON.parse(value);
|
|
|
|
var request = new HttpRequest();
|
|
|
|
request.addHeader('X-Cisco-Meraki-API-Key:' + params.token);
|
|
request.addHeader('User-Agent: ZabbixServer/1.0 Zabbix');
|
|
|
|
var response,
|
|
error_msg = '',
|
|
organizations = [],
|
|
devices = [];
|
|
|
|
function getHttpData(url) {
|
|
response = request.get(url);
|
|
Zabbix.log(4, '[ Meraki API ] [ ' + url + ' ] Received response with status code ' + request.getStatus() + ': ' + response);
|
|
|
|
if (response !== null) {
|
|
try {
|
|
response = JSON.parse(response);
|
|
}
|
|
catch (error) {
|
|
throw 'Failed to parse response received from Meraki API. Check debug log for more information.';
|
|
}
|
|
}
|
|
|
|
if (request.getStatus() !== 200) {
|
|
if (response.errors) {
|
|
throw response.errors.join(', ');
|
|
} else {
|
|
throw 'Failed to receive data: invalid response status code.';
|
|
}
|
|
}
|
|
|
|
if (typeof (response) !== 'object' || response === null) {
|
|
throw 'Cannot process response data: received data is not an object.';
|
|
}
|
|
|
|
return response;
|
|
};
|
|
|
|
try {
|
|
|
|
if (params.token === '{' + '$MERAKI.TOKEN}') {
|
|
throw 'Please change {' + '$MERAKI.TOKEN} macro with the proper value.';
|
|
}
|
|
|
|
if (params.url.indexOf('http://') === -1 && params.url.indexOf('https://') === -1) {
|
|
params.url = 'https://' + params.url;
|
|
}
|
|
|
|
if (!params.url.endsWith('/')) {
|
|
params.url += '/';
|
|
}
|
|
|
|
if (typeof params.httpproxy !== 'undefined' && params.httpproxy !== '') {
|
|
request.setProxy(params.httpproxy);
|
|
}
|
|
|
|
organizations = getHttpData(params.url + 'organizations');
|
|
|
|
if (Array.isArray(organizations) && organizations.length > 0) {
|
|
for (i in organizations) {
|
|
if ('id' in organizations[i]) {
|
|
organization_devices = getHttpData(params.url + 'organizations/' + encodeURIComponent(organizations[i].id) + '/devices');
|
|
|
|
if (Array.isArray(organization_devices) && organization_devices.length > 0) {
|
|
for (j in organization_devices) {
|
|
organization_devices[j].organizationId = organizations[i].id;
|
|
|
|
devices.push(organization_devices[j]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
} catch (error) {
|
|
error_msg = error;
|
|
};
|
|
|
|
return JSON.stringify({
|
|
'organizations': organizations,
|
|
'devices': devices,
|
|
'error': error_msg.toString()
|
|
});
|
|
description: 'Item for gathering all the organizations and devices from Meraki API.'
|
|
timeout: 60s
|
|
parameters:
|
|
- name: token
|
|
value: '{$MERAKI.TOKEN}'
|
|
- name: url
|
|
value: '{$MERAKI.API.URL}'
|
|
- name: httpproxy
|
|
value: '{$MERAKI.HTTP_PROXY}'
|
|
tags:
|
|
- tag: component
|
|
value: raw
|
|
- uuid: 6fdd764d820341e7bd2a24f42802c58a
|
|
name: 'Meraki: Data item errors'
|
|
type: DEPENDENT
|
|
key: meraki.get.data.errors
|
|
delay: '0'
|
|
history: 7d
|
|
trends: '0'
|
|
value_type: TEXT
|
|
description: 'Item for gathering all the data item errors.'
|
|
preprocessing:
|
|
- type: JSONPATH
|
|
parameters:
|
|
- $.error
|
|
- type: DISCARD_UNCHANGED_HEARTBEAT
|
|
parameters:
|
|
- 1h
|
|
master_item:
|
|
key: meraki.get.data
|
|
tags:
|
|
- tag: component
|
|
value: error
|
|
triggers:
|
|
- uuid: 2bf9355f548e4e9b9b8581fb43f175fe
|
|
expression: 'length(last(/Cisco Meraki dashboard by HTTP/meraki.get.data.errors))>0'
|
|
name: 'Meraki: There are errors in ''Get data'' metric'
|
|
priority: WARNING
|
|
tags:
|
|
- tag: scope
|
|
value: availability
|
|
discovery_rules:
|
|
- uuid: 6488b49e692e4fe8b6a1c57f56b6ba7d
|
|
name: 'Devices discovery'
|
|
type: DEPENDENT
|
|
key: meraki.devices.discovery
|
|
delay: '0'
|
|
filter:
|
|
conditions:
|
|
- macro: '{#NAME}'
|
|
value: '{$MERAKI.DEVICE.NAME.MATCHES}'
|
|
formulaid: A
|
|
- macro: '{#NAME}'
|
|
value: '{$MERAKI.DEVICE.NAME.NOT_MATCHES}'
|
|
operator: NOT_MATCHES_REGEX
|
|
formulaid: B
|
|
host_prototypes:
|
|
- uuid: 86d599f384d94b368508a170911213ec
|
|
host: '{#NAME}'
|
|
name: '[{#PRODUCT_TYPE}] {#NAME}'
|
|
group_links:
|
|
- group:
|
|
name: Applications
|
|
templates:
|
|
- name: 'Cisco Meraki device by HTTP'
|
|
macros:
|
|
- macro: '{$MAC}'
|
|
value: '{#MAC}'
|
|
description: 'MAC address of the device.'
|
|
- macro: '{$NETWORK.ID}'
|
|
value: '{#NETWORK.ID}'
|
|
description: 'Network ID of the device.'
|
|
- macro: '{$ORGANIZATION_ID}'
|
|
value: '{#ORGANIZATION_ID}'
|
|
description: 'Organization ID of the device.'
|
|
- macro: '{$SERIAL}'
|
|
value: '{#SERIAL}'
|
|
description: 'Serial number of the device.'
|
|
tags:
|
|
- tag: model
|
|
value: '{#MODEL}'
|
|
- tag: serial-number
|
|
value: '{#SERIAL}'
|
|
master_item:
|
|
key: meraki.get.data
|
|
lld_macro_paths:
|
|
- lld_macro: '{#MAC}'
|
|
path: $.mac
|
|
- lld_macro: '{#MODEL}'
|
|
path: $.model
|
|
- lld_macro: '{#NAME}'
|
|
path: $.name
|
|
- lld_macro: '{#NETWORK.ID}'
|
|
path: $.networkId
|
|
- lld_macro: '{#ORGANIZATION_ID}'
|
|
path: $.organizationId
|
|
- lld_macro: '{#PRODUCT_TYPE}'
|
|
path: $.productType
|
|
- lld_macro: '{#SERIAL}'
|
|
path: $.serial
|
|
preprocessing:
|
|
- type: JSONPATH
|
|
parameters:
|
|
- $.devices
|
|
- uuid: 30f38d19659646009ca436d48f9598b0
|
|
name: 'Organizations discovery'
|
|
type: DEPENDENT
|
|
key: meraki.organization.discovery
|
|
delay: '0'
|
|
filter:
|
|
conditions:
|
|
- macro: '{#NAME}'
|
|
value: '{$MERAKI.ORGANIZATION.NAME.MATCHES}'
|
|
formulaid: A
|
|
- macro: '{#NAME}'
|
|
value: '{$MERAKI.ORGANIZATION.NAME.NOT_MATCHES}'
|
|
operator: NOT_MATCHES_REGEX
|
|
formulaid: B
|
|
host_prototypes:
|
|
- uuid: 59cd2e995b814d7e9f8411dbc7420c76
|
|
host: '{#NAME}'
|
|
name: '[{#REGION}] {#NAME}'
|
|
group_links:
|
|
- group:
|
|
name: Applications
|
|
group_prototypes:
|
|
- name: '{#REGION}'
|
|
templates:
|
|
- name: 'Cisco Meraki organization by HTTP'
|
|
macros:
|
|
- macro: '{$ID}'
|
|
value: '{#ID}'
|
|
description: 'ID of the organization.'
|
|
master_item:
|
|
key: meraki.get.data
|
|
lld_macro_paths:
|
|
- lld_macro: '{#ID}'
|
|
path: $.id
|
|
- lld_macro: '{#NAME}'
|
|
path: $.name
|
|
- lld_macro: '{#REGION}'
|
|
path: $.cloud.region.name
|
|
- lld_macro: '{#URL}'
|
|
path: $.url
|
|
preprocessing:
|
|
- type: JSONPATH
|
|
parameters:
|
|
- $.organizations
|
|
tags:
|
|
- tag: class
|
|
value: network
|
|
- tag: target
|
|
value: cisco-meraki-dashboard
|
|
macros:
|
|
- macro: '{$MERAKI.API.URL}'
|
|
value: api.meraki.com/api/v1
|
|
description: 'Cisco Meraki Dashboard API URL. e.g api.meraki.com/api/v1'
|
|
- macro: '{$MERAKI.DEVICE.NAME.MATCHES}'
|
|
value: .+
|
|
description: 'This macro is used in devices discovery. Can be overridden on the host or linked template level.'
|
|
- macro: '{$MERAKI.DEVICE.NAME.NOT_MATCHES}'
|
|
value: CHANGE_IF_NEEDED
|
|
description: 'This macro is used in devices discovery. Can be overridden on the host or linked template level.'
|
|
- macro: '{$MERAKI.HTTP_PROXY}'
|
|
description: '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'
|
|
- macro: '{$MERAKI.ORGANIZATION.NAME.MATCHES}'
|
|
value: .+
|
|
description: 'This macro is used in organizations discovery. Can be overridden on the host or linked template level.'
|
|
- macro: '{$MERAKI.ORGANIZATION.NAME.NOT_MATCHES}'
|
|
value: CHANGE_IF_NEEDED
|
|
description: 'This macro is used in organizations discovery. Can be overridden on the host or linked template level.'
|
|
- macro: '{$MERAKI.TOKEN}'
|
|
type: SECRET_TEXT
|
|
description: 'Cisco Meraki Dashboard API Token.'
|
|
- uuid: 2cae7d2eeca04e6fa7419759ac9ad814
|
|
template: 'Cisco Meraki device by HTTP'
|
|
name: 'Cisco Meraki device by HTTP'
|
|
description: 'Generated by official Zabbix template tool "Templator" 2.0.0'
|
|
vendor:
|
|
name: Zabbix
|
|
version: 7.0-0
|
|
groups:
|
|
- name: Templates/Applications
|
|
- name: 'Templates/Network devices'
|
|
items:
|
|
- uuid: 2280b9212c474d99835ec1334ff780eb
|
|
name: 'Meraki: public ip'
|
|
type: DEPENDENT
|
|
key: meraki.device.public.ip
|
|
delay: '0'
|
|
history: 7d
|
|
trends: '0'
|
|
value_type: CHAR
|
|
description: |
|
|
Device public ip
|
|
Network: {$NETWORK.ID}
|
|
MAC: {$MAC}
|
|
preprocessing:
|
|
- type: JSONPATH
|
|
parameters:
|
|
- '$.device[0].publicIp'
|
|
master_item:
|
|
key: meraki.get.device
|
|
tags:
|
|
- tag: component
|
|
value: network
|
|
- uuid: 324b748bfe2e4383927176046e246acb
|
|
name: 'Meraki: status'
|
|
type: DEPENDENT
|
|
key: meraki.device.status
|
|
delay: '0'
|
|
history: 7d
|
|
description: |
|
|
Device operational status
|
|
Network: {$NETWORK.ID}
|
|
MAC: {$MAC}
|
|
valuemap:
|
|
name: 'Device status'
|
|
preprocessing:
|
|
- type: JSONPATH
|
|
parameters:
|
|
- '$.device[0].status'
|
|
- type: JAVASCRIPT
|
|
parameters:
|
|
- |
|
|
switch (value) {
|
|
case 'offline':
|
|
return 0
|
|
case 'online':
|
|
return 1
|
|
case 'dormant':
|
|
return 2
|
|
default:
|
|
return 10
|
|
}
|
|
master_item:
|
|
key: meraki.get.device
|
|
tags:
|
|
- tag: component
|
|
value: health
|
|
triggers:
|
|
- uuid: 00583ac9e9824f7db22a1685421f0be9
|
|
expression: 'last(/Cisco Meraki device by HTTP/meraki.device.status)<>1'
|
|
name: 'Meraki: Status is not online'
|
|
priority: WARNING
|
|
tags:
|
|
- tag: scope
|
|
value: availability
|
|
- uuid: e4963b68cdde453f91767ff9e3a31d16
|
|
name: 'Meraki: Get device data'
|
|
type: SCRIPT
|
|
key: meraki.get.device
|
|
delay: 3m
|
|
history: '0'
|
|
trends: '0'
|
|
value_type: TEXT
|
|
params: |
|
|
var params = JSON.parse(value);
|
|
|
|
var request = new HttpRequest();
|
|
|
|
request.addHeader('X-Cisco-Meraki-API-Key:' + params.token);
|
|
request.addHeader('User-Agent: ZabbixServer/1.0 Zabbix');
|
|
|
|
var response,
|
|
error_msg = '',
|
|
device = [],
|
|
uplinksLL = [];
|
|
|
|
function getHttpData(url) {
|
|
response = request.get(url);
|
|
Zabbix.log(4, '[ Meraki API ] [ ' + url + ' ] Received response with status code ' + request.getStatus() + ': ' + response);
|
|
|
|
if (response !== null) {
|
|
try {
|
|
response = JSON.parse(response);
|
|
}
|
|
catch (error) {
|
|
throw 'Failed to parse response received from Meraki API. Check debug log for more information.';
|
|
}
|
|
}
|
|
|
|
if (request.getStatus() !== 200) {
|
|
if (response.errors) {
|
|
throw response.errors.join(', ');
|
|
} else {
|
|
throw 'Failed to receive data: invalid response status code.';
|
|
}
|
|
}
|
|
|
|
if (typeof (response) !== 'object' || response === null) {
|
|
throw 'Cannot process response data: received data is not an object.';
|
|
}
|
|
|
|
return response;
|
|
};
|
|
|
|
try {
|
|
|
|
if (params.token === '{' + '$MERAKI.TOKEN}') {
|
|
throw 'Please change {' + '$MERAKI.TOKEN} macro with the proper value.';
|
|
}
|
|
|
|
if (params.url.indexOf('http://') === -1 && params.url.indexOf('https://') === -1) {
|
|
params.url = 'https://' + params.url;
|
|
}
|
|
|
|
if (!params.url.endsWith('/')) {
|
|
params.url += '/';
|
|
}
|
|
|
|
if (typeof params.httpproxy !== 'undefined' && params.httpproxy !== '') {
|
|
request.setProxy(params.httpproxy);
|
|
}
|
|
|
|
device = getHttpData(params.url + 'organizations/' + encodeURIComponent(params.organizationId) + '/devices/statuses?serials[]=' + encodeURIComponent(params.serial));
|
|
uplinksLL = getHttpData(params.url + 'organizations/' + encodeURIComponent(params.organizationId) + '/devices/uplinksLossAndLatency?timespan=60');
|
|
|
|
if (uplinksLL.length > 0) {
|
|
uplinks = uplinksLL.filter(function(device) {
|
|
return device.serial == params.serial;
|
|
});
|
|
}
|
|
|
|
} catch (error) {
|
|
error_msg = error;
|
|
};
|
|
|
|
return JSON.stringify({
|
|
'device': device,
|
|
'uplinksLL': uplinks,
|
|
'error': error_msg.toString()
|
|
});
|
|
description: 'Item for gathering device data from Meraki API.'
|
|
timeout: 60s
|
|
parameters:
|
|
- name: token
|
|
value: '{$MERAKI.TOKEN}'
|
|
- name: url
|
|
value: '{$MERAKI.API.URL}'
|
|
- name: organizationId
|
|
value: '{$ORGANIZATION_ID}'
|
|
- name: httpproxy
|
|
value: '{$MERAKI.HTTP_PROXY}'
|
|
- name: serial
|
|
value: '{$SERIAL}'
|
|
tags:
|
|
- tag: component
|
|
value: raw
|
|
- uuid: b673516073354c9aaaf60cf3ce2e2fa6
|
|
name: 'Meraki: Device data item errors'
|
|
type: DEPENDENT
|
|
key: meraki.get.device.errors
|
|
delay: '0'
|
|
history: 7d
|
|
trends: '0'
|
|
value_type: TEXT
|
|
description: 'Item for gathering errors of the device item.'
|
|
preprocessing:
|
|
- type: JSONPATH
|
|
parameters:
|
|
- $.error
|
|
- type: DISCARD_UNCHANGED_HEARTBEAT
|
|
parameters:
|
|
- 1h
|
|
master_item:
|
|
key: meraki.get.device
|
|
tags:
|
|
- tag: component
|
|
value: error
|
|
triggers:
|
|
- uuid: c8f8af6c92f14dc0bcdf426b124c7344
|
|
expression: 'length(last(/Cisco Meraki device by HTTP/meraki.get.device.errors))>0'
|
|
name: 'Meraki: There are errors in ''Get Device data'' metric'
|
|
priority: WARNING
|
|
tags:
|
|
- tag: scope
|
|
value: availability
|
|
discovery_rules:
|
|
- uuid: 9c7e5d2ccad7416b8d58237be4218154
|
|
name: 'Uplinks loss and quality discovery'
|
|
type: DEPENDENT
|
|
key: meraki.device.uplinks.discovery
|
|
delay: '0'
|
|
filter:
|
|
conditions:
|
|
- macro: '{#UPLINK}'
|
|
value: '{$MERAKI.DEVICE.UPLINK.MATCHES}'
|
|
formulaid: C
|
|
- macro: '{#UPLINK}'
|
|
value: '{$MERAKI.DEVICE.UPLINK.NOT_MATCHES}'
|
|
operator: NOT_MATCHES_REGEX
|
|
formulaid: D
|
|
- macro: '{#IP}'
|
|
value: '{$MERAKI.DEVICE.LOSS.LATENCY.IP.MATCHES}'
|
|
formulaid: A
|
|
- macro: '{#IP}'
|
|
value: '{$MERAKI.DEVICE.LOSS.LATENCY.IP.NOT_MATCHES}'
|
|
operator: NOT_MATCHES_REGEX
|
|
formulaid: B
|
|
item_prototypes:
|
|
- uuid: abf642b1bb944d16bebf90dcf58dbd86
|
|
name: 'Uplink [{#IP}]: [{#UPLINK}]: Latency'
|
|
type: DEPENDENT
|
|
key: 'meraki.device.latency[{#IP},{#UPLINK}]'
|
|
delay: '0'
|
|
history: 7d
|
|
value_type: FLOAT
|
|
units: s
|
|
description: |
|
|
Latency of the device uplink.
|
|
Network: {#NETWORK.ID}.
|
|
Device serial: {#SERIAL}.
|
|
preprocessing:
|
|
- type: JSONPATH
|
|
parameters:
|
|
- '$.uplinksLL[?(@.ip == ''{#IP}'' && @.uplink== ''{#UPLINK}'')].timeSeries.[0].latencyMs.first()'
|
|
error_handler: CUSTOM_VALUE
|
|
error_handler_params: '-1000'
|
|
- type: MULTIPLIER
|
|
parameters:
|
|
- '0.001'
|
|
master_item:
|
|
key: meraki.get.device
|
|
tags:
|
|
- tag: component
|
|
value: network
|
|
- tag: ip
|
|
value: '{#IP}'
|
|
- tag: network
|
|
value: '{#NETWORK.ID}'
|
|
- tag: serial-number
|
|
value: '{#SERIAL}'
|
|
- tag: uplink
|
|
value: '{#UPLINK}'
|
|
trigger_prototypes:
|
|
- uuid: b559ad94b15848089d89e85e4d9db7ff
|
|
expression: 'min(/Cisco Meraki device by HTTP/meraki.device.latency[{#IP},{#UPLINK}],#3)>{$MERAKI.DEVICE.LATENCY}'
|
|
name: 'Uplink [{#IP}]: [{#UPLINK}]: latency > {$MERAKI.DEVICE.LATENCY}'
|
|
priority: WARNING
|
|
tags:
|
|
- tag: scope
|
|
value: performance
|
|
- uuid: bded34f64113486ab0672210e5a8eb1d
|
|
name: 'Uplink [{#IP}]: [{#UPLINK}]: Loss, %'
|
|
type: DEPENDENT
|
|
key: 'meraki.device.loss.pct[{#IP},{#UPLINK}]'
|
|
delay: '0'
|
|
history: 7d
|
|
value_type: FLOAT
|
|
units: '%'
|
|
description: |
|
|
Loss percent of the device uplink.
|
|
Network: {#NETWORK.ID}.
|
|
Device serial: {#SERIAL}.
|
|
preprocessing:
|
|
- type: JSONPATH
|
|
parameters:
|
|
- '$.uplinksLL[?(@.ip == ''{#IP}'' && @.uplink== ''{#UPLINK}'')].timeSeries.[0].lossPercent.first()'
|
|
error_handler: CUSTOM_VALUE
|
|
error_handler_params: '-1'
|
|
master_item:
|
|
key: meraki.get.device
|
|
tags:
|
|
- tag: component
|
|
value: network
|
|
- tag: ip
|
|
value: '{#IP}'
|
|
- tag: network
|
|
value: '{#NETWORK.ID}'
|
|
- tag: serial-number
|
|
value: '{#SERIAL}'
|
|
- tag: uplink
|
|
value: '{#UPLINK}'
|
|
trigger_prototypes:
|
|
- uuid: 1309e71025614ce4bb4242e6e291ae48
|
|
expression: 'min(/Cisco Meraki device by HTTP/meraki.device.loss.pct[{#IP},{#UPLINK}],#3)>{$MERAKI.DEVICE.LOSS}'
|
|
name: 'Uplink [{#IP}]: [{#UPLINK}]: loss > {$MERAKI.DEVICE.LOSS}%'
|
|
priority: WARNING
|
|
tags:
|
|
- tag: scope
|
|
value: performance
|
|
graph_prototypes:
|
|
- uuid: 4e9d84e08b32489c8c3a2cbbd4c6119a
|
|
name: 'Uplink [{#IP}]: [{#UPLINK}]: Latency'
|
|
ymin_type_1: FIXED
|
|
graph_items:
|
|
- color: 199C0D
|
|
item:
|
|
host: 'Cisco Meraki device by HTTP'
|
|
key: 'meraki.device.latency[{#IP},{#UPLINK}]'
|
|
- uuid: ebf262afc6d94d29b9831d418fb07edb
|
|
name: 'Uplink [{#IP}]: [{#UPLINK}]: Loss'
|
|
ymin_type_1: FIXED
|
|
graph_items:
|
|
- color: 199C0D
|
|
item:
|
|
host: 'Cisco Meraki device by HTTP'
|
|
key: 'meraki.device.loss.pct[{#IP},{#UPLINK}]'
|
|
master_item:
|
|
key: meraki.get.device
|
|
lld_macro_paths:
|
|
- lld_macro: '{#IP}'
|
|
path: $.ip
|
|
- lld_macro: '{#NETWORK.ID}'
|
|
path: $.networkId
|
|
- lld_macro: '{#SERIAL}'
|
|
path: $.serial
|
|
- lld_macro: '{#UPLINK}'
|
|
path: $.uplink
|
|
preprocessing:
|
|
- type: JSONPATH
|
|
parameters:
|
|
- $.uplinksLL
|
|
tags:
|
|
- tag: class
|
|
value: network
|
|
- tag: target
|
|
value: cisco-meraki-dashboard
|
|
macros:
|
|
- macro: '{$MERAKI.API.URL}'
|
|
value: api.meraki.com/api/v1
|
|
description: 'Cisco Meraki Dashboard API URL. e.g api.meraki.com/api/v1'
|
|
- macro: '{$MERAKI.DEVICE.LATENCY}'
|
|
value: '0.15'
|
|
description: 'Devices uplink latency threshold in seconds.'
|
|
- macro: '{$MERAKI.DEVICE.LOSS}'
|
|
value: '15'
|
|
description: 'Devices uplink loss threshold in percents.'
|
|
- macro: '{$MERAKI.DEVICE.LOSS.LATENCY.IP.MATCHES}'
|
|
value: '^((25[0-5]|(2[0-4]|1\d|[1-9]|)\d)\.?\b){4}$'
|
|
description: 'This macro is used in loss and latency checks discovery. Can be overridden on the host or linked template level.'
|
|
- macro: '{$MERAKI.DEVICE.LOSS.LATENCY.IP.NOT_MATCHES}'
|
|
value: ^$
|
|
description: 'This macro is used in loss and latency checks discovery. Can be overridden on the host or linked template level.'
|
|
- macro: '{$MERAKI.DEVICE.UPLINK.MATCHES}'
|
|
value: .+
|
|
description: 'This macro is used in loss and latency checks discovery. Can be overridden on the host or linked template level.'
|
|
- macro: '{$MERAKI.DEVICE.UPLINK.NOT_MATCHES}'
|
|
value: ^$
|
|
description: 'This macro is used in loss and latency checks discovery. Can be overridden on the host or linked template level.'
|
|
- macro: '{$MERAKI.HTTP_PROXY}'
|
|
description: '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'
|
|
- macro: '{$MERAKI.TOKEN}'
|
|
type: SECRET_TEXT
|
|
description: 'Cisco Meraki Dashboard API Token.'
|
|
dashboards:
|
|
- uuid: 76c4525eacc64f268572fefd76accc2f
|
|
name: 'Meraki: General'
|
|
pages:
|
|
- name: 'Meraki: Uplinks'
|
|
widgets:
|
|
- type: graphprototype
|
|
name: Latency
|
|
x: '12'
|
|
width: '12'
|
|
height: '5'
|
|
fields:
|
|
- type: INTEGER
|
|
name: columns
|
|
value: '1'
|
|
- type: INTEGER
|
|
name: rows
|
|
value: '1'
|
|
- type: GRAPH_PROTOTYPE
|
|
name: graphid
|
|
value:
|
|
host: 'Cisco Meraki device by HTTP'
|
|
name: 'Uplink [{#IP}]: [{#UPLINK}]: Latency'
|
|
- type: graphprototype
|
|
name: Loss
|
|
width: '12'
|
|
height: '5'
|
|
fields:
|
|
- type: INTEGER
|
|
name: columns
|
|
value: '1'
|
|
- type: INTEGER
|
|
name: rows
|
|
value: '1'
|
|
- type: GRAPH_PROTOTYPE
|
|
name: graphid
|
|
value:
|
|
host: 'Cisco Meraki device by HTTP'
|
|
name: 'Uplink [{#IP}]: [{#UPLINK}]: Loss'
|
|
valuemaps:
|
|
- uuid: 24967dff65a048578eae18b2485907cb
|
|
name: 'Device status'
|
|
mappings:
|
|
- value: '0'
|
|
newvalue: offline
|
|
- value: '1'
|
|
newvalue: online
|
|
- value: '2'
|
|
newvalue: dormant
|
|
- value: '10'
|
|
newvalue: unknown
|
|
- uuid: 39e2f742d0b24ea489b7f61d27a5df1c
|
|
template: 'Cisco Meraki organization by HTTP'
|
|
name: 'Cisco Meraki organization by HTTP'
|
|
description: 'Generated by official Zabbix template tool "Templator" 2.0.0'
|
|
vendor:
|
|
name: Zabbix
|
|
version: 7.0-0
|
|
groups:
|
|
- name: Templates/Applications
|
|
- name: 'Templates/Network devices'
|
|
items:
|
|
- uuid: 25f8f61ddf964f39b39cc38b23b017b9
|
|
name: 'Meraki: Get list of adaptive policy aggregate statistics'
|
|
type: HTTP_AGENT
|
|
key: meraki.get.adaptive.policy
|
|
delay: 20m
|
|
history: '0'
|
|
trends: '0'
|
|
value_type: TEXT
|
|
description: 'Item for adaptive policy aggregate statistics for an organization.'
|
|
timeout: 30s
|
|
url: 'https://{$MERAKI.API.URL}/organizations/{$ID}/adaptivePolicy/overview'
|
|
http_proxy: '{$MERAKI.HTTP_PROXY}'
|
|
headers:
|
|
- name: X-Cisco-Meraki-API-Key
|
|
value: '{$MERAKI.TOKEN}'
|
|
- name: User-Agent
|
|
value: 'ZabbixServer/1.0 Zabbix'
|
|
tags:
|
|
- tag: component
|
|
value: raw
|
|
- uuid: f2a65bce3adf4511a3f37ed4caa66b3d
|
|
name: 'Meraki: Get list of configuration changes'
|
|
type: HTTP_AGENT
|
|
key: meraki.get.configuration.changes
|
|
delay: '{$MERAKI.CONFIG.CHANGE.TIMESPAN}'
|
|
history: 7d
|
|
trends: '0'
|
|
value_type: TEXT
|
|
description: 'Item for viewing the Change Log for your organization.\nGathering once per 20m by default.'
|
|
preprocessing:
|
|
- type: DISCARD_UNCHANGED_HEARTBEAT
|
|
parameters:
|
|
- 2h
|
|
timeout: 30s
|
|
url: 'https://{$MERAKI.API.URL}/organizations/{$ID}/configurationChanges?timespan={$MERAKI.CONFIG.CHANGE.TIMESPAN}'
|
|
http_proxy: '{$MERAKI.HTTP_PROXY}'
|
|
headers:
|
|
- name: X-Cisco-Meraki-API-Key
|
|
value: '{$MERAKI.TOKEN}'
|
|
- name: User-Agent
|
|
value: 'ZabbixServer/1.0 Zabbix'
|
|
tags:
|
|
- tag: component
|
|
value: log
|
|
triggers:
|
|
- uuid: 2fc56ad4baef4796a3ad7d097cad918f
|
|
expression: 'length(last(/Cisco Meraki organization by HTTP/meraki.get.configuration.changes))>3'
|
|
name: 'Meraki: Configuration has been changed'
|
|
priority: WARNING
|
|
tags:
|
|
- tag: scope
|
|
value: security
|
|
- uuid: 3306da0ec0d749829db2f5f42e4e7876
|
|
name: 'Meraki: Get licenses info'
|
|
type: HTTP_AGENT
|
|
key: meraki.get.licenses
|
|
delay: 12h
|
|
history: '0'
|
|
trends: '0'
|
|
value_type: TEXT
|
|
description: 'Return an overview of the license state for an organization.'
|
|
timeout: 30s
|
|
url: 'https://{$MERAKI.API.URL}/organizations/{$ID}/licenses/overview'
|
|
http_proxy: '{$MERAKI.HTTP_PROXY}'
|
|
headers:
|
|
- name: X-Cisco-Meraki-API-Key
|
|
value: '{$MERAKI.TOKEN}'
|
|
- name: User-Agent
|
|
value: 'ZabbixServer/1.0 Zabbix'
|
|
tags:
|
|
- tag: component
|
|
value: raw
|
|
- uuid: efe8853443d44eed8daeecee5ab9e481
|
|
name: 'Meraki: Get list of the networks'
|
|
type: SCRIPT
|
|
key: meraki.get.networks
|
|
delay: 3m
|
|
history: '0'
|
|
trends: '0'
|
|
value_type: TEXT
|
|
params: |
|
|
var params = JSON.parse(value);
|
|
|
|
var request = new HttpRequest();
|
|
|
|
request.addHeader('X-Cisco-Meraki-API-Key:' + params.token);
|
|
request.addHeader('User-Agent: ZabbixServer/1.0 Zabbix');
|
|
|
|
var response,
|
|
error_msg = '',
|
|
networks = [],
|
|
uplinks = [];
|
|
|
|
function getHttpData(url) {
|
|
response = request.get(url);
|
|
Zabbix.log(4, '[ Meraki API ] [ ' + url + ' ] Received response with status code ' + request.getStatus() + ': ' + response);
|
|
|
|
if (response !== null) {
|
|
try {
|
|
response = JSON.parse(response);
|
|
}
|
|
catch (error) {
|
|
throw 'Failed to parse response received from Meraki API. Check debug log for more information.';
|
|
}
|
|
}
|
|
|
|
if (request.getStatus() !== 200) {
|
|
if (response.errors) {
|
|
throw response.errors.join(', ');
|
|
} else {
|
|
throw 'Failed to receive data: invalid response status code.';
|
|
}
|
|
}
|
|
|
|
if (typeof (response) !== 'object' || response === null) {
|
|
throw 'Cannot process response data: received data is not an object.';
|
|
}
|
|
|
|
return response;
|
|
};
|
|
|
|
try {
|
|
|
|
if (params.token === '{' + '$MERAKI.TOKEN}') {
|
|
throw 'Please change {' + '$MERAKI.TOKEN} macro with the proper value.';
|
|
}
|
|
|
|
if (params.url.indexOf('http://') === -1 && params.url.indexOf('https://') === -1) {
|
|
params.url = 'https://' + params.url;
|
|
}
|
|
|
|
if (!params.url.endsWith('/')) {
|
|
params.url += '/';
|
|
}
|
|
|
|
if (typeof params.httpproxy !== 'undefined' && params.httpproxy !== '') {
|
|
request.setProxy(params.httpproxy);
|
|
}
|
|
|
|
networks = getHttpData(params.url + 'organizations/' + encodeURIComponent(params.organizationId) + '/networks');
|
|
|
|
responseUplinks = getHttpData(params.url + 'organizations/' + encodeURIComponent(params.organizationId) + '/appliance/uplink/statuses');
|
|
|
|
if (typeof responseUplinks !== 'undefined' && Array.isArray(responseUplinks)) {
|
|
for (var i in responseUplinks) {
|
|
if ('networkId' in responseUplinks[i] && typeof networks !== 'undefined' && Array.isArray(networks)) {
|
|
network = networks.filter(function (x) { return x.id == responseUplinks[i].networkId; });
|
|
}
|
|
|
|
if (typeof responseUplinks[i].uplinks !== 'undefined' && Array.isArray(responseUplinks[i].uplinks)) {
|
|
for (var p in responseUplinks[i].uplinks) {
|
|
if (typeof network[0].name !== 'undefined') {
|
|
responseUplinks[i].uplinks[p].networkName = network[0].name;
|
|
}
|
|
if (typeof network[0].timeZone !== 'undefined') {
|
|
responseUplinks[i].uplinks[p].timeZone = network[0].timeZone;
|
|
}
|
|
if ('highAvailability' in responseUplinks[i] && 'role' in responseUplinks[i].highAvailability) {
|
|
responseUplinks[i].uplinks[p].role = responseUplinks[i].highAvailability.role;
|
|
}
|
|
if ('serial' in responseUplinks[i]) {
|
|
responseUplinks[i].uplinks[p].serial = responseUplinks[i].serial;
|
|
}
|
|
|
|
uplinks.push(responseUplinks[i].uplinks[p]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
} catch (error) {
|
|
error_msg = error;
|
|
};
|
|
|
|
return JSON.stringify({
|
|
'uplinks': uplinks,
|
|
'networks': networks,
|
|
'error': error_msg.toString()
|
|
});
|
|
description: 'Item for gathering all the networks of organization from Meraki API.'
|
|
timeout: 30s
|
|
parameters:
|
|
- name: token
|
|
value: '{$MERAKI.TOKEN}'
|
|
- name: url
|
|
value: '{$MERAKI.API.URL}'
|
|
- name: organizationId
|
|
value: '{$ID}'
|
|
- name: httpproxy
|
|
value: '{$MERAKI.HTTP_PROXY}'
|
|
tags:
|
|
- tag: component
|
|
value: raw
|
|
- uuid: b2bb422b7d794a03a93c8d46209cd3fb
|
|
name: 'Meraki: Networks item errors'
|
|
type: DEPENDENT
|
|
key: meraki.get.networks.errors
|
|
delay: '0'
|
|
history: 7d
|
|
trends: '0'
|
|
value_type: TEXT
|
|
description: 'Item for gathering all the networks item errors.'
|
|
preprocessing:
|
|
- type: JSONPATH
|
|
parameters:
|
|
- $.error
|
|
- type: DISCARD_UNCHANGED_HEARTBEAT
|
|
parameters:
|
|
- 1h
|
|
master_item:
|
|
key: meraki.get.networks
|
|
tags:
|
|
- tag: component
|
|
value: error
|
|
triggers:
|
|
- uuid: c149d21e19f3453b8e569c549ed2c78a
|
|
expression: 'length(last(/Cisco Meraki organization by HTTP/meraki.get.networks.errors))>0'
|
|
name: 'Meraki: There are errors in ''Get networks'' metric'
|
|
priority: WARNING
|
|
tags:
|
|
- tag: scope
|
|
value: availability
|
|
- uuid: bb653e6dba3f489494a7143b74fe8f4f
|
|
name: 'Meraki: Get list of the vpn stats'
|
|
type: SCRIPT
|
|
key: meraki.get.vpn.stats
|
|
delay: 3m
|
|
history: '0'
|
|
trends: '0'
|
|
value_type: TEXT
|
|
params: |
|
|
var params = JSON.parse(value);
|
|
|
|
var request = new HttpRequest();
|
|
|
|
request.addHeader('X-Cisco-Meraki-API-Key:' + params.token);
|
|
request.addHeader('User-Agent: ZabbixServer/1.0 Zabbix');
|
|
|
|
var response,
|
|
error_msg = '',
|
|
vpnStats = [],
|
|
result = [];
|
|
|
|
function getHttpData(url) {
|
|
response = request.get(url);
|
|
Zabbix.log(4, '[ Meraki API ] [ ' + url + ' ] Received response with status code ' + request.getStatus() + ': ' + response);
|
|
|
|
if (response !== null) {
|
|
try {
|
|
response = JSON.parse(response);
|
|
}
|
|
catch (error) {
|
|
throw 'Failed to parse response received from Meraki API. Check debug log for more information.';
|
|
}
|
|
}
|
|
|
|
if (request.getStatus() !== 200) {
|
|
if (response.errors) {
|
|
throw response.errors.join(', ');
|
|
} else {
|
|
throw 'Failed to receive data: invalid response status code.';
|
|
}
|
|
}
|
|
|
|
if (typeof (response) !== 'object' || response === null) {
|
|
throw 'Cannot process response data: received data is not an object.';
|
|
}
|
|
|
|
return response;
|
|
};
|
|
|
|
try {
|
|
|
|
if (params.token === '{' + '$MERAKI.TOKEN}') {
|
|
throw 'Please change {' + '$MERAKI.TOKEN} macro with the proper value.';
|
|
}
|
|
|
|
if (params.url.indexOf('http://') === -1 && params.url.indexOf('https://') === -1) {
|
|
params.url = 'https://' + params.url;
|
|
}
|
|
|
|
if (!params.url.endsWith('/')) {
|
|
params.url += '/';
|
|
}
|
|
|
|
if (typeof params.httpproxy !== 'undefined' && params.httpproxy !== '') {
|
|
request.setProxy(params.httpproxy);
|
|
}
|
|
|
|
vpnStats = getHttpData(params.url + 'organizations/' + encodeURIComponent(params.organizationId) + '/appliance/vpn/stats');
|
|
|
|
for (i in vpnStats) {
|
|
if (typeof vpnStats[i].merakiVpnPeers !== 'undefined' && Array.isArray(vpnStats[i].merakiVpnPeers)) {
|
|
for (u in vpnStats[i].merakiVpnPeers) {
|
|
if (typeof vpnStats[i].merakiVpnPeers[u].latencySummaries !== 'undefined' && Array.isArray(vpnStats[i].merakiVpnPeers[u].latencySummaries)) {
|
|
for (l in vpnStats[i].merakiVpnPeers[u].latencySummaries) {
|
|
result = vpnStats[i].merakiVpnPeers[u].latencySummaries.map(function (x) {
|
|
|
|
lps = vpnStats[i].merakiVpnPeers[u].lossPercentageSummaries.filter(function (y) { return y.senderUplink == x.senderUplink && y.receiverUplink == x.receiverUplink; });
|
|
js = vpnStats[i].merakiVpnPeers[u].jitterSummaries.filter(function (y) { return y.senderUplink == x.senderUplink && y.receiverUplink == x.receiverUplink; });
|
|
ms = vpnStats[i].merakiVpnPeers[u].mosSummaries.filter(function (y) { return y.senderUplink == x.senderUplink && y.receiverUplink == x.receiverUplink; });
|
|
Object.assign(x, lps[0], js[0], ms[0]);
|
|
|
|
if ('networkId' in vpnStats[i]) {
|
|
x.networkId = vpnStats[i].networkId;
|
|
}
|
|
if ('networkName' in vpnStats[i]) {
|
|
x.networkName = vpnStats[i].networkName;
|
|
}
|
|
|
|
if ('networkId' in vpnStats[i].merakiVpnPeers[u]) {
|
|
x.peerNetworkId = vpnStats[i].merakiVpnPeers[u].networkId;
|
|
}
|
|
if ('networkName' in vpnStats[i].merakiVpnPeers[u]) {
|
|
x.peerNetworkName = vpnStats[i].merakiVpnPeers[u].networkName;
|
|
}
|
|
|
|
return x;
|
|
});
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
} catch (error) {
|
|
error_msg = error;
|
|
};
|
|
|
|
return JSON.stringify({
|
|
'vpnStats': result,
|
|
'error': error_msg.toString()
|
|
});
|
|
description: 'Item for gathering all the vpn stats of the organization.'
|
|
timeout: 30s
|
|
parameters:
|
|
- name: token
|
|
value: '{$MERAKI.TOKEN}'
|
|
- name: url
|
|
value: '{$MERAKI.API.URL}'
|
|
- name: organizationId
|
|
value: '{$ID}'
|
|
- name: httpproxy
|
|
value: '{$MERAKI.HTTP_PROXY}'
|
|
tags:
|
|
- tag: component
|
|
value: raw
|
|
- uuid: a5106f644c4e46fc963cc953dafaeb4e
|
|
name: 'Meraki: VPN item errors'
|
|
type: DEPENDENT
|
|
key: meraki.get.vpn.stats.errors
|
|
delay: '0'
|
|
history: 7d
|
|
trends: '0'
|
|
value_type: TEXT
|
|
description: 'Item for gathering all the vpn item errors.'
|
|
preprocessing:
|
|
- type: JSONPATH
|
|
parameters:
|
|
- $.error
|
|
- type: DISCARD_UNCHANGED_HEARTBEAT
|
|
parameters:
|
|
- 1h
|
|
master_item:
|
|
key: meraki.get.vpn.stats
|
|
tags:
|
|
- tag: component
|
|
value: error
|
|
triggers:
|
|
- uuid: f65ff582e1a84f5a9e9d6a9c0501b013
|
|
expression: 'length(last(/Cisco Meraki organization by HTTP/meraki.get.vpn.stats.errors))>0'
|
|
name: 'Meraki: There are errors in ''Get VPNs'' metric'
|
|
priority: WARNING
|
|
tags:
|
|
- tag: scope
|
|
value: availability
|
|
- uuid: bd6eca7b707a4bee8e2302765afa6074
|
|
name: 'Meraki: License expire'
|
|
type: DEPENDENT
|
|
key: meraki.license.expire
|
|
delay: '0'
|
|
history: 7d
|
|
value_type: FLOAT
|
|
units: s
|
|
description: 'Meraki license expire time in seconds left.'
|
|
valuemap:
|
|
name: 'License status'
|
|
preprocessing:
|
|
- type: JSONPATH
|
|
parameters:
|
|
- $.expirationDate
|
|
- type: JAVASCRIPT
|
|
parameters:
|
|
- |
|
|
function parseDate(date) {
|
|
months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
|
|
date = date.split(',');
|
|
date[1] = date[1].match(/[0-9]{4}/)[0];
|
|
date = date.concat(date[0].split(' '));
|
|
month = 1 + months.indexOf(date[2]);
|
|
return Date.parse(date[1] + "-" + month + "-" + date[3]);
|
|
}
|
|
|
|
if (value === "N/A") {
|
|
return -1;
|
|
} else {
|
|
value = parseDate(value);
|
|
now = Date.now();
|
|
return Math.floor((value - now) / 1000);
|
|
}
|
|
master_item:
|
|
key: meraki.get.licenses
|
|
tags:
|
|
- tag: component
|
|
value: license
|
|
triggers:
|
|
- uuid: 8694c7fc18904004978a3ce46f06a67e
|
|
expression: 'last(/Cisco Meraki organization by HTTP/meraki.license.expire)<{$MERAKI.LICENSE.EXPIRE} and last(/Cisco Meraki organization by HTTP/meraki.license.expire)>=0'
|
|
name: 'Meraki: License expires in less than {$MERAKI.LICENSE.EXPIRE} seconds'
|
|
priority: WARNING
|
|
tags:
|
|
- tag: scope
|
|
value: availability
|
|
- uuid: 2b8e2c4093074dbaa88db3df57eb2cd1
|
|
name: 'Meraki: License status'
|
|
type: DEPENDENT
|
|
key: meraki.license.status
|
|
delay: '0'
|
|
history: 7d
|
|
description: 'Meraki license status.'
|
|
valuemap:
|
|
name: 'License status'
|
|
preprocessing:
|
|
- type: JSONPATH
|
|
parameters:
|
|
- $.status
|
|
- type: JAVASCRIPT
|
|
parameters:
|
|
- |
|
|
switch (value) {
|
|
case 'License Required':
|
|
return 0
|
|
case 'OK':
|
|
return 1
|
|
default:
|
|
return 10
|
|
}
|
|
master_item:
|
|
key: meraki.get.licenses
|
|
tags:
|
|
- tag: component
|
|
value: license
|
|
triggers:
|
|
- uuid: d4f71dd53bf8495789b53e063db3555b
|
|
expression: 'last(/Cisco Meraki organization by HTTP/meraki.license.status)<>1'
|
|
name: 'Meraki: License status is not OK'
|
|
priority: WARNING
|
|
tags:
|
|
- tag: scope
|
|
value: availability
|
|
- uuid: e18f69d27fcb4b949d5744aebef97ffb
|
|
name: 'Meraki: Policies'
|
|
type: DEPENDENT
|
|
key: meraki.policies
|
|
delay: '0'
|
|
history: 7d
|
|
description: 'Meraki adaptive policies count.'
|
|
preprocessing:
|
|
- type: JSONPATH
|
|
parameters:
|
|
- $.counts.policies
|
|
master_item:
|
|
key: meraki.get.adaptive.policy
|
|
tags:
|
|
- tag: component
|
|
value: policy
|
|
- uuid: 8a8369134eff4153aba32d9c435786f3
|
|
name: 'Meraki: Allow policies'
|
|
type: DEPENDENT
|
|
key: meraki.policies.allow
|
|
delay: '0'
|
|
history: 7d
|
|
description: 'Meraki adaptive allow policies count.'
|
|
preprocessing:
|
|
- type: JSONPATH
|
|
parameters:
|
|
- $.counts.allowPolicies
|
|
master_item:
|
|
key: meraki.get.adaptive.policy
|
|
tags:
|
|
- tag: component
|
|
value: policy
|
|
- uuid: f85b33412a2a41b39c33d64f3c641232
|
|
name: 'Meraki: Custom ACLs'
|
|
type: DEPENDENT
|
|
key: meraki.policies.custom.acls
|
|
delay: '0'
|
|
history: 7d
|
|
description: 'Meraki adaptive policy custom ACLs count.'
|
|
preprocessing:
|
|
- type: JSONPATH
|
|
parameters:
|
|
- $.counts.customAcls
|
|
master_item:
|
|
key: meraki.get.adaptive.policy
|
|
tags:
|
|
- tag: component
|
|
value: policy
|
|
- uuid: 8b9e13124628460584668dbe5cd1b92b
|
|
name: 'Meraki: Deny policies'
|
|
type: DEPENDENT
|
|
key: meraki.policies.deny
|
|
delay: '0'
|
|
history: 7d
|
|
description: 'Meraki adaptive deny policies count.'
|
|
preprocessing:
|
|
- type: JSONPATH
|
|
parameters:
|
|
- $.counts.denyPolicies
|
|
master_item:
|
|
key: meraki.get.adaptive.policy
|
|
tags:
|
|
- tag: component
|
|
value: policy
|
|
- uuid: a4918ea4d6954b5f829e5533117c109a
|
|
name: 'Meraki: Groups'
|
|
type: DEPENDENT
|
|
key: meraki.policies.groups
|
|
delay: '0'
|
|
history: 7d
|
|
description: 'Meraki adaptive policy groups count.'
|
|
preprocessing:
|
|
- type: JSONPATH
|
|
parameters:
|
|
- $.counts.groups
|
|
master_item:
|
|
key: meraki.get.adaptive.policy
|
|
tags:
|
|
- tag: component
|
|
value: policy
|
|
discovery_rules:
|
|
- uuid: 03d6aeb2bc3d473b9aab87acd0e08f8c
|
|
name: 'Uplinks discovery'
|
|
type: DEPENDENT
|
|
key: meraki.uplinks.discovery
|
|
delay: '0'
|
|
item_prototypes:
|
|
- uuid: 7600f662dd044d1f857a6ffd9898277c
|
|
name: 'Uplink [{#INTERFACE}]: [{#UPLINK.ROLE}]: [{#NETWORK.NAME}]: status'
|
|
type: DEPENDENT
|
|
key: 'meraki.uplink.status[{#NETWORK.NAME}, {#INTERFACE}, {#UPLINK.ROLE}]'
|
|
delay: '0'
|
|
history: 7d
|
|
description: 'Network uplink status.'
|
|
valuemap:
|
|
name: 'Uplink status'
|
|
preprocessing:
|
|
- type: JSONPATH
|
|
parameters:
|
|
- '$.uplinks[?(@.networkName== ''{#NETWORK.NAME}'' && @.interface== ''{#INTERFACE}'' && @.role== ''{#UPLINK.ROLE}'' )].status.first()'
|
|
- type: JAVASCRIPT
|
|
parameters:
|
|
- |
|
|
switch (value) {
|
|
case 'failed':
|
|
return 0
|
|
case 'active':
|
|
return 1
|
|
case 'ready':
|
|
return 2
|
|
case 'not connected':
|
|
return 3
|
|
default:
|
|
return 10
|
|
}
|
|
master_item:
|
|
key: meraki.get.networks
|
|
tags:
|
|
- tag: component
|
|
value: network
|
|
- tag: component
|
|
value: uplink
|
|
- tag: interface
|
|
value: '{#INTERFACE}'
|
|
- tag: network
|
|
value: '{#NETWORK.NAME}'
|
|
- tag: serial-number
|
|
value: '{#UPLINK.DEVICE.SERIAL}'
|
|
trigger_prototypes:
|
|
- uuid: b1f3cbb8f3024c3f8cd6a8eaf7a5df52
|
|
expression: 'last(/Cisco Meraki organization by HTTP/meraki.uplink.status[{#NETWORK.NAME}, {#INTERFACE}, {#UPLINK.ROLE}])=0'
|
|
name: 'Uplink [{#INTERFACE}]: [{#UPLINK.ROLE}]: [{#NETWORK.NAME}]: status is failed'
|
|
priority: WARNING
|
|
tags:
|
|
- tag: scope
|
|
value: availability
|
|
master_item:
|
|
key: meraki.get.networks
|
|
lld_macro_paths:
|
|
- lld_macro: '{#INTERFACE}'
|
|
path: $.interface
|
|
- lld_macro: '{#NETWORK.NAME}'
|
|
path: $.networkName
|
|
- lld_macro: '{#PRIVATE.IP}'
|
|
path: $.ip
|
|
- lld_macro: '{#PUBLIC.IP}'
|
|
path: $.publicIp
|
|
- lld_macro: '{#UPLINK.DEVICE.SERIAL}'
|
|
path: $.serial
|
|
- lld_macro: '{#UPLINK.ROLE}'
|
|
path: $.role
|
|
preprocessing:
|
|
- type: JSONPATH
|
|
parameters:
|
|
- $.uplinks
|
|
- uuid: 34052749bd3c46fd9083d738ddeee216
|
|
name: 'VPN stats discovery'
|
|
type: DEPENDENT
|
|
key: meraki.vpn.stats.discovery
|
|
delay: '0'
|
|
item_prototypes:
|
|
- uuid: 6e38c9538ad4489ea08b6d21fc8a8bd3
|
|
name: 'VPN [{#NETWORK.NAME}][{#SENDER.UPLINK}]=>[{#PEER.NETWORK.NAME}][{#RECEIVER.UPLINK}]: jitter avg'
|
|
type: DEPENDENT
|
|
key: 'meraki.vpn.stat.jitter.avg[{#NETWORK.ID}, {#SENDER.UPLINK}, {#PEER.NETWORK.ID}, {#RECEIVER.UPLINK}]'
|
|
delay: '0'
|
|
history: 7d
|
|
description: 'VPN connection jitter avg.'
|
|
preprocessing:
|
|
- type: JSONPATH
|
|
parameters:
|
|
- $.avgJitter
|
|
master_item:
|
|
key: 'meraki.vpn.stat.raw[{#NETWORK.ID}, {#SENDER.UPLINK}, {#PEER.NETWORK.ID}, {#RECEIVER.UPLINK}]'
|
|
tags:
|
|
- tag: component
|
|
value: vpn
|
|
- uuid: c676fc71415d4e199f257f165fc56163
|
|
name: 'VPN [{#NETWORK.NAME}][{#SENDER.UPLINK}]=>[{#PEER.NETWORK.NAME}][{#RECEIVER.UPLINK}]: jitter max'
|
|
type: DEPENDENT
|
|
key: 'meraki.vpn.stat.jitter.max[{#NETWORK.ID}, {#SENDER.UPLINK}, {#PEER.NETWORK.ID}, {#RECEIVER.UPLINK}]'
|
|
delay: '0'
|
|
history: 7d
|
|
description: 'VPN connection jitter max.'
|
|
preprocessing:
|
|
- type: JSONPATH
|
|
parameters:
|
|
- $.maxJitter
|
|
master_item:
|
|
key: 'meraki.vpn.stat.raw[{#NETWORK.ID}, {#SENDER.UPLINK}, {#PEER.NETWORK.ID}, {#RECEIVER.UPLINK}]'
|
|
tags:
|
|
- tag: component
|
|
value: vpn
|
|
- uuid: c0d392d7ca2b42df9a967ffb2dcfa80d
|
|
name: 'VPN [{#NETWORK.NAME}][{#SENDER.UPLINK}]=>[{#PEER.NETWORK.NAME}][{#RECEIVER.UPLINK}]: jitter min'
|
|
type: DEPENDENT
|
|
key: 'meraki.vpn.stat.jitter.min[{#NETWORK.ID}, {#SENDER.UPLINK}, {#PEER.NETWORK.ID}, {#RECEIVER.UPLINK}]'
|
|
delay: '0'
|
|
history: 7d
|
|
description: 'VPN connection jitter min.'
|
|
preprocessing:
|
|
- type: JSONPATH
|
|
parameters:
|
|
- $.minJitter
|
|
master_item:
|
|
key: 'meraki.vpn.stat.raw[{#NETWORK.ID}, {#SENDER.UPLINK}, {#PEER.NETWORK.ID}, {#RECEIVER.UPLINK}]'
|
|
tags:
|
|
- tag: component
|
|
value: vpn
|
|
- uuid: 6f56db10935641b0bf416ae3402ddb17
|
|
name: 'VPN [{#NETWORK.NAME}][{#SENDER.UPLINK}]=>[{#PEER.NETWORK.NAME}][{#RECEIVER.UPLINK}]: latency avg'
|
|
type: DEPENDENT
|
|
key: 'meraki.vpn.stat.latency.avg[{#NETWORK.ID}, {#SENDER.UPLINK}, {#PEER.NETWORK.ID}, {#RECEIVER.UPLINK}]'
|
|
delay: '0'
|
|
history: 7d
|
|
units: ms
|
|
description: 'VPN connection avg latency.'
|
|
preprocessing:
|
|
- type: JSONPATH
|
|
parameters:
|
|
- $.avgLatencyMs
|
|
master_item:
|
|
key: 'meraki.vpn.stat.raw[{#NETWORK.ID}, {#SENDER.UPLINK}, {#PEER.NETWORK.ID}, {#RECEIVER.UPLINK}]'
|
|
tags:
|
|
- tag: component
|
|
value: vpn
|
|
- uuid: 626ca25322e9413ca0e5bee2c8760c73
|
|
name: 'VPN [{#NETWORK.NAME}][{#SENDER.UPLINK}]=>[{#PEER.NETWORK.NAME}][{#RECEIVER.UPLINK}]: latency max'
|
|
type: DEPENDENT
|
|
key: 'meraki.vpn.stat.latency.max[{#NETWORK.ID}, {#SENDER.UPLINK}, {#PEER.NETWORK.ID}, {#RECEIVER.UPLINK}]'
|
|
delay: '0'
|
|
history: 7d
|
|
units: ms
|
|
description: 'VPN connection max latency.'
|
|
preprocessing:
|
|
- type: JSONPATH
|
|
parameters:
|
|
- $.maxLatencyMs
|
|
master_item:
|
|
key: 'meraki.vpn.stat.raw[{#NETWORK.ID}, {#SENDER.UPLINK}, {#PEER.NETWORK.ID}, {#RECEIVER.UPLINK}]'
|
|
tags:
|
|
- tag: component
|
|
value: vpn
|
|
- uuid: 56a0ea96051a4b45af7db3da1af3e4a4
|
|
name: 'VPN [{#NETWORK.NAME}][{#SENDER.UPLINK}]=>[{#PEER.NETWORK.NAME}][{#RECEIVER.UPLINK}]: latency min'
|
|
type: DEPENDENT
|
|
key: 'meraki.vpn.stat.latency.min[{#NETWORK.ID}, {#SENDER.UPLINK}, {#PEER.NETWORK.ID}, {#RECEIVER.UPLINK}]'
|
|
delay: '0'
|
|
history: 7d
|
|
units: ms
|
|
description: 'VPN connection min latency.'
|
|
preprocessing:
|
|
- type: JSONPATH
|
|
parameters:
|
|
- $.minLatencyMs
|
|
master_item:
|
|
key: 'meraki.vpn.stat.raw[{#NETWORK.ID}, {#SENDER.UPLINK}, {#PEER.NETWORK.ID}, {#RECEIVER.UPLINK}]'
|
|
tags:
|
|
- tag: component
|
|
value: vpn
|
|
- uuid: a56018615c9540b58b8b074ccc8a05bd
|
|
name: 'VPN [{#NETWORK.NAME}][{#SENDER.UPLINK}]=>[{#PEER.NETWORK.NAME}][{#RECEIVER.UPLINK}]: loss avg, %'
|
|
type: DEPENDENT
|
|
key: 'meraki.vpn.stat.loss.avg[{#NETWORK.ID}, {#SENDER.UPLINK}, {#PEER.NETWORK.ID}, {#RECEIVER.UPLINK}]'
|
|
delay: '0'
|
|
history: 7d
|
|
value_type: FLOAT
|
|
units: '%'
|
|
description: 'VPN connection loss avg.'
|
|
preprocessing:
|
|
- type: JSONPATH
|
|
parameters:
|
|
- $.avgLossPercentage
|
|
master_item:
|
|
key: 'meraki.vpn.stat.raw[{#NETWORK.ID}, {#SENDER.UPLINK}, {#PEER.NETWORK.ID}, {#RECEIVER.UPLINK}]'
|
|
tags:
|
|
- tag: component
|
|
value: vpn
|
|
- uuid: 7dccf9e43d944c37934a1dded9999756
|
|
name: 'VPN [{#NETWORK.NAME}][{#SENDER.UPLINK}]=>[{#PEER.NETWORK.NAME}][{#RECEIVER.UPLINK}]: loss max, %'
|
|
type: DEPENDENT
|
|
key: 'meraki.vpn.stat.loss.max[{#NETWORK.ID}, {#SENDER.UPLINK}, {#PEER.NETWORK.ID}, {#RECEIVER.UPLINK}]'
|
|
delay: '0'
|
|
history: 7d
|
|
value_type: FLOAT
|
|
units: '%'
|
|
description: 'VPN connection loss max.'
|
|
preprocessing:
|
|
- type: JSONPATH
|
|
parameters:
|
|
- $.maxLossPercentage
|
|
master_item:
|
|
key: 'meraki.vpn.stat.raw[{#NETWORK.ID}, {#SENDER.UPLINK}, {#PEER.NETWORK.ID}, {#RECEIVER.UPLINK}]'
|
|
tags:
|
|
- tag: component
|
|
value: vpn
|
|
- uuid: eb835ef592a24e43bc918c4299b9f6e7
|
|
name: 'VPN [{#NETWORK.NAME}][{#SENDER.UPLINK}]=>[{#PEER.NETWORK.NAME}][{#RECEIVER.UPLINK}]: loss min, %'
|
|
type: DEPENDENT
|
|
key: 'meraki.vpn.stat.loss.min[{#NETWORK.ID}, {#SENDER.UPLINK}, {#PEER.NETWORK.ID}, {#RECEIVER.UPLINK}]'
|
|
delay: '0'
|
|
history: 7d
|
|
value_type: FLOAT
|
|
units: '%'
|
|
description: 'VPN connection loss min.'
|
|
preprocessing:
|
|
- type: JSONPATH
|
|
parameters:
|
|
- $.minLossPercentage
|
|
master_item:
|
|
key: 'meraki.vpn.stat.raw[{#NETWORK.ID}, {#SENDER.UPLINK}, {#PEER.NETWORK.ID}, {#RECEIVER.UPLINK}]'
|
|
tags:
|
|
- tag: component
|
|
value: vpn
|
|
- uuid: 1f26cdd09e5f45da9e8b0e679faa3425
|
|
name: 'VPN [{#NETWORK.NAME}][{#SENDER.UPLINK}]=>[{#PEER.NETWORK.NAME}][{#RECEIVER.UPLINK}]: mos avg'
|
|
type: DEPENDENT
|
|
key: 'meraki.vpn.stat.mos.avg[{#NETWORK.ID}, {#SENDER.UPLINK}, {#PEER.NETWORK.ID}, {#RECEIVER.UPLINK}]'
|
|
delay: '0'
|
|
history: 7d
|
|
value_type: FLOAT
|
|
description: 'VPN connection mos avg.'
|
|
preprocessing:
|
|
- type: JSONPATH
|
|
parameters:
|
|
- $.avgMos
|
|
master_item:
|
|
key: 'meraki.vpn.stat.raw[{#NETWORK.ID}, {#SENDER.UPLINK}, {#PEER.NETWORK.ID}, {#RECEIVER.UPLINK}]'
|
|
tags:
|
|
- tag: component
|
|
value: vpn
|
|
- uuid: bf28a0ead40046c8b08399775836be4e
|
|
name: 'VPN [{#NETWORK.NAME}][{#SENDER.UPLINK}]=>[{#PEER.NETWORK.NAME}][{#RECEIVER.UPLINK}]: mos max'
|
|
type: DEPENDENT
|
|
key: 'meraki.vpn.stat.mos.max[{#NETWORK.ID}, {#SENDER.UPLINK}, {#PEER.NETWORK.ID}, {#RECEIVER.UPLINK}]'
|
|
delay: '0'
|
|
history: 7d
|
|
value_type: FLOAT
|
|
description: 'VPN connection mos max.'
|
|
preprocessing:
|
|
- type: JSONPATH
|
|
parameters:
|
|
- $.maxMos
|
|
master_item:
|
|
key: 'meraki.vpn.stat.raw[{#NETWORK.ID}, {#SENDER.UPLINK}, {#PEER.NETWORK.ID}, {#RECEIVER.UPLINK}]'
|
|
tags:
|
|
- tag: component
|
|
value: vpn
|
|
- uuid: 9fee72321a23448983bd6cac7803600c
|
|
name: 'VPN [{#NETWORK.NAME}][{#SENDER.UPLINK}]=>[{#PEER.NETWORK.NAME}][{#RECEIVER.UPLINK}]: mos min'
|
|
type: DEPENDENT
|
|
key: 'meraki.vpn.stat.mos.min[{#NETWORK.ID}, {#SENDER.UPLINK}, {#PEER.NETWORK.ID}, {#RECEIVER.UPLINK}]'
|
|
delay: '0'
|
|
history: 7d
|
|
value_type: FLOAT
|
|
description: 'VPN connection mos min.'
|
|
preprocessing:
|
|
- type: JSONPATH
|
|
parameters:
|
|
- $.minMos
|
|
master_item:
|
|
key: 'meraki.vpn.stat.raw[{#NETWORK.ID}, {#SENDER.UPLINK}, {#PEER.NETWORK.ID}, {#RECEIVER.UPLINK}]'
|
|
tags:
|
|
- tag: component
|
|
value: vpn
|
|
- uuid: 2c968e21c8a34c73a17ed0fc4e2756b5
|
|
name: 'VPN [{#NETWORK.NAME}]=>[{#PEER.NETWORK.NAME}]: stats raw'
|
|
type: DEPENDENT
|
|
key: 'meraki.vpn.stat.raw[{#NETWORK.ID}, {#SENDER.UPLINK}, {#PEER.NETWORK.ID}, {#RECEIVER.UPLINK}]'
|
|
delay: '0'
|
|
history: '0'
|
|
trends: '0'
|
|
value_type: TEXT
|
|
description: 'VPN connection stats raw.'
|
|
preprocessing:
|
|
- type: JSONPATH
|
|
parameters:
|
|
- '$.vpnStats[?(@.networkId==''{#NETWORK.ID}'' && @.senderUplink==''{#SENDER.UPLINK}'' && @.peerNetworkId==''{#PEER.NETWORK.ID}'' && @.receiverUplink==''{#RECEIVER.UPLINK}'')].first()'
|
|
master_item:
|
|
key: meraki.get.vpn.stats
|
|
tags:
|
|
- tag: component
|
|
value: raw
|
|
graph_prototypes:
|
|
- uuid: 0794dc9d06844ee89099322f60382fc7
|
|
name: 'VPN [{#NETWORK.NAME}][{#SENDER.UPLINK}]=>[{#PEER.NETWORK.NAME}][{#RECEIVER.UPLINK}]: jitter'
|
|
ymin_type_1: FIXED
|
|
graph_items:
|
|
- color: 199C0D
|
|
item:
|
|
host: 'Cisco Meraki organization by HTTP'
|
|
key: 'meraki.vpn.stat.jitter.avg[{#NETWORK.ID}, {#SENDER.UPLINK}, {#PEER.NETWORK.ID}, {#RECEIVER.UPLINK}]'
|
|
- sortorder: '1'
|
|
color: F63100
|
|
item:
|
|
host: 'Cisco Meraki organization by HTTP'
|
|
key: 'meraki.vpn.stat.loss.max[{#NETWORK.ID}, {#SENDER.UPLINK}, {#PEER.NETWORK.ID}, {#RECEIVER.UPLINK}]'
|
|
- sortorder: '2'
|
|
color: 00611C
|
|
item:
|
|
host: 'Cisco Meraki organization by HTTP'
|
|
key: 'meraki.vpn.stat.jitter.min[{#NETWORK.ID}, {#SENDER.UPLINK}, {#PEER.NETWORK.ID}, {#RECEIVER.UPLINK}]'
|
|
- uuid: dd05787b5e0e4b4b870258b25c1a0503
|
|
name: 'VPN [{#NETWORK.NAME}][{#SENDER.UPLINK}]=>[{#PEER.NETWORK.NAME}][{#RECEIVER.UPLINK}]: latency'
|
|
ymin_type_1: FIXED
|
|
graph_items:
|
|
- color: 199C0D
|
|
item:
|
|
host: 'Cisco Meraki organization by HTTP'
|
|
key: 'meraki.vpn.stat.latency.avg[{#NETWORK.ID}, {#SENDER.UPLINK}, {#PEER.NETWORK.ID}, {#RECEIVER.UPLINK}]'
|
|
- sortorder: '1'
|
|
color: F63100
|
|
item:
|
|
host: 'Cisco Meraki organization by HTTP'
|
|
key: 'meraki.vpn.stat.latency.max[{#NETWORK.ID}, {#SENDER.UPLINK}, {#PEER.NETWORK.ID}, {#RECEIVER.UPLINK}]'
|
|
- sortorder: '2'
|
|
color: 00611C
|
|
item:
|
|
host: 'Cisco Meraki organization by HTTP'
|
|
key: 'meraki.vpn.stat.latency.min[{#NETWORK.ID}, {#SENDER.UPLINK}, {#PEER.NETWORK.ID}, {#RECEIVER.UPLINK}]'
|
|
- uuid: c0ff7a5798cd4aa181223763d8962229
|
|
name: 'VPN [{#NETWORK.NAME}][{#SENDER.UPLINK}]=>[{#PEER.NETWORK.NAME}][{#RECEIVER.UPLINK}]: loss'
|
|
ymin_type_1: FIXED
|
|
graph_items:
|
|
- color: 199C0D
|
|
item:
|
|
host: 'Cisco Meraki organization by HTTP'
|
|
key: 'meraki.vpn.stat.loss.avg[{#NETWORK.ID}, {#SENDER.UPLINK}, {#PEER.NETWORK.ID}, {#RECEIVER.UPLINK}]'
|
|
- sortorder: '1'
|
|
color: F63100
|
|
item:
|
|
host: 'Cisco Meraki organization by HTTP'
|
|
key: 'meraki.vpn.stat.loss.max[{#NETWORK.ID}, {#SENDER.UPLINK}, {#PEER.NETWORK.ID}, {#RECEIVER.UPLINK}]'
|
|
- sortorder: '2'
|
|
color: 00611C
|
|
item:
|
|
host: 'Cisco Meraki organization by HTTP'
|
|
key: 'meraki.vpn.stat.loss.min[{#NETWORK.ID}, {#SENDER.UPLINK}, {#PEER.NETWORK.ID}, {#RECEIVER.UPLINK}]'
|
|
master_item:
|
|
key: meraki.get.vpn.stats
|
|
lld_macro_paths:
|
|
- lld_macro: '{#NETWORK.ID}'
|
|
path: $.networkId
|
|
- lld_macro: '{#NETWORK.NAME}'
|
|
path: $.networkName
|
|
- lld_macro: '{#PEER.NETWORK.ID}'
|
|
path: $.peerNetworkId
|
|
- lld_macro: '{#PEER.NETWORK.NAME}'
|
|
path: $.peerNetworkName
|
|
- lld_macro: '{#RECEIVER.UPLINK}'
|
|
path: $.receiverUplink
|
|
- lld_macro: '{#SENDER.UPLINK}'
|
|
path: $.senderUplink
|
|
preprocessing:
|
|
- type: JSONPATH
|
|
parameters:
|
|
- $.vpnStats
|
|
tags:
|
|
- tag: class
|
|
value: network
|
|
- tag: target
|
|
value: cisco-meraki-dashboard
|
|
macros:
|
|
- macro: '{$MERAKI.API.URL}'
|
|
value: api.meraki.com/api/v1
|
|
description: 'Cisco Meraki Dashboard API URL. e.g api.meraki.com/api/v1'
|
|
- macro: '{$MERAKI.CONFIG.CHANGE.TIMESPAN}'
|
|
value: '1200'
|
|
description: 'Timespan for gathering config change log. Used in the metric config and in the URL query.'
|
|
- macro: '{$MERAKI.HTTP_PROXY}'
|
|
description: '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'
|
|
- macro: '{$MERAKI.LICENSE.EXPIRE}'
|
|
value: '86400'
|
|
description: 'Time in seconds for license to expire.'
|
|
- macro: '{$MERAKI.TOKEN}'
|
|
type: SECRET_TEXT
|
|
description: 'Cisco Meraki Dashboard API Token.'
|
|
dashboards:
|
|
- uuid: 2d10effbfff447f6937877f25d12646a
|
|
name: 'Meraki: General'
|
|
pages:
|
|
- name: 'Meraki: VPN stats'
|
|
widgets:
|
|
- type: graphprototype
|
|
name: latency
|
|
width: '12'
|
|
height: '5'
|
|
fields:
|
|
- type: INTEGER
|
|
name: columns
|
|
value: '1'
|
|
- type: INTEGER
|
|
name: rows
|
|
value: '1'
|
|
- type: GRAPH_PROTOTYPE
|
|
name: graphid
|
|
value:
|
|
host: 'Cisco Meraki organization by HTTP'
|
|
name: 'VPN [{#NETWORK.NAME}][{#SENDER.UPLINK}]=>[{#PEER.NETWORK.NAME}][{#RECEIVER.UPLINK}]: latency'
|
|
- type: graphprototype
|
|
name: loss
|
|
x: '12'
|
|
width: '12'
|
|
height: '5'
|
|
fields:
|
|
- type: INTEGER
|
|
name: columns
|
|
value: '1'
|
|
- type: INTEGER
|
|
name: rows
|
|
value: '1'
|
|
- type: GRAPH_PROTOTYPE
|
|
name: graphid
|
|
value:
|
|
host: 'Cisco Meraki organization by HTTP'
|
|
name: 'VPN [{#NETWORK.NAME}][{#SENDER.UPLINK}]=>[{#PEER.NETWORK.NAME}][{#RECEIVER.UPLINK}]: loss'
|
|
- type: graphprototype
|
|
name: loss
|
|
'y': '5'
|
|
width: '12'
|
|
height: '5'
|
|
fields:
|
|
- type: INTEGER
|
|
name: columns
|
|
value: '1'
|
|
- type: INTEGER
|
|
name: rows
|
|
value: '1'
|
|
- type: GRAPH_PROTOTYPE
|
|
name: graphid
|
|
value:
|
|
host: 'Cisco Meraki organization by HTTP'
|
|
name: 'VPN [{#NETWORK.NAME}][{#SENDER.UPLINK}]=>[{#PEER.NETWORK.NAME}][{#RECEIVER.UPLINK}]: jitter'
|
|
valuemaps:
|
|
- uuid: af92df09c58c4c9287fe294b7b90e193
|
|
name: 'License status'
|
|
mappings:
|
|
- value: '0'
|
|
newvalue: 'License Required'
|
|
- value: '1'
|
|
newvalue: OK
|
|
- value: '10'
|
|
newvalue: unknown
|
|
- uuid: e16992443a614d81a7f4186622709971
|
|
name: 'Uplink status'
|
|
mappings:
|
|
- value: '0'
|
|
newvalue: failed
|
|
- value: '1'
|
|
newvalue: active
|
|
- value: '2'
|
|
newvalue: ready
|
|
- value: '3'
|
|
newvalue: 'not connected'
|
|
- value: '10'
|
|
newvalue: unknown
|