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.

9610 lines
379 KiB

zabbix_export:
version: '7.0'
template_groups:
- uuid: c2c162144c2d4c5491c8801193af4945
name: Templates/Cloud
host_groups:
- uuid: 748ad4d098d447d492bb935c907f652f
name: Databases
- uuid: 137f19e6e2dc4219b33553b812627bc2
name: 'Virtual machines'
templates:
- uuid: fa58228fee8a4e34a7c6503950d1c615
template: 'Azure by HTTP'
name: 'Azure by HTTP'
description: |
This template is designed to monitor Microsoft Azure by HTTP.
It works without any external scripts and uses the script item.
Currently the template supports the discovery of virtual machines (VMs), Cosmos DB for MongoDB, Storage accounts, Microsoft SQL, MySQL, and PostgreSQL servers.
Setup:
1. Create an Azure service principal via the Azure command-line interface (Azure CLI) for your subscription.
`az ad sp create-for-rbac --name zabbix --role reader --scope /subscriptions/<subscription_id>`
See https://docs.microsoft.com/en-us/cli/azure/create-an-azure-service-principal-azure-cli for more details.
2. Link the template to a host.
3. Configure the macros: `{$AZURE.APP.ID}`, `{$AZURE.PASSWORD}`, `{$AZURE.TENANT.ID}`, and `{$AZURE.SUBSCRIPTION.ID}`.
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/Cloud
items:
- uuid: 7b2fe9a7ee164718933eb456b0068fea
name: 'Azure: Get errors'
type: DEPENDENT
key: azure.get.errors
delay: '0'
history: 7d
trends: '0'
value_type: TEXT
description: 'A list of errors from API requests.'
preprocessing:
- type: JSONPATH
parameters:
- $.errors
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 1h
master_item:
key: azure.get.resources
tags:
- tag: component
value: raw
triggers:
- uuid: 502cb582546046a29267715763c46bff
expression: 'length(last(/Azure by HTTP/azure.get.errors))>0'
name: 'Azure: There are errors in requests to API'
opdata: '{ITEM.LASTVALUE1}'
priority: AVERAGE
description: 'Zabbix has received errors in response to API requests.'
tags:
- tag: scope
value: availability
- uuid: fb6abf3631b240b08357ea9ce9ba89a4
name: 'Azure: Get resources'
type: SCRIPT
key: azure.get.resources
delay: 10m
history: '0'
trends: '0'
value_type: TEXT
params: |
var Azure = {
params: {},
token: null,
setParams: function (params) {
['app_id', 'password', 'tenant_id', 'subscription_id'].forEach(function (field) {
if (typeof params !== 'object' || typeof params[field] === 'undefined' || params[field] === '') {
throw 'Required param is not set: ' + field + '.';
}
});
Azure.params = params;
},
request: function (url, data) {
if (typeof data === 'undefined' || data === null) {
data = '';
}
var response, request = new HttpRequest();
if (typeof Azure.params.proxy !== 'undefined' && Azure.params.proxy !== '') {
request.setProxy(Azure.params.proxy);
}
if (Azure.token) {
request.addHeader('Accept: application/json');
request.addHeader('Authorization: Bearer ' + Azure.token);
}
Zabbix.log(4, '[ Azure ] Sending request: ' + url);
if (data !== '') {
request.addHeader('Content-Type: application/x-www-form-urlencoded');
response = request.post(url, data);
}
else {
response = request.get(url);
}
Zabbix.log(4, '[ Azure ] Received response with status code ' + request.getStatus() + ': ' + response);
if (request.getStatus() !== 200 || response === null) {
throw 'Request failed with status code ' + request.getStatus() + ': ' + response;
}
try {
return JSON.parse(response);
}
catch (error) {
throw 'Failed to parse response received from API.';
}
},
nextlink: function (data) {
next_data = data;
while ('nextLink' in next_data) {
next_data = Azure.request(next_data.nextLink);
next_data.value.forEach(function (value) {
data.value.push(value);
});
}
return data;
}
};
var result,
data = {},
types = [
{"method": "Microsoft.Compute/virtualMachines", "version": "2022-03-01"},
{"method": "Microsoft.DBforMySQL/flexibleServers", "version": "2021-05-01"},
{"method": "Microsoft.DBforMySQL/servers", "version": "2017-12-01"},
{"method": "Microsoft.DBforPostgreSQL/flexibleServers", "version": "2021-06-01"},
{"method": "Microsoft.DBforPostgreSQL/servers", "version": "2017-12-01"},
{"method": "Microsoft.Sql/servers", "version": "2022-05-01-preview"},
{"method": "Microsoft.DocumentDB/databaseAccounts", "version": "2022-11-15-preview"}
];
data['errors'] = {},
data['resources'] = {};
data.resources.value = [];
try {
Azure.setParams(JSON.parse(value));
try {
result = Azure.request(
'https://login.microsoftonline.com/' + encodeURIComponent(Azure.params.tenant_id) + '/oauth2/token',
'grant_type=client_credentials&resource=' + encodeURIComponent('https://management.azure.com/') + '&client_id=' + encodeURIComponent(Azure.params.app_id) + '&client_secret=' + encodeURIComponent(Azure.params.password)
);
if ('access_token' in result) {
Azure.token = result['access_token'];
} else {
throw 'Auth response does not contain access token.';
}
}
catch (error) {
data.errors.auth = error.toString();
}
if (!('auth' in data.errors)) {
try {
for (var i in types) {
if (types[i].method === "Microsoft.Sql/servers") {
mssql_servers = Azure.request('https://management.azure.com/subscriptions/' + encodeURIComponent(Azure.params.subscription_id) + '/providers/' + types[i].method + '?api-version=' + types[i].version);
if ('nextLink' in mssql_servers) {
mssql_servers = Azure.nextlink(mssql_servers);
}
if ('value' in mssql_servers && mssql_servers.value.length > 0) {
for (j in mssql_servers.value) {
mssql_dbs = Azure.request('https://management.azure.com' + mssql_servers.value[j].id + '/databases?api-version=' + types[i].version);
if ('nextLink' in mssql_dbs) {
mssql_dbs = Azure.nextlink(mssql_dbs);
}
mssql_dbs.value.forEach(function (value) {
raw_data.value.push(value);
});
}
}
}
else {
raw_data = Azure.request('https://management.azure.com/subscriptions/' + encodeURIComponent(Azure.params.subscription_id) + '/providers/' + types[i].method + '?api-version=' + types[i].version);
if ('nextLink' in raw_data) {
raw_data = Azure.nextlink(raw_data);
}
}
raw_data.value.forEach(function (value) {
value.resourceGroup = value.id.split("/")[4];
data.resources.value.push(value);
});
}
}
catch (error) {
data.errors.resources = error.toString();
}
}
}
catch (error) {
data.errors.params = error.toString();
}
if (Object.keys(data.errors).length !== 0) {
errors = 'Failed to receive data:';
for (var error in data.errors) {
errors += '\n' + error + ' : ' + data.errors[error];
}
data.errors = errors;
}
else {
data.errors = '';
}
return JSON.stringify(data);
description: 'The result of API requests is expressed in the JSON.'
timeout: '{$AZURE.DATA.TIMEOUT}'
parameters:
- name: app_id
value: '{$AZURE.APP.ID}'
- name: password
value: '{$AZURE.PASSWORD}'
- name: tenant_id
value: '{$AZURE.TENANT.ID}'
- name: subscription_id
value: '{$AZURE.SUBSCRIPTION.ID}'
- name: proxy
value: '{$AZURE.PROXY}'
tags:
- tag: component
value: raw
- uuid: 91b2290d65b949ad9ea801763c35cf40
name: 'Azure: Get storage accounts'
type: SCRIPT
key: azure.get.storage.acc
delay: 10m
history: '0'
trends: '0'
value_type: TEXT
params: |
var Azure = {
params: {},
token: '',
setParams: function (params) {
['app_id', 'password', 'tenant_id', 'subscription_id'].forEach(function (field) {
if (typeof params !== 'object' || typeof params[field] === 'undefined' || params[field] === '') {
throw 'Required param is not set: ' + field + '.';
}
});
Azure.params = params;
},
login: function () {
var response, login = new HttpRequest();
if (typeof Azure.params.proxy !== 'undefined' && Azure.params.proxy !== '') {
login.setProxy(Azure.params.proxy);
}
login.addHeader('Content-Type: application/x-www-form-urlencoded');
response = login.post(
'https://login.microsoftonline.com/' + encodeURIComponent(Azure.params.tenant_id) + '/oauth2/token',
'grant_type=client_credentials&resource=' + encodeURIComponent('https://management.azure.com/') + '&client_id=' + encodeURIComponent(Azure.params.app_id) + '&client_secret=' + encodeURIComponent(Azure.params.password)
);
if (login.getStatus() !== 200) {
throw 'Login failed with status code ' + login.getStatus() + ': ' + response;
}
try {
response = JSON.parse(response);
if (!response.hasOwnProperty('access_token')) {
throw null;
}
}
catch (error) {
throw 'Authentication response does not contain access token.';
}
Azure.token = response['access_token'];
},
request: function (url) {
var response, request = new HttpRequest();
if (typeof Azure.params.proxy !== 'undefined' && Azure.params.proxy !== '') {
request.setProxy(Azure.params.proxy);
}
if (!Azure.token) {
throw 'Request does not contain access token.';
}
request.addHeader('Accept: application/json');
request.addHeader('Authorization: Bearer ' + Azure.token);
response = request.get(url);
if (request.getStatus() !== 200) {
throw 'Request failed with status code ' + request.getStatus() + ': ' + response;
}
try {
return JSON.parse(response);
}
catch (error) {
throw 'Failed to parse response received from API.';
}
},
getField: function (data, path) {
var steps = path.split('.');
for (var i = 0; i < steps.length; i++) {
var step = steps[i];
if (typeof data !== 'object' || typeof data[step] === 'undefined') {
throw 'Required field was not found: ' + path;
}
data = data[step];
}
return data;
},
getMetricsData: function () {
var metric = Azure.request('https://management.azure.com/subscriptions/' + encodeURIComponent(Azure.params.subscription_id) + '/providers/Microsoft.Storage/storageAccounts?api-version=2021-05-01'),
data = [];
if (!metric.hasOwnProperty('value')) {
throw 'Failed getting required field. Check debug log for more information.';
}
for (k in metric.value) {
id = Azure.getField(metric.value[k], 'id');
json = {};
input = id.split('/');
for (var i = 1; i < input.length; i += 2) {
json[input[i]] = input[i + 1];
}
data.push({
'name': Azure.getField(metric.value[k], 'name'),
'id': id,
'resourceGroup': Azure.getField(json, 'resourceGroups'),
'location': Azure.getField(metric.value[k], 'location'),
'token': Azure.token
});
}
return data;
}
};
try {
Azure.setParams(JSON.parse(value));
Azure.login();
return JSON.stringify(Azure.getMetricsData());
}
catch (error) {
error += (String(error).endsWith('.')) ? '' : '.';
Zabbix.log(3, '[ Azure ] ERROR: ' + error);
return JSON.stringify({'error': error});
}
description: 'The result of API requests is expressed in the JSON.'
timeout: '{$AZURE.DATA.TIMEOUT}'
parameters:
- name: app_id
value: '{$AZURE.APP.ID}'
- name: password
value: '{$AZURE.PASSWORD}'
- name: tenant_id
value: '{$AZURE.TENANT.ID}'
- name: subscription_id
value: '{$AZURE.SUBSCRIPTION.ID}'
- name: proxy
value: '{$AZURE.PROXY}'
tags:
- tag: component
value: raw
- uuid: 2e425a9ef8d34ea68f7998ceed30ebc4
name: 'Azure: Get storage accounts errors'
type: DEPENDENT
key: azure.get.storage.acc.errors
delay: '0'
history: 7d
trends: '0'
value_type: TEXT
description: 'The errors from API requests.'
preprocessing:
- type: JSONPATH
parameters:
- $.error
error_handler: CUSTOM_VALUE
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 1h
master_item:
key: azure.get.storage.acc
tags:
- tag: component
value: status
triggers:
- uuid: 253f0835cd134d2591bb2be1b9dc9b29
expression: 'length(last(/Azure by HTTP/azure.get.storage.acc.errors))>0'
name: 'Azure: There are errors in storages requests to API'
opdata: '{ITEM.LASTVALUE1}'
priority: AVERAGE
description: 'Zabbix has received errors in response to API requests.'
dependencies:
- name: 'Azure: There are errors in requests to API'
expression: 'length(last(/Azure by HTTP/azure.get.errors))>0'
tags:
- tag: scope
value: availability
discovery_rules:
- uuid: 3bfbfc8d770a4c77a17d62aaebb55e64
name: 'Cosmos DB account discovery'
type: DEPENDENT
key: azure.cosmos.mongo.db.discovery
delay: '0'
filter:
evaltype: AND
conditions:
- macro: '{#TYPE}'
value: ^Microsoft.DocumentDB/databaseAccounts
formulaid: G
- macro: '{#NAME}'
value: '{$AZURE.COSMOS.MONGO.DB.NAME.MATCHES}'
formulaid: E
- macro: '{#NAME}'
value: '{$AZURE.COSMOS.MONGO.DB.NAME.NOT.MATCHES}'
operator: NOT_MATCHES_REGEX
formulaid: F
- macro: '{#LOCATION}'
value: '{$AZURE.COSMOS.MONGO.DB.LOCATION.MATCHES}'
formulaid: C
- macro: '{#LOCATION}'
value: '{$AZURE.COSMOS.MONGO.DB.LOCATION.NOT.MATCHES}'
operator: NOT_MATCHES_REGEX
formulaid: D
- macro: '{#GROUP}'
value: '{$AZURE.RESOURCE.GROUP.MATCHES}'
formulaid: A
- macro: '{#GROUP}'
value: '{$AZURE.RESOURCE.GROUP.NOT.MATCHES}'
operator: NOT_MATCHES_REGEX
formulaid: B
description: 'The list of the Cosmos databases is provided by the subscription.'
host_prototypes:
- uuid: 16eec30e921e4627b3599b4d06e48072
host: 'Azure Cosmos DB {#NAME}'
name: 'Azure Cosmos DB {#NAME}'
group_links:
- group:
name: Databases
macros:
- macro: '{$AZURE.RESOURCE.ID}'
value: '{#ID}'
tags:
- tag: location
value: '{#LOCATION}'
- tag: resource-group
value: '{#GROUP}'
- tag: version
value: '{#VERSION}'
master_item:
key: azure.get.resources
lld_macro_paths:
- lld_macro: '{#GROUP}'
path: $.resourceGroup
- lld_macro: '{#ID}'
path: $.id
- lld_macro: '{#LOCATION}'
path: $.location
- lld_macro: '{#NAME}'
path: $.name
- lld_macro: '{#TYPE}'
path: $.type
- lld_macro: '{#VERSION}'
path: $.kind
preprocessing:
- type: JSONPATH
parameters:
- $.resources.value
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 6h
overrides:
- name: MongoDB
step: '1'
filter:
conditions:
- macro: '{#VERSION}'
value: ^MongoDB$
formulaid: A
operations:
- operationobject: HOST_PROTOTYPE
operator: REGEXP
templates:
- name: 'Azure Cosmos DB for MongoDB by HTTP'
- uuid: c875a410ddd84ccfbc5b407cd6e34803
name: 'Microsoft SQL databases discovery'
type: DEPENDENT
key: azure.mssql.databases.discovery
delay: '0'
filter:
evaltype: AND
conditions:
- macro: '{#TYPE}'
value: ^Microsoft.Sql/servers/databases
formulaid: H
- macro: '{#NAME}'
value: '{$AZURE.MSSQL.DB.NAME.MATCHES}'
formulaid: E
- macro: '{#NAME}'
value: '{$AZURE.MSSQL.DB.NAME.NOT.MATCHES}'
operator: NOT_MATCHES_REGEX
formulaid: F
- macro: '{#LOCATION}'
value: '{$AZURE.MSSQL.DB.LOCATION.MATCHES}'
formulaid: C
- macro: '{#LOCATION}'
value: '{$AZURE.MSSQL.DB.LOCATION.NOT.MATCHES}'
operator: NOT_MATCHES_REGEX
formulaid: D
- macro: '{#GROUP}'
value: '{$AZURE.RESOURCE.GROUP.MATCHES}'
formulaid: A
- macro: '{#GROUP}'
value: '{$AZURE.RESOURCE.GROUP.NOT.MATCHES}'
operator: NOT_MATCHES_REGEX
formulaid: B
- macro: '{#SIZE}'
value: '{$AZURE.MSSQL.DB.SIZE.NOT.MATCHES}'
operator: NOT_MATCHES_REGEX
formulaid: G
description: 'The list of the Microsoft SQL databases is provided by the subscription.'
host_prototypes:
- uuid: 2aaf7dc7e9f04ccf9dd91fcd803fa076
host: 'Azure Microsoft SQL database {#NAME}'
name: 'Azure Microsoft SQL database {#NAME}'
group_links:
- group:
name: Databases
macros:
- macro: '{$AZURE.RESOURCE.ID}'
value: '{#ID}'
tags:
- tag: location
value: '{#LOCATION}'
- tag: resource-group
value: '{#GROUP}'
- tag: size
value: '{#SIZE}'
- tag: version
value: '{#VERSION}'
master_item:
key: azure.get.resources
lld_macro_paths:
- lld_macro: '{#GROUP}'
path: $.resourceGroup
- lld_macro: '{#ID}'
path: $.id
- lld_macro: '{#LOCATION}'
path: $.location
- lld_macro: '{#NAME}'
path: $.name
- lld_macro: '{#SIZE}'
path: $.sku.name
- lld_macro: '{#TYPE}'
path: $.type
- lld_macro: '{#VERSION}'
path: $.kind
preprocessing:
- type: JSONPATH
parameters:
- $.resources.value
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 6h
overrides:
- name: Server
step: '2'
filter:
conditions:
- macro: '{#VERSION}'
value: '^((?!serverless).)*$'
formulaid: A
operations:
- operationobject: HOST_PROTOTYPE
operator: REGEXP
templates:
- name: 'Azure Microsoft SQL Database by HTTP'
- name: Serverless
step: '1'
filter:
conditions:
- macro: '{#VERSION}'
value: '^.*serverless$'
formulaid: A
operations:
- operationobject: HOST_PROTOTYPE
operator: REGEXP
templates:
- name: 'Azure Microsoft SQL Serverless Database by HTTP'
- uuid: 7fafbef68f8b46d083eb43da7cd1e2cc
name: 'MySQL servers discovery'
type: DEPENDENT
key: azure.mysql.servers.discovery
delay: '0'
filter:
evaltype: AND
conditions:
- macro: '{#TYPE}'
value: ^Microsoft.DBforMySQL
formulaid: G
- macro: '{#NAME}'
value: '{$AZURE.MYSQL.DB.NAME.MATCHES}'
formulaid: E
- macro: '{#NAME}'
value: '{$AZURE.MYSQL.DB.NAME.NOT.MATCHES}'
operator: NOT_MATCHES_REGEX
formulaid: F
- macro: '{#LOCATION}'
value: '{$AZURE.MYSQL.DB.LOCATION.MATCHES}'
formulaid: C
- macro: '{#LOCATION}'
value: '{$AZURE.MYSQL.DB.LOCATION.NOT.MATCHES}'
operator: NOT_MATCHES_REGEX
formulaid: D
- macro: '{#GROUP}'
value: '{$AZURE.RESOURCE.GROUP.MATCHES}'
formulaid: A
- macro: '{#GROUP}'
value: '{$AZURE.RESOURCE.GROUP.NOT.MATCHES}'
operator: NOT_MATCHES_REGEX
formulaid: B
description: 'The list of the MySQL servers is provided by the subscription.'
host_prototypes:
- uuid: 55b87078c14c4561b53e64af5ed77d61
host: 'Azure MySQL server {#NAME}'
name: 'Azure MySQL server {#NAME}'
group_links:
- group:
name: Databases
macros:
- macro: '{$AZURE.RESOURCE.ID}'
value: '{#ID}'
tags:
- tag: location
value: '{#LOCATION}'
- tag: resource-group
value: '{#GROUP}'
- tag: size
value: '{#SIZE}'
- tag: version
value: '{#VERSION}'
master_item:
key: azure.get.resources
lld_macro_paths:
- lld_macro: '{#GROUP}'
path: $.resourceGroup
- lld_macro: '{#ID}'
path: $.id
- lld_macro: '{#LOCATION}'
path: $.location
- lld_macro: '{#NAME}'
path: $.name
- lld_macro: '{#SIZE}'
path: $.sku.name
- lld_macro: '{#TYPE}'
path: $.type
- lld_macro: '{#VERSION}'
path: $.properties.version
preprocessing:
- type: JSONPATH
parameters:
- $.resources.value
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 6h
overrides:
- name: 'Flexible server'
step: '1'
filter:
conditions:
- macro: '{#TYPE}'
value: Microsoft.DBforMySQL/flexibleServers
formulaid: A
operations:
- operationobject: HOST_PROTOTYPE
operator: REGEXP
templates:
- name: 'Azure MySQL Flexible Server by HTTP'
- name: 'Single server'
step: '2'
filter:
conditions:
- macro: '{#TYPE}'
value: Microsoft.DBforMySQL/servers
formulaid: A
operations:
- operationobject: HOST_PROTOTYPE
operator: REGEXP
templates:
- name: 'Azure MySQL Single Server by HTTP'
- uuid: a4b35b5fe8c04b52a9640f2f41013230
name: 'PostgreSQL servers discovery'
type: DEPENDENT
key: azure.pgsql.servers.discovery
delay: '0'
filter:
evaltype: AND
conditions:
- macro: '{#TYPE}'
value: ^Microsoft.DBforPostgreSQL
formulaid: G
- macro: '{#NAME}'
value: '{$AZURE.PGSQL.DB.NAME.MATCHES}'
formulaid: E
- macro: '{#NAME}'
value: '{$AZURE.PGSQL.DB.NAME.NOT.MATCHES}'
operator: NOT_MATCHES_REGEX
formulaid: F
- macro: '{#LOCATION}'
value: '{$AZURE.PGSQL.DB.LOCATION.MATCHES}'
formulaid: C
- macro: '{#LOCATION}'
value: '{$AZURE.PGSQL.DB.LOCATION.NOT.MATCHES}'
operator: NOT_MATCHES_REGEX
formulaid: D
- macro: '{#GROUP}'
value: '{$AZURE.RESOURCE.GROUP.MATCHES}'
formulaid: A
- macro: '{#GROUP}'
value: '{$AZURE.RESOURCE.GROUP.NOT.MATCHES}'
operator: NOT_MATCHES_REGEX
formulaid: B
description: 'The list of the PostgreSQL servers is provided by the subscription.'
host_prototypes:
- uuid: 54f0e0ec288f4feb9a2dc58a8726bd1d
host: 'Azure PostgreSQL server {#NAME}'
name: 'Azure PostgreSQL server {#NAME}'
group_links:
- group:
name: Databases
macros:
- macro: '{$AZURE.RESOURCE.ID}'
value: '{#ID}'
tags:
- tag: location
value: '{#LOCATION}'
- tag: resource-group
value: '{#GROUP}'
- tag: size
value: '{#SIZE}'
- tag: version
value: '{#VERSION}'
master_item:
key: azure.get.resources
lld_macro_paths:
- lld_macro: '{#GROUP}'
path: $.resourceGroup
- lld_macro: '{#ID}'
path: $.id
- lld_macro: '{#LOCATION}'
path: $.location
- lld_macro: '{#NAME}'
path: $.name
- lld_macro: '{#SIZE}'
path: $.sku.name
- lld_macro: '{#TYPE}'
path: $.type
- lld_macro: '{#VERSION}'
path: $.properties.version
preprocessing:
- type: JSONPATH
parameters:
- $.resources.value
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 6h
overrides:
- name: 'Flexible server'
step: '1'
filter:
conditions:
- macro: '{#TYPE}'
value: Microsoft.DBforPostgreSQL/flexibleServers
formulaid: A
operations:
- operationobject: HOST_PROTOTYPE
operator: REGEXP
templates:
- name: 'Azure PostgreSQL Flexible Server by HTTP'
- name: 'Single server'
step: '2'
filter:
conditions:
- macro: '{#TYPE}'
value: Microsoft.DBforPostgreSQL/servers
formulaid: A
operations:
- operationobject: HOST_PROTOTYPE
operator: REGEXP
templates:
- name: 'Azure PostgreSQL Single Server by HTTP'
- uuid: 3b9bde32dd6b4e3aa2dd8d7949f655e9
name: 'Storage accounts discovery'
type: DEPENDENT
key: azure.starage.acc.discovery
delay: '0'
filter:
evaltype: AND
conditions:
- macro: '{#NAME}'
value: '{$AZURE.STORAGE.ACC.NAME.MATCHES}'
formulaid: E
- macro: '{#NAME}'
value: '{$AZURE.STORAGE.ACC.NAME.NOT.MATCHES}'
operator: NOT_MATCHES_REGEX
formulaid: F
- macro: '{#LOCATION}'
value: '{$AZURE.STORAGE.ACC.LOCATION.MATCHES}'
formulaid: C
- macro: '{#LOCATION}'
value: '{$AZURE.STORAGE.ACC.LOCATION.NOT.MATCHES}'
operator: NOT_MATCHES_REGEX
formulaid: D
- macro: '{#GROUP}'
value: '{$AZURE.RESOURCE.GROUP.MATCHES}'
formulaid: A
- macro: '{#GROUP}'
value: '{$AZURE.RESOURCE.GROUP.NOT.MATCHES}'
operator: NOT_MATCHES_REGEX
formulaid: B
description: 'The list of all storage accounts available under the subscription.'
item_prototypes:
- uuid: 3361508a601748f5aca339f952430889
name: 'Azure: Storage account [{#NAME}]: Get data'
type: SCRIPT
key: 'azure.get.storage.acc[{#NAME}]'
history: '0'
trends: '0'
value_type: TEXT
params: |
var AzureStorage = {
params: {},
setParams: function (params) {
['token', 'id'].forEach(function (field) {
if (typeof params !== 'object' || typeof params[field] === 'undefined' || params[field] === '') {
throw 'Required param is not set: ' + field + '.';
}
});
AzureStorage.params = params;
},
request: function (url) {
var response, request = new HttpRequest();
if (typeof AzureStorage.params.proxy !== 'undefined' && AzureStorage.params.proxy !== '') {
request.setProxy(AzureStorage.params.proxy);
}
request.addHeader('Accept: application/json');
request.addHeader('Authorization: Bearer ' + AzureStorage.params.token);
Zabbix.log(4, '[ Azure ] Sending request: ' + url);
response = request.get(url);
if (request.getStatus() !== 200) {
throw 'Request failed with status code ' + request.getStatus() + ': ' + response;
}
try {
return JSON.parse(response);
}
catch (error) {
throw 'Failed to parse response received from API.';
}
},
getField: function (data, path) {
var steps = path.split('.');
for (var i = 0; i < steps.length; i++) {
var step = steps[i];
if (typeof data !== 'object' || typeof data[step] === 'undefined') {
throw 'Required field was not found: ' + path + ' input data: ' + JSON.stringify(data);
}
data = data[step];
}
return data;
},
getMetricsData: function () {
var data = {};
start_date = new Date((new Date().getTime()) - 4200000).toISOString().replace(/\.\d+/, '');
end_date = new Date((new Date().getTime()) - 600000).toISOString().replace(/\.\d+/, '');
endpoints = {
'tableServices': '/tableServices/default/providers/Microsoft.Insights/metrics?metricnames=TableCapacity,TableCount,TableEntityCount,Transactions,Ingress,Egress,SuccessServerLatency,SuccessE2ELatency,Availability&api-version=2021-05-01&interval=PT1H&timespan=' + encodeURIComponent(start_date) + '/' + encodeURIComponent(end_date),
'blobServices': '/blobServices/default/providers/Microsoft.Insights/metrics?metricnames=BlobCapacity,BlobCount,ContainerCount,IndexCapacity,Transactions,Ingress,Egress,SuccessServerLatency,SuccessE2ELatency,Availability&api-version=2021-05-01&interval=PT1H&timespan=' + encodeURIComponent(start_date) + '/' + encodeURIComponent(end_date),
'fileServices': '/fileServices/default/providers/Microsoft.Insights/metrics?metricnames=FileCapacity,FileCount,FileShareCount,FileShareSnapshotCount,FileShareSnapshotSize,FileShareCapacityQuota,Transactions,Ingress,Egress,SuccessServerLatency,SuccessE2ELatency,Availability&api-version=2021-05-01&interval=PT1H&timespan=' + encodeURIComponent(start_date) + '/' + encodeURIComponent(end_date),
'storageAccount': '/providers/Microsoft.Insights/metrics?metricnames=UsedCapacity,Transactions,Ingress,Egress,SuccessServerLatency,SuccessE2ELatency,Availability&api-version=2021-05-01&interval=PT1H&timespan=' + encodeURIComponent(start_date) + '/' + encodeURIComponent(end_date),
'queueServices': '/queueServices/default/providers/Microsoft.Insights/metrics?metricnames=QueueCapacity,QueueCount,QueueMessageCount,Transactions,Ingress,Egress,SuccessServerLatency,SuccessE2ELatency,Availability&api-version=2021-05-01&interval=PT1H&timespan=' + encodeURIComponent(start_date) + '/' + encodeURIComponent(end_date)
};
Object.keys(endpoints).forEach(function (field) {
data[field] = {};
metrics = AzureStorage.request('https://management.azure.com' + AzureStorage.params.id + endpoints[field]);
if (!metrics.hasOwnProperty('value')) {
throw 'Failed getting required field. Check debug log for more information.';
}
for (k in metrics.value) {
key = AzureStorage.getField(metrics.value[k], 'name.value')
if (metrics.value[k].timeseries.length === 0) {
metrics.value[k].timeseries.push({ 'data': ['nodata'] })
}
data[field][key] = AzureStorage.getField(metrics.value[k], 'timeseries.0.data.0');
}
});
return data
}
};
try {
AzureStorage.setParams(JSON.parse(value));
return JSON.stringify(AzureStorage.getMetricsData());
}
catch (error) {
error += (String(error).endsWith('.')) ? '' : '.';
Zabbix.log(3, '[ Azure ] ERROR: ' + error);
return JSON.stringify({ 'error': error });
}
description: 'The HTTP API endpoint that returns storage metrics with the name `[{#NAME}]`.'
timeout: '{$AZURE.DATA.TIMEOUT}'
parameters:
- name: id
value: '{#ID}'
- name: token
value: '{#TOKEN}'
- name: proxy
value: '{$AZURE.PROXY}'
tags:
- tag: component
value: raw
- tag: component
value: storages
- tag: storage
value: '{#NAME}'
- uuid: 08ce66b39b084182bdb60a5556b88c88
name: 'Azure: Storage account [{#NAME}]: Availability'
type: DEPENDENT
key: 'azure.storage.availability[{#NAME}]'
delay: '0'
history: 7d
value_type: FLOAT
units: '%'
description: |
The percentage of availability for the storage service or a specified API operation.
Availability is calculated by taking the `TotalBillableRequests` value and dividing it by the number of applicable requests, including those that produced unexpected errors.
All unexpected errors result in reduced availability for the storage service or the specified API operation.
preprocessing:
- type: JSONPATH
parameters:
- $.storageAccount.Availability.average
error_handler: DISCARD_VALUE
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 3h
master_item:
key: 'azure.get.storage.acc[{#NAME}]'
tags:
- tag: component
value: storages
- tag: metrics
value: common
- tag: storage
value: '{#NAME}'
trigger_prototypes:
- uuid: 6a0b3edebded4d848ad76f86f8152377
expression: '(min(/Azure by HTTP/azure.storage.availability[{#NAME}],#3))<{$AZURE.STORAGE.ACC.AVAILABILITY:"{#NAME}"}'
name: 'Azure: Storage account [{#NAME}]: Availability is low'
event_name: 'Azure: Storage account [{#NAME} availability are too low (less than {$AZURE.STORAGE.ACC.AVAILABILITY:"{#NAME}"}%)'
opdata: '{ITEM.LASTVALUE1}'
priority: WARNING
tags:
- tag: scope
value: availability
- uuid: 9ae0af76a37047f5ba84de2f43dfb5c4
name: 'Azure: Storage account [{#NAME}]: Blob Availability'
type: DEPENDENT
key: 'azure.storage.blob.availability[{#NAME}]'
delay: '0'
history: 7d
value_type: FLOAT
units: '%'
description: |
The percentage of availability for the storage service or a specified API operation.
Availability is calculated by taking the `TotalBillableRequests` value and dividing it by the number of applicable requests, including those that produced unexpected errors.
All unexpected errors result in reduced availability for the storage service or the specified API operation.
preprocessing:
- type: JSONPATH
parameters:
- $.blobServices.Availability.average
error_handler: DISCARD_VALUE
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 3h
master_item:
key: 'azure.get.storage.acc[{#NAME}]'
tags:
- tag: component
value: storages
- tag: metrics
value: blob
- tag: storage
value: '{#NAME}'
trigger_prototypes:
- uuid: 4cd8ac56b50c4120bf9de56bb1f06245
expression: '(min(/Azure by HTTP/azure.storage.blob.availability[{#NAME}],#3))<{$AZURE.STORAGE.ACC.BLOB.AVAILABILITY:"{#NAME}"}'
name: 'Azure: Storage account [{#NAME}]: Blob Availability is low'
event_name: 'Azure: Storage account [{#NAME} blob availability are too low (less than {$AZURE.STORAGE.ACC.BLOB.AVAILABILITY:"{#NAME}"}%)'
opdata: '{ITEM.LASTVALUE1}'
priority: WARNING
tags:
- tag: scope
value: availability
- uuid: c6437ade4fee44f783ab379fb179508d
name: 'Azure: Storage account [{#NAME}]: Blob Capacity'
type: DEPENDENT
key: 'azure.storage.blob.capacity[{#NAME}]'
delay: '0'
history: 7d
value_type: FLOAT
units: B
description: 'The amount of storage used by the blob service of the storage account with the name `[{#NAME}]`, expressed in bytes.'
preprocessing:
- type: JSONPATH
parameters:
- $.blobServices.BlobCapacity.average
error_handler: DISCARD_VALUE
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 3h
master_item:
key: 'azure.get.storage.acc[{#NAME}]'
tags:
- tag: component
value: storages
- tag: metrics
value: blob
- tag: storage
value: '{#NAME}'
- uuid: 707be15f02a141548ce5f89097c303a0
name: 'Azure: Storage account [{#NAME}]: Blob Container Count'
type: DEPENDENT
key: 'azure.storage.blob.container.count[{#NAME}]'
delay: '0'
history: 7d
description: 'The number of containers in the storage account with the name `[{#NAME}]`.'
preprocessing:
- type: JSONPATH
parameters:
- $.blobServices.ContainerCount.average
error_handler: DISCARD_VALUE
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 3h
master_item:
key: 'azure.get.storage.acc[{#NAME}]'
tags:
- tag: component
value: storages
- tag: metrics
value: blob
- tag: storage
value: '{#NAME}'
- uuid: 9bd8b8f1b5844298a245d449548de46e
name: 'Azure: Storage account [{#NAME}]: Blob Count'
type: DEPENDENT
key: 'azure.storage.blob.count[{#NAME}]'
delay: '0'
history: 7d
description: 'The number of blob objects stored in the storage account with the name `[{#NAME}]`.'
preprocessing:
- type: JSONPATH
parameters:
- $.blobServices.BlobCount.average
error_handler: DISCARD_VALUE
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 3h
master_item:
key: 'azure.get.storage.acc[{#NAME}]'
tags:
- tag: component
value: storages
- tag: metrics
value: blob
- tag: storage
value: '{#NAME}'
- uuid: ae28bbd289644619b20b1907212d8293
name: 'Azure: Storage account [{#NAME}]: Blob Egress'
type: DEPENDENT
key: 'azure.storage.blob.engress[{#NAME}]'
delay: '0'
history: 7d
value_type: FLOAT
units: B
description: |
The amount of egress data. This number includes egress to external client from Azure Storage and also egress within Azure.
As a result, this number does not reflect billable egress.
preprocessing:
- type: JSONPATH
parameters:
- $.blobServices.Egress.total
error_handler: DISCARD_VALUE
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 3h
master_item:
key: 'azure.get.storage.acc[{#NAME}]'
tags:
- tag: component
value: storages
- tag: metrics
value: blob
- tag: storage
value: '{#NAME}'
- uuid: 8e73a2aba92444dd9c02c6f94227a4e5
name: 'Azure: Storage account [{#NAME}]: Blob Index Capacity'
type: DEPENDENT
key: 'azure.storage.blob.index.capacity[{#NAME}]'
delay: '0'
history: 7d
value_type: FLOAT
units: B
description: 'The amount of storage with the name `[{#NAME}]` used by the Azure Data Lake Storage Gen2 hierarchical index.'
preprocessing:
- type: JSONPATH
parameters:
- $.blobServices.IndexCapacity.average
error_handler: DISCARD_VALUE
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 3h
master_item:
key: 'azure.get.storage.acc[{#NAME}]'
tags:
- tag: component
value: storages
- tag: metrics
value: blob
- tag: storage
value: '{#NAME}'
- uuid: ff40325efb174839bef7bc775049837e
name: 'Azure: Storage account [{#NAME}]: Blob Ingress'
type: DEPENDENT
key: 'azure.storage.blob.ingress[{#NAME}]'
delay: '0'
history: 7d
value_type: FLOAT
units: B
description: 'The amount of ingress data, expressed in bytes. This number includes ingress from an external client into Azure Storage and also ingress within Azure.'
preprocessing:
- type: JSONPATH
parameters:
- $.blobServices.Ingress.total
error_handler: DISCARD_VALUE
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 3h
master_item:
key: 'azure.get.storage.acc[{#NAME}]'
tags:
- tag: component
value: storages
- tag: metrics
value: blob
- tag: storage
value: '{#NAME}'
- uuid: e17d6f2ed79c4b5eaa54730c82d6840f
name: 'Azure: Storage account [{#NAME}]: Blob Success E2E Latency'
type: DEPENDENT
key: 'azure.storage.blob.success.e2e.latency[{#NAME}]'
delay: '0'
history: 7d
value_type: FLOAT
units: s
description: |
The average end-to-end latency of successful requests made to a storage service or the specified API operation, expressed in milliseconds.
This value includes the required processing time within Azure Storage to read the request, send the response, and receive acknowledgment of the response.
preprocessing:
- type: JSONPATH
parameters:
- $.blobServices.SuccessE2ELatency.average
error_handler: DISCARD_VALUE
- type: MULTIPLIER
parameters:
- '0.001'
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 3h
master_item:
key: 'azure.get.storage.acc[{#NAME}]'
tags:
- tag: component
value: storages
- tag: metrics
value: blob
- tag: storage
value: '{#NAME}'
- uuid: 727fb792fe5c4229995f7aa5bbb681ed
name: 'Azure: Storage account [{#NAME}]: Blob Success Server Latency'
type: DEPENDENT
key: 'azure.storage.blob.success.server.latency[{#NAME}]'
delay: '0'
history: 7d
value_type: FLOAT
units: s
description: |
The average time used to process a successful request by Azure Storage.
This value does not include the network latency specified in `SuccessE2ELatency`.
preprocessing:
- type: JSONPATH
parameters:
- $.blobServices.SuccessServerLatency.average
error_handler: DISCARD_VALUE
- type: MULTIPLIER
parameters:
- '0.001'
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 3h
master_item:
key: 'azure.get.storage.acc[{#NAME}]'
tags:
- tag: component
value: storages
- tag: metrics
value: blob
- tag: storage
value: '{#NAME}'
- uuid: 48ecb880def34474b73a03eb895db3ea
name: 'Azure: Storage account [{#NAME}]: Blob Transactions'
type: DEPENDENT
key: 'azure.storage.blob.transactions[{#NAME}]'
delay: '0'
history: 7d
description: |
The number of requests made to the storage service or a specified API operation.
This number includes successful and failed requests and also requests that produced errors.
Use `ResponseType` dimension for the number of different types of responses.
preprocessing:
- type: JSONPATH
parameters:
- $.blobServices.Transactions.total
error_handler: DISCARD_VALUE
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 3h
master_item:
key: 'azure.get.storage.acc[{#NAME}]'
tags:
- tag: component
value: storages
- tag: metrics
value: blob
- tag: storage
value: '{#NAME}'
- uuid: 4198807e1e08439a9009481ddcfd3bab
name: 'Azure: Storage account [{#NAME}]: Egress'
type: DEPENDENT
key: 'azure.storage.engress[{#NAME}]'
delay: '0'
history: 7d
value_type: FLOAT
units: B
description: |
The amount of egress data. This number includes egress to external client from Azure Storage and also egress within Azure.
As a result, this number does not reflect billable egress.
preprocessing:
- type: JSONPATH
parameters:
- $.storageAccount.Egress.total
error_handler: DISCARD_VALUE
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 3h
master_item:
key: 'azure.get.storage.acc[{#NAME}]'
tags:
- tag: component
value: storages
- tag: metrics
value: common
- tag: storage
value: '{#NAME}'
- uuid: 43069f165849449d8403d1a8c82fe634
name: 'Azure: Storage account [{#NAME}]: File Capacity'
type: DEPENDENT
key: 'azure.storage.file.capacity[{#NAME}]'
delay: '0'
history: 7d
value_type: FLOAT
units: B
description: 'The amount of File storage used by the storage account with the name `[{#NAME}]`, expressed in bytes.'
preprocessing:
- type: JSONPATH
parameters:
- $.fileServices.FileCapacity.average
error_handler: DISCARD_VALUE
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 3h
master_item:
key: 'azure.get.storage.acc[{#NAME}]'
tags:
- tag: component
value: storages
- tag: metrics
value: file
- tag: storage
value: '{#NAME}'
- uuid: 3483741c11a141c2866ea58a74a91135
name: 'Azure: Storage account [{#NAME}]: File Count'
type: DEPENDENT
key: 'azure.storage.file.count[{#NAME}]'
delay: '0'
history: 7d
description: 'The number of files in the storage account with the name `[{#NAME}]`.'
preprocessing:
- type: JSONPATH
parameters:
- $.fileServices.FileCount.average
error_handler: DISCARD_VALUE
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 3h
master_item:
key: 'azure.get.storage.acc[{#NAME}]'
tags:
- tag: component
value: storages
- tag: metrics
value: file
- tag: storage
value: '{#NAME}'
- uuid: 7f6d01573bf24d9889f41a14cb581075
name: 'Azure: Storage account [{#NAME}]: File Egress'
type: DEPENDENT
key: 'azure.storage.file.engress[{#NAME}]'
delay: '0'
history: 7d
value_type: FLOAT
units: B
description: |
The amount of egress data. This number includes egress to external client from Azure Storage and also egress within Azure.
As a result, this number does not reflect billable egress.
preprocessing:
- type: JSONPATH
parameters:
- $.fileServices.Egress.total
error_handler: DISCARD_VALUE
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 3h
master_item:
key: 'azure.get.storage.acc[{#NAME}]'
tags:
- tag: component
value: storages
- tag: metrics
value: file
- tag: storage
value: '{#NAME}'
- uuid: 9f9b6772f9d9478ba3be3a93c5408ba2
name: 'Azure: Storage account [{#NAME}]: File Ingress'
type: DEPENDENT
key: 'azure.storage.file.ingress[{#NAME}]'
delay: '0'
history: 7d
value_type: FLOAT
units: B
description: 'The amount of ingress data, expressed in bytes. This number includes ingress from an external client into Azure Storage and also ingress within Azure.'
preprocessing:
- type: JSONPATH
parameters:
- $.fileServices.Ingress.total
error_handler: DISCARD_VALUE
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 3h
master_item:
key: 'azure.get.storage.acc[{#NAME}]'
tags:
- tag: component
value: storages
- tag: metrics
value: file
- tag: storage
value: '{#NAME}'
- uuid: 4cb60e5473ce46a08bc962dc97c1f4db
name: 'Azure: Storage account [{#NAME}]: File Share Capacity Quota'
type: DEPENDENT
key: 'azure.storage.file.share.capacity.quota[{#NAME}]'
delay: '0'
history: 7d
units: B
description: 'The upper limit on the amount of storage that can be used by Azure Files Service, in bytes.'
preprocessing:
- type: JSONPATH
parameters:
- $.fileServices.FileShareCapacityQuota.average
error_handler: DISCARD_VALUE
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 3h
master_item:
key: 'azure.get.storage.acc[{#NAME}]'
tags:
- tag: component
value: storages
- tag: metrics
value: file
- tag: storage
value: '{#NAME}'
- uuid: 220673a2e99a4108b034d04d79108231
name: 'Azure: Storage account [{#NAME}]: File Share Count'
type: DEPENDENT
key: 'azure.storage.file.share.count[{#NAME}]'
delay: '0'
history: 7d
description: 'The number of file shares in the storage account.'
preprocessing:
- type: JSONPATH
parameters:
- $.fileServices.FileShareCount.average
error_handler: DISCARD_VALUE
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 3h
master_item:
key: 'azure.get.storage.acc[{#NAME}]'
tags:
- tag: component
value: storages
- tag: metrics
value: file
- tag: storage
value: '{#NAME}'
- uuid: 47c48f39b9744a92ac13e9db69f6e629
name: 'Azure: Storage account [{#NAME}]: File Share Snapshot Size'
type: DEPENDENT
key: 'azure.storage.file.share.snapshot.size[{#NAME}]'
delay: '0'
history: 7d
units: B
description: 'The amount of storage used by the snapshots in storage account''s File service, in bytes.'
preprocessing:
- type: JSONPATH
parameters:
- $.fileServices.FileShareSnapshotSize.average
error_handler: DISCARD_VALUE
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 3h
master_item:
key: 'azure.get.storage.acc[{#NAME}]'
tags:
- tag: component
value: storages
- tag: metrics
value: file
- tag: storage
value: '{#NAME}'
- uuid: f0394f8f2d55471c8ab557045349a6ec
name: 'Azure: Storage account [{#NAME}]: File Share Snapshot Count'
type: DEPENDENT
key: 'azure.storage.file.shares.snapshot.count[{#NAME}]'
delay: '0'
history: 7d
description: 'The number of snapshots present on the share in storage account''s Files Service.'
preprocessing:
- type: JSONPATH
parameters:
- $.fileServices.FileShareSnapshotCount.average
error_handler: DISCARD_VALUE
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 3h
master_item:
key: 'azure.get.storage.acc[{#NAME}]'
tags:
- tag: component
value: storages
- tag: metrics
value: file
- tag: storage
value: '{#NAME}'
- uuid: 431a6c51418d401697d105a0d9b62d23
name: 'Azure: Storage account [{#NAME}]: File Success E2E Latency'
type: DEPENDENT
key: 'azure.storage.file.success.e2e.latency[{#NAME}]'
delay: '0'
history: 7d
value_type: FLOAT
units: s
description: |
The average end-to-end latency of successful requests made to a storage service or the specified API operation, expressed in milliseconds.
This value includes the required processing time within Azure Storage to read the request, send the response, and receive acknowledgment of the response.
preprocessing:
- type: JSONPATH
parameters:
- $.fileServices.file.SuccessE2ELatency.average
error_handler: DISCARD_VALUE
- type: MULTIPLIER
parameters:
- '0.001'
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 3h
master_item:
key: 'azure.get.storage.acc[{#NAME}]'
tags:
- tag: component
value: storages
- tag: metrics
value: file
- tag: storage
value: '{#NAME}'
- uuid: 43b6c0b948f64d9daada7aaac520c839
name: 'Azure: Storage account [{#NAME}]: File Success Server Latency'
type: DEPENDENT
key: 'azure.storage.file.success.server.latency[{#NAME}]'
delay: '0'
history: 7d
value_type: FLOAT
units: s
description: |
The average time used to process a successful request by Azure Storage.
This value does not include the network latency specified in `SuccessE2ELatency`.
preprocessing:
- type: JSONPATH
parameters:
- $.fileServices.SuccessServerLatency.average
error_handler: DISCARD_VALUE
- type: MULTIPLIER
parameters:
- '0.001'
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 3h
master_item:
key: 'azure.get.storage.acc[{#NAME}]'
tags:
- tag: component
value: storages
- tag: metrics
value: file
- tag: storage
value: '{#NAME}'
- uuid: ed4b7ac10368493ba01c7cbeffba3042
name: 'Azure: Storage account [{#NAME}]: File Transactions'
type: DEPENDENT
key: 'azure.storage.file.transactions[{#NAME}]'
delay: '0'
history: 7d
description: |
The number of requests made to the storage service or a specified API operation.
This number includes successful and failed requests and also requests that produced errors.
Use `ResponseType` dimension for the number of different types of responses.
preprocessing:
- type: JSONPATH
parameters:
- $.fileServices.Transactions.total
error_handler: DISCARD_VALUE
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 3h
master_item:
key: 'azure.get.storage.acc[{#NAME}]'
tags:
- tag: component
value: storages
- tag: metrics
value: file
- tag: storage
value: '{#NAME}'
- uuid: caeaa6805904471a8b18480f34ef9807
name: 'Azure: Storage account [{#NAME}]: Ingress'
type: DEPENDENT
key: 'azure.storage.ingress[{#NAME}]'
delay: '0'
history: 7d
value_type: FLOAT
units: B
description: 'The amount of ingress data, expressed in bytes. This number includes ingress from an external client into Azure Storage and also ingress within Azure.'
preprocessing:
- type: JSONPATH
parameters:
- $.storageAccount.Ingress.total
error_handler: DISCARD_VALUE
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 3h
master_item:
key: 'azure.get.storage.acc[{#NAME}]'
tags:
- tag: component
value: storages
- tag: metrics
value: common
- tag: storage
value: '{#NAME}'
- uuid: be8b82396ff243e8a52864069b192dea
name: 'Azure: Storage account [{#NAME}]: Queue Capacity'
type: DEPENDENT
key: 'azure.storage.queue.capacity[{#NAME}]'
delay: '0'
history: 7d
value_type: FLOAT
units: B
description: 'The amount of Queue storage used by the storage account with the name `[{#NAME}]`, expressed in bytes.'
preprocessing:
- type: JSONPATH
parameters:
- $.queueServices.QueueCapacity.average
error_handler: DISCARD_VALUE
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 3h
master_item:
key: 'azure.get.storage.acc[{#NAME}]'
tags:
- tag: component
value: storages
- tag: metrics
value: queue
- tag: storage
value: '{#NAME}'
- uuid: 9174d372235e4d14a4896a79ddcbc051
name: 'Azure: Storage account [{#NAME}]: Queue Count'
type: DEPENDENT
key: 'azure.storage.queue.count[{#NAME}]'
delay: '0'
history: 7d
description: 'The number of queues in the storage account with the name `[{#NAME}]`.'
preprocessing:
- type: JSONPATH
parameters:
- $.queueServices.QueueCount.average
error_handler: DISCARD_VALUE
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 3h
master_item:
key: 'azure.get.storage.acc[{#NAME}]'
tags:
- tag: component
value: storages
- tag: metrics
value: queue
- tag: storage
value: '{#NAME}'
- uuid: b8cff599c4194b4abd74f4a27ca93284
name: 'Azure: Storage account [{#NAME}]: Queue Egress'
type: DEPENDENT
key: 'azure.storage.queue.engress[{#NAME}]'
delay: '0'
history: 7d
value_type: FLOAT
units: B
description: |
The amount of egress data. This number includes egress to external client from Azure Storage and also egress within Azure.
As a result, this number does not reflect billable egress.
preprocessing:
- type: JSONPATH
parameters:
- $.queueServices.Egress.total
error_handler: DISCARD_VALUE
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 3h
master_item:
key: 'azure.get.storage.acc[{#NAME}]'
tags:
- tag: component
value: storages
- tag: metrics
value: queue
- tag: storage
value: '{#NAME}'
- uuid: 599f612c3cc64e81a53d507ae0078ab1
name: 'Azure: Storage account [{#NAME}]: Queue Ingress'
type: DEPENDENT
key: 'azure.storage.queue.ingress[{#NAME}]'
delay: '0'
history: 7d
value_type: FLOAT
units: B
description: 'The amount of ingress data, expressed in bytes. This number includes ingress from an external client into Azure Storage and also ingress within Azure.'
preprocessing:
- type: JSONPATH
parameters:
- $.queueServices.Ingress.total
error_handler: DISCARD_VALUE
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 3h
master_item:
key: 'azure.get.storage.acc[{#NAME}]'
tags:
- tag: component
value: storages
- tag: metrics
value: queue
- tag: storage
value: '{#NAME}'
- uuid: 70c7b436a03145c5ab694b3a20ac52b1
name: 'Azure: Storage account [{#NAME}]: Queue Message Count'
type: DEPENDENT
key: 'azure.storage.queue.message.count[{#NAME}]'
delay: '0'
history: 7d
description: 'The number of unexpired queue messages in the storage account with the name `[{#NAME}]`.'
preprocessing:
- type: JSONPATH
parameters:
- $.queueServices.QueueMessageCount.average
error_handler: DISCARD_VALUE
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 3h
master_item:
key: 'azure.get.storage.acc[{#NAME}]'
tags:
- tag: component
value: storages
- tag: metrics
value: queue
- tag: storage
value: '{#NAME}'
- uuid: eccdbf48412e4c28afc3bbf87c545cc2
name: 'Azure: Storage account [{#NAME}]: Queue Success E2E Latency'
type: DEPENDENT
key: 'azure.storage.queue.success.e2e.latency[{#NAME}]'
delay: '0'
history: 7d
value_type: FLOAT
units: s
description: |
The average end-to-end latency of successful requests made to a storage service or the specified API operation, expressed in milliseconds.
This value includes the required processing time within Azure Storage to read the request, send the response, and receive acknowledgment of the response.
preprocessing:
- type: JSONPATH
parameters:
- $.queueServices.queue.SuccessE2ELatency.average
error_handler: DISCARD_VALUE
- type: MULTIPLIER
parameters:
- '0.001'
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 3h
master_item:
key: 'azure.get.storage.acc[{#NAME}]'
tags:
- tag: component
value: storages
- tag: metrics
value: queue
- tag: storage
value: '{#NAME}'
- uuid: 4d9aa2753d944690b01a23bcd44fd52d
name: 'Azure: Storage account [{#NAME}]: Queue Success Server Latency'
type: DEPENDENT
key: 'azure.storage.queue.success.server.latency[{#NAME}]'
delay: '0'
history: 7d
value_type: FLOAT
units: s
description: |
The average time used to process a successful request by Azure Storage.
This value does not include the network latency specified in `SuccessE2ELatency`.
preprocessing:
- type: JSONPATH
parameters:
- $.queueServices.SuccessServerLatency.average
error_handler: DISCARD_VALUE
- type: MULTIPLIER
parameters:
- '0.001'
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 3h
master_item:
key: 'azure.get.storage.acc[{#NAME}]'
tags:
- tag: component
value: storages
- tag: metrics
value: queue
- tag: storage
value: '{#NAME}'
- uuid: e472739df4634b55be2466bd91af9886
name: 'Azure: Storage account [{#NAME}]: Queue Transactions'
type: DEPENDENT
key: 'azure.storage.queue.transactions[{#NAME}]'
delay: '0'
history: 7d
description: |
The number of requests made to the storage service or a specified API operation.
This number includes successful and failed requests and also requests that produced errors.
Use `ResponseType` dimension for the number of different types of responses.
preprocessing:
- type: JSONPATH
parameters:
- $.queueServices.Transactions.total
error_handler: DISCARD_VALUE
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 3h
master_item:
key: 'azure.get.storage.acc[{#NAME}]'
tags:
- tag: component
value: storages
- tag: metrics
value: queue
- tag: storage
value: '{#NAME}'
- uuid: 48437de0bdca4f5392c295ca8b82bd0a
name: 'Azure: Storage account [{#NAME}]: Success E2E Latency'
type: DEPENDENT
key: 'azure.storage.success.e2e.latency[{#NAME}]'
delay: '0'
history: 7d
value_type: FLOAT
units: s
description: |
The average end-to-end latency of successful requests made to a storage service or the specified API operation, expressed in milliseconds.
This value includes the required processing time within Azure Storage to read the request, send the response, and receive acknowledgment of the response.
preprocessing:
- type: JSONPATH
parameters:
- $.storageAccount.SuccessE2ELatency.average
error_handler: DISCARD_VALUE
- type: MULTIPLIER
parameters:
- '0.001'
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 3h
master_item:
key: 'azure.get.storage.acc[{#NAME}]'
tags:
- tag: component
value: storages
- tag: metrics
value: common
- tag: storage
value: '{#NAME}'
- uuid: 7076dbfb45cd49828b96064aa892e8e4
name: 'Azure: Storage account [{#NAME}]: Success Server Latency'
type: DEPENDENT
key: 'azure.storage.success.server.latency[{#NAME}]'
delay: '0'
history: 7d
value_type: FLOAT
units: s
description: |
The average time used to process a successful request by Azure Storage.
This value does not include the network latency specified in `SuccessE2ELatency`.
preprocessing:
- type: JSONPATH
parameters:
- $.storageAccount.SuccessServerLatency.average
error_handler: DISCARD_VALUE
- type: MULTIPLIER
parameters:
- '0.001'
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 3h
master_item:
key: 'azure.get.storage.acc[{#NAME}]'
tags:
- tag: component
value: storages
- tag: metrics
value: common
- tag: storage
value: '{#NAME}'
- uuid: 918f1d1c70964e7c9f5521cf99bbb21d
name: 'Azure: Storage account [{#NAME}]: Table Availability'
type: DEPENDENT
key: 'azure.storage.table.availability[{#NAME}]'
delay: '0'
history: 7d
value_type: FLOAT
units: '%'
description: |
The percentage of availability for the storage service or a specified API operation.
Availability is calculated by taking the `TotalBillableRequests` value and dividing it by the number of applicable requests, including those that produced unexpected errors.
All unexpected errors result in reduced availability for the storage service or the specified API operation.
preprocessing:
- type: JSONPATH
parameters:
- $.tableServices.Availability.average
error_handler: DISCARD_VALUE
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 3h
master_item:
key: 'azure.get.storage.acc[{#NAME}]'
tags:
- tag: component
value: storages
- tag: metrics
value: table
- tag: storage
value: '{#NAME}'
trigger_prototypes:
- uuid: bfb1e82685224048ba8082447cad57ca
expression: '(min(/Azure by HTTP/azure.storage.table.availability[{#NAME}],#3))<{$AZURE.STORAGE.ACC.TABLE.AVAILABILITY:"{#NAME}"}'
name: 'Azure: Storage account [{#NAME}]: Table Availability is low'
event_name: 'Azure: Storage account [{#NAME} table availability are too low (less than {$AZURE.STORAGE.ACC.TABLE.AVAILABILITY:"{#NAME}"}%)'
opdata: '{ITEM.LASTVALUE1}'
priority: WARNING
tags:
- tag: scope
value: availability
- uuid: ee19a3857a7a4650952eb855193991ee
name: 'Azure: Storage account [{#NAME}]: Table Capacity'
type: DEPENDENT
key: 'azure.storage.table.capacity[{#NAME}]'
delay: '0'
history: 7d
value_type: FLOAT
units: B
description: 'The amount of storage used by the table service of the storage account with the name `[{#NAME}]`, expressed in bytes.'
preprocessing:
- type: JSONPATH
parameters:
- $.tableServices.TableCapacity.average
error_handler: DISCARD_VALUE
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 3h
master_item:
key: 'azure.get.storage.acc[{#NAME}]'
tags:
- tag: component
value: storages
- tag: metrics
value: table
- tag: storage
value: '{#NAME}'
- uuid: a3d11321b1cc4c1b9c322c0a7162e76e
name: 'Azure: Storage account [{#NAME}]: Table Count'
type: DEPENDENT
key: 'azure.storage.table.count[{#NAME}]'
delay: '0'
history: 7d
description: 'The number of tables in the storage account with the name `[{#NAME}]`.'
preprocessing:
- type: JSONPATH
parameters:
- $.tableServices.TableCount.average
error_handler: DISCARD_VALUE
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 3h
master_item:
key: 'azure.get.storage.acc[{#NAME}]'
tags:
- tag: component
value: storages
- tag: metrics
value: table
- tag: storage
value: '{#NAME}'
- uuid: d75bd57fdd9f4377aea7c1e52a109c18
name: 'Azure: Storage account [{#NAME}]: Table Egress'
type: DEPENDENT
key: 'azure.storage.table.engress[{#NAME}]'
delay: '0'
history: 7d
value_type: FLOAT
units: B
description: |
The amount of egress data. This number includes egress to external client from Azure Storage and also egress within Azure.
As a result, this number does not reflect billable egress.
preprocessing:
- type: JSONPATH
parameters:
- $.tableServices.Egress.total
error_handler: DISCARD_VALUE
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 3h
master_item:
key: 'azure.get.storage.acc[{#NAME}]'
tags:
- tag: component
value: storages
- tag: metrics
value: table
- tag: storage
value: '{#NAME}'
- uuid: f2911504457b4d329ae7cf7d7a24594a
name: 'Azure: Storage account [{#NAME}]: Table Entity Count'
type: DEPENDENT
key: 'azure.storage.table.entity.count[{#NAME}]'
delay: '0'
history: 7d
description: 'The number of table entities in the storage account with the name `[{#NAME}]`.'
preprocessing:
- type: JSONPATH
parameters:
- $.tableServices.TableEntityCount.average
error_handler: DISCARD_VALUE
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 3h
master_item:
key: 'azure.get.storage.acc[{#NAME}]'
tags:
- tag: component
value: storages
- tag: metrics
value: table
- tag: storage
value: '{#NAME}'
- uuid: 993ca2e5bcd74d27b19998d77f0abec8
name: 'Azure: Storage account [{#NAME}]: Table Ingress'
type: DEPENDENT
key: 'azure.storage.table.ingress[{#NAME}]'
delay: '0'
history: 7d
value_type: FLOAT
units: B
description: 'The amount of ingress data, expressed in bytes. This number includes ingress from an external client into Azure Storage and also ingress within Azure.'
preprocessing:
- type: JSONPATH
parameters:
- $.tableServices.Ingress.total
error_handler: DISCARD_VALUE
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 3h
master_item:
key: 'azure.get.storage.acc[{#NAME}]'
tags:
- tag: component
value: storages
- tag: metrics
value: table
- tag: storage
value: '{#NAME}'
- uuid: 00c441cc77f4447584d4bffbefc304e0
name: 'Azure: Storage account [{#NAME}]: Table Success E2E Latency'
type: DEPENDENT
key: 'azure.storage.table.success.e2e.latency[{#NAME}]'
delay: '0'
history: 7d
value_type: FLOAT
units: s
description: |
The average end-to-end latency of successful requests made to a storage service or the specified API operation, expressed in milliseconds.
This value includes the required processing time within Azure Storage to read the request, send the response, and receive acknowledgment of the response.
preprocessing:
- type: JSONPATH
parameters:
- $.tableServices.SuccessE2ELatency.average
error_handler: DISCARD_VALUE
- type: MULTIPLIER
parameters:
- '0.001'
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 3h
master_item:
key: 'azure.get.storage.acc[{#NAME}]'
tags:
- tag: component
value: storages
- tag: metrics
value: table
- tag: storage
value: '{#NAME}'
- uuid: f29e3ad4be034f38932cb85654397926
name: 'Azure: Storage account [{#NAME}]: Table Success Server Latency'
type: DEPENDENT
key: 'azure.storage.table.success.server.latency[{#NAME}]'
delay: '0'
history: 7d
value_type: FLOAT
units: s
description: |
The average time used to process a successful request by Azure Storage.
This value does not include the network latency specified in `SuccessE2ELatency`.
preprocessing:
- type: JSONPATH
parameters:
- $.tableServices.SuccessServerLatency.average
error_handler: DISCARD_VALUE
- type: MULTIPLIER
parameters:
- '0.001'
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 3h
master_item:
key: 'azure.get.storage.acc[{#NAME}]'
tags:
- tag: component
value: storages
- tag: metrics
value: table
- tag: storage
value: '{#NAME}'
- uuid: 9ba25e87c5bb466a99855a9fb893283d
name: 'Azure: Storage account [{#NAME}]: Table Transactions'
type: DEPENDENT
key: 'azure.storage.table.transactions[{#NAME}]'
delay: '0'
history: 7d
description: |
The number of requests made to the storage service or a specified API operation.
This number includes successful and failed requests and also requests that produced errors.
Use `ResponseType` dimension for the number of different types of responses.
preprocessing:
- type: JSONPATH
parameters:
- $.tableServices.Transactions.total
error_handler: DISCARD_VALUE
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 3h
master_item:
key: 'azure.get.storage.acc[{#NAME}]'
tags:
- tag: component
value: storages
- tag: metrics
value: table
- tag: storage
value: '{#NAME}'
- uuid: 6f68f0d8a63640ffa549fde44e8fe56c
name: 'Azure: Storage account [{#NAME}]: Transactions'
type: DEPENDENT
key: 'azure.storage.transactions[{#NAME}]'
delay: '0'
history: 7d
description: |
The number of requests made to the storage service or a specified API operation.
This number includes successful and failed requests and also requests that produced errors.
Use `ResponseType` dimension for the number of different types of responses.
preprocessing:
- type: JSONPATH
parameters:
- $.storageAccount.Transactions.total
error_handler: DISCARD_VALUE
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 3h
master_item:
key: 'azure.get.storage.acc[{#NAME}]'
tags:
- tag: component
value: storages
- tag: metrics
value: common
- tag: storage
value: '{#NAME}'
- uuid: 08ef07d874db4823bd167482bf049916
name: 'Azure: Storage account [{#NAME}]: Used Capacity'
type: DEPENDENT
key: 'azure.storage.used.capacity[{#NAME}]'
delay: '0'
history: 7d
value_type: FLOAT
units: B
description: |
The amount of storage used by the storage account with the name `[{#NAME}]`, expressed in bytes.
For standard storage accounts, it's the sum of capacity used by blob, table, file, and queue.
For premium storage accounts and Blob storage accounts, it is the same as BlobCapacity or FileCapacity.
preprocessing:
- type: JSONPATH
parameters:
- $.storageAccount.UsedCapacity.average
error_handler: DISCARD_VALUE
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 3h
master_item:
key: 'azure.get.storage.acc[{#NAME}]'
tags:
- tag: component
value: storages
- tag: metrics
value: common
- tag: storage
value: '{#NAME}'
graph_prototypes:
- uuid: d569e0daf1974df58584432805f95557
name: 'Azure: Capacity by storage [{#NAME}]'
graph_items:
- color: 199C0D
item:
host: 'Azure by HTTP'
key: 'azure.storage.used.capacity[{#NAME}]'
- sortorder: '1'
color: F63100
item:
host: 'Azure by HTTP'
key: 'azure.storage.blob.capacity[{#NAME}]'
- sortorder: '2'
color: 00611C
item:
host: 'Azure by HTTP'
key: 'azure.storage.table.capacity[{#NAME}]'
- sortorder: '3'
color: F7941D
item:
host: 'Azure by HTTP'
key: 'azure.storage.file.capacity[{#NAME}]'
- sortorder: '4'
color: FC6EA3
item:
host: 'Azure by HTTP'
key: 'azure.storage.queue.capacity[{#NAME}]'
- uuid: 9c87dfb9ed7e4c1ea32c8e35c6e23381
name: 'Azure: Transactions by storage [{#NAME}]'
graph_items:
- color: 199C0D
item:
host: 'Azure by HTTP'
key: 'azure.storage.transactions[{#NAME}]'
- sortorder: '1'
color: F63100
item:
host: 'Azure by HTTP'
key: 'azure.storage.blob.transactions[{#NAME}]'
- sortorder: '2'
color: 00611C
item:
host: 'Azure by HTTP'
key: 'azure.storage.table.transactions[{#NAME}]'
- sortorder: '3'
color: F7941D
item:
host: 'Azure by HTTP'
key: 'azure.storage.file.transactions[{#NAME}]'
- sortorder: '4'
color: FC6EA3
item:
host: 'Azure by HTTP'
key: 'azure.storage.queue.transactions[{#NAME}]'
master_item:
key: azure.get.storage.acc
lld_macro_paths:
- lld_macro: '{#GROUP}'
path: $.resourceGroup
- lld_macro: '{#ID}'
path: $.id
- lld_macro: '{#LOCATION}'
path: $.location
- lld_macro: '{#NAME}'
path: $.name
- lld_macro: '{#TOKEN}'
path: $.token
preprocessing:
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 6h
- uuid: f9386233186648ce828f406c52972ce5
name: 'Virtual machines discovery'
type: DEPENDENT
key: azure.vm.discovery
delay: '0'
filter:
evaltype: AND
conditions:
- macro: '{#TYPE}'
value: ^Microsoft.Compute/virtualMachines$
formulaid: G
- macro: '{#NAME}'
value: '{$AZURE.VM.NAME.MATCHES}'
formulaid: E
- macro: '{#NAME}'
value: '{$AZURE.VM.NAME.NOT.MATCHES}'
operator: NOT_MATCHES_REGEX
formulaid: F
- macro: '{#LOCATION}'
value: '{$AZURE.VM.LOCATION.MATCHES}'
formulaid: C
- macro: '{#LOCATION}'
value: '{$AZURE.VM.LOCATION.NOT.MATCHES}'
operator: NOT_MATCHES_REGEX
formulaid: D
- macro: '{#GROUP}'
value: '{$AZURE.RESOURCE.GROUP.MATCHES}'
formulaid: A
- macro: '{#GROUP}'
value: '{$AZURE.RESOURCE.GROUP.NOT.MATCHES}'
operator: NOT_MATCHES_REGEX
formulaid: B
description: 'The list of the virtual machines is provided by the subscription.'
host_prototypes:
- uuid: d08c0ee33c924b28bf1fed571da6c7f4
host: 'Azure virtual machine {#NAME}'
name: 'Azure virtual machine {#NAME}'
group_links:
- group:
name: 'Virtual machines'
templates:
- name: 'Azure Virtual Machine by HTTP'
macros:
- macro: '{$AZURE.RESOURCE.ID}'
value: '{#ID}'
tags:
- tag: location
value: '{#LOCATION}'
- tag: os
value: '{#OS}'
- tag: resource-group
value: '{#GROUP}'
- tag: size
value: '{#SIZE}'
master_item:
key: azure.get.resources
lld_macro_paths:
- lld_macro: '{#GROUP}'
path: $.resourceGroup
- lld_macro: '{#ID}'
path: $.id
- lld_macro: '{#LOCATION}'
path: $.location
- lld_macro: '{#NAME}'
path: $.name
- lld_macro: '{#OS}'
path: $.properties.storageProfile.osDisk.osType
- lld_macro: '{#SIZE}'
path: $.properties.hardwareProfile.vmSize
- lld_macro: '{#TYPE}'
path: $.type
preprocessing:
- type: JSONPATH
parameters:
- $.resources.value
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 6h
tags:
- tag: class
value: software
- tag: target
value: azure
macros:
- macro: '{$AZURE.APP.ID}'
description: 'The App ID of Microsoft Azure.'
- macro: '{$AZURE.COSMOS.MONGO.DB.LOCATION.MATCHES}'
value: '.*'
description: 'This macro is used in Microsoft Cosmos DB account discovery rule.'
- macro: '{$AZURE.COSMOS.MONGO.DB.LOCATION.NOT.MATCHES}'
value: CHANGE_IF_NEEDED
description: 'This macro is used in Microsoft Cosmos DB account discovery rule.'
- macro: '{$AZURE.COSMOS.MONGO.DB.NAME.MATCHES}'
value: '.*'
description: 'This macro is used in Microsoft Cosmos DB account discovery rule.'
- macro: '{$AZURE.COSMOS.MONGO.DB.NAME.NOT.MATCHES}'
value: CHANGE_IF_NEEDED
description: 'This macro is used in Microsoft Cosmos DB account discovery rule.'
- macro: '{$AZURE.DATA.TIMEOUT}'
value: 15s
description: 'A response timeout for an API.'
- macro: '{$AZURE.MSSQL.DB.LOCATION.MATCHES}'
value: '.*'
description: 'This macro is used in Microsoft SQL databases discovery rule.'
- macro: '{$AZURE.MSSQL.DB.LOCATION.NOT.MATCHES}'
value: CHANGE_IF_NEEDED
description: 'This macro is used in Microsoft SQL databases discovery rule.'
- macro: '{$AZURE.MSSQL.DB.NAME.MATCHES}'
value: '.*'
description: 'This macro is used in Microsoft SQL databases discovery rule.'
- macro: '{$AZURE.MSSQL.DB.NAME.NOT.MATCHES}'
value: CHANGE_IF_NEEDED
description: 'This macro is used in Microsoft SQL databases discovery rule.'
- macro: '{$AZURE.MSSQL.DB.SIZE.NOT.MATCHES}'
value: ^System$
description: 'This macro is used in Microsoft SQL databases discovery rule.'
- macro: '{$AZURE.MYSQL.DB.LOCATION.MATCHES}'
value: '.*'
description: 'This macro is used in MySQL servers discovery rule.'
- macro: '{$AZURE.MYSQL.DB.LOCATION.NOT.MATCHES}'
value: CHANGE_IF_NEEDED
description: 'This macro is used in MySQL servers discovery rule.'
- macro: '{$AZURE.MYSQL.DB.NAME.MATCHES}'
value: '.*'
description: 'This macro is used in MySQL servers discovery rule.'
- macro: '{$AZURE.MYSQL.DB.NAME.NOT.MATCHES}'
value: CHANGE_IF_NEEDED
description: 'This macro is used in MySQL servers discovery rule.'
- macro: '{$AZURE.PASSWORD}'
type: SECRET_TEXT
description: 'Microsoft Azure password.'
- macro: '{$AZURE.PGSQL.DB.LOCATION.MATCHES}'
value: '.*'
description: 'This macro is used in PostgreSQL servers discovery rule.'
- macro: '{$AZURE.PGSQL.DB.LOCATION.NOT.MATCHES}'
value: CHANGE_IF_NEEDED
description: 'This macro is used in PostgreSQL servers discovery rule.'
- macro: '{$AZURE.PGSQL.DB.NAME.MATCHES}'
value: '.*'
description: 'This macro is used in PostgreSQL servers discovery rule.'
- macro: '{$AZURE.PGSQL.DB.NAME.NOT.MATCHES}'
value: CHANGE_IF_NEEDED
description: 'This macro is used in PostgreSQL servers discovery rule.'
- macro: '{$AZURE.PROXY}'
description: 'Sets HTTP proxy value. If this macro is empty then no proxy is used.'
- macro: '{$AZURE.RESOURCE.GROUP.MATCHES}'
value: '.*'
description: 'This macro is used in discovery rules.'
- macro: '{$AZURE.RESOURCE.GROUP.NOT.MATCHES}'
value: CHANGE_IF_NEEDED
description: 'This macro is used in discovery rules.'
- macro: '{$AZURE.STORAGE.ACC.AVAILABILITY}'
value: '70'
description: 'The warning threshold of the storage account availability.'
- macro: '{$AZURE.STORAGE.ACC.BLOB.AVAILABILITY}'
value: '70'
description: 'The warning threshold of the storage account blob services availability.'
- macro: '{$AZURE.STORAGE.ACC.LOCATION.MATCHES}'
value: '.*'
description: 'This macro is used in storage accounts discovery rule.'
- macro: '{$AZURE.STORAGE.ACC.LOCATION.NOT.MATCHES}'
value: CHANGE_IF_NEEDED
description: 'This macro is used in storage accounts discovery rule.'
- macro: '{$AZURE.STORAGE.ACC.NAME.MATCHES}'
value: '.*'
description: 'This macro is used in storage accounts discovery rule.'
- macro: '{$AZURE.STORAGE.ACC.NAME.NOT.MATCHES}'
value: CHANGE_IF_NEEDED
description: 'This macro is used in storage accounts discovery rule.'
- macro: '{$AZURE.STORAGE.ACC.TABLE.AVAILABILITY}'
value: '70'
description: 'The warning threshold of the storage account table services availability.'
- macro: '{$AZURE.SUBSCRIPTION.ID}'
description: 'Microsoft Azure subscription ID.'
- macro: '{$AZURE.TENANT.ID}'
description: 'Microsoft Azure tenant ID.'
- macro: '{$AZURE.VM.LOCATION.MATCHES}'
value: '.*'
description: 'This macro is used in virtual machines discovery rule.'
- macro: '{$AZURE.VM.LOCATION.NOT.MATCHES}'
value: CHANGE_IF_NEEDED
description: 'This macro is used in virtual machines discovery rule.'
- macro: '{$AZURE.VM.NAME.MATCHES}'
value: '.*'
description: 'This macro is used in virtual machines discovery rule.'
- macro: '{$AZURE.VM.NAME.NOT.MATCHES}'
value: CHANGE_IF_NEEDED
description: 'This macro is used in virtual machines discovery rule.'
- uuid: 29325098807848aa928b4192ad5e020f
template: 'Azure Cosmos DB for MongoDB by HTTP'
name: 'Azure Cosmos DB for MongoDB by HTTP'
description: |
This template is designed to monitor Microsoft Azure Cosmos DB for MongoDB by HTTP.
It works without any external scripts and uses the script item.
Setup:
1. Create an Azure service principal via the Azure command-line interface (Azure CLI) for your subscription.
`az ad sp create-for-rbac --name zabbix --role reader --scope /subscriptions/<subscription_id>`
See https://docs.microsoft.com/en-us/cli/azure/create-an-azure-service-principal-azure-cli for more details.
2. Link the template to a host.
3. Configure the macros: {$AZURE.APP.ID}, {$AZURE.PASSWORD}, {$AZURE.TENANT.ID}, {$AZURE.SUBSCRIPTION.ID}, and {$AZURE.RESOURCE.ID}.
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/Cloud
items:
- uuid: 9e247bdb17f44630b9440b59d5ef251b
name: 'Azure MongoDB: Autoscale max throughput'
type: DEPENDENT
key: azure.cosmosdb.autoscale.max.throughput
delay: '0'
history: 7d
description: 'The autoscale max throughput.'
preprocessing:
- type: JSONPATH
parameters:
- $.requests.AutoscaleMaxThroughput.maximum
error_handler: DISCARD_VALUE
master_item:
key: azure.cosmosdb.data.get
tags:
- tag: component
value: storage
- uuid: 35a7d2c96990407f937e07fd160266a9
name: 'Azure MongoDB: Get errors'
type: DEPENDENT
key: azure.cosmosdb.data.errors
delay: '0'
history: 7d
trends: '0'
value_type: TEXT
description: 'A list of errors from API requests.'
preprocessing:
- type: JSONPATH
parameters:
- $.error
error_handler: CUSTOM_VALUE
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 1h
master_item:
key: azure.cosmosdb.data.get
tags:
- tag: component
value: raw
triggers:
- uuid: dfd484aa8a4e4b759e4e34c5318c7176
expression: 'length(last(/Azure Cosmos DB for MongoDB by HTTP/azure.cosmosdb.data.errors))>0'
name: 'Azure MongoDB: There are errors in requests to API'
opdata: '{ITEM.LASTVALUE1}'
priority: AVERAGE
description: 'Zabbix has received errors in response to API requests.'
tags:
- tag: scope
value: availability
- uuid: 647faea1597c4da6a3cd78694be8e77e
name: 'Azure MongoDB: Get data'
type: SCRIPT
key: azure.cosmosdb.data.get
history: 0d
trends: '0'
value_type: TEXT
params: |
var AzureCosmoDB = {
params: {},
token: null,
setParams: function (params) {
['app_id', 'password', 'tenant_id', 'subscription_id', 'resource_id'].forEach(function (field) {
if (typeof params !== 'object' || typeof params[field] === 'undefined' || params[field] === '') {
throw 'Required param is not set: ' + field + '.';
}
});
AzureCosmoDB.params = params;
},
login: function () {
var response, login = new HttpRequest();
if (typeof AzureCosmoDB.params.proxy !== 'undefined' && AzureCosmoDB.params.proxy !== '') {
login.setProxy(AzureCosmoDB.params.proxy);
}
login.addHeader('Content-Type: application/x-www-form-urlencoded');
response = login.post(
'https://login.microsoftonline.com/' + encodeURIComponent(AzureCosmoDB.params.tenant_id) + '/oauth2/token',
'grant_type=client_credentials&resource=' + encodeURIComponent('https://management.azure.com/') + '&client_id=' + encodeURIComponent(AzureCosmoDB.params.app_id) + '&client_secret=' + encodeURIComponent(AzureCosmoDB.params.password)
);
if (login.getStatus() !== 200) {
throw 'Login failed with status code ' + login.getStatus() + ': ' + response;
}
try {
response = JSON.parse(response);
}
catch (error) {
throw 'Failed to parse login session response.';
}
if (!response.hasOwnProperty('access_token')) {
throw 'Authentication response does not contain access token.';
}
AzureCosmoDB.token = response['access_token'];
},
request: function (url) {
var response, request = new HttpRequest();
if (typeof AzureCosmoDB.params.proxy !== 'undefined' && AzureCosmoDB.params.proxy !== '') {
request.setProxy(AzureCosmoDB.params.proxy);
}
if (!AzureCosmoDB.token) {
throw 'Request does not contain access token.';
}
request.addHeader('Accept: application/json');
request.addHeader('Authorization: Bearer ' + AzureCosmoDB.token);
Zabbix.log(4, '[ AzureCosmoDB ] request url: ' + url);
response = request.get(url);
if (request.getStatus() !== 200) {
throw 'Request failed with status code ' + request.getStatus() + ': ' + response;
}
try {
return JSON.parse(response);
}
catch (error) {
throw 'Failed to parse response received from API.';
}
},
getField: function (data, path) {
var steps = path.split('.');
for (var i = 0; i < steps.length; i++) {
var step = steps[i];
if (typeof data !== 'object' || typeof data[step] === 'undefined') {
throw 'Required field was not found: ' + path;
}
data = data[step];
}
return data;
},
getMetricsData: function () {
var data = {};
start_date = new Date((new Date().getTime()) - 600000).toISOString().replace(/\.\d+/, '');
end_date = new Date(new Date().getTime()).toISOString().replace(/\.\d+/, '');
endpoints = {
'availability': '/providers/Microsoft.Insights/metrics?metricnames=ServiceAvailability&api-version=2021-05-01&interval=PT1H&timespan=' + encodeURIComponent(start_date) + '/' + encodeURIComponent(end_date),
'requests': '/providers/Microsoft.Insights/metrics?metricnames=DataUsage,IndexUsage,DocumentQuota,AvailableStorage,DocumentCount,NormalizedRUConsumption,PhysicalPartitionThroughputInfo,PhysicalPartitionSizeInfo,AutoscaleMaxThroughput,ProvisionedThroughput,TotalRequests,TotalRequestUnits,MetadataRequests,MongoRequests,MongoRequestCharge,ServerSideLatency,ServerSideLatencyGateway,ServerSideLatencyDirect,ReplicationLatency&api-version=2021-05-01&timespan=' + encodeURIComponent(start_date) + '/' + encodeURIComponent(end_date),
};
Object.keys(endpoints).forEach(function (field) {
data[field] = {};
try {
metrics = AzureCosmoDB.request('https://management.azure.com' + AzureCosmoDB.params.resource_id + endpoints[field]);
if (!metrics.hasOwnProperty('value')) {
throw 'Failed getting required field. Check debug log for more information.';
}
for (k in metrics.value) {
key = AzureCosmoDB.getField(metrics.value[k], 'name.value')
if (metrics.value[k].timeseries.length === 0) {
metrics.value[k].timeseries.push({ 'data': ['nodata'] })
}
data[field][key] = AzureCosmoDB.getField(metrics.value[k], 'timeseries.0.data.0');
}
}
catch (error) {
data.error = error.toString();
}
});
return data
}
};
try {
AzureCosmoDB.setParams(JSON.parse(value));
AzureCosmoDB.login();
return JSON.stringify(AzureCosmoDB.getMetricsData());
}
catch (error) {
error += (String(error).endsWith('.')) ? '' : '.';
Zabbix.log(3, '[ AzureCosmoDB ] ERROR: ' + error);
return JSON.stringify({ 'error': error });
}
description: 'The result of API requests is expressed in the JSON.'
timeout: '{$AZURE.DATA.TIMEOUT}'
parameters:
- name: app_id
value: '{$AZURE.APP.ID}'
- name: password
value: '{$AZURE.PASSWORD}'
- name: tenant_id
value: '{$AZURE.TENANT.ID}'
- name: subscription_id
value: '{$AZURE.SUBSCRIPTION.ID}'
- name: resource_id
value: '{$AZURE.RESOURCE.ID}'
- name: proxy
value: '{$AZURE.PROXY}'
tags:
- tag: component
value: raw
- uuid: 947a2eb530754a609fa81c59e29fe7b7
name: 'Azure MongoDB: Data usage'
type: DEPENDENT
key: azure.cosmosdb.data.usage
delay: '0'
history: 7d
units: B
description: 'The total data usage.'
preprocessing:
- type: JSONPATH
parameters:
- $.requests.DataUsage.total
error_handler: DISCARD_VALUE
master_item:
key: azure.cosmosdb.data.get
tags:
- tag: component
value: storage
- uuid: 0bf3da9168144016b663c9b8e76447fa
name: 'Azure MongoDB: Document count'
type: DEPENDENT
key: azure.cosmosdb.document.count
delay: '0'
history: 7d
description: 'The total document count.'
preprocessing:
- type: JSONPATH
parameters:
- $.requests.DocumentCount.total
error_handler: DISCARD_VALUE
master_item:
key: azure.cosmosdb.data.get
tags:
- tag: component
value: storage
- uuid: 7fa0f59f8cfa4d9e83086b203e4f71ea
name: 'Azure MongoDB: Document quota'
type: DEPENDENT
key: azure.cosmosdb.document.quota
delay: '0'
history: 7d
units: B
description: 'The total storage quota.'
preprocessing:
- type: JSONPATH
parameters:
- $.requests.DocumentQuota.total
error_handler: DISCARD_VALUE
master_item:
key: azure.cosmosdb.data.get
tags:
- tag: component
value: storage
- uuid: b09f9445d960415185457b89b6a73452
name: 'Azure MongoDB: Index usage'
type: DEPENDENT
key: azure.cosmosdb.index.usage
delay: '0'
history: 7d
units: B
description: 'The total index usage.'
preprocessing:
- type: JSONPATH
parameters:
- $.requests.IndexUsage.total
error_handler: DISCARD_VALUE
master_item:
key: azure.cosmosdb.data.get
tags:
- tag: component
value: storage
- uuid: cd35f04b180542cda50dc5d4e979e54e
name: 'Azure MongoDB: Metadata requests'
type: DEPENDENT
key: azure.cosmosdb.metadata.requests
delay: '0'
history: 7d
description: |
The count of metadata requests.
Cosmos DB maintains system metadata collection for each account, that allows you to enumerate collections, databases, etc, and their configurations, free of charge.
preprocessing:
- type: JSONPATH
parameters:
- $.requests.MetadataRequests.count
error_handler: DISCARD_VALUE
master_item:
key: azure.cosmosdb.data.get
tags:
- tag: component
value: storage
- uuid: e42cf83e456a490295a84cfe9eb288ef
name: 'Azure MongoDB: Mongo requests'
type: DEPENDENT
key: azure.cosmosdb.mongo.requests
delay: '0'
history: 7d
description: 'The number of Mongo requests made.'
preprocessing:
- type: JSONPATH
parameters:
- $.requests.MongoRequests.count
error_handler: DISCARD_VALUE
master_item:
key: azure.cosmosdb.data.get
tags:
- tag: component
value: storage
- uuid: 8fd4068986af444799ae64c6bc8f16a6
name: 'Azure MongoDB: Mongo request charge'
type: DEPENDENT
key: azure.cosmosdb.mongo.requests.charge
delay: '0'
history: 7d
description: 'The Mongo request units consumed.'
preprocessing:
- type: JSONPATH
parameters:
- $.requests.MongoRequestCharge.total
error_handler: DISCARD_VALUE
master_item:
key: azure.cosmosdb.data.get
tags:
- tag: component
value: storage
- uuid: fda6b39ce6ef4b8c8418b2e123ecdd17
name: 'Azure MongoDB: Normalized RU consumption'
type: DEPENDENT
key: azure.cosmosdb.normalized.ru.consumption
delay: '0'
history: 7d
units: '%'
description: 'The max RU consumption percentage per minute.'
preprocessing:
- type: JSONPATH
parameters:
- $.requests.NormalizedRUConsumption.maximum
error_handler: DISCARD_VALUE
master_item:
key: azure.cosmosdb.data.get
tags:
- tag: component
value: storage
- uuid: be6800214a0443e899c40f8a4b6c3f21
name: 'Azure MongoDB: Physical partition size'
type: DEPENDENT
key: azure.cosmosdb.physical.partition.size
delay: '0'
history: 7d
units: B
description: 'The physical partition size in bytes.'
preprocessing:
- type: JSONPATH
parameters:
- $.requests.PhysicalPartitionSizeInfo.maximum
error_handler: DISCARD_VALUE
master_item:
key: azure.cosmosdb.data.get
tags:
- tag: component
value: storage
- uuid: e30d5eadde15427484e7a0d1cb38e9e3
name: 'Azure MongoDB: Physical partition throughput'
type: DEPENDENT
key: azure.cosmosdb.physical.partition.throughput
delay: '0'
history: 7d
description: 'The physical partition throughput.'
preprocessing:
- type: JSONPATH
parameters:
- $.requests.PhysicalPartitionThroughputInfo.maximum
error_handler: DISCARD_VALUE
master_item:
key: azure.cosmosdb.data.get
tags:
- tag: component
value: storage
- uuid: 49311bbfb2584a46b42ed1a7d8fcfd94
name: 'Azure MongoDB: Provisioned throughput'
type: DEPENDENT
key: azure.cosmosdb.provisioned.throughput
delay: '0'
history: 7d
description: 'The provisioned throughput.'
preprocessing:
- type: JSONPATH
parameters:
- $.requests.ProvisionedThroughput.maximum
error_handler: DISCARD_VALUE
master_item:
key: azure.cosmosdb.data.get
tags:
- tag: component
value: storage
- uuid: 6d7175e27d10406191c883dc2e5949e4
name: 'Azure MongoDB: Replication latency, P99'
type: DEPENDENT
key: azure.cosmosdb.replication.latency
delay: '0'
history: 7d
value_type: FLOAT
units: s
description: 'The P99 replication latency across source and target regions for geo-enabled account.'
preprocessing:
- type: JSONPATH
parameters:
- $.requests.ReplicationLatency.average
error_handler: DISCARD_VALUE
- type: MULTIPLIER
parameters:
- '0.001'
master_item:
key: azure.cosmosdb.data.get
tags:
- tag: component
value: network
- uuid: d9b5af0c71874114b48464ce20f8cf3d
name: 'Azure MongoDB: Server side latency'
type: DEPENDENT
key: azure.cosmosdb.server.side.latency
delay: '0'
history: 7d
value_type: FLOAT
units: s
description: 'The server side latency.'
preprocessing:
- type: JSONPATH
parameters:
- $.requests.ServerSideLatency.average
error_handler: DISCARD_VALUE
- type: MULTIPLIER
parameters:
- '0.001'
master_item:
key: azure.cosmosdb.data.get
tags:
- tag: component
value: network
- uuid: 7587d3750d1643f085db5931670dc2f3
name: 'Azure MongoDB: Server side latency, direct'
type: DEPENDENT
key: azure.cosmosdb.server.side.latency.direct
delay: '0'
history: 7d
value_type: FLOAT
units: s
description: 'The server side latency in direct connection mode.'
preprocessing:
- type: JSONPATH
parameters:
- $.requests.ServerSideLatencyDirect.average
error_handler: DISCARD_VALUE
- type: MULTIPLIER
parameters:
- '0.001'
master_item:
key: azure.cosmosdb.data.get
tags:
- tag: component
value: network
- uuid: 0aefdc3101fe4bcba4743d6e32671554
name: 'Azure MongoDB: Server side latency, gateway'
type: DEPENDENT
key: azure.cosmosdb.server.side.latency.gateway
delay: '0'
history: 7d
value_type: FLOAT
units: s
description: 'The server side latency in gateway connection mode.'
preprocessing:
- type: JSONPATH
parameters:
- $.requests.ServerSideLatencyGateway.average
error_handler: DISCARD_VALUE
- type: MULTIPLIER
parameters:
- '0.001'
master_item:
key: azure.cosmosdb.data.get
tags:
- tag: component
value: network
- uuid: 42bd03c1753b4f19bc9793b03834cd3d
name: 'Azure MongoDB: Service availability'
type: DEPENDENT
key: azure.cosmosdb.service.availability
delay: '0'
history: 7d
value_type: FLOAT
units: '%'
description: 'The account requests availability at one hour granularity.'
preprocessing:
- type: JSONPATH
parameters:
- $.availability.ServiceAvailability.average
error_handler: DISCARD_VALUE
master_item:
key: azure.cosmosdb.data.get
tags:
- tag: component
value: health
triggers:
- uuid: c7649cd317f04a3d8fec0eebe3df6766
expression: '(min(/Azure Cosmos DB for MongoDB by HTTP/azure.cosmosdb.service.availability,#3))<{$AZURE.DB.COSMOS.MONGO.AVAILABILITY}'
name: 'Azure MongoDB: Cosmos DB for MongoDB account: Availability is low'
opdata: '{ITEM.LASTVALUE1}'
priority: WARNING
tags:
- tag: scope
value: availability
- uuid: f4d4d2def5e945ab9048ada4813b7f04
name: 'Azure MongoDB: Total request units'
type: DEPENDENT
key: azure.cosmosdb.total.request.units
delay: '0'
history: 7d
value_type: FLOAT
description: 'The request units consumed per minute.'
preprocessing:
- type: JSONPATH
parameters:
- $.requests.TotalRequestUnits.total
error_handler: DISCARD_VALUE
master_item:
key: azure.cosmosdb.data.get
tags:
- tag: component
value: storage
- uuid: 3dd2cd4edb7746edb9d917c83b280ca3
name: 'Azure MongoDB: Total requests'
type: DEPENDENT
key: azure.cosmosdb.total.requests
delay: '0'
history: 7d
description: 'Number of requests per minute.'
preprocessing:
- type: JSONPATH
parameters:
- $.requests.TotalRequests.count
error_handler: DISCARD_VALUE
master_item:
key: azure.cosmosdb.data.get
tags:
- tag: component
value: storage
tags:
- tag: class
value: software
- tag: target
value: azure
- tag: target
value: cosmosdb
- tag: target
value: mongodb
macros:
- macro: '{$AZURE.APP.ID}'
description: 'The App ID of Microsoft Azure.'
- macro: '{$AZURE.DATA.TIMEOUT}'
value: 15s
description: 'A response timeout for an API.'
- macro: '{$AZURE.DB.COSMOS.MONGO.AVAILABILITY}'
value: '70'
description: 'The warning threshold of the Cosmos DB for MongoDB service availability.'
- macro: '{$AZURE.PASSWORD}'
type: SECRET_TEXT
description: 'Microsoft Azure password.'
- macro: '{$AZURE.PROXY}'
description: 'Sets HTTP proxy value. If this macro is empty then no proxy is used.'
- macro: '{$AZURE.RESOURCE.ID}'
description: 'Microsoft Azure Cosmos DB ID.'
- macro: '{$AZURE.SUBSCRIPTION.ID}'
description: 'Microsoft Azure subscription ID.'
- macro: '{$AZURE.TENANT.ID}'
description: 'Microsoft Azure tenant ID.'
dashboards:
- uuid: 323fb91b388a44bfbd4b7d634f6e6b6c
name: 'Overview Cosmos DB for MongoDB'
pages:
- widgets:
- type: graph
'y': '14'
width: '24'
height: '5'
fields:
- type: GRAPH
name: graphid
value:
host: 'Azure Cosmos DB for MongoDB by HTTP'
name: 'Azure MongoDB: Latency'
- type: graph
'y': '9'
width: '24'
height: '5'
fields:
- type: GRAPH
name: graphid
value:
host: 'Azure Cosmos DB for MongoDB by HTTP'
name: 'Azure MongoDB: Requests'
- type: graph
'y': '4'
width: '24'
height: '5'
fields:
- type: GRAPH
name: graphid
value:
host: 'Azure Cosmos DB for MongoDB by HTTP'
name: 'Azure MongoDB: Usage'
- type: item
name: 'Document Count'
x: '18'
width: '6'
height: '4'
fields:
- type: INTEGER
name: show
value: '2'
- type: ITEM
name: itemid
value:
host: 'Azure Cosmos DB for MongoDB by HTTP'
key: azure.cosmosdb.document.count
- type: item
name: 'Normalized RU Consumption'
x: '12'
width: '6'
height: '4'
fields:
- type: INTEGER
name: show
value: '4'
- type: INTEGER
name: show
value: '2'
- type: ITEM
name: itemid
value:
host: 'Azure Cosmos DB for MongoDB by HTTP'
key: azure.cosmosdb.normalized.ru.consumption
- type: item
name: 'Provisioned Throughput'
x: '6'
width: '6'
height: '4'
fields:
- type: INTEGER
name: show
value: '2'
- type: ITEM
name: itemid
value:
host: 'Azure Cosmos DB for MongoDB by HTTP'
key: azure.cosmosdb.provisioned.throughput
- type: item
name: 'Service Availability'
width: '6'
height: '4'
fields:
- type: INTEGER
name: show
value: '2'
- type: INTEGER
name: show
value: '4'
- type: INTEGER
name: adv_conf
value: '1'
- type: INTEGER
name: decimal_places
value: '0'
- type: STRING
name: units
value: '%'
- type: STRING
name: up_color
value: 4CAF50
- type: STRING
name: units_color
value: 66BB6A
- type: STRING
name: value_color
value: 66BB6A
- type: STRING
name: down_color
value: FF0000
- type: ITEM
name: itemid
value:
host: 'Azure Cosmos DB for MongoDB by HTTP'
key: azure.cosmosdb.service.availability
- uuid: 2d8b9329b5d04cdf85bf17d2d0db2b29
template: 'Azure Microsoft SQL Database by HTTP'
name: 'Azure Microsoft SQL Database by HTTP'
description: |
This template is designed to monitor Microsoft SQL databases by HTTP.
It works without any external scripts and uses the script item.
Setup:
1. Create an Azure service principal via the Azure command-line interface (Azure CLI) for your subscription.
`az ad sp create-for-rbac --name zabbix --role reader --scope /subscriptions/<subscription_id>`
See https://docs.microsoft.com/en-us/cli/azure/create-an-azure-service-principal-azure-cli for more details.
2. Link the template to a host.
3. Configure the macros: {$AZURE.APP.ID}, {$AZURE.PASSWORD}, {$AZURE.TENANT.ID}, {$AZURE.SUBSCRIPTION.ID}, and {$AZURE.RESOURCE.ID}.
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/Cloud
items:
- uuid: 2ff1f479e0b447f2b85e75e99bc011fe
name: 'Azure Microsoft SQL: Availability status detailed'
type: DEPENDENT
key: azure.db.mssql.availability.details
delay: '0'
history: 7d
trends: '0'
value_type: CHAR
description: 'The summary description of the availability status.'
preprocessing:
- type: JSONPATH
parameters:
- $.health.summary
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 1h
master_item:
key: azure.db.mssql.data.get
tags:
- tag: component
value: health
- uuid: f15e8075ac9a4f1ca6e95106940b246e
name: 'Azure Microsoft SQL: Availability state'
type: DEPENDENT
key: azure.db.mssql.availability.state
delay: '0'
history: 7d
description: 'The availability status of the resource.'
valuemap:
name: 'Azure resource health state'
preprocessing:
- type: JSONPATH
parameters:
- $.health.availabilityState
error_handler: CUSTOM_VALUE
error_handler_params: '3'
- type: STR_REPLACE
parameters:
- Available
- '0'
- type: STR_REPLACE
parameters:
- Degraded
- '1'
- type: STR_REPLACE
parameters:
- Unavailable
- '2'
- type: STR_REPLACE
parameters:
- Unknown
- '3'
- type: IN_RANGE
parameters:
- '0'
- '3'
error_handler: CUSTOM_VALUE
error_handler_params: '3'
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 1h
master_item:
key: azure.db.mssql.data.get
tags:
- tag: component
value: health
triggers:
- uuid: 5156f35b82084fd3b1d1a11c35757993
expression: 'last(/Azure Microsoft SQL Database by HTTP/azure.db.mssql.availability.state)=1'
name: 'Azure Microsoft SQL: Microsoft SQL database is degraded'
opdata: '{ITEM.LASTVALUE1}'
priority: AVERAGE
description: 'The resource is in degraded state.'
tags:
- tag: scope
value: availability
- uuid: 0cf3cce995c241838e13df12d5908b61
expression: 'last(/Azure Microsoft SQL Database by HTTP/azure.db.mssql.availability.state)=3'
name: 'Azure Microsoft SQL: Microsoft SQL database is in unknown state'
opdata: '{ITEM.LASTVALUE1}'
priority: WARNING
description: 'The resource state is unknown.'
tags:
- tag: scope
value: availability
- uuid: 2130dc83dee94fdfad87894127c6a578
expression: 'last(/Azure Microsoft SQL Database by HTTP/azure.db.mssql.availability.state)=2'
name: 'Azure Microsoft SQL: Microsoft SQL database is unavailable'
opdata: '{ITEM.LASTVALUE1}'
priority: HIGH
description: 'The resource state is unavailable.'
tags:
- tag: scope
value: availability
- uuid: ce744d69ed12435db781fbc6100d97ab
name: 'Azure Microsoft SQL: Connections failed: System errors'
type: DEPENDENT
key: azure.db.mssql.connections.failed.system
delay: '0'
history: 7d
value_type: FLOAT
description: 'The count of failed connections with system errors.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.connection_failed.total
master_item:
key: azure.db.mssql.data.get
tags:
- tag: component
value: network
- uuid: 8ec27240f59947858c41762a266cab25
name: 'Azure Microsoft SQL: Connections successful'
type: DEPENDENT
key: azure.db.mssql.connections.successful
delay: '0'
history: 7d
value_type: FLOAT
description: 'The count of successful connections.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.connection_successful.total
master_item:
key: azure.db.mssql.data.get
tags:
- tag: component
value: network
- uuid: 04737f2746444d2fb348a9444964dc7a
name: 'Azure Microsoft SQL: CPU limit'
type: DEPENDENT
key: azure.db.mssql.cpu.limit
delay: '0'
history: 7d
value_type: FLOAT
description: 'The CPU limit. Applies to the vCore-based databases.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.cpu_limit.average
error_handler: DISCARD_VALUE
master_item:
key: azure.db.mssql.data.get
tags:
- tag: component
value: cpu
- uuid: e55a199cc0bd4749a69478da8268785d
name: 'Azure Microsoft SQL: Percentage CPU'
type: DEPENDENT
key: azure.db.mssql.cpu.percentage
delay: '0'
history: 7d
value_type: FLOAT
units: '%'
description: 'The CPU percent of a host.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.cpu_percent.average
master_item:
key: azure.db.mssql.data.get
tags:
- tag: component
value: cpu
triggers:
- uuid: 506c034e707442519792a4366bc0879d
expression: 'min(/Azure Microsoft SQL Database by HTTP/azure.db.mssql.cpu.percentage,5m)>{$AZURE.DB.CPU.UTIL.CRIT}'
name: 'Azure Microsoft SQL: High CPU utilization'
opdata: 'Current utilization: {ITEM.LASTVALUE1}'
priority: HIGH
description: 'The CPU utilization is too high. The system might be slow to respond.'
tags:
- tag: scope
value: performance
- uuid: 9a4a948f41e4434e9a94b3d9546df896
name: 'Azure Microsoft SQL: CPU used'
type: DEPENDENT
key: azure.db.mssql.cpu.used
delay: '0'
history: 7d
value_type: FLOAT
description: 'The CPU used. Applies to the vCore-based databases.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.cpu_used.average
error_handler: DISCARD_VALUE
master_item:
key: azure.db.mssql.data.get
tags:
- tag: component
value: cpu
- uuid: e8aa1b70a7384ffead05cd2e95a6f10a
name: 'Azure Microsoft SQL: Get errors'
type: DEPENDENT
key: azure.db.mssql.data.errors
delay: '0'
history: 7d
trends: '0'
value_type: TEXT
description: 'A list of errors from API requests.'
preprocessing:
- type: JSONPATH
parameters:
- $.errors
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 1h
master_item:
key: azure.db.mssql.data.get
tags:
- tag: component
value: raw
triggers:
- uuid: 62d08fe430bd45e890c81547860d5c3d
expression: 'length(last(/Azure Microsoft SQL Database by HTTP/azure.db.mssql.data.errors))>0'
name: 'Azure Microsoft SQL: There are errors in requests to API'
opdata: '{ITEM.LASTVALUE1}'
priority: AVERAGE
description: 'Zabbix has received errors in response to API requests.'
tags:
- tag: scope
value: availability
- uuid: 741cc1ec6a824e429f06b3d12a8a7082
name: 'Azure Microsoft SQL: Get data'
type: SCRIPT
key: azure.db.mssql.data.get
history: '0'
trends: '0'
value_type: TEXT
params: |
var AzureDB = {
params: {},
token: null,
setParams: function (params) {
['app_id', 'password', 'tenant_id', 'subscription_id', 'resource_id'].forEach(function (field) {
if (typeof params !== 'object' || typeof params[field] === 'undefined' || params[field] === '') {
throw 'Required param is not set: ' + field + '.';
}
});
AzureDB.params = params;
},
request: function (url, data) {
if (typeof data === 'undefined' || data === null) {
data = '';
}
var response, request = new HttpRequest();
if (typeof AzureDB.params.proxy !== 'undefined' && AzureDB.params.proxy !== '') {
request.setProxy(AzureDB.params.proxy);
}
if (AzureDB.token) {
request.addHeader('Accept: application/json');
request.addHeader('Authorization: Bearer ' + AzureDB.token);
}
Zabbix.log(4, '[ Azure ] Sending request: ' + url);
if (data !== '') {
request.addHeader('Content-Type: application/x-www-form-urlencoded');
response = request.post(url, data);
}
else {
response = request.get(url);
}
Zabbix.log(4, '[ Azure ] Received response with status code ' + request.getStatus() + ': ' + response);
if (request.getStatus() !== 200 || response === null) {
throw 'Request failed with status code ' + request.getStatus() + ': ' + response;
}
try {
return JSON.parse(response);
}
catch (error) {
throw 'Failed to parse response received from API.';
}
}
};
var metrics = [
'cpu_percent',
'physical_data_read_percent',
'log_write_percent',
'storage',
'connection_successful',
'connection_failed',
'blocked_by_firewall',
'deadlock',
'storage_percent',
'xtp_storage_percent',
'workers_percent',
'sessions_percent',
'sessions_count',
'cpu_limit',
'cpu_used',
'sqlserver_process_core_percent',
'sqlserver_process_memory_percent',
'tempdb_data_size',
'tempdb_log_size',
'tempdb_log_used_percent',
'allocated_data_storage'
],
day_metrics = 'full_backup_size_bytes,diff_backup_size_bytes,log_backup_size_bytes',
prepared_metrics = [],
data = {};
data['errors'] = {};
data['metrics'] = {};
try {
AzureDB.setParams(JSON.parse(value));
try {
result = AzureDB.request(
'https://login.microsoftonline.com/' + encodeURIComponent(AzureDB.params.tenant_id) + '/oauth2/token',
'grant_type=client_credentials&resource=' + encodeURIComponent('https://management.azure.com/') + '&client_id=' + encodeURIComponent(AzureDB.params.app_id) + '&client_secret=' + encodeURIComponent(AzureDB.params.password)
);
if ('access_token' in result) {
AzureDB.token = result['access_token'];
} else {
throw 'Auth response does not contain access token.';
}
}
catch (error) {
data.errors.auth = error.toString();
}
if (!('auth' in data.errors)) {
try {
health = AzureDB.request('https://management.azure.com' + AzureDB.params.resource_id + '/providers/Microsoft.ResourceHealth/availabilityStatuses?api-version=2020-05-01');
if ('value' in health && Array.isArray(health.value) && health.value.length > 0 && 'properties' in health.value[0] && typeof health.value[0].properties === 'object') {
data.health = health.value[0].properties;
}
}
catch (error) {
data.errors.health = error.toString();
}
for (var i = 0; i < metrics.length; i += 20) {
var chunk = metrics.slice(i, i + 20);
prepared_metrics.push(
chunk.map(function (element) {
return encodeURIComponent(element);
}).join(',')
);
}
start_date = new Date((new Date().getTime()) - 300000).toISOString().replace(/\.\d+/, '');
end_date = new Date().toISOString().replace(/\.\d+/, '');
for (var j in prepared_metrics) {
try {
metrics_data = AzureDB.request('https://management.azure.com' + AzureDB.params.resource_id + '/providers/Microsoft.Insights/metrics?metricnames=' + prepared_metrics[j] + '&timespan=' + encodeURIComponent(start_date) + '/' + encodeURIComponent(end_date) + '&api-version=2021-05-01');
if ('value' in metrics_data && Array.isArray(metrics_data.value) && metrics_data.value.length > 0) {
for (k in metrics_data.value) {
if ('name' in metrics_data.value[k] && typeof metrics_data.value[k].name === 'object' && 'value' in metrics_data.value[k].name && typeof metrics_data.value[k].name.value === 'string' && 'timeseries' in metrics_data.value[k] && Array.isArray(metrics_data.value[k].timeseries) && metrics_data.value[k].timeseries.length > 0 && 'data' in metrics_data.value[k].timeseries[0] && Array.isArray(metrics_data.value[k].timeseries[0].data) && metrics_data.value[k].timeseries[0].data.length > 0) {
data.metrics[metrics_data.value[k].name.value.replace(/(\s|\/)+/g, '')] = metrics_data.value[k].timeseries[0].data[metrics_data.value[k].timeseries[0].data.length - 1];
}
}
}
}
catch (error) {
data.errors[prepared_metrics[j]] = error.toString();
}
}
start_date = new Date((new Date().getTime()) - 86400000).toISOString().replace(/\.\d+/, '');
end_date = new Date().toISOString().replace(/\.\d+/, '');
try {
metrics_data = AzureDB.request('https://management.azure.com' + AzureDB.params.resource_id + '/providers/Microsoft.Insights/metrics?metricnames=' + day_metrics + '&timespan=' + encodeURIComponent(start_date) + '/' + encodeURIComponent(end_date) + '&api-version=2021-05-01');
if ('value' in metrics_data && Array.isArray(metrics_data.value) && metrics_data.value.length > 0) {
for (l in metrics_data.value) {
if ('name' in metrics_data.value[l] && typeof metrics_data.value[l].name === 'object' && 'value' in metrics_data.value[l].name && typeof metrics_data.value[l].name.value === 'string' && 'timeseries' in metrics_data.value[l] && Array.isArray(metrics_data.value[l].timeseries) && metrics_data.value[l].timeseries.length > 0 && 'data' in metrics_data.value[l].timeseries[0] && Array.isArray(metrics_data.value[l].timeseries[0].data) && metrics_data.value[l].timeseries[0].data.length > 0) {
data.metrics[metrics_data.value[l].name.value.replace(/(\s|\/)+/g, '')] = metrics_data.value[l].timeseries[0].data[metrics_data.value[l].timeseries[0].data.length - 1];
}
}
}
}
catch (error) {
data.errors[day_metrics] = error.toString();
}
}
}
catch (error) {
data.errors.params = error.toString();
}
if (Object.keys(data.errors).length !== 0) {
errors = 'Failed to receive data:';
for (var error in data.errors) {
errors += '\n' + error + ' : ' + data.errors[error];
}
data.errors = errors;
}
else {
data.errors = '';
}
return JSON.stringify(data);
description: 'The result of API requests is expressed in the JSON.'
timeout: '{$AZURE.DATA.TIMEOUT}'
parameters:
- name: app_id
value: '{$AZURE.APP.ID}'
- name: password
value: '{$AZURE.PASSWORD}'
- name: tenant_id
value: '{$AZURE.TENANT.ID}'
- name: subscription_id
value: '{$AZURE.SUBSCRIPTION.ID}'
- name: resource_id
value: '{$AZURE.RESOURCE.ID}'
- name: proxy
value: '{$AZURE.PROXY}'
tags:
- tag: component
value: raw
- uuid: 75d9288a8240425782cce8701c1bdfa8
name: 'Azure Microsoft SQL: Data IO percentage'
type: DEPENDENT
key: azure.db.mssql.data.read.percentage
delay: '0'
history: 7d
value_type: FLOAT
units: '%'
description: 'The percentage of physical data read.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.physical_data_read_percent.average
master_item:
key: azure.db.mssql.data.get
tags:
- tag: component
value: operations
- uuid: 81f87d35131c426299b233279f8f6c4b
name: 'Azure Microsoft SQL: Deadlocks'
type: DEPENDENT
key: azure.db.mssql.deadlocks
delay: '0'
history: 7d
value_type: FLOAT
description: 'The count of deadlocks. Not applicable to the data warehouses.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.deadlock.total
master_item:
key: azure.db.mssql.data.get
tags:
- tag: component
value: network
- uuid: 4d78e4691b6f4ab095849e6af2713638
name: 'Azure Microsoft SQL: Connections blocked by firewall'
type: DEPENDENT
key: azure.db.mssql.firewall.blocked
delay: '0'
history: 7d
value_type: FLOAT
description: 'The count of connections blocked by a firewall.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.blocked_by_firewall.total
master_item:
key: azure.db.mssql.data.get
tags:
- tag: component
value: network
- uuid: 324c16e5da5b40c78d687f1f41a9d180
name: 'Azure Microsoft SQL: Log IO percentage'
type: DEPENDENT
key: azure.db.mssql.log.write.percentage
delay: '0'
history: 7d
value_type: FLOAT
units: '%'
description: 'The percentage of I/O log. Not applicable to the data warehouses.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.log_write_percent.average
master_item:
key: azure.db.mssql.data.get
tags:
- tag: component
value: operations
- uuid: f417464b2de14e3292d68442570b931d
name: 'Azure Microsoft SQL: SQL Server process core percent'
type: DEPENDENT
key: azure.db.mssql.server.cpu.percent
delay: '0'
history: 7d
value_type: FLOAT
units: '%'
description: 'The CPU usage as a percentage of the SQL DB process. Not applicable to the data warehouses.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.sqlserver_process_core_percent.maximum
error_handler: DISCARD_VALUE
master_item:
key: azure.db.mssql.data.get
tags:
- tag: component
value: cpu
- tag: component
value: server
- uuid: b39aa0798a824dafb3f3871b6406106a
name: 'Azure Microsoft SQL: SQL Server process memory percent'
type: DEPENDENT
key: azure.db.mssql.server.memory.percent
delay: '0'
history: 7d
value_type: FLOAT
units: '%'
description: 'Memory usage as a percentage of the SQL DB process. Not applicable to data warehouses.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.sqlserver_process_memory_percent.maximum
error_handler: DISCARD_VALUE
master_item:
key: azure.db.mssql.data.get
tags:
- tag: component
value: memory
- tag: component
value: server
- uuid: 754b453cdf464f73b09eced3dd3e5859
name: 'Azure Microsoft SQL: Sessions count'
type: DEPENDENT
key: azure.db.mssql.sessions.count
delay: '0'
history: 7d
value_type: FLOAT
description: 'The number of active sessions. Not applicable to Synapse DW Analytics.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.sessions_count.average
master_item:
key: azure.db.mssql.data.get
tags:
- tag: component
value: sessions
- uuid: b6696ac3d83841e2a001cdad1aeaea89
name: 'Azure Microsoft SQL: Sessions percentage'
type: DEPENDENT
key: azure.db.mssql.sessions.percent
delay: '0'
history: 7d
value_type: FLOAT
units: '%'
description: 'The percentage of sessions. Not applicable to the data warehouses.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.sessions_percent.average
master_item:
key: azure.db.mssql.data.get
tags:
- tag: component
value: sessions
- uuid: fddff3dcbcf44c408314946f01f26a79
name: 'Azure Microsoft SQL: Data space allocated'
type: DEPENDENT
key: azure.db.mssql.storage.allocated
delay: '0'
history: 7d
value_type: FLOAT
units: B
description: 'The allocated data storage. Not applicable to the data warehouses.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.allocated_data_storage.average
error_handler: DISCARD_VALUE
master_item:
key: azure.db.mssql.data.get
tags:
- tag: component
value: storage
- uuid: 3d492b552468462ba17524a9c6951dd7
name: 'Azure Microsoft SQL: Differential backup storage size'
type: DEPENDENT
key: azure.db.mssql.storage.backup.diff.size
delay: '0'
history: 7d
value_type: FLOAT
units: B
description: 'Cumulative differential backup storage size. Applies to the vCore-based databases. Not applicable to the Hyperscale databases.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.diff_backup_size_bytes.maximum
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 1d
master_item:
key: azure.db.mssql.data.get
tags:
- tag: component
value: storage
- uuid: e8cd0339a82248e3ad777374f219552e
name: 'Azure Microsoft SQL: Log backup storage size'
type: DEPENDENT
key: azure.db.mssql.storage.backup.log.size
delay: '0'
history: 7d
value_type: FLOAT
units: B
description: 'Cumulative log backup storage size. Applies to the vCore-based and Hyperscale databases.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.log_backup_size_bytes.maximum
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 1d
master_item:
key: azure.db.mssql.data.get
tags:
- tag: component
value: storage
- uuid: c92867a096ad4d89b31a2dba7e560df1
name: 'Azure Microsoft SQL: Full backup storage size'
type: DEPENDENT
key: azure.db.mssql.storage.backup.size
delay: '0'
history: 7d
value_type: FLOAT
units: B
description: 'Cumulative full backup storage size. Applies to the vCore-based databases. Not applicable to the Hyperscale databases.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.full_backup_size_bytes.maximum
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 1d
master_item:
key: azure.db.mssql.data.get
tags:
- tag: component
value: storage
- uuid: 6eb5dc0a0b864c0bb35634612472ed38
name: 'Azure Microsoft SQL: Data space used percent'
type: DEPENDENT
key: azure.db.mssql.storage.percent
delay: '0'
history: 7d
value_type: FLOAT
units: '%'
description: 'Data space used percent. Not applicable to the data warehouses or hyperscale databases.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.storage_percent.maximum
error_handler: DISCARD_VALUE
master_item:
key: azure.db.mssql.data.get
tags:
- tag: component
value: storage
triggers:
- uuid: a2d6cf9ac67d4d0eb312e9536299b345
expression: 'last(/Azure Microsoft SQL Database by HTTP/azure.db.mssql.storage.percent)>{$AZURE.DB.STORAGE.PUSED.CRIT}'
name: 'Azure Microsoft SQL: Storage space is critically low'
opdata: 'Current utilization: {ITEM.LASTVALUE1}'
priority: AVERAGE
description: 'Critical utilization of the storage space.'
tags:
- tag: scope
value: capacity
- uuid: 6dbf1d3aeb8b44b8bd96a9ca75f5249e
expression: 'last(/Azure Microsoft SQL Database by HTTP/azure.db.mssql.storage.percent)>{$AZURE.DB.STORAGE.PUSED.WARN}'
name: 'Azure Microsoft SQL: Storage space is low'
opdata: 'Current utilization: {ITEM.LASTVALUE1}'
priority: WARNING
description: 'High utilization of the storage space.'
tags:
- tag: scope
value: capacity
- uuid: a0335bde6f3546cdad5bbd2db8fa50b1
name: 'Azure Microsoft SQL: Data space used'
type: DEPENDENT
key: azure.db.mssql.storage.used
delay: '0'
history: 7d
value_type: FLOAT
units: B
description: 'Data space used. Not applicable to the data warehouses.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.storage.maximum
error_handler: DISCARD_VALUE
master_item:
key: azure.db.mssql.data.get
tags:
- tag: component
value: storage
- uuid: 6ff07a9a680749bfa3deabbec508b7c3
name: 'Azure Microsoft SQL: In-Memory OLTP storage percent'
type: DEPENDENT
key: azure.db.mssql.storage.xtp.percent
delay: '0'
history: 7d
value_type: FLOAT
units: '%'
description: 'In-Memory OLTP storage percent. Not applicable to the data warehouses.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.xtp_storage_percent.average
master_item:
key: azure.db.mssql.data.get
tags:
- tag: component
value: storage
- uuid: 76da2f210c084546a19ce156e0aee1d6
name: 'Azure Microsoft SQL: Tempdb data file size'
type: DEPENDENT
key: azure.db.mssql.tempdb.data.size
delay: '0'
history: 7d
value_type: FLOAT
units: B
description: 'The space used in `tempdb` data files, expressed in bytes. Not applicable to the data warehouses.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.tempdb_data_size.maximum
error_handler: DISCARD_VALUE
- type: MULTIPLIER
parameters:
- '1024'
master_item:
key: azure.db.mssql.data.get
tags:
- tag: component
value: storage
- uuid: dd2986cc6ce441fe9b3ab9b44b5fc103
name: 'Azure Microsoft SQL: Tempdb log used percent'
type: DEPENDENT
key: azure.db.mssql.tempdb.log.percent
delay: '0'
history: 7d
value_type: FLOAT
units: '%'
description: 'The percentage of space used in `tempdb` transaction log file. Not applicable to the data warehouses.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.tempdb_log_used_percent.maximum
error_handler: DISCARD_VALUE
master_item:
key: azure.db.mssql.data.get
tags:
- tag: component
value: storage
- uuid: 51212e2af3854079950064bd9d16da83
name: 'Azure Microsoft SQL: Tempdb log file size'
type: DEPENDENT
key: azure.db.mssql.tempdb.log.size
delay: '0'
history: 7d
value_type: FLOAT
units: B
description: 'The space used in `tempdb` transaction log file, expressed in bytes. Not applicable to the data warehouses.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.tempdb_log_size.maximum
error_handler: DISCARD_VALUE
- type: MULTIPLIER
parameters:
- '1024'
master_item:
key: azure.db.mssql.data.get
tags:
- tag: component
value: storage
- uuid: b5d63b2cbcb1470d8559a90cb3df0002
name: 'Azure Microsoft SQL: Workers percentage'
type: DEPENDENT
key: azure.db.mssql.workers.percent
delay: '0'
history: 7d
value_type: FLOAT
units: '%'
description: 'The percentage of workers. Not applicable to the data warehouses.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.workers_percent.average
master_item:
key: azure.db.mssql.data.get
tags:
- tag: component
value: workers
tags:
- tag: class
value: software
- tag: target
value: azure
- tag: target
value: mssql
macros:
- macro: '{$AZURE.APP.ID}'
description: 'The App ID of Microsoft Azure.'
- macro: '{$AZURE.DATA.TIMEOUT}'
value: 15s
description: 'A response timeout for an API.'
- macro: '{$AZURE.DB.CPU.UTIL.CRIT}'
value: '90'
description: 'The critical threshold of CPU utilization, expressed in %.'
- macro: '{$AZURE.DB.MEMORY.UTIL.CRIT}'
value: '90'
description: 'The critical threshold of memory utilization, expressed in %.'
- macro: '{$AZURE.DB.STORAGE.PUSED.CRIT}'
value: '90'
description: 'The critical threshold of storage utilization, expressed in %.'
- macro: '{$AZURE.DB.STORAGE.PUSED.WARN}'
value: '80'
description: 'The warning threshold of storage utilization, expressed in %.'
- macro: '{$AZURE.PASSWORD}'
type: SECRET_TEXT
description: 'Microsoft Azure password.'
- macro: '{$AZURE.PROXY}'
description: 'Sets HTTP proxy value. If this macro is empty then no proxy is used.'
- macro: '{$AZURE.RESOURCE.ID}'
description: 'Microsoft Azure Microsoft SQL database ID.'
- macro: '{$AZURE.SUBSCRIPTION.ID}'
description: 'Microsoft Azure subscription ID.'
- macro: '{$AZURE.TENANT.ID}'
description: 'Microsoft Azure tenant ID.'
valuemaps:
- uuid: 6f9c01899d9e45c9a1316ee081718e9e
name: 'Azure resource health state'
mappings:
- value: '0'
newvalue: Available
- value: '1'
newvalue: Degraded
- value: '2'
newvalue: Unavailable
- value: '3'
newvalue: Unknown
- uuid: 5175afdf713744d9a81ce53864ccfc1d
template: 'Azure Microsoft SQL Serverless Database by HTTP'
name: 'Azure Microsoft SQL Serverless Database by HTTP'
description: |
This template is designed to monitor Microsoft SQL serverless databases by HTTP.
It works without any external scripts and uses the script item.
Setup:
1. Create an Azure service principal via the Azure command-line interface (Azure CLI) for your subscription.
`az ad sp create-for-rbac --name zabbix --role reader --scope /subscriptions/<subscription_id>`
See https://docs.microsoft.com/en-us/cli/azure/create-an-azure-service-principal-azure-cli for more details.
2. Link the template to a host.
3. Configure the macros: {$AZURE.APP.ID}, {$AZURE.PASSWORD}, {$AZURE.TENANT.ID}, {$AZURE.SUBSCRIPTION.ID}, and {$AZURE.RESOURCE.ID}.
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/Cloud
items:
- uuid: 7c11fcc4f4b349f8b98fac93ae5e32be
name: 'Azure Microsoft SQL: App CPU billed'
type: DEPENDENT
key: azure.db.mssql.app.cpu.billed
delay: '0'
history: 7d
value_type: FLOAT
description: 'App CPU billed. Applies to serverless databases.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.app_cpu_billed.total
error_handler: DISCARD_VALUE
master_item:
key: azure.db.mssql.data.get
tags:
- tag: component
value: cpu
- uuid: 6e67a868b2d84838803d3cb464ae9648
name: 'Azure Microsoft SQL: App CPU percentage'
type: DEPENDENT
key: azure.db.mssql.app.cpu.percent
delay: '0'
history: 7d
value_type: FLOAT
units: '%'
description: 'App CPU percentage. Applies to serverless databases.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.app_cpu_percent.average
error_handler: DISCARD_VALUE
master_item:
key: azure.db.mssql.data.get
tags:
- tag: component
value: cpu
- uuid: a38a887341914e75a01c7527c40b678f
name: 'Azure Microsoft SQL: App memory percentage'
type: DEPENDENT
key: azure.db.mssql.app.memory.percent
delay: '0'
history: 7d
value_type: FLOAT
units: '%'
description: 'App memory percentage. Applies to serverless databases.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.app_memory_percent.average
error_handler: DISCARD_VALUE
master_item:
key: azure.db.mssql.data.get
tags:
- tag: component
value: memory
- uuid: c2d3bc4ff95b4e05898dccee3d73a349
name: 'Azure Microsoft SQL: Availability status detailed'
type: DEPENDENT
key: azure.db.mssql.availability.details
delay: '0'
history: 7d
trends: '0'
value_type: CHAR
description: 'The summary description of the availability status.'
preprocessing:
- type: JSONPATH
parameters:
- $.health.summary
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 1h
master_item:
key: azure.db.mssql.data.get
tags:
- tag: component
value: health
- uuid: 9a3f2e99a768492c859c8f368c6a5cd3
name: 'Azure Microsoft SQL: Availability state'
type: DEPENDENT
key: azure.db.mssql.availability.state
delay: '0'
history: 7d
description: 'The availability status of the resource.'
valuemap:
name: 'Azure resource health state'
preprocessing:
- type: JSONPATH
parameters:
- $.health.availabilityState
error_handler: CUSTOM_VALUE
error_handler_params: '3'
- type: STR_REPLACE
parameters:
- Available
- '0'
- type: STR_REPLACE
parameters:
- Degraded
- '1'
- type: STR_REPLACE
parameters:
- Unavailable
- '2'
- type: STR_REPLACE
parameters:
- Unknown
- '3'
- type: IN_RANGE
parameters:
- '0'
- '3'
error_handler: CUSTOM_VALUE
error_handler_params: '3'
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 1h
master_item:
key: azure.db.mssql.data.get
tags:
- tag: component
value: health
triggers:
- uuid: 37c52a28908a45378266f68acdf5c308
expression: 'last(/Azure Microsoft SQL Serverless Database by HTTP/azure.db.mssql.availability.state)=1'
name: 'Azure Microsoft SQL: Microsoft SQL database is degraded'
opdata: '{ITEM.LASTVALUE1}'
priority: AVERAGE
description: 'The resource is in degraded state.'
tags:
- tag: scope
value: availability
- uuid: 20bd79f05f3241a9950a83dcd9e325ba
expression: 'last(/Azure Microsoft SQL Serverless Database by HTTP/azure.db.mssql.availability.state)=3'
name: 'Azure Microsoft SQL: Microsoft SQL database is in unknown state'
opdata: '{ITEM.LASTVALUE1}'
priority: WARNING
description: 'The resource state is unknown.'
tags:
- tag: scope
value: availability
- uuid: 124813388e9844e8aae5ce474a66a774
expression: 'last(/Azure Microsoft SQL Serverless Database by HTTP/azure.db.mssql.availability.state)=2'
name: 'Azure Microsoft SQL: Microsoft SQL database is unavailable'
opdata: '{ITEM.LASTVALUE1}'
priority: HIGH
description: 'The resource state is unavailable.'
tags:
- tag: scope
value: availability
- uuid: 2457708a49d141faa16bd7b4ceb2c0a4
name: 'Azure Microsoft SQL: Connections failed: System errors'
type: DEPENDENT
key: azure.db.mssql.connections.failed.system
delay: '0'
history: 7d
value_type: FLOAT
description: 'The count of failed connections with system errors.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.connection_failed.total
master_item:
key: azure.db.mssql.data.get
tags:
- tag: component
value: network
- uuid: 59e028a7323d4222a4efd727314327c1
name: 'Azure Microsoft SQL: Connections successful'
type: DEPENDENT
key: azure.db.mssql.connections.successful
delay: '0'
history: 7d
value_type: FLOAT
description: 'The count of successful connections.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.connection_successful.total
master_item:
key: azure.db.mssql.data.get
tags:
- tag: component
value: network
- uuid: 0dc1cf6302574c1fbb51583e03409713
name: 'Azure Microsoft SQL: CPU limit'
type: DEPENDENT
key: azure.db.mssql.cpu.limit
delay: '0'
history: 7d
value_type: FLOAT
description: 'The CPU limit. Applies to the vCore-based databases.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.cpu_limit.average
error_handler: DISCARD_VALUE
master_item:
key: azure.db.mssql.data.get
tags:
- tag: component
value: cpu
- uuid: 53be31ecfd48472c8edfe223107c0b07
name: 'Azure Microsoft SQL: Percentage CPU'
type: DEPENDENT
key: azure.db.mssql.cpu.percentage
delay: '0'
history: 7d
value_type: FLOAT
units: '%'
description: 'The CPU percent of a host.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.cpu_percent.average
master_item:
key: azure.db.mssql.data.get
tags:
- tag: component
value: cpu
triggers:
- uuid: 933a04a1455b4a89b1527f9ce7848259
expression: 'min(/Azure Microsoft SQL Serverless Database by HTTP/azure.db.mssql.cpu.percentage,5m)>{$AZURE.DB.CPU.UTIL.CRIT}'
name: 'Azure Microsoft SQL: High CPU utilization'
opdata: 'Current utilization: {ITEM.LASTVALUE1}'
priority: HIGH
description: 'The CPU utilization is too high. The system might be slow to respond.'
tags:
- tag: scope
value: performance
- uuid: ec0fc85904e149939836c2818a6ca66a
name: 'Azure Microsoft SQL: CPU used'
type: DEPENDENT
key: azure.db.mssql.cpu.used
delay: '0'
history: 7d
value_type: FLOAT
description: 'The CPU used. Applies to the vCore-based databases.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.cpu_used.average
error_handler: DISCARD_VALUE
master_item:
key: azure.db.mssql.data.get
tags:
- tag: component
value: cpu
- uuid: d933dbacb2b94e40a757e15f13d51d2d
name: 'Azure Microsoft SQL: Get errors'
type: DEPENDENT
key: azure.db.mssql.data.errors
delay: '0'
history: 7d
trends: '0'
value_type: TEXT
description: 'A list of errors from API requests.'
preprocessing:
- type: JSONPATH
parameters:
- $.errors
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 1h
master_item:
key: azure.db.mssql.data.get
tags:
- tag: component
value: raw
triggers:
- uuid: f56b125a8eff49d2aa002609c7df8b34
expression: 'length(last(/Azure Microsoft SQL Serverless Database by HTTP/azure.db.mssql.data.errors))>0'
name: 'Azure Microsoft SQL: There are errors in requests to API'
opdata: '{ITEM.LASTVALUE1}'
priority: AVERAGE
description: 'Zabbix has received errors in response to API requests.'
tags:
- tag: scope
value: availability
- uuid: e1c668773b974deeaf64c0d51d1cb02d
name: 'Azure Microsoft SQL: Get data'
type: SCRIPT
key: azure.db.mssql.data.get
history: '0'
trends: '0'
value_type: TEXT
params: |
var AzureDB = {
params: {},
token: null,
setParams: function (params) {
['app_id', 'password', 'tenant_id', 'subscription_id', 'resource_id'].forEach(function (field) {
if (typeof params !== 'object' || typeof params[field] === 'undefined' || params[field] === '') {
throw 'Required param is not set: ' + field + '.';
}
});
AzureDB.params = params;
},
request: function (url, data) {
if (typeof data === 'undefined' || data === null) {
data = '';
}
var response, request = new HttpRequest();
if (typeof AzureDB.params.proxy !== 'undefined' && AzureDB.params.proxy !== '') {
request.setProxy(AzureDB.params.proxy);
}
if (AzureDB.token) {
request.addHeader('Accept: application/json');
request.addHeader('Authorization: Bearer ' + AzureDB.token);
}
Zabbix.log(4, '[ Azure ] Sending request: ' + url);
if (data !== '') {
request.addHeader('Content-Type: application/x-www-form-urlencoded');
response = request.post(url, data);
}
else {
response = request.get(url);
}
Zabbix.log(4, '[ Azure ] Received response with status code ' + request.getStatus() + ': ' + response);
if (request.getStatus() !== 200 || response === null) {
throw 'Request failed with status code ' + request.getStatus() + ': ' + response;
}
try {
return JSON.parse(response);
}
catch (error) {
throw 'Failed to parse response received from API.';
}
}
};
var metrics = [
'cpu_percent',
'physical_data_read_percent',
'log_write_percent',
'storage',
'connection_successful',
'connection_failed',
'blocked_by_firewall',
'deadlock',
'storage_percent',
'xtp_storage_percent',
'workers_percent',
'sessions_percent',
'cpu_limit',
'cpu_used',
'sqlserver_process_core_percent',
'sqlserver_process_memory_percent',
'tempdb_data_size',
'tempdb_log_size',
'tempdb_log_used_percent',
'app_cpu_billed',
'app_cpu_percent',
'app_memory_percent',
'allocated_data_storage'
],
prepared_metrics = [],
data = {};
data['errors'] = {};
data['metrics'] = {};
try {
AzureDB.setParams(JSON.parse(value));
try {
result = AzureDB.request(
'https://login.microsoftonline.com/' + encodeURIComponent(AzureDB.params.tenant_id) + '/oauth2/token',
'grant_type=client_credentials&resource=' + encodeURIComponent('https://management.azure.com/') + '&client_id=' + encodeURIComponent(AzureDB.params.app_id) + '&client_secret=' + encodeURIComponent(AzureDB.params.password)
);
if ('access_token' in result) {
AzureDB.token = result['access_token'];
} else {
throw 'Auth response does not contain access token.';
}
}
catch (error) {
data.errors.auth = error.toString();
}
if (!('auth' in data.errors)) {
try {
health = AzureDB.request('https://management.azure.com' + AzureDB.params.resource_id + '/providers/Microsoft.ResourceHealth/availabilityStatuses?api-version=2020-05-01');
if ('value' in health && Array.isArray(health.value) && health.value.length > 0 && 'properties' in health.value[0] && typeof health.value[0].properties === 'object') {
data.health = health.value[0].properties;
}
}
catch (error) {
data.errors.health = error.toString();
}
for (var i = 0; i < metrics.length; i += 20) {
var chunk = metrics.slice(i, i + 20);
prepared_metrics.push(
chunk.map(function (element) {
return encodeURIComponent(element);
}).join(',')
);
}
start_date = new Date((new Date().getTime()) - 300000).toISOString().replace(/\.\d+/, '');
end_date = new Date().toISOString().replace(/\.\d+/, '');
for (var j in prepared_metrics) {
try {
metrics_data = AzureDB.request('https://management.azure.com' + AzureDB.params.resource_id + '/providers/Microsoft.Insights/metrics?metricnames=' + prepared_metrics[j] + '&timespan=' + encodeURIComponent(start_date) + '/' + encodeURIComponent(end_date) + '&api-version=2021-05-01');
if ('value' in metrics_data && Array.isArray(metrics_data.value) && metrics_data.value.length > 0) {
for (k in metrics_data.value) {
if ('name' in metrics_data.value[k] && typeof metrics_data.value[k].name === 'object' && 'value' in metrics_data.value[k].name && typeof metrics_data.value[k].name.value === 'string' && 'timeseries' in metrics_data.value[k] && Array.isArray(metrics_data.value[k].timeseries) && metrics_data.value[k].timeseries.length > 0 && 'data' in metrics_data.value[k].timeseries[0] && Array.isArray(metrics_data.value[k].timeseries[0].data) && metrics_data.value[k].timeseries[0].data.length > 0) {
data.metrics[metrics_data.value[k].name.value.replace(/(\s|\/)+/g, '')] = metrics_data.value[k].timeseries[0].data[metrics_data.value[k].timeseries[0].data.length - 1];
}
}
}
}
catch (error) {
data.errors[prepared_metrics[j]] = error.toString();
}
}
}
}
catch (error) {
data.errors.params = error.toString();
}
if (Object.keys(data.errors).length !== 0) {
errors = 'Failed to receive data:';
for (var error in data.errors) {
errors += '\n' + error + ' : ' + data.errors[error];
}
data.errors = errors;
}
else {
data.errors = '';
}
return JSON.stringify(data);
description: 'The result of API requests is expressed in the JSON.'
timeout: '{$AZURE.DATA.TIMEOUT}'
parameters:
- name: app_id
value: '{$AZURE.APP.ID}'
- name: password
value: '{$AZURE.PASSWORD}'
- name: tenant_id
value: '{$AZURE.TENANT.ID}'
- name: subscription_id
value: '{$AZURE.SUBSCRIPTION.ID}'
- name: resource_id
value: '{$AZURE.RESOURCE.ID}'
- name: proxy
value: '{$AZURE.PROXY}'
tags:
- tag: component
value: raw
- uuid: 40b15dd3d7a943d99f1bbe7fb34a9f48
name: 'Azure Microsoft SQL: Data IO percentage'
type: DEPENDENT
key: azure.db.mssql.data.read.percentage
delay: '0'
history: 7d
value_type: FLOAT
units: '%'
description: 'The physical data read percentage.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.physical_data_read_percent.average
master_item:
key: azure.db.mssql.data.get
tags:
- tag: component
value: operations
- uuid: 25b97b67d87945b48ae5c44b1db20187
name: 'Azure Microsoft SQL: Deadlocks'
type: DEPENDENT
key: azure.db.mssql.deadlocks
delay: '0'
history: 7d
value_type: FLOAT
description: 'The count of deadlocks. Not applicable to the data warehouses.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.deadlock.total
master_item:
key: azure.db.mssql.data.get
tags:
- tag: component
value: network
- uuid: de91693b0a3345b4ad2c9aafd2af5325
name: 'Azure Microsoft SQL: Connections blocked by firewall'
type: DEPENDENT
key: azure.db.mssql.firewall.blocked
delay: '0'
history: 7d
value_type: FLOAT
description: 'The count of connections blocked by a firewall.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.blocked_by_firewall.total
master_item:
key: azure.db.mssql.data.get
tags:
- tag: component
value: network
- uuid: b41292705c284a77847856c2818d7145
name: 'Azure Microsoft SQL: Log IO percentage'
type: DEPENDENT
key: azure.db.mssql.log.write.percentage
delay: '0'
history: 7d
value_type: FLOAT
units: '%'
description: 'The percentage of I/O log. Not applicable to the data warehouses.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.log_write_percent.average
master_item:
key: azure.db.mssql.data.get
tags:
- tag: component
value: operations
- uuid: 7b772170199f41d4ab614dee66176630
name: 'Azure Microsoft SQL: SQL Server process core percent'
type: DEPENDENT
key: azure.db.mssql.server.cpu.percent
delay: '0'
history: 7d
value_type: FLOAT
units: '%'
description: 'The CPU usage as a percentage of the SQL DB process. Not applicable to the data warehouses.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.sqlserver_process_core_percent.maximum
error_handler: DISCARD_VALUE
master_item:
key: azure.db.mssql.data.get
tags:
- tag: component
value: cpu
- tag: component
value: server
- uuid: 5c0a5b745c094475b1e7a0d4f17a5627
name: 'Azure Microsoft SQL: SQL Server process memory percent'
type: DEPENDENT
key: azure.db.mssql.server.memory.percent
delay: '0'
history: 7d
value_type: FLOAT
units: '%'
description: 'Memory usage as a percentage of the SQL DB process. Not applicable to the data warehouses.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.sqlserver_process_memory_percent.maximum
error_handler: DISCARD_VALUE
master_item:
key: azure.db.mssql.data.get
tags:
- tag: component
value: memory
- tag: component
value: server
- uuid: 924d96d212764c3ab18e5c14daa58840
name: 'Azure Microsoft SQL: Sessions percentage'
type: DEPENDENT
key: azure.db.mssql.sessions.percent
delay: '0'
history: 7d
value_type: FLOAT
units: '%'
description: 'The percentage of sessions. Not applicable to the data warehouses.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.sessions_percent.average
master_item:
key: azure.db.mssql.data.get
tags:
- tag: component
value: sessions
- uuid: a87fd8ac96944e57ac58b39a18f6ad41
name: 'Azure Microsoft SQL: Data space allocated'
type: DEPENDENT
key: azure.db.mssql.storage.allocated
delay: '0'
history: 7d
value_type: FLOAT
units: B
description: 'The allocated data storage. Not applicable to the data warehouses.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.allocated_data_storage.average
error_handler: DISCARD_VALUE
master_item:
key: azure.db.mssql.data.get
tags:
- tag: component
value: storage
- uuid: 2f95fd2dd48c4664afc5cd62d02b0b0a
name: 'Azure Microsoft SQL: Data space used percent'
type: DEPENDENT
key: azure.db.mssql.storage.percent
delay: '0'
history: 7d
value_type: FLOAT
units: '%'
description: 'The percentage of used data space. Not applicable to the data warehouses or hyperscale databases.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.storage_percent.maximum
error_handler: DISCARD_VALUE
master_item:
key: azure.db.mssql.data.get
tags:
- tag: component
value: storage
triggers:
- uuid: 4638130e599243fba3206abc85a7447f
expression: 'last(/Azure Microsoft SQL Serverless Database by HTTP/azure.db.mssql.storage.percent)>{$AZURE.DB.STORAGE.PUSED.CRIT}'
name: 'Azure Microsoft SQL: Storage space is critically low'
opdata: 'Current utilization: {ITEM.LASTVALUE1}'
priority: AVERAGE
description: 'Critical utilization of the storage space.'
tags:
- tag: scope
value: capacity
- uuid: 4732eab4aabf439fa0b2d80b63e821e5
expression: 'last(/Azure Microsoft SQL Serverless Database by HTTP/azure.db.mssql.storage.percent)>{$AZURE.DB.STORAGE.PUSED.WARN}'
name: 'Azure Microsoft SQL: Storage space is low'
opdata: 'Current utilization: {ITEM.LASTVALUE1}'
priority: WARNING
description: 'High utilization of the storage space.'
tags:
- tag: scope
value: capacity
- uuid: 3b1fb8f993e74795b38abd56eceace0a
name: 'Azure Microsoft SQL: Data space used'
type: DEPENDENT
key: azure.db.mssql.storage.used
delay: '0'
history: 7d
value_type: FLOAT
units: B
description: 'Data space used. Not applicable to the data warehouses.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.storage.maximum
error_handler: DISCARD_VALUE
master_item:
key: azure.db.mssql.data.get
tags:
- tag: component
value: storage
- uuid: fbd572ca3d3f42eea794ce78a5a27ec1
name: 'Azure Microsoft SQL: In-Memory OLTP storage percent'
type: DEPENDENT
key: azure.db.mssql.storage.xtp.percent
delay: '0'
history: 7d
value_type: FLOAT
units: '%'
description: 'In-Memory OLTP storage percent. Not applicable to the data warehouses.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.xtp_storage_percent.average
master_item:
key: azure.db.mssql.data.get
tags:
- tag: component
value: storage
- uuid: cea8a8ea0eaa4d26a28721882c19d9cd
name: 'Azure Microsoft SQL: Tempdb data file size'
type: DEPENDENT
key: azure.db.mssql.tempdb.data.size
delay: '0'
history: 7d
value_type: FLOAT
units: B
description: 'Space used in `tempdb` data files, expressed in bytes. Not applicable to the data warehouses.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.tempdb_data_size.maximum
error_handler: DISCARD_VALUE
- type: MULTIPLIER
parameters:
- '1024'
master_item:
key: azure.db.mssql.data.get
tags:
- tag: component
value: storage
- uuid: 6c8196751a504b82920b7ffa5314a2fc
name: 'Azure Microsoft SQL: Tempdb log used percent'
type: DEPENDENT
key: azure.db.mssql.tempdb.log.percent
delay: '0'
history: 7d
value_type: FLOAT
units: '%'
description: 'The percentage of space used in `tempdb` transaction log files. Not applicable to the data warehouses.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.tempdb_log_used_percent.maximum
error_handler: DISCARD_VALUE
master_item:
key: azure.db.mssql.data.get
tags:
- tag: component
value: storage
- uuid: b83992d1001c41b6ad3d13dbb227a733
name: 'Azure Microsoft SQL: Tempdb log file size'
type: DEPENDENT
key: azure.db.mssql.tempdb.log.size
delay: '0'
history: 7d
value_type: FLOAT
units: B
description: 'Space used in `tempdb` transaction log files, expressed in bytes. Not applicable to the data warehouses.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.tempdb_log_size.maximum
error_handler: DISCARD_VALUE
- type: MULTIPLIER
parameters:
- '1024'
master_item:
key: azure.db.mssql.data.get
tags:
- tag: component
value: storage
- uuid: a4f597ab784a4e31aedc82bfb34feeb7
name: 'Azure Microsoft SQL: Workers percentage'
type: DEPENDENT
key: azure.db.mssql.workers.percent
delay: '0'
history: 7d
value_type: FLOAT
units: '%'
description: 'The percentage of workers. Not applicable to the data warehouses.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.workers_percent.average
master_item:
key: azure.db.mssql.data.get
tags:
- tag: component
value: workers
tags:
- tag: class
value: software
- tag: target
value: azure
- tag: target
value: mssql
macros:
- macro: '{$AZURE.APP.ID}'
description: 'The App ID of Microsoft Azure.'
- macro: '{$AZURE.DATA.TIMEOUT}'
value: 15s
description: 'A response timeout for an API.'
- macro: '{$AZURE.DB.CPU.UTIL.CRIT}'
value: '90'
description: 'The critical threshold of CPU utilization, expressed in %.'
- macro: '{$AZURE.DB.MEMORY.UTIL.CRIT}'
value: '90'
description: 'The critical threshold of memory utilization, expressed in %.'
- macro: '{$AZURE.DB.STORAGE.PUSED.CRIT}'
value: '90'
description: 'The critical threshold of storage utilization, expressed in %.'
- macro: '{$AZURE.DB.STORAGE.PUSED.WARN}'
value: '80'
description: 'The warning threshold of storage utilization, expressed in %.'
- macro: '{$AZURE.PASSWORD}'
type: SECRET_TEXT
description: 'Microsoft Azure password.'
- macro: '{$AZURE.PROXY}'
description: 'Sets HTTP proxy value. If this macro is empty then no proxy is used.'
- macro: '{$AZURE.RESOURCE.ID}'
description: 'Microsoft Azure Microsoft SQL database ID.'
- macro: '{$AZURE.SUBSCRIPTION.ID}'
description: 'Microsoft Azure subscription ID.'
- macro: '{$AZURE.TENANT.ID}'
description: 'Microsoft Azure tenant ID.'
valuemaps:
- uuid: c87b2eaeb88c4932ad63c73fcafa5331
name: 'Azure resource health state'
mappings:
- value: '0'
newvalue: Available
- value: '1'
newvalue: Degraded
- value: '2'
newvalue: Unavailable
- value: '3'
newvalue: Unknown
- uuid: ec92c7b0b1d14946b6ac61de89357199
template: 'Azure MySQL Flexible Server by HTTP'
name: 'Azure MySQL Flexible Server by HTTP'
description: |
This template is designed to monitor Microsoft Azure MySQL flexible servers by HTTP.
It works without any external scripts and uses the script item.
Setup:
1. Create an Azure service principal via the Azure command-line interface (Azure CLI) for your subscription.
`az ad sp create-for-rbac --name zabbix --role reader --scope /subscriptions/<subscription_id>`
See https://docs.microsoft.com/en-us/cli/azure/create-an-azure-service-principal-azure-cli for more details.
2. Link the template to a host.
3. Configure the macros: {$AZURE.APP.ID}, {$AZURE.PASSWORD}, {$AZURE.TENANT.ID}, {$AZURE.SUBSCRIPTION.ID}, and {$AZURE.RESOURCE.ID}.
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/Cloud
items:
- uuid: 9c87cde45e984ce282d8ba9fbe184f9b
name: 'Azure MySQL: Availability status detailed'
type: DEPENDENT
key: azure.db.mysql.availability.details
delay: '0'
history: 7d
trends: '0'
value_type: CHAR
description: 'The summary description of the availability status.'
preprocessing:
- type: JSONPATH
parameters:
- $.health.summary
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 1h
master_item:
key: azure.db.mysql.data.get
tags:
- tag: component
value: health
- uuid: 7f2d8e8d94ae4c87ba0480a2d9518f65
name: 'Azure MySQL: Availability state'
type: DEPENDENT
key: azure.db.mysql.availability.state
delay: '0'
history: 7d
description: 'The availability status of the resource.'
valuemap:
name: 'Azure resource health state'
preprocessing:
- type: JSONPATH
parameters:
- $.health.availabilityState
error_handler: CUSTOM_VALUE
error_handler_params: '3'
- type: STR_REPLACE
parameters:
- Available
- '0'
- type: STR_REPLACE
parameters:
- Degraded
- '1'
- type: STR_REPLACE
parameters:
- Unavailable
- '2'
- type: STR_REPLACE
parameters:
- Unknown
- '3'
- type: IN_RANGE
parameters:
- '0'
- '3'
error_handler: CUSTOM_VALUE
error_handler_params: '3'
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 1h
master_item:
key: azure.db.mysql.data.get
tags:
- tag: component
value: health
triggers:
- uuid: e822fd2214fb41db9b57cdb8eec0444a
expression: 'last(/Azure MySQL Flexible Server by HTTP/azure.db.mysql.availability.state)=1'
name: 'Azure MySQL: MySQL server is degraded'
opdata: '{ITEM.LASTVALUE1}'
priority: AVERAGE
description: 'The resource is in degraded state.'
tags:
- tag: scope
value: availability
- uuid: ebb35037a5b646a0bd2c6be44bb1f3c6
expression: 'last(/Azure MySQL Flexible Server by HTTP/azure.db.mysql.availability.state)=3'
name: 'Azure MySQL: MySQL server is in unknown state'
opdata: '{ITEM.LASTVALUE1}'
priority: WARNING
description: 'The resource state is unknown.'
tags:
- tag: scope
value: availability
- uuid: 240b861c09a94e209036782b6c7496fa
expression: 'last(/Azure MySQL Flexible Server by HTTP/azure.db.mysql.availability.state)=2'
name: 'Azure MySQL: MySQL server is unavailable'
opdata: '{ITEM.LASTVALUE1}'
priority: HIGH
description: 'The resource state is unavailable.'
tags:
- tag: scope
value: availability
- uuid: cab6ac822f2c4e118b030e49cc15eaa2
name: 'Azure MySQL: Connections aborted'
type: DEPENDENT
key: azure.db.mysql.connections.aborted
delay: '0'
history: 7d
value_type: FLOAT
description: 'The count of aborted connections.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.aborted_connections.total
master_item:
key: azure.db.mysql.data.get
tags:
- tag: component
value: network
triggers:
- uuid: 3346ea2331c14fa18658eb33e461ec7c
expression: 'min(/Azure MySQL Flexible Server by HTTP/azure.db.mysql.connections.aborted,5m)>{$AZURE.DB.ABORTED.CONN.MAX.WARN}'
name: 'Azure MySQL: Server has aborted connections'
opdata: 'Current value: {ITEM.LASTVALUE1}'
priority: AVERAGE
description: 'The number of failed attempts to connect to the MySQL server is more than `{$AZURE.DB.ABORTED.CONN.MAX.WARN}`.'
tags:
- tag: scope
value: availability
- uuid: 71b33f0a5d37498dbb57d185ac0f2741
name: 'Azure MySQL: Connections active'
type: DEPENDENT
key: azure.db.mysql.connections.active
delay: '0'
history: 7d
value_type: FLOAT
description: 'The count of active connections.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.active_connections.maximum
master_item:
key: azure.db.mysql.data.get
tags:
- tag: component
value: network
- uuid: 1993ae276fe44db6a89451291749f703
name: 'Azure MySQL: Connections total'
type: DEPENDENT
key: azure.db.mysql.connections.total
delay: '0'
history: 7d
value_type: FLOAT
description: 'The count of total connections.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.total_connections.total
master_item:
key: azure.db.mysql.data.get
tags:
- tag: component
value: network
- uuid: b235666b98954555ae5e75e757bba707
name: 'Azure MySQL: CPU credits consumed'
type: DEPENDENT
key: azure.db.mysql.cpu.credits.consumed
delay: '0'
history: 7d
value_type: FLOAT
description: 'The consumed CPU credits.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.cpu_credits_consumed.maximum
error_handler: DISCARD_VALUE
master_item:
key: azure.db.mysql.data.get
tags:
- tag: component
value: cpu
- uuid: 4f591346d3d34d49b37cfff2a169f57e
name: 'Azure MySQL: CPU credits remaining'
type: DEPENDENT
key: azure.db.mysql.cpu.credits.remaining
delay: '0'
history: 7d
value_type: FLOAT
description: 'The remaining CPU credits.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.cpu_credits_remaining.maximum
error_handler: DISCARD_VALUE
master_item:
key: azure.db.mysql.data.get
tags:
- tag: component
value: cpu
- uuid: afe4d11c2f474428acc00d153ad2a6e5
name: 'Azure MySQL: Percentage CPU'
type: DEPENDENT
key: azure.db.mysql.cpu.percentage
delay: '0'
history: 7d
value_type: FLOAT
units: '%'
description: 'The CPU percent of a host.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.cpu_percent.maximum
master_item:
key: azure.db.mysql.data.get
tags:
- tag: component
value: cpu
triggers:
- uuid: 5af82cc95239479c86c7ab3dabcfb592
expression: 'min(/Azure MySQL Flexible Server by HTTP/azure.db.mysql.cpu.percentage,5m)>{$AZURE.DB.CPU.UTIL.CRIT}'
name: 'Azure MySQL: High CPU utilization'
opdata: 'Current utilization: {ITEM.LASTVALUE1}'
priority: HIGH
description: 'The CPU utilization is too high. The system might be slow to respond.'
tags:
- tag: scope
value: performance
- uuid: f960e7667571497c96454b5c4b7b69ff
name: 'Azure MySQL: Get errors'
type: DEPENDENT
key: azure.db.mysql.data.errors
delay: '0'
history: 7d
trends: '0'
value_type: TEXT
description: 'A list of errors from API requests.'
preprocessing:
- type: JSONPATH
parameters:
- $.errors
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 1h
master_item:
key: azure.db.mysql.data.get
tags:
- tag: component
value: raw
triggers:
- uuid: 98c1b86b79e9469cac2870fb2ba42949
expression: 'length(last(/Azure MySQL Flexible Server by HTTP/azure.db.mysql.data.errors))>0'
name: 'Azure MySQL: There are errors in requests to API'
opdata: '{ITEM.LASTVALUE1}'
priority: AVERAGE
description: 'Zabbix has received errors in response to API requests.'
tags:
- tag: scope
value: availability
- uuid: de712334db1440309fa68f9252d4f9bc
name: 'Azure MySQL: Get data'
type: SCRIPT
key: azure.db.mysql.data.get
history: '0'
trends: '0'
value_type: TEXT
params: |
var AzureDB = {
params: {},
token: null,
setParams: function (params) {
['app_id', 'password', 'tenant_id', 'subscription_id', 'resource_id'].forEach(function (field) {
if (typeof params !== 'object' || typeof params[field] === 'undefined' || params[field] === '') {
throw 'Required param is not set: ' + field + '.';
}
});
AzureDB.params = params;
},
request: function (url, data) {
if (typeof data === 'undefined' || data === null) {
data = '';
}
var response, request = new HttpRequest();
if (typeof AzureDB.params.proxy !== 'undefined' && AzureDB.params.proxy !== '') {
request.setProxy(AzureDB.params.proxy);
}
if (AzureDB.token) {
request.addHeader('Accept: application/json');
request.addHeader('Authorization: Bearer ' + AzureDB.token);
}
Zabbix.log(4, '[ Azure ] Sending request: ' + url);
if (data !== '') {
request.addHeader('Content-Type: application/x-www-form-urlencoded');
response = request.post(url, data);
}
else {
response = request.get(url);
}
Zabbix.log(4, '[ Azure ] Received response with status code ' + request.getStatus() + ': ' + response);
if (request.getStatus() !== 200 || response === null) {
throw 'Request failed with status code ' + request.getStatus() + ': ' + response;
}
try {
return JSON.parse(response);
}
catch (error) {
throw 'Failed to parse response received from API.';
}
}
};
var metrics = [
'cpu_percent',
'memory_percent',
'network_bytes_egress',
'network_bytes_ingress',
'active_connections',
'total_connections',
'aborted_connections',
'Queries',
'io_consumption_percent',
'storage_percent',
'storage_used',
'storage_limit',
'backup_storage_used',
'replication_lag',
'cpu_credits_remaining',
'cpu_credits_consumed'
],
prepared_metrics = [],
data = {};
data['errors'] = {};
data['metrics'] = {};
try {
AzureDB.setParams(JSON.parse(value));
try {
result = AzureDB.request(
'https://login.microsoftonline.com/' + encodeURIComponent(AzureDB.params.tenant_id) + '/oauth2/token',
'grant_type=client_credentials&resource=' + encodeURIComponent('https://management.azure.com/') + '&client_id=' + encodeURIComponent(AzureDB.params.app_id) + '&client_secret=' + encodeURIComponent(AzureDB.params.password)
);
if ('access_token' in result) {
AzureDB.token = result['access_token'];
} else {
throw 'Auth response does not contain access token.';
}
}
catch (error) {
data.errors.auth = error.toString();
}
if (!('auth' in data.errors)) {
try {
health = AzureDB.request('https://management.azure.com' + AzureDB.params.resource_id + '/providers/Microsoft.ResourceHealth/availabilityStatuses?api-version=2020-05-01');
if ('value' in health && Array.isArray(health.value) && health.value.length > 0 && 'properties' in health.value[0] && typeof health.value[0].properties === 'object') {
data.health = health.value[0].properties;
}
}
catch (error) {
data.errors.health = error.toString();
}
for (var i = 0; i < metrics.length; i += 20) {
var chunk = metrics.slice(i, i + 20);
prepared_metrics.push(
chunk.map(function (element) {
return encodeURIComponent(element);
}).join(',')
);
}
start_date = new Date((new Date().getTime()) - 300000).toISOString().replace(/\.\d+/, '');
end_date = new Date().toISOString().replace(/\.\d+/, '');
for (var j in prepared_metrics) {
try {
metrics_data = AzureDB.request('https://management.azure.com' + AzureDB.params.resource_id + '/providers/Microsoft.Insights/metrics?metricnames=' + prepared_metrics[j] + '&timespan=' + encodeURIComponent(start_date) + '/' + encodeURIComponent(end_date) + '&api-version=2021-05-01');
if ('value' in metrics_data && Array.isArray(metrics_data.value) && metrics_data.value.length > 0) {
for (k in metrics_data.value) {
if ('name' in metrics_data.value[k] && typeof metrics_data.value[k].name === 'object' && 'value' in metrics_data.value[k].name && typeof metrics_data.value[k].name.value === 'string' && 'timeseries' in metrics_data.value[k] && Array.isArray(metrics_data.value[k].timeseries) && metrics_data.value[k].timeseries.length > 0 && 'data' in metrics_data.value[k].timeseries[0] && Array.isArray(metrics_data.value[k].timeseries[0].data) && metrics_data.value[k].timeseries[0].data.length > 0) {
data.metrics[metrics_data.value[k].name.value.replace(/(\s|\/)+/g, '')] = metrics_data.value[k].timeseries[0].data[metrics_data.value[k].timeseries[0].data.length - 1];
}
}
}
}
catch (error) {
data.errors[prepared_metrics[j]] = error.toString();
}
}
}
}
catch (error) {
data.errors.params = error.toString();
}
if (Object.keys(data.errors).length !== 0) {
errors = 'Failed to receive data:';
for (var error in data.errors) {
errors += '\n' + error + ' : ' + data.errors[error];
}
data.errors = errors;
}
else {
data.errors = '';
}
return JSON.stringify(data);
description: 'The result of API requests is expressed in the JSON.'
timeout: '{$AZURE.DATA.TIMEOUT}'
parameters:
- name: app_id
value: '{$AZURE.APP.ID}'
- name: password
value: '{$AZURE.PASSWORD}'
- name: tenant_id
value: '{$AZURE.TENANT.ID}'
- name: subscription_id
value: '{$AZURE.SUBSCRIPTION.ID}'
- name: resource_id
value: '{$AZURE.RESOURCE.ID}'
- name: proxy
value: '{$AZURE.PROXY}'
tags:
- tag: component
value: raw
- uuid: b4a6363aac734b6c8d043718ca667c09
name: 'Azure MySQL: IO consumption percent'
type: DEPENDENT
key: azure.db.mysql.io.consumption.percent
delay: '0'
history: 7d
value_type: FLOAT
units: '%'
description: 'The consumption percent of I/O.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.io_consumption_percent.maximum
master_item:
key: azure.db.mysql.data.get
tags:
- tag: component
value: operations
- uuid: f0f56a67942a40509d6835f3da9eb7e2
name: 'Azure MySQL: Memory utilization'
type: DEPENDENT
key: azure.db.mysql.memory.percentage
delay: '0'
history: 7d
value_type: FLOAT
units: '%'
description: 'The memory percent of a host.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.memory_percent.maximum
master_item:
key: azure.db.mysql.data.get
tags:
- tag: component
value: memory
- uuid: 84f3d2b152784993944a2d4c3fad1a59
name: 'Azure MySQL: Network out'
type: DEPENDENT
key: azure.db.mysql.network.egress
delay: '0'
history: 7d
value_type: FLOAT
units: bps
description: 'Network egress of a host, expressed in bytes.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.network_bytes_egress.total
- type: MULTIPLIER
parameters:
- '0.0088'
master_item:
key: azure.db.mysql.data.get
tags:
- tag: component
value: network
- uuid: 5f38b6b4e3a849d09022bd34c4347088
name: 'Azure MySQL: Network in'
type: DEPENDENT
key: azure.db.mysql.network.ingress
delay: '0'
history: 7d
value_type: FLOAT
units: bps
description: 'Network ingress of a host, expressed in bytes.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.network_bytes_ingress.total
- type: MULTIPLIER
parameters:
- '0.0088'
master_item:
key: azure.db.mysql.data.get
tags:
- tag: component
value: network
- uuid: 05329dcdb2e14080a43d1bf7553037f6
name: 'Azure MySQL: Queries'
type: DEPENDENT
key: azure.db.mysql.queries
delay: '0'
history: 7d
value_type: FLOAT
description: 'The count of queries.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.Queries.total
master_item:
key: azure.db.mysql.data.get
tags:
- tag: component
value: queries
- uuid: 80a05247fec04e39a99ccafaefbd0441
name: 'Azure MySQL: Replication lag'
type: DEPENDENT
key: azure.db.mysql.replication.lag
delay: '0'
history: 7d
value_type: FLOAT
units: s
description: 'The replication lag, expressed in seconds.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.replication_lag.maximum
error_handler: DISCARD_VALUE
master_item:
key: azure.db.mysql.data.get
tags:
- tag: component
value: replication
- uuid: 8d5cd0d3cd0744a5a260a8a0485f6735
name: 'Azure MySQL: Backup storage used'
type: DEPENDENT
key: azure.db.mysql.storage.backup.used
delay: '0'
history: 7d
value_type: FLOAT
units: B
description: 'Used backup storage, expressed in bytes.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.backup_storage_used.maximum
master_item:
key: azure.db.mysql.data.get
tags:
- tag: component
value: storage
- uuid: 78f3e03b5caf4f85a3c61513cf242f76
name: 'Azure MySQL: Storage limit'
type: DEPENDENT
key: azure.db.mysql.storage.limit
delay: '0'
history: 7d
value_type: FLOAT
units: B
description: 'The storage limit, expressed in bytes.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.storage_limit.maximum
master_item:
key: azure.db.mysql.data.get
tags:
- tag: component
value: storage
- uuid: ced51184b59643adaa51bef90710166b
name: 'Azure MySQL: Storage percent'
type: DEPENDENT
key: azure.db.mysql.storage.percent
delay: '0'
history: 7d
value_type: FLOAT
units: '%'
description: 'The storage utilization, expressed in %.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.storage_percent.maximum
master_item:
key: azure.db.mysql.data.get
tags:
- tag: component
value: storage
triggers:
- uuid: 1703edc1553644e5aa25d35928c5eafd
expression: 'last(/Azure MySQL Flexible Server by HTTP/azure.db.mysql.storage.percent)>{$AZURE.DB.STORAGE.PUSED.CRIT}'
name: 'Azure MySQL: Storage space is critically low'
opdata: 'Current utilization: {ITEM.LASTVALUE1}'
priority: AVERAGE
description: 'Critical utilization of the storage space.'
tags:
- tag: scope
value: capacity
- uuid: a2ec23a5e77c40aa9e45d214f4e06ca1
expression: 'last(/Azure MySQL Flexible Server by HTTP/azure.db.mysql.storage.percent)>{$AZURE.DB.STORAGE.PUSED.WARN}'
name: 'Azure MySQL: Storage space is low'
opdata: 'Current utilization: {ITEM.LASTVALUE1}'
priority: WARNING
description: 'High utilization of the storage space.'
tags:
- tag: scope
value: capacity
- uuid: 9f96e947eee646f890742676e9f9a22a
name: 'Azure MySQL: Storage used'
type: DEPENDENT
key: azure.db.mysql.storage.used
delay: '0'
history: 7d
value_type: FLOAT
units: B
description: 'Used storage space, expressed in bytes.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.storage_used.maximum
master_item:
key: azure.db.mysql.data.get
tags:
- tag: component
value: storage
tags:
- tag: class
value: software
- tag: target
value: azure
- tag: target
value: mysql
macros:
- macro: '{$AZURE.APP.ID}'
description: 'The App ID of Microsoft Azure.'
- macro: '{$AZURE.DATA.TIMEOUT}'
value: 15s
description: 'A response timeout for an API.'
- macro: '{$AZURE.DB.ABORTED.CONN.MAX.WARN}'
value: '25'
description: 'The number of failed attempts to connect to the MySQL server for a trigger expression.'
- macro: '{$AZURE.DB.CPU.UTIL.CRIT}'
value: '90'
description: 'The critical threshold of CPU utilization, expressed in %.'
- macro: '{$AZURE.DB.STORAGE.PUSED.CRIT}'
value: '90'
description: 'The critical threshold of the storage utilization, expressed in %.'
- macro: '{$AZURE.DB.STORAGE.PUSED.WARN}'
value: '80'
description: 'The warning threshold of the storage utilization, expressed in %.'
- macro: '{$AZURE.PASSWORD}'
type: SECRET_TEXT
description: 'Microsoft Azure password.'
- macro: '{$AZURE.PROXY}'
description: 'Sets HTTP proxy value. If this macro is empty then no proxy is used.'
- macro: '{$AZURE.RESOURCE.ID}'
description: 'Microsoft Azure MySQL server ID.'
- macro: '{$AZURE.SUBSCRIPTION.ID}'
description: 'Microsoft Azure subscription ID.'
- macro: '{$AZURE.TENANT.ID}'
description: 'Microsoft Azure tenant ID.'
valuemaps:
- uuid: 4eec167b4d69441398b96b8e375d6825
name: 'Azure resource health state'
mappings:
- value: '0'
newvalue: Available
- value: '1'
newvalue: Degraded
- value: '2'
newvalue: Unavailable
- value: '3'
newvalue: Unknown
- uuid: c1396bf1e8cf46f6a407e88ddceef0b8
template: 'Azure MySQL Single Server by HTTP'
name: 'Azure MySQL Single Server by HTTP'
description: |
This template is designed to monitor Microsoft Azure MySQL single servers by HTTP.
It works without any external scripts and uses the script item.
Setup:
1. Create an Azure service principal via the Azure command-line interface (Azure CLI) for your subscription.
`az ad sp create-for-rbac --name zabbix --role reader --scope /subscriptions/<subscription_id>`
See https://docs.microsoft.com/en-us/cli/azure/create-an-azure-service-principal-azure-cli for more details.
2. Link the template to a host.
3. Configure the macros: {$AZURE.APP.ID}, {$AZURE.PASSWORD}, {$AZURE.TENANT.ID}, {$AZURE.SUBSCRIPTION.ID}, and {$AZURE.RESOURCE.ID}.
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/Cloud
items:
- uuid: c7771aa67d3c424490d8de2d6c2d609a
name: 'Azure MySQL: Availability status detailed'
type: DEPENDENT
key: azure.db.mysql.availability.details
delay: '0'
history: 7d
trends: '0'
value_type: CHAR
description: 'The summary description of the availability status.'
preprocessing:
- type: JSONPATH
parameters:
- $.health.summary
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 1h
master_item:
key: azure.db.mysql.data.get
tags:
- tag: component
value: health
- uuid: c325b977b26e4e00acc3ea8703895f05
name: 'Azure MySQL: Availability state'
type: DEPENDENT
key: azure.db.mysql.availability.state
delay: '0'
history: 7d
description: 'The availability status of the resource.'
valuemap:
name: 'Azure resource health state'
preprocessing:
- type: JSONPATH
parameters:
- $.health.availabilityState
error_handler: CUSTOM_VALUE
error_handler_params: '3'
- type: STR_REPLACE
parameters:
- Available
- '0'
- type: STR_REPLACE
parameters:
- Degraded
- '1'
- type: STR_REPLACE
parameters:
- Unavailable
- '2'
- type: STR_REPLACE
parameters:
- Unknown
- '3'
- type: IN_RANGE
parameters:
- '0'
- '3'
error_handler: CUSTOM_VALUE
error_handler_params: '3'
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 1h
master_item:
key: azure.db.mysql.data.get
tags:
- tag: component
value: health
triggers:
- uuid: 91a32645266547d78df3a70b44c7782b
expression: 'last(/Azure MySQL Single Server by HTTP/azure.db.mysql.availability.state)=1'
name: 'Azure MySQL: MySQL server is degraded'
opdata: '{ITEM.LASTVALUE1}'
priority: AVERAGE
description: 'The resource is in degraded state.'
tags:
- tag: scope
value: availability
- uuid: 852aba88476a40aeb2170b933726b7d8
expression: 'last(/Azure MySQL Single Server by HTTP/azure.db.mysql.availability.state)=3'
name: 'Azure MySQL: MySQL server is in unknown state'
opdata: '{ITEM.LASTVALUE1}'
priority: WARNING
description: 'The resource state is unknown.'
tags:
- tag: scope
value: availability
- uuid: 5f2d2254dfc24f5481207585bed0d933
expression: 'last(/Azure MySQL Single Server by HTTP/azure.db.mysql.availability.state)=2'
name: 'Azure MySQL: MySQL server is unavailable'
opdata: '{ITEM.LASTVALUE1}'
priority: HIGH
description: 'The resource state is unavailable.'
tags:
- tag: scope
value: availability
- uuid: 69aba8caa6874c9d9423926a2ee78e99
name: 'Azure MySQL: Connections active'
type: DEPENDENT
key: azure.db.mysql.connections.active
delay: '0'
history: 7d
value_type: FLOAT
description: 'The count of active connections.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.active_connections.average
master_item:
key: azure.db.mysql.data.get
tags:
- tag: component
value: network
- uuid: e185b56984914507bc40c07c55153967
name: 'Azure MySQL: Connections failed'
type: DEPENDENT
key: azure.db.mysql.connections.failed
delay: '0'
history: 7d
value_type: FLOAT
description: 'The count of failed connections.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.connections_failed.total
error_handler: DISCARD_VALUE
master_item:
key: azure.db.mysql.data.get
tags:
- tag: component
value: network
triggers:
- uuid: 5b3a09ca04704e6a9972ee4865d358cd
expression: 'min(/Azure MySQL Single Server by HTTP/azure.db.mysql.connections.failed,5m)>{$AZURE.DB.FAILED.CONN.MAX.WARN}'
name: 'Azure MySQL: Server has failed connections'
opdata: 'Current value: {ITEM.LASTVALUE1}'
priority: AVERAGE
description: 'The number of failed attempts to connect to the MySQL server is more than `{$AZURE.DB.FAILED.CONN.MAX.WARN}`.'
tags:
- tag: scope
value: availability
- uuid: d0b5864a56094166b76fbc58a5e05c7c
name: 'Azure MySQL: Percentage CPU'
type: DEPENDENT
key: azure.db.mysql.cpu.percentage
delay: '0'
history: 7d
value_type: FLOAT
units: '%'
description: 'The CPU percent of a host.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.cpu_percent.average
master_item:
key: azure.db.mysql.data.get
tags:
- tag: component
value: cpu
triggers:
- uuid: 7115fb320e2b4cc1ad1739c8a6cee155
expression: 'min(/Azure MySQL Single Server by HTTP/azure.db.mysql.cpu.percentage,5m)>{$AZURE.DB.CPU.UTIL.CRIT}'
name: 'Azure MySQL: High CPU utilization'
opdata: 'Current utilization: {ITEM.LASTVALUE1}'
priority: HIGH
description: 'The CPU utilization is too high. The system might be slow to respond.'
tags:
- tag: scope
value: performance
- uuid: 2fc253a20100478d91cac13590a64bfc
name: 'Azure MySQL: Get errors'
type: DEPENDENT
key: azure.db.mysql.data.errors
delay: '0'
history: 7d
trends: '0'
value_type: TEXT
description: 'A list of errors from API requests.'
preprocessing:
- type: JSONPATH
parameters:
- $.errors
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 1h
master_item:
key: azure.db.mysql.data.get
tags:
- tag: component
value: raw
triggers:
- uuid: df5fa33f8c13413bb9d61ea4470b9b2d
expression: 'length(last(/Azure MySQL Single Server by HTTP/azure.db.mysql.data.errors))>0'
name: 'Azure MySQL: There are errors in requests to API'
opdata: '{ITEM.LASTVALUE1}'
priority: AVERAGE
description: 'Zabbix has received errors in response to API requests.'
tags:
- tag: scope
value: availability
- uuid: cd62d92ef0384ea9acf0cae71c88ebc6
name: 'Azure MySQL: Get data'
type: SCRIPT
key: azure.db.mysql.data.get
history: '0'
trends: '0'
value_type: TEXT
params: |
var AzureDB = {
params: {},
token: null,
setParams: function (params) {
['app_id', 'password', 'tenant_id', 'subscription_id', 'resource_id'].forEach(function (field) {
if (typeof params !== 'object' || typeof params[field] === 'undefined' || params[field] === '') {
throw 'Required param is not set: ' + field + '.';
}
});
AzureDB.params = params;
},
request: function (url, data) {
if (typeof data === 'undefined' || data === null) {
data = '';
}
var response, request = new HttpRequest();
if (typeof AzureDB.params.proxy !== 'undefined' && AzureDB.params.proxy !== '') {
request.setProxy(AzureDB.params.proxy);
}
if (AzureDB.token) {
request.addHeader('Accept: application/json');
request.addHeader('Authorization: Bearer ' + AzureDB.token);
}
Zabbix.log(4, '[ Azure ] Sending request: ' + url);
if (data !== '') {
request.addHeader('Content-Type: application/x-www-form-urlencoded');
response = request.post(url, data);
}
else {
response = request.get(url);
}
Zabbix.log(4, '[ Azure ] Received response with status code ' + request.getStatus() + ': ' + response);
if (request.getStatus() !== 200 || response === null) {
throw 'Request failed with status code ' + request.getStatus() + ': ' + response;
}
try {
return JSON.parse(response);
}
catch (error) {
throw 'Failed to parse response received from API.';
}
}
};
var metrics = [
'cpu_percent',
'memory_percent',
'io_consumption_percent',
'storage_percent',
'storage_used',
'storage_limit',
'serverlog_storage_percent',
'serverlog_storage_usage',
'serverlog_storage_limit',
'active_connections',
'connections_failed',
'seconds_behind_master',
'backup_storage_used',
'network_bytes_egress',
'network_bytes_ingress'
],
prepared_metrics = [],
data = {};
data['errors'] = {};
data['metrics'] = {};
try {
AzureDB.setParams(JSON.parse(value));
try {
result = AzureDB.request(
'https://login.microsoftonline.com/' + encodeURIComponent(AzureDB.params.tenant_id) + '/oauth2/token',
'grant_type=client_credentials&resource=' + encodeURIComponent('https://management.azure.com/') + '&client_id=' + encodeURIComponent(AzureDB.params.app_id) + '&client_secret=' + encodeURIComponent(AzureDB.params.password)
);
if ('access_token' in result) {
AzureDB.token = result['access_token'];
} else {
throw 'Auth response does not contain access token.';
}
}
catch (error) {
data.errors.auth = error.toString();
}
if (!('auth' in data.errors)) {
try {
health = AzureDB.request('https://management.azure.com' + AzureDB.params.resource_id + '/providers/Microsoft.ResourceHealth/availabilityStatuses?api-version=2020-05-01');
if ('value' in health && Array.isArray(health.value) && health.value.length > 0 && 'properties' in health.value[0] && typeof health.value[0].properties === 'object') {
data.health = health.value[0].properties;
}
}
catch (error) {
data.errors.health = error.toString();
}
for (var i = 0; i < metrics.length; i += 20) {
var chunk = metrics.slice(i, i + 20);
prepared_metrics.push(
chunk.map(function (element) {
return encodeURIComponent(element);
}).join(',')
);
}
start_date = new Date((new Date().getTime()) - 300000).toISOString().replace(/\.\d+/, '');
end_date = new Date().toISOString().replace(/\.\d+/, '');
for (var j in prepared_metrics) {
try {
metrics_data = AzureDB.request('https://management.azure.com' + AzureDB.params.resource_id + '/providers/Microsoft.Insights/metrics?metricnames=' + prepared_metrics[j] + '&timespan=' + encodeURIComponent(start_date) + '/' + encodeURIComponent(end_date) + '&api-version=2021-05-01');
if ('value' in metrics_data && Array.isArray(metrics_data.value) && metrics_data.value.length > 0) {
for (k in metrics_data.value) {
if ('name' in metrics_data.value[k] && typeof metrics_data.value[k].name === 'object' && 'value' in metrics_data.value[k].name && typeof metrics_data.value[k].name.value === 'string' && 'timeseries' in metrics_data.value[k] && Array.isArray(metrics_data.value[k].timeseries) && metrics_data.value[k].timeseries.length > 0 && 'data' in metrics_data.value[k].timeseries[0] && Array.isArray(metrics_data.value[k].timeseries[0].data) && metrics_data.value[k].timeseries[0].data.length > 0) {
data.metrics[metrics_data.value[k].name.value.replace(/(\s|\/)+/g, '')] = metrics_data.value[k].timeseries[0].data[metrics_data.value[k].timeseries[0].data.length - 1];
}
}
}
}
catch (error) {
data.errors[prepared_metrics[j]] = error.toString();
}
}
}
}
catch (error) {
data.errors.params = error.toString();
}
if (Object.keys(data.errors).length !== 0) {
errors = 'Failed to receive data:';
for (var error in data.errors) {
errors += '\n' + error + ' : ' + data.errors[error];
}
data.errors = errors;
}
else {
data.errors = '';
}
return JSON.stringify(data);
description: 'The result of API requests is expressed in the JSON.'
timeout: '{$AZURE.DATA.TIMEOUT}'
parameters:
- name: app_id
value: '{$AZURE.APP.ID}'
- name: password
value: '{$AZURE.PASSWORD}'
- name: tenant_id
value: '{$AZURE.TENANT.ID}'
- name: subscription_id
value: '{$AZURE.SUBSCRIPTION.ID}'
- name: resource_id
value: '{$AZURE.RESOURCE.ID}'
- name: proxy
value: '{$AZURE.PROXY}'
tags:
- tag: component
value: raw
- uuid: a17c365253eb4821841ec82ac8f61106
name: 'Azure MySQL: IO consumption percent'
type: DEPENDENT
key: azure.db.mysql.io.consumption.percent
delay: '0'
history: 7d
value_type: FLOAT
units: '%'
description: 'The consumption percent of I/O.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.io_consumption_percent.average
master_item:
key: azure.db.mysql.data.get
tags:
- tag: component
value: operations
- uuid: 5c19c08912634993b1f96fb11e5d1ae2
name: 'Azure MySQL: Memory utilization'
type: DEPENDENT
key: azure.db.mysql.memory.percentage
delay: '0'
history: 7d
value_type: FLOAT
units: '%'
description: 'The memory percent of a host.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.memory_percent.average
master_item:
key: azure.db.mysql.data.get
tags:
- tag: component
value: memory
triggers:
- uuid: a67b35f1ac674d6692b0b2bcd6f89bd8
expression: 'min(/Azure MySQL Single Server by HTTP/azure.db.mysql.memory.percentage,5m)>{$AZURE.DB.MEMORY.UTIL.CRIT}'
name: 'Azure MySQL: High memory utilization'
opdata: 'Current utilization: {ITEM.LASTVALUE1}'
priority: AVERAGE
description: 'The system is running out of free memory.'
tags:
- tag: scope
value: performance
- uuid: fe1b9846a634412aaa6a76fc05dbe46a
name: 'Azure MySQL: Network out'
type: DEPENDENT
key: azure.db.mysql.network.egress
delay: '0'
history: 7d
value_type: FLOAT
units: bps
description: 'The network outbound traffic across the active connections.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.network_bytes_egress.total
error_handler: DISCARD_VALUE
- type: MULTIPLIER
parameters:
- '0.0088'
master_item:
key: azure.db.mysql.data.get
tags:
- tag: component
value: network
- uuid: 1cc97817bda5470887e3d5d9f2d78650
name: 'Azure MySQL: Network in'
type: DEPENDENT
key: azure.db.mysql.network.ingress
delay: '0'
history: 7d
value_type: FLOAT
units: bps
description: 'The network inbound traffic across the active connections.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.network_bytes_ingress.total
error_handler: DISCARD_VALUE
- type: MULTIPLIER
parameters:
- '0.0088'
master_item:
key: azure.db.mysql.data.get
tags:
- tag: component
value: network
- uuid: 8e60794282ea42c7bad1573811b2e498
name: 'Azure MySQL: Replication lag'
type: DEPENDENT
key: azure.db.mysql.replication.lag
delay: '0'
history: 7d
value_type: FLOAT
units: s
description: 'The replication lag, expressed in seconds.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.seconds_behind_master.maximum
error_handler: DISCARD_VALUE
master_item:
key: azure.db.mysql.data.get
tags:
- tag: component
value: replication
- uuid: 1303a659d17a4e4fa9fa03cef35fef5a
name: 'Azure MySQL: Backup storage used'
type: DEPENDENT
key: azure.db.mysql.storage.backup.used
delay: '0'
history: 7d
value_type: FLOAT
units: B
description: 'Used backup storage, expressed in bytes.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.backup_storage_used.average
master_item:
key: azure.db.mysql.data.get
tags:
- tag: component
value: storage
- uuid: 4aed6d0c01d1458fbd1f7c7ea5386303
name: 'Azure MySQL: Storage limit'
type: DEPENDENT
key: azure.db.mysql.storage.limit
delay: '0'
history: 7d
value_type: FLOAT
units: B
description: 'The storage limit, expressed in bytes.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.storage_limit.maximum
master_item:
key: azure.db.mysql.data.get
tags:
- tag: component
value: storage
- uuid: 5b1b350be6f0409fb7ab842571c3f086
name: 'Azure MySQL: Storage percent'
type: DEPENDENT
key: azure.db.mysql.storage.percent
delay: '0'
history: 7d
value_type: FLOAT
units: '%'
description: 'The storage utilization, expressed in %.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.storage_percent.average
master_item:
key: azure.db.mysql.data.get
tags:
- tag: component
value: storage
triggers:
- uuid: 3afcb840e8004822a2dada2a89971f69
expression: 'last(/Azure MySQL Single Server by HTTP/azure.db.mysql.storage.percent)>{$AZURE.DB.STORAGE.PUSED.CRIT}'
name: 'Azure MySQL: Storage space is critically low'
opdata: 'Current utilization: {ITEM.LASTVALUE1}'
priority: AVERAGE
description: 'Critical utilization of the storage space.'
tags:
- tag: scope
value: capacity
- uuid: 2e605f906b284f769e7c880d4e642b43
expression: 'last(/Azure MySQL Single Server by HTTP/azure.db.mysql.storage.percent)>{$AZURE.DB.STORAGE.PUSED.WARN}'
name: 'Azure MySQL: Storage space is low'
opdata: 'Current utilization: {ITEM.LASTVALUE1}'
priority: WARNING
description: 'High utilization of the storage space.'
tags:
- tag: scope
value: capacity
- uuid: 7f553d8a0898477b87a2828e51efcfcc
name: 'Azure MySQL: Server log storage limit'
type: DEPENDENT
key: azure.db.mysql.storage.server.log.limit
delay: '0'
history: 7d
value_type: FLOAT
units: B
description: 'The storage limit of a server log, expressed in bytes.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.serverlog_storage_limit.maximum
master_item:
key: azure.db.mysql.data.get
tags:
- tag: component
value: storage
- uuid: cf5a77306c554a24b3741ef065b6d27a
name: 'Azure MySQL: Server log storage percent'
type: DEPENDENT
key: azure.db.mysql.storage.server.log.percent
delay: '0'
history: 7d
value_type: FLOAT
units: '%'
description: 'The storage utilization by a server log, expressed in %.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.serverlog_storage_percent.average
master_item:
key: azure.db.mysql.data.get
tags:
- tag: component
value: storage
- uuid: 8ed99a951e264185b1e0f343d7ea0aec
name: 'Azure MySQL: Server log storage used'
type: DEPENDENT
key: azure.db.mysql.storage.server.log.used
delay: '0'
history: 7d
value_type: FLOAT
units: B
description: 'The storage space used by a server log, expressed in bytes.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.serverlog_storage_usage.average
master_item:
key: azure.db.mysql.data.get
tags:
- tag: component
value: storage
- uuid: 0c9a5496d9884c8e9a434fb232b3208f
name: 'Azure MySQL: Storage used'
type: DEPENDENT
key: azure.db.mysql.storage.used
delay: '0'
history: 7d
value_type: FLOAT
units: B
description: 'Used storage space, expressed in bytes.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.storage_used.average
master_item:
key: azure.db.mysql.data.get
tags:
- tag: component
value: storage
tags:
- tag: class
value: software
- tag: target
value: azure
- tag: target
value: mysql
macros:
- macro: '{$AZURE.APP.ID}'
description: 'The App ID of Microsoft Azure.'
- macro: '{$AZURE.DATA.TIMEOUT}'
value: 15s
description: 'A response timeout for an API.'
- macro: '{$AZURE.DB.CPU.UTIL.CRIT}'
value: '90'
description: 'The critical threshold of CPU utilization, expressed in %.'
- macro: '{$AZURE.DB.FAILED.CONN.MAX.WARN}'
value: '25'
description: 'The number of failed attempts to connect to the MySQL server for trigger expression.'
- macro: '{$AZURE.DB.MEMORY.UTIL.CRIT}'
value: '90'
description: 'The critical threshold of memory utilization, expressed in %.'
- macro: '{$AZURE.DB.STORAGE.PUSED.CRIT}'
value: '90'
description: 'The critical threshold of storage utilization, expressed in %.'
- macro: '{$AZURE.DB.STORAGE.PUSED.WARN}'
value: '80'
description: 'The warning threshold of storage utilization, expressed in %.'
- macro: '{$AZURE.PASSWORD}'
type: SECRET_TEXT
description: 'Microsoft Azure password.'
- macro: '{$AZURE.PROXY}'
description: 'Sets HTTP proxy value. If this macro is empty then no proxy is used.'
- macro: '{$AZURE.RESOURCE.ID}'
description: 'Microsoft Azure MySQL server ID.'
- macro: '{$AZURE.SUBSCRIPTION.ID}'
description: 'Microsoft Azure subscription ID.'
- macro: '{$AZURE.TENANT.ID}'
description: 'Microsoft Azure tenant ID.'
valuemaps:
- uuid: 323a5259fb854724891515767f341540
name: 'Azure resource health state'
mappings:
- value: '0'
newvalue: Available
- value: '1'
newvalue: Degraded
- value: '2'
newvalue: Unavailable
- value: '3'
newvalue: Unknown
- uuid: 35ef29f24158444097272d2ea7fa6044
template: 'Azure PostgreSQL Flexible Server by HTTP'
name: 'Azure PostgreSQL Flexible Server by HTTP'
description: |
This template is designed to monitor Microsoft Azure PostgreSQL flexible servers by HTTP.
It works without any external scripts and uses the script item.
Setup:
1. Create an Azure service principal via the Azure command-line interface (Azure CLI) for your subscription.
`az ad sp create-for-rbac --name zabbix --role reader --scope /subscriptions/<subscription_id>`
See https://docs.microsoft.com/en-us/cli/azure/create-an-azure-service-principal-azure-cli for more details.
2. Link the template to a host.
3. Configure the macros: {$AZURE.APP.ID}, {$AZURE.PASSWORD}, {$AZURE.TENANT.ID}, {$AZURE.SUBSCRIPTION.ID}, and {$AZURE.RESOURCE.ID}.
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/Cloud
items:
- uuid: 7f7deae517e54cf582ae758a6988037b
name: 'Azure PostgreSQL: Availability status detailed'
type: DEPENDENT
key: azure.db.pgsql.availability.details
delay: '0'
history: 7d
trends: '0'
value_type: CHAR
description: 'The summary description of the availability status.'
preprocessing:
- type: JSONPATH
parameters:
- $.health.summary
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 1h
master_item:
key: azure.db.pgsql.data.get
tags:
- tag: component
value: health
- uuid: cd9072a3895c42dab794707f3bcaf743
name: 'Azure PostgreSQL: Availability state'
type: DEPENDENT
key: azure.db.pgsql.availability.state
delay: '0'
history: 7d
description: 'The availability status of the resource.'
valuemap:
name: 'Azure resource health state'
preprocessing:
- type: JSONPATH
parameters:
- $.health.availabilityState
error_handler: CUSTOM_VALUE
error_handler_params: '3'
- type: STR_REPLACE
parameters:
- Available
- '0'
- type: STR_REPLACE
parameters:
- Degraded
- '1'
- type: STR_REPLACE
parameters:
- Unavailable
- '2'
- type: STR_REPLACE
parameters:
- Unknown
- '3'
- type: IN_RANGE
parameters:
- '0'
- '3'
error_handler: CUSTOM_VALUE
error_handler_params: '3'
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 1h
master_item:
key: azure.db.pgsql.data.get
tags:
- tag: component
value: health
triggers:
- uuid: 65b5c39b48e248c4866c511bbba91e1b
expression: 'last(/Azure PostgreSQL Flexible Server by HTTP/azure.db.pgsql.availability.state)=1'
name: 'Azure PostgreSQL: PostgreSQL server is degraded'
opdata: '{ITEM.LASTVALUE1}'
priority: AVERAGE
description: 'The resource is in degraded state.'
tags:
- tag: scope
value: availability
- uuid: d8ce86c853064cba80c9883052ed1403
expression: 'last(/Azure PostgreSQL Flexible Server by HTTP/azure.db.pgsql.availability.state)=3'
name: 'Azure PostgreSQL: PostgreSQL server is in unknown state'
opdata: '{ITEM.LASTVALUE1}'
priority: WARNING
description: 'The resource state is unknown.'
tags:
- tag: scope
value: availability
- uuid: 9572c9e56a6b44368bcf2d8a17a220d8
expression: 'last(/Azure PostgreSQL Flexible Server by HTTP/azure.db.pgsql.availability.state)=2'
name: 'Azure PostgreSQL: PostgreSQL server is unavailable'
opdata: '{ITEM.LASTVALUE1}'
priority: HIGH
description: 'The resource state is unavailable.'
tags:
- tag: scope
value: availability
- uuid: 05ada75c666e45269c3c36159f9902cc
name: 'Azure PostgreSQL: Connections active'
type: DEPENDENT
key: azure.db.pgsql.connections.active
delay: '0'
history: 7d
value_type: FLOAT
description: 'The count of active connections.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.active_connections.average
master_item:
key: azure.db.pgsql.data.get
tags:
- tag: component
value: network
- uuid: 00d1116141874dbfb204ebfe96c203f1
name: 'Azure PostgreSQL: Connections failed'
type: DEPENDENT
key: azure.db.pgsql.connections.failed
delay: '0'
history: 7d
value_type: FLOAT
description: 'The count of failed connections.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.connections_failed.total
error_handler: DISCARD_VALUE
master_item:
key: azure.db.pgsql.data.get
tags:
- tag: component
value: network
- uuid: f422f01bf1c9484e880581f31f70e120
name: 'Azure PostgreSQL: Connections succeeded'
type: DEPENDENT
key: azure.db.pgsql.connections.succeeded
delay: '0'
history: 7d
value_type: FLOAT
description: 'The count of succeeded connections.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.connections_succeeded.total
master_item:
key: azure.db.pgsql.data.get
tags:
- tag: component
value: network
- uuid: 1f1270c6981b4d08864572410fdeccde
name: 'Azure PostgreSQL: CPU credits consumed'
type: DEPENDENT
key: azure.db.pgsql.cpu.credits.consumed
delay: '0'
history: 7d
value_type: FLOAT
description: 'The total number of credits consumed by the database server.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.cpu_credits_consumed.average
error_handler: DISCARD_VALUE
master_item:
key: azure.db.pgsql.data.get
tags:
- tag: component
value: cpu
- uuid: e55082c4a278435286335cebd2ae1cac
name: 'Azure PostgreSQL: CPU credits remaining'
type: DEPENDENT
key: azure.db.pgsql.cpu.credits.remaining
delay: '0'
history: 7d
value_type: FLOAT
description: 'The total number of credits available to burst.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.cpu_credits_remaining.average
error_handler: DISCARD_VALUE
master_item:
key: azure.db.pgsql.data.get
tags:
- tag: component
value: cpu
- uuid: 8d85c5c73c894cdda6324832a703fea2
name: 'Azure PostgreSQL: Percentage CPU'
type: DEPENDENT
key: azure.db.pgsql.cpu.percentage
delay: '0'
history: 7d
value_type: FLOAT
units: '%'
description: 'The CPU percent of a host.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.cpu_percent.average
master_item:
key: azure.db.pgsql.data.get
tags:
- tag: component
value: cpu
triggers:
- uuid: f8672e4488b740a9a17395689c3d853c
expression: 'min(/Azure PostgreSQL Flexible Server by HTTP/azure.db.pgsql.cpu.percentage,5m)>{$AZURE.DB.CPU.UTIL.CRIT}'
name: 'Azure PostgreSQL: High CPU utilization'
opdata: 'Current utilization: {ITEM.LASTVALUE1}'
priority: HIGH
description: 'The CPU utilization is too high. The system might be slow to respond.'
tags:
- tag: scope
value: performance
- uuid: 06c4226667ec4c4489e6d3ad31c3135f
name: 'Azure PostgreSQL: Get errors'
type: DEPENDENT
key: azure.db.pgsql.data.errors
delay: '0'
history: 7d
trends: '0'
value_type: TEXT
description: 'A list of errors from API requests.'
preprocessing:
- type: JSONPATH
parameters:
- $.errors
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 1h
master_item:
key: azure.db.pgsql.data.get
tags:
- tag: component
value: raw
triggers:
- uuid: 55962f0d8a4c44c9a6b09da705e94c59
expression: 'length(last(/Azure PostgreSQL Flexible Server by HTTP/azure.db.pgsql.data.errors))>0'
name: 'Azure PostgreSQL: There are errors in requests to API'
opdata: '{ITEM.LASTVALUE1}'
priority: AVERAGE
description: 'Zabbix has received errors in response to API requests.'
tags:
- tag: scope
value: availability
- uuid: 1792c0566e8a438dad5e299d8f5b9094
name: 'Azure PostgreSQL: Get data'
type: SCRIPT
key: azure.db.pgsql.data.get
history: '0'
trends: '0'
value_type: TEXT
params: |
var AzureDB = {
params: {},
token: null,
setParams: function (params) {
['app_id', 'password', 'tenant_id', 'subscription_id', 'resource_id'].forEach(function (field) {
if (typeof params !== 'object' || typeof params[field] === 'undefined' || params[field] === '') {
throw 'Required param is not set: ' + field + '.';
}
});
AzureDB.params = params;
},
request: function (url, data) {
if (typeof data === 'undefined' || data === null) {
data = '';
}
var response, request = new HttpRequest();
if (typeof AzureDB.params.proxy !== 'undefined' && AzureDB.params.proxy !== '') {
request.setProxy(AzureDB.params.proxy);
}
if (AzureDB.token) {
request.addHeader('Accept: application/json');
request.addHeader('Authorization: Bearer ' + AzureDB.token);
}
Zabbix.log(4, '[ Azure ] Sending request: ' + url);
if (data !== '') {
request.addHeader('Content-Type: application/x-www-form-urlencoded');
response = request.post(url, data);
}
else {
response = request.get(url);
}
Zabbix.log(4, '[ Azure ] Received response with status code ' + request.getStatus() + ': ' + response);
if (request.getStatus() !== 200 || response === null) {
throw 'Request failed with status code ' + request.getStatus() + ': ' + response;
}
try {
return JSON.parse(response);
}
catch (error) {
throw 'Failed to parse response received from API.';
}
}
};
var metrics = [
'cpu_percent',
'memory_percent',
'iops',
'disk_queue_depth',
'read_throughput',
'write_throughput',
'read_iops',
'write_iops',
'network_bytes_egress',
'network_bytes_ingress',
'active_connections',
'connections_failed',
'connections_succeeded',
'storage_percent',
'storage_used',
'storage_free',
'txlogs_storage_used',
'backup_storage_used',
'maximum_used_transactionIDs',
'cpu_credits_remaining',
'cpu_credits_consumed'
],
prepared_metrics = [],
data = {};
data['errors'] = {};
data['metrics'] = {};
try {
AzureDB.setParams(JSON.parse(value));
try {
result = AzureDB.request(
'https://login.microsoftonline.com/' + encodeURIComponent(AzureDB.params.tenant_id) + '/oauth2/token',
'grant_type=client_credentials&resource=' + encodeURIComponent('https://management.azure.com/') + '&client_id=' + encodeURIComponent(AzureDB.params.app_id) + '&client_secret=' + encodeURIComponent(AzureDB.params.password)
);
if ('access_token' in result) {
AzureDB.token = result['access_token'];
} else {
throw 'Auth response does not contain access token.';
}
}
catch (error) {
data.errors.auth = error.toString();
}
if (!('auth' in data.errors)) {
try {
health = AzureDB.request('https://management.azure.com' + AzureDB.params.resource_id + '/providers/Microsoft.ResourceHealth/availabilityStatuses?api-version=2020-05-01');
if ('value' in health && Array.isArray(health.value) && health.value.length > 0 && 'properties' in health.value[0] && typeof health.value[0].properties === 'object') {
data.health = health.value[0].properties;
}
}
catch (error) {
data.errors.health = error.toString();
}
for (var i = 0; i < metrics.length; i += 20) {
var chunk = metrics.slice(i, i + 20);
prepared_metrics.push(
chunk.map(function (element) {
return encodeURIComponent(element);
}).join(',')
);
}
start_date = new Date((new Date().getTime()) - 600000).toISOString().replace(/\.\d+/, '');
end_date = new Date().toISOString().replace(/\.\d+/, '');
for (var j in prepared_metrics) {
try {
metrics_data = AzureDB.request('https://management.azure.com' + AzureDB.params.resource_id + '/providers/Microsoft.Insights/metrics?metricnames=' + prepared_metrics[j] + '&timespan=' + encodeURIComponent(start_date) + '/' + encodeURIComponent(end_date) + '&api-version=2021-05-01');
if ('value' in metrics_data && Array.isArray(metrics_data.value) && metrics_data.value.length > 0) {
for (k in metrics_data.value) {
if ('name' in metrics_data.value[k] && typeof metrics_data.value[k].name === 'object' && 'value' in metrics_data.value[k].name && typeof metrics_data.value[k].name.value === 'string' && 'timeseries' in metrics_data.value[k] && Array.isArray(metrics_data.value[k].timeseries) && metrics_data.value[k].timeseries.length > 0 && 'data' in metrics_data.value[k].timeseries[0] && Array.isArray(metrics_data.value[k].timeseries[0].data) && metrics_data.value[k].timeseries[0].data.length > 0) {
if (metrics_data.value[k].name.value === 'disk_queue_depth' ||
metrics_data.value[k].name.value === 'read_throughput' ||
metrics_data.value[k].name.value === 'write_throughput' ||
metrics_data.value[k].name.value === 'read_iops' ||
metrics_data.value[k].name.value === 'write_iops') {
data.metrics[metrics_data.value[k].name.value.replace(/(\s|\/)+/g, '')] = metrics_data.value[k].timeseries[0].data[metrics_data.value[k].timeseries[0].data.length - 6];
} else {
data.metrics[metrics_data.value[k].name.value.replace(/(\s|\/)+/g, '')] = metrics_data.value[k].timeseries[0].data[metrics_data.value[k].timeseries[0].data.length - 1];
}
}
}
}
}
catch (error) {
data.errors[prepared_metrics[j]] = error.toString();
}
}
}
}
catch (error) {
data.errors.params = error.toString();
}
if (Object.keys(data.errors).length !== 0) {
errors = 'Failed to receive data:';
for (var error in data.errors) {
errors += '\n' + error + ' : ' + data.errors[error];
}
data.errors = errors;
}
else {
data.errors = '';
}
return JSON.stringify(data);
description: 'The result of API requests is expressed in the JSON.'
timeout: '{$AZURE.DATA.TIMEOUT}'
parameters:
- name: app_id
value: '{$AZURE.APP.ID}'
- name: password
value: '{$AZURE.PASSWORD}'
- name: tenant_id
value: '{$AZURE.TENANT.ID}'
- name: subscription_id
value: '{$AZURE.SUBSCRIPTION.ID}'
- name: resource_id
value: '{$AZURE.RESOURCE.ID}'
- name: proxy
value: '{$AZURE.PROXY}'
tags:
- tag: component
value: raw
- uuid: 9fc7a458995d4ac8a4c1d8550177471d
name: 'Azure PostgreSQL: Data disk read Bps'
type: DEPENDENT
key: azure.db.pgsql.disk.bps.read
delay: '0'
history: 7d
value_type: FLOAT
units: Bps
description: 'Bytes read per second from the data disk during the monitoring period.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.read_throughput.average
error_handler: DISCARD_VALUE
master_item:
key: azure.db.pgsql.data.get
tags:
- tag: component
value: storage
- uuid: 46c500b44164430c952be3a1b2008fb8
name: 'Azure PostgreSQL: Data disk write Bps'
type: DEPENDENT
key: azure.db.pgsql.disk.bps.write
delay: '0'
history: 7d
value_type: FLOAT
units: Bps
description: 'Bytes written per second to the data disk during the monitoring period.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.write_throughput.average
error_handler: DISCARD_VALUE
master_item:
key: azure.db.pgsql.data.get
tags:
- tag: component
value: storage
- uuid: b8812461d49a4ff5a2177c2990969c38
name: 'Azure PostgreSQL: Data disk queue depth'
type: DEPENDENT
key: azure.db.pgsql.disk.queue.depth
delay: '0'
history: 7d
value_type: FLOAT
description: 'The number of outstanding I/O operations to the data disk.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.disk_queue_depth.average
error_handler: DISCARD_VALUE
master_item:
key: azure.db.pgsql.data.get
tags:
- tag: component
value: storage
- uuid: 10dd8ed658d8442ca39ac1decf9bc2f8
name: 'Azure PostgreSQL: Data disk IOPS'
type: DEPENDENT
key: azure.db.pgsql.iops
delay: '0'
history: 7d
value_type: FLOAT
units: '!ops'
description: 'I/O operations per second.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.iops.average
master_item:
key: azure.db.pgsql.data.get
tags:
- tag: component
value: storage
- uuid: dee65b110a4842ccba8e74eefc097304
name: 'Azure PostgreSQL: Data disk read IOPS'
type: DEPENDENT
key: azure.db.pgsql.iops.read
delay: '0'
history: 7d
value_type: FLOAT
units: '!ops'
description: 'The number of the data disk I/O read operations per second.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.read_iops.average
error_handler: DISCARD_VALUE
master_item:
key: azure.db.pgsql.data.get
tags:
- tag: component
value: storage
- uuid: 805dfa040c0a4700acac4b5b1f8a4d11
name: 'Azure PostgreSQL: Data disk write IOPS'
type: DEPENDENT
key: azure.db.pgsql.iops.write
delay: '0'
history: 7d
value_type: FLOAT
units: '!ops'
description: 'The number of the data disk I/O write operations per second.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.write_iops.average
error_handler: DISCARD_VALUE
master_item:
key: azure.db.pgsql.data.get
tags:
- tag: component
value: storage
- uuid: d1d909c2dd0d42649094ec8339e08881
name: 'Azure PostgreSQL: Memory utilization'
type: DEPENDENT
key: azure.db.pgsql.memory.percentage
delay: '0'
history: 7d
value_type: FLOAT
units: '%'
description: 'The memory percent of a host.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.memory_percent.average
master_item:
key: azure.db.pgsql.data.get
tags:
- tag: component
value: memory
triggers:
- uuid: aac52a89709044ed987a365a1d5af17b
expression: 'min(/Azure PostgreSQL Flexible Server by HTTP/azure.db.pgsql.memory.percentage,5m)>{$AZURE.DB.MEMORY.UTIL.CRIT}'
name: 'Azure PostgreSQL: High memory utilization'
opdata: 'Current utilization: {ITEM.LASTVALUE1}'
priority: AVERAGE
description: 'The system is running out of free memory.'
tags:
- tag: scope
value: performance
- uuid: 040898e15a26455a9992c603ca2d45df
name: 'Azure PostgreSQL: Network out'
type: DEPENDENT
key: azure.db.pgsql.network.egress
delay: '0'
history: 7d
value_type: FLOAT
units: bps
description: 'The network outbound traffic across the active connections.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.network_bytes_egress.total
- type: MULTIPLIER
parameters:
- '0.1333'
master_item:
key: azure.db.pgsql.data.get
tags:
- tag: component
value: network
- uuid: 8e398d8b33444a148760ec33622755a6
name: 'Azure PostgreSQL: Network in'
type: DEPENDENT
key: azure.db.pgsql.network.ingress
delay: '0'
history: 7d
value_type: FLOAT
units: bps
description: 'The network inbound traffic across the active connections.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.network_bytes_ingress.total
- type: MULTIPLIER
parameters:
- '0.1333'
master_item:
key: azure.db.pgsql.data.get
tags:
- tag: component
value: network
- uuid: ebebf8b3a2884576abb250fdc2385c6f
name: 'Azure PostgreSQL: Backup storage used'
type: DEPENDENT
key: azure.db.pgsql.storage.backup.used
delay: '0'
history: 7d
value_type: FLOAT
units: B
description: 'Used backup storage, expressed in bytes.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.backup_storage_used.average
error_handler: DISCARD_VALUE
master_item:
key: azure.db.pgsql.data.get
tags:
- tag: component
value: storage
- uuid: 9bbfba89a1834798b71260536fedab55
name: 'Azure PostgreSQL: Storage free'
type: DEPENDENT
key: azure.db.pgsql.storage.free
delay: '0'
history: 7d
value_type: FLOAT
units: B
description: 'Free storage space, expressed in bytes.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.storage_free.average
master_item:
key: azure.db.pgsql.data.get
tags:
- tag: component
value: storage
- uuid: d9d97e728d1741568fce925c0fca33a8
name: 'Azure PostgreSQL: Storage percent'
type: DEPENDENT
key: azure.db.pgsql.storage.percent
delay: '0'
history: 7d
value_type: FLOAT
units: '%'
description: 'The storage utilization, expressed in %.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.storage_percent.average
master_item:
key: azure.db.pgsql.data.get
tags:
- tag: component
value: storage
triggers:
- uuid: de3142bed28340d9abe518cd3967b024
expression: 'last(/Azure PostgreSQL Flexible Server by HTTP/azure.db.pgsql.storage.percent)>{$AZURE.DB.STORAGE.PUSED.CRIT}'
name: 'Azure PostgreSQL: Storage space is critically low'
opdata: 'Current utilization: {ITEM.LASTVALUE1}'
priority: AVERAGE
description: 'Critical utilization of the storage space.'
tags:
- tag: scope
value: capacity
- uuid: e948600affaa4ff4a0ab4e50f4858c0a
expression: 'last(/Azure PostgreSQL Flexible Server by HTTP/azure.db.pgsql.storage.percent)>{$AZURE.DB.STORAGE.PUSED.WARN}'
name: 'Azure PostgreSQL: Storage space is low'
opdata: 'Current utilization: {ITEM.LASTVALUE1}'
priority: WARNING
description: 'High utilization of the storage space.'
tags:
- tag: scope
value: capacity
- uuid: 4dae6c2c1dbf4492a73fd1834cae6aad
name: 'Azure PostgreSQL: Transaction log storage used'
type: DEPENDENT
key: azure.db.pgsql.storage.txlogs.used
delay: '0'
history: 7d
value_type: FLOAT
units: B
description: 'The storage space used by a transaction log, expressed in bytes.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.txlogs_storage_used.average
master_item:
key: azure.db.pgsql.data.get
tags:
- tag: component
value: storage
- uuid: 7a85b5223ec44ff8bc996c9df1673611
name: 'Azure PostgreSQL: Storage used'
type: DEPENDENT
key: azure.db.pgsql.storage.used
delay: '0'
history: 7d
value_type: FLOAT
units: B
description: 'Used storage space, expressed in bytes.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.storage_used.average
master_item:
key: azure.db.pgsql.data.get
tags:
- tag: component
value: storage
- uuid: 6df77ed1d4614ca793df56dbc70d821c
name: 'Azure PostgreSQL: Maximum used transaction IDs'
type: DEPENDENT
key: azure.db.pgsql.txid.used.max
delay: '0'
history: 7d
value_type: FLOAT
description: 'The maximum number of used transaction IDs.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.maximum_used_transactionIDs.average
master_item:
key: azure.db.pgsql.data.get
tags:
- tag: component
value: storage
tags:
- tag: class
value: software
- tag: target
value: azure
- tag: target
value: postgresql
macros:
- macro: '{$AZURE.APP.ID}'
description: 'The App ID of Microsoft Azure.'
- macro: '{$AZURE.DATA.TIMEOUT}'
value: 15s
description: 'A response timeout for an API.'
- macro: '{$AZURE.DB.CPU.UTIL.CRIT}'
value: '90'
description: 'The critical threshold of CPU utilization, expressed in %.'
- macro: '{$AZURE.DB.MEMORY.UTIL.CRIT}'
value: '90'
description: 'The critical threshold of memory utilization, expressed in %.'
- macro: '{$AZURE.DB.STORAGE.PUSED.CRIT}'
value: '90'
description: 'The critical threshold of storage utilization, expressed in %.'
- macro: '{$AZURE.DB.STORAGE.PUSED.WARN}'
value: '80'
description: 'The warning threshold of storage utilization, expressed in %.'
- macro: '{$AZURE.PASSWORD}'
type: SECRET_TEXT
description: 'Microsoft Azure password.'
- macro: '{$AZURE.PROXY}'
description: 'Sets HTTP proxy value. If this macro is empty then no proxy is used.'
- macro: '{$AZURE.RESOURCE.ID}'
description: 'Microsoft Azure PostgreSQL server ID.'
- macro: '{$AZURE.SUBSCRIPTION.ID}'
description: 'Microsoft Azure subscription ID.'
- macro: '{$AZURE.TENANT.ID}'
description: 'Microsoft Azure tenant ID.'
valuemaps:
- uuid: f208cf6141c44659a2c6904ec4cd7ac3
name: 'Azure resource health state'
mappings:
- value: '0'
newvalue: Available
- value: '1'
newvalue: Degraded
- value: '2'
newvalue: Unavailable
- value: '3'
newvalue: Unknown
- uuid: d023e2cd326c486f908e3e361d1fe157
template: 'Azure PostgreSQL Single Server by HTTP'
name: 'Azure PostgreSQL Single Server by HTTP'
description: |
This template is designed to monitor Microsoft Azure PostgreSQL servers by HTTP.
It works without any external scripts and uses the script item.
Setup:
1. Create an Azure service principal via the Azure command-line interface (Azure CLI) for your subscription.
`az ad sp create-for-rbac --name zabbix --role reader --scope /subscriptions/<subscription_id>`
See https://docs.microsoft.com/en-us/cli/azure/create-an-azure-service-principal-azure-cli for more details.
2. Link the template to a host.
3. Configure the macros: {$AZURE.APP.ID}, {$AZURE.PASSWORD}, {$AZURE.TENANT.ID}, {$AZURE.SUBSCRIPTION.ID}, and {$AZURE.RESOURCE.ID}.
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/Cloud
items:
- uuid: 9eb43a5ffb0d4e07be8d1fccfdecd2aa
name: 'Azure PostgreSQL: Availability status detailed'
type: DEPENDENT
key: azure.db.pgsql.availability.details
delay: '0'
history: 7d
trends: '0'
value_type: CHAR
description: 'The summary description of the availability status.'
preprocessing:
- type: JSONPATH
parameters:
- $.health.summary
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 1h
master_item:
key: azure.db.pgsql.data.get
tags:
- tag: component
value: health
- uuid: df4c66646f864f79b5f5e9f71dbefe82
name: 'Azure PostgreSQL: Availability state'
type: DEPENDENT
key: azure.db.pgsql.availability.state
delay: '0'
history: 7d
description: 'The availability status of the resource.'
valuemap:
name: 'Azure resource health state'
preprocessing:
- type: JSONPATH
parameters:
- $.health.availabilityState
error_handler: CUSTOM_VALUE
error_handler_params: '3'
- type: STR_REPLACE
parameters:
- Available
- '0'
- type: STR_REPLACE
parameters:
- Degraded
- '1'
- type: STR_REPLACE
parameters:
- Unavailable
- '2'
- type: STR_REPLACE
parameters:
- Unknown
- '3'
- type: IN_RANGE
parameters:
- '0'
- '3'
error_handler: CUSTOM_VALUE
error_handler_params: '3'
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 1h
master_item:
key: azure.db.pgsql.data.get
tags:
- tag: component
value: health
triggers:
- uuid: 699ca12c916746b1bf1e121261771cc3
expression: 'last(/Azure PostgreSQL Single Server by HTTP/azure.db.pgsql.availability.state)=1'
name: 'Azure PostgreSQL: PostgreSQL server is degraded'
opdata: '{ITEM.LASTVALUE1}'
priority: AVERAGE
description: 'The resource is in degraded state.'
tags:
- tag: scope
value: availability
- uuid: 14e45ba0bc26409a89d92edfda152947
expression: 'last(/Azure PostgreSQL Single Server by HTTP/azure.db.pgsql.availability.state)=3'
name: 'Azure PostgreSQL: PostgreSQL server is in unknown state'
opdata: '{ITEM.LASTVALUE1}'
priority: WARNING
description: 'The resource state is unknown.'
tags:
- tag: scope
value: availability
- uuid: 4dc9113f8a914ac098d8736dba5aed4a
expression: 'last(/Azure PostgreSQL Single Server by HTTP/azure.db.pgsql.availability.state)=2'
name: 'Azure PostgreSQL: PostgreSQL server is unavailable'
opdata: '{ITEM.LASTVALUE1}'
priority: HIGH
description: 'The resource state is unavailable.'
tags:
- tag: scope
value: availability
- uuid: 3d0d3e1fe77740e4bd7b720368707214
name: 'Azure PostgreSQL: Connections active'
type: DEPENDENT
key: azure.db.pgsql.connections.active
delay: '0'
history: 7d
value_type: FLOAT
description: 'The count of active connections.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.active_connections.average
master_item:
key: azure.db.pgsql.data.get
tags:
- tag: component
value: network
- uuid: 353a6ba543a84b32b16a5809ae63b4e1
name: 'Azure PostgreSQL: Connections failed'
type: DEPENDENT
key: azure.db.pgsql.connections.failed
delay: '0'
history: 7d
value_type: FLOAT
description: 'The count of failed connections.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.connections_failed.total
error_handler: DISCARD_VALUE
master_item:
key: azure.db.pgsql.data.get
tags:
- tag: component
value: network
- uuid: 537330b2372b434ebcea8a77a809c2f3
name: 'Azure PostgreSQL: Percentage CPU'
type: DEPENDENT
key: azure.db.pgsql.cpu.percentage
delay: '0'
history: 7d
value_type: FLOAT
units: '%'
description: 'The CPU percent of a host.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.cpu_percent.average
master_item:
key: azure.db.pgsql.data.get
tags:
- tag: component
value: cpu
triggers:
- uuid: 33bd2ef88ad3468b9f0b2b1358cc7448
expression: 'min(/Azure PostgreSQL Single Server by HTTP/azure.db.pgsql.cpu.percentage,5m)>{$AZURE.DB.CPU.UTIL.CRIT}'
name: 'Azure PostgreSQL: High CPU utilization'
opdata: 'Current utilization: {ITEM.LASTVALUE1}'
priority: HIGH
description: 'The CPU utilization is too high. The system might be slow to respond.'
tags:
- tag: scope
value: performance
- uuid: 5b132ff050c94daa92b252529a52c535
name: 'Azure PostgreSQL: Get errors'
type: DEPENDENT
key: azure.db.pgsql.data.errors
delay: '0'
history: 7d
trends: '0'
value_type: TEXT
description: 'A list of errors from API requests.'
preprocessing:
- type: JSONPATH
parameters:
- $.errors
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 1h
master_item:
key: azure.db.pgsql.data.get
tags:
- tag: component
value: raw
triggers:
- uuid: dd3d0be997204f8b9968ef5839fb7a9b
expression: 'length(last(/Azure PostgreSQL Single Server by HTTP/azure.db.pgsql.data.errors))>0'
name: 'Azure PostgreSQL: There are errors in requests to API'
opdata: '{ITEM.LASTVALUE1}'
priority: AVERAGE
description: 'Zabbix has received errors in response to API requests.'
tags:
- tag: scope
value: availability
- uuid: e47d863822e64e6292bfa3e684bc2839
name: 'Azure PostgreSQL: Get data'
type: SCRIPT
key: azure.db.pgsql.data.get
history: '0'
trends: '0'
value_type: TEXT
params: |
var AzureDB = {
params: {},
token: null,
setParams: function (params) {
['app_id', 'password', 'tenant_id', 'subscription_id', 'resource_id'].forEach(function (field) {
if (typeof params !== 'object' || typeof params[field] === 'undefined' || params[field] === '') {
throw 'Required param is not set: ' + field + '.';
}
});
AzureDB.params = params;
},
request: function (url, data) {
if (typeof data === 'undefined' || data === null) {
data = '';
}
var response, request = new HttpRequest();
if (typeof AzureDB.params.proxy !== 'undefined' && AzureDB.params.proxy !== '') {
request.setProxy(AzureDB.params.proxy);
}
if (AzureDB.token) {
request.addHeader('Accept: application/json');
request.addHeader('Authorization: Bearer ' + AzureDB.token);
}
Zabbix.log(4, '[ Azure ] Sending request: ' + url);
if (data !== '') {
request.addHeader('Content-Type: application/x-www-form-urlencoded');
response = request.post(url, data);
}
else {
response = request.get(url);
}
Zabbix.log(4, '[ Azure ] Received response with status code ' + request.getStatus() + ': ' + response);
if (request.getStatus() !== 200 || response === null) {
throw 'Request failed with status code ' + request.getStatus() + ': ' + response;
}
try {
return JSON.parse(response);
}
catch (error) {
throw 'Failed to parse response received from API.';
}
}
};
var metrics = [
'cpu_percent',
'memory_percent',
'io_consumption_percent',
'storage_percent',
'storage_used',
'storage_limit',
'serverlog_storage_percent',
'serverlog_storage_usage',
'serverlog_storage_limit',
'active_connections',
'connections_failed',
'backup_storage_used',
'network_bytes_egress',
'network_bytes_ingress',
'pg_replica_log_delay_in_seconds',
'pg_replica_log_delay_in_bytes'
],
prepared_metrics = [],
data = {};
data['errors'] = {};
data['metrics'] = {};
try {
AzureDB.setParams(JSON.parse(value));
try {
result = AzureDB.request(
'https://login.microsoftonline.com/' + encodeURIComponent(AzureDB.params.tenant_id) + '/oauth2/token',
'grant_type=client_credentials&resource=' + encodeURIComponent('https://management.azure.com/') + '&client_id=' + encodeURIComponent(AzureDB.params.app_id) + '&client_secret=' + encodeURIComponent(AzureDB.params.password)
);
if ('access_token' in result) {
AzureDB.token = result['access_token'];
} else {
throw 'Auth response does not contain access token.';
}
}
catch (error) {
data.errors.auth = error.toString();
}
if (!('auth' in data.errors)) {
try {
health = AzureDB.request('https://management.azure.com' + AzureDB.params.resource_id + '/providers/Microsoft.ResourceHealth/availabilityStatuses?api-version=2020-05-01');
if ('value' in health && Array.isArray(health.value) && health.value.length > 0 && 'properties' in health.value[0] && typeof health.value[0].properties === 'object') {
data.health = health.value[0].properties;
}
}
catch (error) {
data.errors.health = error.toString();
}
for (var i = 0; i < metrics.length; i += 20) {
var chunk = metrics.slice(i, i + 20);
prepared_metrics.push(
chunk.map(function (element) {
return encodeURIComponent(element);
}).join(',')
);
}
start_date = new Date((new Date().getTime()) - 300000).toISOString().replace(/\.\d+/, '');
end_date = new Date().toISOString().replace(/\.\d+/, '');
for (var j in prepared_metrics) {
try {
metrics_data = AzureDB.request('https://management.azure.com' + AzureDB.params.resource_id + '/providers/Microsoft.Insights/metrics?metricnames=' + prepared_metrics[j] + '&timespan=' + encodeURIComponent(start_date) + '/' + encodeURIComponent(end_date) + '&api-version=2021-05-01');
if ('value' in metrics_data && Array.isArray(metrics_data.value) && metrics_data.value.length > 0) {
for (k in metrics_data.value) {
if ('name' in metrics_data.value[k] && typeof metrics_data.value[k].name === 'object' && 'value' in metrics_data.value[k].name && typeof metrics_data.value[k].name.value === 'string' && 'timeseries' in metrics_data.value[k] && Array.isArray(metrics_data.value[k].timeseries) && metrics_data.value[k].timeseries.length > 0 && 'data' in metrics_data.value[k].timeseries[0] && Array.isArray(metrics_data.value[k].timeseries[0].data) && metrics_data.value[k].timeseries[0].data.length > 0) {
data.metrics[metrics_data.value[k].name.value.replace(/(\s|\/)+/g, '')] = metrics_data.value[k].timeseries[0].data[metrics_data.value[k].timeseries[0].data.length - 1];
}
}
}
}
catch (error) {
data.errors[prepared_metrics[j]] = error.toString();
}
}
}
}
catch (error) {
data.errors.params = error.toString();
}
if (Object.keys(data.errors).length !== 0) {
errors = 'Failed to receive data:';
for (var error in data.errors) {
errors += '\n' + error + ' : ' + data.errors[error];
}
data.errors = errors;
}
else {
data.errors = '';
}
return JSON.stringify(data);
description: 'The result of API requests is expressed in the JSON.'
timeout: '{$AZURE.DATA.TIMEOUT}'
parameters:
- name: app_id
value: '{$AZURE.APP.ID}'
- name: password
value: '{$AZURE.PASSWORD}'
- name: tenant_id
value: '{$AZURE.TENANT.ID}'
- name: subscription_id
value: '{$AZURE.SUBSCRIPTION.ID}'
- name: resource_id
value: '{$AZURE.RESOURCE.ID}'
- name: proxy
value: '{$AZURE.PROXY}'
tags:
- tag: component
value: raw
- uuid: 9eade85c49bc462aab33b03e37581d87
name: 'Azure PostgreSQL: IO consumption percent'
type: DEPENDENT
key: azure.db.pgsql.io.consumption.percent
delay: '0'
history: 7d
value_type: FLOAT
units: '%'
description: 'The consumption percent of I/O.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.io_consumption_percent.average
master_item:
key: azure.db.pgsql.data.get
tags:
- tag: component
value: operations
- uuid: e2ee4882b08f45788e6abb698265810e
name: 'Azure PostgreSQL: Memory utilization'
type: DEPENDENT
key: azure.db.pgsql.memory.percentage
delay: '0'
history: 7d
value_type: FLOAT
units: '%'
description: 'The memory percent of a host.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.memory_percent.average
master_item:
key: azure.db.pgsql.data.get
tags:
- tag: component
value: memory
triggers:
- uuid: 3119f21167a546369c05d31cda2e0147
expression: 'min(/Azure PostgreSQL Single Server by HTTP/azure.db.pgsql.memory.percentage,5m)>{$AZURE.DB.MEMORY.UTIL.CRIT}'
name: 'Azure PostgreSQL: High memory utilization'
opdata: 'Current utilization: {ITEM.LASTVALUE1}'
priority: AVERAGE
description: 'The system is running out of free memory.'
tags:
- tag: scope
value: performance
- uuid: f81eeb98d5e942f296c360ff71e8bf8d
name: 'Azure PostgreSQL: Network out'
type: DEPENDENT
key: azure.db.pgsql.network.egress
delay: '0'
history: 7d
value_type: FLOAT
units: bps
description: 'The network outbound traffic across the active connections.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.network_bytes_egress.total
error_handler: DISCARD_VALUE
- type: MULTIPLIER
parameters:
- '0.1333'
master_item:
key: azure.db.pgsql.data.get
tags:
- tag: component
value: network
- uuid: 51f7e35042d04ddb88c7703d1b015d3b
name: 'Azure PostgreSQL: Network in'
type: DEPENDENT
key: azure.db.pgsql.network.ingress
delay: '0'
history: 7d
value_type: FLOAT
units: bps
description: 'The network inbound traffic across the active connections.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.network_bytes_ingress.total
error_handler: DISCARD_VALUE
- type: MULTIPLIER
parameters:
- '0.1333'
master_item:
key: azure.db.pgsql.data.get
tags:
- tag: component
value: network
- uuid: 1db9e470b527476fae1d26d4b67f855b
name: 'Azure PostgreSQL: Replication lag'
type: DEPENDENT
key: azure.db.pgsql.replica.log.delay
delay: '0'
history: 7d
value_type: FLOAT
units: s
description: 'The replication lag, expressed in seconds.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.pg_replica_log_delay_in_seconds.maximum
error_handler: DISCARD_VALUE
master_item:
key: azure.db.pgsql.data.get
tags:
- tag: component
value: replication
- uuid: 6cdfda8f9e6640f8a8536f88729d75d6
name: 'Azure PostgreSQL: Max lag across replicas in bytes'
type: DEPENDENT
key: azure.db.pgsql.replica.log.delay.bytes
delay: '0'
history: 7d
value_type: FLOAT
units: B
description: 'Lag for the most lagging replica, expressed in bytes.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.pg_replica_log_delay_in_bytes.maximum
error_handler: DISCARD_VALUE
master_item:
key: azure.db.pgsql.data.get
tags:
- tag: component
value: replication
- uuid: 6b06fb0e008640839dc3cda5bcc3f91a
name: 'Azure PostgreSQL: Backup storage used'
type: DEPENDENT
key: azure.db.pgsql.storage.backup.used
delay: '0'
history: 7d
value_type: FLOAT
units: B
description: 'Used backup storage, expressed in bytes.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.backup_storage_used.average
master_item:
key: azure.db.pgsql.data.get
tags:
- tag: component
value: storage
- uuid: b8d5ac0b049a4d73b2f35f59c7e7609c
name: 'Azure PostgreSQL: Storage limit'
type: DEPENDENT
key: azure.db.pgsql.storage.limit
delay: '0'
history: 7d
value_type: FLOAT
units: B
description: 'The storage limit, expressed in bytes.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.storage_limit.maximum
master_item:
key: azure.db.pgsql.data.get
tags:
- tag: component
value: storage
- uuid: 750b4d3438614cc992694136d309c3cb
name: 'Azure PostgreSQL: Storage percent'
type: DEPENDENT
key: azure.db.pgsql.storage.percent
delay: '0'
history: 7d
value_type: FLOAT
units: '%'
description: 'The storage utilization, expressed in %.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.storage_percent.average
master_item:
key: azure.db.pgsql.data.get
tags:
- tag: component
value: storage
triggers:
- uuid: 6538d2c8ed774feb951204308f1458ce
expression: 'last(/Azure PostgreSQL Single Server by HTTP/azure.db.pgsql.storage.percent)>{$AZURE.DB.STORAGE.PUSED.CRIT}'
name: 'Azure PostgreSQL: Storage space is critically low'
opdata: 'Current utilization: {ITEM.LASTVALUE1}'
priority: AVERAGE
description: 'Critical utilization of the storage space.'
tags:
- tag: scope
value: capacity
- uuid: 7f7a004cfc2a492092dd74c475888e8b
expression: 'last(/Azure PostgreSQL Single Server by HTTP/azure.db.pgsql.storage.percent)>{$AZURE.DB.STORAGE.PUSED.WARN}'
name: 'Azure PostgreSQL: Storage space is low'
opdata: 'Current utilization: {ITEM.LASTVALUE1}'
priority: WARNING
description: 'High utilization of the storage space.'
tags:
- tag: scope
value: capacity
- uuid: 399ef67426494a5cb7a820d056dfd4d5
name: 'Azure PostgreSQL: Server log storage limit'
type: DEPENDENT
key: azure.db.pgsql.storage.server.log.limit
delay: '0'
history: 7d
value_type: FLOAT
units: B
description: 'The storage limit of a server log, expressed in bytes.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.serverlog_storage_limit.maximum
master_item:
key: azure.db.pgsql.data.get
tags:
- tag: component
value: storage
- uuid: ef6890330ebe4fe09f46b0d2f6d3f827
name: 'Azure PostgreSQL: Server log storage percent'
type: DEPENDENT
key: azure.db.pgsql.storage.server.log.percent
delay: '0'
history: 7d
value_type: FLOAT
units: '%'
description: 'The storage utilization by a server log, expressed in %.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.serverlog_storage_percent.average
master_item:
key: azure.db.pgsql.data.get
tags:
- tag: component
value: storage
- uuid: 36bd10a959964083ae47349dd83ec695
name: 'Azure PostgreSQL: Server log storage used'
type: DEPENDENT
key: azure.db.pgsql.storage.server.log.used
delay: '0'
history: 7d
value_type: FLOAT
units: B
description: 'The storage space used by a server log, expressed in bytes.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.serverlog_storage_usage.average
master_item:
key: azure.db.pgsql.data.get
tags:
- tag: component
value: storage
- uuid: dcbb87d442a04938b23e68f739f1e36f
name: 'Azure PostgreSQL: Storage used'
type: DEPENDENT
key: azure.db.pgsql.storage.used
delay: '0'
history: 7d
value_type: FLOAT
units: B
description: 'Used storage space, expressed in bytes.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.storage_used.average
master_item:
key: azure.db.pgsql.data.get
tags:
- tag: component
value: storage
tags:
- tag: class
value: software
- tag: target
value: azure
- tag: target
value: postgresql
macros:
- macro: '{$AZURE.APP.ID}'
description: 'The App ID of Microsoft Azure.'
- macro: '{$AZURE.DATA.TIMEOUT}'
value: 15s
description: 'A response timeout for an API.'
- macro: '{$AZURE.DB.CPU.UTIL.CRIT}'
value: '90'
description: 'The critical threshold of CPU utilization, expressed in %.'
- macro: '{$AZURE.DB.MEMORY.UTIL.CRIT}'
value: '90'
description: 'The critical threshold of memory utilization, expressed in %.'
- macro: '{$AZURE.DB.STORAGE.PUSED.CRIT}'
value: '90'
description: 'The critical threshold of storage utilization, expressed in %.'
- macro: '{$AZURE.DB.STORAGE.PUSED.WARN}'
value: '80'
description: 'The warning threshold of storage utilization, expressed in %.'
- macro: '{$AZURE.PASSWORD}'
type: SECRET_TEXT
description: 'Microsoft Azure password.'
- macro: '{$AZURE.PROXY}'
description: 'Sets HTTP proxy value. If this macro is empty then no proxy is used.'
- macro: '{$AZURE.RESOURCE.ID}'
description: 'Microsoft Azure PostgreSQL server ID.'
- macro: '{$AZURE.SUBSCRIPTION.ID}'
description: 'Microsoft Azure subscription ID.'
- macro: '{$AZURE.TENANT.ID}'
description: 'Microsoft Azure tenant ID.'
valuemaps:
- uuid: 61fc206aaae04abda4012e031f0e27ac
name: 'Azure resource health state'
mappings:
- value: '0'
newvalue: Available
- value: '1'
newvalue: Degraded
- value: '2'
newvalue: Unavailable
- value: '3'
newvalue: Unknown
- uuid: 820fa4a1565c43e4aac07a691a5bface
template: 'Azure Virtual Machine by HTTP'
name: 'Azure Virtual Machine by HTTP'
description: |
This template is designed to monitor Microsoft Azure Virtual Machines (VMs) by HTTP.
It works without any external scripts and uses the script item.
Setup:
1. Create an Azure service principal via the Azure command-line interface (Azure CLI) for your subscription.
`az ad sp create-for-rbac --name zabbix --role reader --scope /subscriptions/<subscription_id>`
See https://docs.microsoft.com/en-us/cli/azure/create-an-azure-service-principal-azure-cli for more details.
2. Link the template to a host.
3. Configure the macros: {$AZURE.APP.ID}, {$AZURE.PASSWORD}, {$AZURE.TENANT.ID}, {$AZURE.SUBSCRIPTION.ID}, and {$AZURE.RESOURCE.ID}.
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/Cloud
items:
- uuid: c299999d69904340acd44fead6c7672c
name: 'Azure: Availability status detailed'
type: DEPENDENT
key: azure.vm.availability.details
delay: '0'
history: 7d
trends: '0'
value_type: CHAR
description: 'The summary description of availability status.'
preprocessing:
- type: JSONPATH
parameters:
- $.health.summary
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 1h
master_item:
key: azure.vm.data.get
tags:
- tag: component
value: health
- uuid: 25e2af44bfbf4e9083ce493d85232088
name: 'Azure: Availability state'
type: DEPENDENT
key: azure.vm.availability.state
delay: '0'
history: 7d
description: 'The availability status of the resource.'
valuemap:
name: 'Azure resource health state'
preprocessing:
- type: JSONPATH
parameters:
- $.health.availabilityState
error_handler: CUSTOM_VALUE
error_handler_params: '3'
- type: STR_REPLACE
parameters:
- Available
- '0'
- type: STR_REPLACE
parameters:
- Degraded
- '1'
- type: STR_REPLACE
parameters:
- Unavailable
- '2'
- type: STR_REPLACE
parameters:
- Unknown
- '3'
- type: IN_RANGE
parameters:
- '0'
- '3'
error_handler: CUSTOM_VALUE
error_handler_params: '3'
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 1h
master_item:
key: azure.vm.data.get
tags:
- tag: component
value: health
triggers:
- uuid: c0170d8a09ae460da923fe773b2b0bd0
expression: 'last(/Azure Virtual Machine by HTTP/azure.vm.availability.state)=1'
name: 'Azure: Virtual machine is degraded'
opdata: '{ITEM.LASTVALUE1}'
priority: AVERAGE
description: 'The resource is in degraded state.'
tags:
- tag: scope
value: availability
- uuid: e1b85765b83445ebbf15f02d782b9858
expression: 'last(/Azure Virtual Machine by HTTP/azure.vm.availability.state)=3'
name: 'Azure: Virtual machine is in unknown state'
opdata: '{ITEM.LASTVALUE1}'
priority: WARNING
description: 'The resource state is unknown.'
tags:
- tag: scope
value: availability
- uuid: b3d764ff735e44f8806cc4d29090719e
expression: 'last(/Azure Virtual Machine by HTTP/azure.vm.availability.state)=2'
name: 'Azure: Virtual machine is unavailable'
opdata: '{ITEM.LASTVALUE1}'
priority: HIGH
description: 'The resource state is unavailable.'
tags:
- tag: scope
value: availability
- uuid: a93308573303437487d151de340fcaed
name: 'Azure: VM cached bandwidth consumed percentage'
type: DEPENDENT
key: azure.vm.cached.bandwidth.consumed.percentage
delay: '0'
history: 7d
units: '%'
description: 'The percentage of the cached disk bandwidth consumed by the VM.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.VMCachedBandwidthConsumedPercentage.average
master_item:
key: azure.vm.data.get
tags:
- tag: component
value: storage
- uuid: 989dec26d97d44b6bd4a84fdbd37dec5
name: 'Azure: VM cached IOPS consumed percentage'
type: DEPENDENT
key: azure.vm.cached.iops.consumed.percentage
delay: '0'
history: 7d
units: '%'
description: 'The percentage of the cached disk IOPS consumed by the VM.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.VMCachedIOPSConsumedPercentage.average
master_item:
key: azure.vm.data.get
tags:
- tag: component
value: storage
- uuid: fb0641ca8f104cf1bebdced63cd6af16
name: 'Azure: CPU credits consumed'
type: DEPENDENT
key: azure.vm.cpu.credits.consumed
delay: '0'
history: 7d
value_type: FLOAT
description: 'The total number of credits consumed by the Virtual Machine. Only available on B-series burstable VMs.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.CPUCreditsConsumed.average
error_handler: DISCARD_VALUE
master_item:
key: azure.vm.data.get
tags:
- tag: component
value: cpu
- uuid: 963752cbaba046cab1f05b0cbcff3137
name: 'Azure: CPU credits remaining'
type: DEPENDENT
key: azure.vm.cpu.credits.remaining
delay: '0'
history: 7d
value_type: FLOAT
description: 'The total number of credits available to burst. Available only on B-series burstable VMs.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.CPUCreditsRemaining.average
error_handler: DISCARD_VALUE
master_item:
key: azure.vm.data.get
tags:
- tag: component
value: cpu
- uuid: 492edacf92544a95a5aa7b034efa7931
name: 'Azure: Percentage CPU'
type: DEPENDENT
key: azure.vm.cpu.percentage
delay: '0'
history: 7d
value_type: FLOAT
units: '%'
description: 'The percentage of allocated computing units that are currently in use by VMs.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.PercentageCPU.average
master_item:
key: azure.vm.data.get
tags:
- tag: component
value: cpu
triggers:
- uuid: 9e6d9394570641418b4291befb1e38e5
expression: 'min(/Azure Virtual Machine by HTTP/azure.vm.cpu.percentage,5m)>{$AZURE.VM.CPU.UTIL.CRIT}'
name: 'Azure: High CPU utilization'
opdata: '{ITEM.LASTVALUE1}'
priority: HIGH
description: 'The CPU utilization is too high. The system might be slow to respond.'
tags:
- tag: scope
value: performance
- uuid: 47cda13c203e4f1e9918eb73fd8afa20
name: 'Azure: Data disk bandwidth consumed percentage'
type: DEPENDENT
key: azure.vm.data.disk.bandwidth.consumed.percentage
delay: '0'
history: 7d
value_type: FLOAT
units: '%'
description: 'The percentage of the data disk''s bandwidth consumed per minute.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.DataDiskBandwidthConsumedPercentage.average
error_handler: DISCARD_VALUE
master_item:
key: azure.vm.data.get
tags:
- tag: component
value: storage
- uuid: 3121980d3319431691ed9e98d176430b
name: 'Azure: Data disk IOPS consumed percentage'
type: DEPENDENT
key: azure.vm.data.disk.iops.consumed.percentage
delay: '0'
history: 7d
value_type: FLOAT
units: '%'
description: 'The percentage of the data disk input/output (I/O) consumed per minute.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.DataDiskIOPSConsumedPercentage.average
error_handler: DISCARD_VALUE
master_item:
key: azure.vm.data.get
tags:
- tag: component
value: storage
- uuid: d0fb23206d564e1da746bff3369056c1
name: 'Azure: Data disk max burst bandwidth'
type: DEPENDENT
key: azure.vm.data.disk.max.bandwidth
delay: '0'
history: 7d
value_type: FLOAT
units: Bps
description: 'The maximum bytes per second throughput that the data disk can achieve with bursting.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.DataDiskMaxBurstBandwidth.average
error_handler: DISCARD_VALUE
master_item:
key: azure.vm.data.get
tags:
- tag: component
value: storage
- uuid: 6afcbb02c53243faa341670f155678e4
name: 'Azure: Data disk max burst IOPS'
type: DEPENDENT
key: azure.vm.data.disk.max.iops
delay: '0'
history: 7d
value_type: FLOAT
units: '!iops'
description: 'The maximum IOPS that the data disk can achieve with bursting.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.DataDiskMaxBurstIOPS.average
error_handler: DISCARD_VALUE
master_item:
key: azure.vm.data.get
tags:
- tag: component
value: storage
- uuid: b81f304bbc2a42df9b0550ecdc1ec6b7
name: 'Azure: Data disk queue depth'
type: DEPENDENT
key: azure.vm.data.disk.queue.depth
delay: '0'
history: 7d
value_type: FLOAT
description: 'The number of outstanding IO requests that are waiting to be performed on a disk.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.DataDiskQueueDepth.average
error_handler: DISCARD_VALUE
master_item:
key: azure.vm.data.get
tags:
- tag: component
value: storage
- uuid: 021d92f3075544319191d6f85a701222
name: 'Azure: Data disk read rate'
type: DEPENDENT
key: azure.vm.data.disk.read.bps
delay: '0'
history: 7d
value_type: FLOAT
units: Bps
description: 'Bytes per second read from a single disk during the monitoring period.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.DataDiskReadBytessec.average
error_handler: DISCARD_VALUE
master_item:
key: azure.vm.data.get
tags:
- tag: component
value: storage
- uuid: cc31283ab96548b7bdcc88e89dfae53c
name: 'Azure: Data disk read operations/sec'
type: DEPENDENT
key: azure.vm.data.disk.read.ops
delay: '0'
history: 7d
value_type: FLOAT
units: '!iops'
description: 'The read IOPS from a single disk during the monitoring period.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.DataDiskReadOperationsSec.average
error_handler: DISCARD_VALUE
master_item:
key: azure.vm.data.get
tags:
- tag: component
value: storage
- uuid: c61ad4af97c243cca75bbece40eea795
name: 'Azure: Data disk target bandwidth'
type: DEPENDENT
key: azure.vm.data.disk.target.bandwidth
delay: '0'
history: 7d
value_type: FLOAT
units: Bps
description: 'Baseline bytes per second throughput that the data disk can achieve without bursting.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.DataDiskTargetBandwidth.average
error_handler: DISCARD_VALUE
master_item:
key: azure.vm.data.get
tags:
- tag: component
value: storage
- uuid: 9370988456e74b889700ea5798d17092
name: 'Azure: Data disk target IOPS'
type: DEPENDENT
key: azure.vm.data.disk.target.iops
delay: '0'
history: 7d
value_type: FLOAT
units: '!iops'
description: 'The baseline IOPS that the data disk can achieve without bursting.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.DataDiskTargetIOPS.average
error_handler: DISCARD_VALUE
master_item:
key: azure.vm.data.get
tags:
- tag: component
value: storage
- uuid: 68c730e4904f402cb12fb71b45fede02
name: 'Azure: Data disk used burst BPS credits percentage'
type: DEPENDENT
key: azure.vm.data.disk.used.burst.bandwidth
delay: '0'
history: 7d
value_type: FLOAT
units: '%'
description: 'The percentage of the data disk burst bandwidth credits used so far.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.DataDiskUsedBurstBPSCreditsPercentage.average
error_handler: DISCARD_VALUE
master_item:
key: azure.vm.data.get
tags:
- tag: component
value: storage
- uuid: 731a82833bdd42c59c453adf8625e3b4
name: 'Azure: Data disk used burst IO credits percentage'
type: DEPENDENT
key: azure.vm.data.disk.used.burst.iops
delay: '0'
history: 7d
value_type: FLOAT
units: '%'
description: 'The percentage of the data disk burst I/O credits used so far.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.DataDiskUsedBurstIOCreditsPercentage.average
error_handler: DISCARD_VALUE
master_item:
key: azure.vm.data.get
tags:
- tag: component
value: storage
- uuid: b8712f8fd60a43f6b099d9eafed19945
name: 'Azure: Data disk write rate'
type: DEPENDENT
key: azure.vm.data.disk.write.bps
delay: '0'
history: 7d
value_type: FLOAT
units: Bps
description: 'Bytes per second written to a single disk during the monitoring period.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.DataDiskWriteBytessec.average
error_handler: DISCARD_VALUE
master_item:
key: azure.vm.data.get
tags:
- tag: component
value: storage
- uuid: 87794f5a502b4e2db91f820483e38fb3
name: 'Azure: Data disk write operations/sec'
type: DEPENDENT
key: azure.vm.data.disk.write.ops
delay: '0'
history: 7d
value_type: FLOAT
units: '!iops'
description: 'The write IOPS from a single disk during the monitoring period.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.DataDiskWriteOperationsSec.average
error_handler: DISCARD_VALUE
master_item:
key: azure.vm.data.get
tags:
- tag: component
value: storage
- uuid: e253c2a908944be1a033fc3df550d979
name: 'Azure: Get errors'
type: DEPENDENT
key: azure.vm.data.errors
delay: '0'
history: 7d
trends: '0'
value_type: TEXT
description: 'A list of errors from API requests.'
preprocessing:
- type: JSONPATH
parameters:
- $.errors
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 1h
master_item:
key: azure.vm.data.get
tags:
- tag: component
value: raw
triggers:
- uuid: 87236c99652643ba800601a461d66d94
expression: 'length(last(/Azure Virtual Machine by HTTP/azure.vm.data.errors))>0'
name: 'Azure: There are errors in requests to API'
opdata: '{ITEM.LASTVALUE1}'
priority: AVERAGE
description: 'Zabbix has received errors in response to API requests.'
tags:
- tag: scope
value: availability
- uuid: cff54514d795495da8bc1152e02631aa
name: 'Azure: Get data'
type: SCRIPT
key: azure.vm.data.get
history: '0'
trends: '0'
value_type: TEXT
params: |
var AzureVM = {
params: {},
token: null,
setParams: function (params) {
['app_id', 'password', 'tenant_id', 'subscription_id', 'resource_id'].forEach(function (field) {
if (typeof params !== 'object' || typeof params[field] === 'undefined' || params[field] === '') {
throw 'Required param is not set: ' + field + '.';
}
});
AzureVM.params = params;
},
request: function (url, data) {
if (typeof data === 'undefined' || data === null) {
data = '';
}
var response, request = new HttpRequest();
if (typeof AzureVM.params.proxy !== 'undefined' && AzureVM.params.proxy !== '') {
request.setProxy(AzureVM.params.proxy);
}
if (AzureVM.token) {
request.addHeader('Accept: application/json');
request.addHeader('Authorization: Bearer ' + AzureVM.token);
}
Zabbix.log(4, '[ Azure ] Sending request: ' + url);
if (data !== '') {
request.addHeader('Content-Type: application/x-www-form-urlencoded');
response = request.post(url, data);
}
else {
response = request.get(url);
}
Zabbix.log(4, '[ Azure ] Received response with status code ' + request.getStatus() + ': ' + response);
if (request.getStatus() !== 200 || response === null) {
throw 'Request failed with status code ' + request.getStatus() + ': ' + response;
}
try {
return JSON.parse(response);
}
catch (error) {
throw 'Failed to parse response received from API.';
}
}
};
var metrics = [
'Percentage CPU',
'Network In',
'Network Out',
'Disk Read Bytes',
'Disk Write Bytes',
'Disk Read Operations/Sec',
'Disk Write Operations/Sec',
'CPU Credits Remaining',
'CPU Credits Consumed',
'Data Disk Read Bytes/sec',
'Data Disk Write Bytes/sec',
'Data Disk Read Operations/Sec',
'Data Disk Write Operations/Sec',
'Data Disk Queue Depth',
'Data Disk Bandwidth Consumed Percentage',
'Data Disk IOPS Consumed Percentage',
'Data Disk Target Bandwidth',
'Data Disk Target IOPS',
'Data Disk Max Burst Bandwidth',
'Data Disk Max Burst IOPS',
'Data Disk Used Burst BPS Credits Percentage',
'Data Disk Used Burst IO Credits Percentage',
'OS Disk Read Bytes/sec',
'OS Disk Write Bytes/sec',
'OS Disk Read Operations/Sec',
'OS Disk Write Operations/Sec',
'OS Disk Queue Depth',
'OS Disk Bandwidth Consumed Percentage',
'OS Disk IOPS Consumed Percentage',
'OS Disk Target Bandwidth',
'OS Disk Target IOPS',
'OS Disk Max Burst Bandwidth',
'OS Disk Max Burst IOPS',
'OS Disk Used Burst BPS Credits Percentage',
'OS Disk Used Burst IO Credits Percentage',
'Inbound Flows',
'Outbound Flows',
'Inbound Flows Maximum Creation Rate',
'Outbound Flows Maximum Creation Rate',
'Premium Data Disk Cache Read Hit',
'Premium Data Disk Cache Read Miss',
'Premium OS Disk Cache Read Hit',
'Premium OS Disk Cache Read Miss',
'VM Cached Bandwidth Consumed Percentage',
'VM Cached IOPS Consumed Percentage',
'VM Uncached Bandwidth Consumed Percentage',
'VM Uncached IOPS Consumed Percentage',
'Network In Total',
'Network Out Total',
'Available Memory Bytes'
],
prepared_metrics = [],
data = {};
data['errors'] = {};
data['metrics'] = {};
try {
AzureVM.setParams(JSON.parse(value));
try {
result = AzureVM.request(
'https://login.microsoftonline.com/' + encodeURIComponent(AzureVM.params.tenant_id) + '/oauth2/token',
'grant_type=client_credentials&resource=' + encodeURIComponent('https://management.azure.com/') + '&client_id=' + encodeURIComponent(AzureVM.params.app_id) + '&client_secret=' + encodeURIComponent(AzureVM.params.password)
);
if ('access_token' in result) {
AzureVM.token = result['access_token'];
} else {
throw 'Auth response does not contain access token.';
}
}
catch (error) {
data.errors.auth = error.toString();
}
if (!('auth' in data.errors)) {
try {
health = AzureVM.request('https://management.azure.com' + AzureVM.params.resource_id + '/providers/Microsoft.ResourceHealth/availabilityStatuses?api-version=2020-05-01');
if ('value' in health && Array.isArray(health.value) && health.value.length > 0 && 'properties' in health.value[0] && typeof health.value[0].properties === 'object') {
data.health = health.value[0].properties;
}
}
catch (error) {
data.errors.health = error.toString();
}
for (var i = 0; i < metrics.length; i += 20) {
var chunk = metrics.slice(i, i + 20);
prepared_metrics.push(
chunk.map(function (element) {
return encodeURIComponent(element);
}).join(',')
);
}
start_date = new Date((new Date().getTime()) - 300000).toISOString().replace(/\.\d+/, '');
end_date = new Date().toISOString().replace(/\.\d+/, '');
for (var j in prepared_metrics) {
try {
metrics_data = AzureVM.request('https://management.azure.com' + AzureVM.params.resource_id + '/providers/Microsoft.Insights/metrics?metricnames=' + prepared_metrics[j] + '&timespan=' + encodeURIComponent(start_date) + '/' + encodeURIComponent(end_date) + '&api-version=2021-05-01');
if ('value' in metrics_data && Array.isArray(metrics_data.value) && metrics_data.value.length > 0) {
for (k in metrics_data.value) {
if ('name' in metrics_data.value[k] && typeof metrics_data.value[k].name === 'object' && 'value' in metrics_data.value[k].name && typeof metrics_data.value[k].name.value === 'string' && 'timeseries' in metrics_data.value[k] && Array.isArray(metrics_data.value[k].timeseries) && metrics_data.value[k].timeseries.length > 0 && 'data' in metrics_data.value[k].timeseries[0] && Array.isArray(metrics_data.value[k].timeseries[0].data) && metrics_data.value[k].timeseries[0].data.length > 2) {
data.metrics[metrics_data.value[k].name.value.replace(/(\s|\/)+/g, '')] = metrics_data.value[k].timeseries[0].data[metrics_data.value[k].timeseries[0].data.length - 3];
}
}
}
}
catch (error) {
data.errors[prepared_metrics[j]] = error.toString();
}
}
}
}
catch (error) {
data.errors.params = error.toString();
}
if (Object.keys(data.errors).length !== 0) {
errors = 'Failed to receive data:';
for (var error in data.errors) {
errors += '\n' + error + ' : ' + data.errors[error];
}
data.errors = errors;
}
else {
data.errors = '';
}
return JSON.stringify(data);
description: 'The result of API requests is expressed in the JSON.'
timeout: '{$AZURE.DATA.TIMEOUT}'
parameters:
- name: app_id
value: '{$AZURE.APP.ID}'
- name: password
value: '{$AZURE.PASSWORD}'
- name: tenant_id
value: '{$AZURE.TENANT.ID}'
- name: subscription_id
value: '{$AZURE.SUBSCRIPTION.ID}'
- name: resource_id
value: '{$AZURE.RESOURCE.ID}'
- name: proxy
value: '{$AZURE.PROXY}'
tags:
- tag: component
value: raw
- uuid: 1dc9f8d45b6f48a38f701f089cbcb279
name: 'Azure: Disk read rate'
type: DEPENDENT
key: azure.vm.disk.read.bytes
delay: '0'
history: 7d
value_type: FLOAT
units: Bps
description: 'Bytes read from the disk during the monitoring period (1 minute).'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.DiskReadBytes.total
- type: MULTIPLIER
parameters:
- '0.0167'
master_item:
key: azure.vm.data.get
tags:
- tag: component
value: storage
- uuid: cd3240d31a4f42a89b5c9817ea288b5a
name: 'Azure: Disk read Operations/Sec'
type: DEPENDENT
key: azure.vm.disk.read.ops
delay: '0'
history: 7d
value_type: FLOAT
units: '!iops'
description: 'The count of read operations from the disk per second.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.DiskReadOperationsSec.average
master_item:
key: azure.vm.data.get
tags:
- tag: component
value: storage
- uuid: b5e2070bde1444ea809ba4e0a29b05d9
name: 'Azure: Disk write rate'
type: DEPENDENT
key: azure.vm.disk.write.bytes
delay: '0'
history: 7d
value_type: FLOAT
units: Bps
description: 'Bytes written to the disk during the monitoring period (1 minute).'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.DiskWriteBytes.total
- type: MULTIPLIER
parameters:
- '0.0167'
master_item:
key: azure.vm.data.get
tags:
- tag: component
value: storage
- uuid: 0d93d1b510614c1f83418bd481f1e7cb
name: 'Azure: Disk write Operations/Sec'
type: DEPENDENT
key: azure.vm.disk.write.ops
delay: '0'
history: 7d
value_type: FLOAT
units: '!iops'
description: 'The count of write operations to the disk per second.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.DiskWriteOperationsSec.average
master_item:
key: azure.vm.data.get
tags:
- tag: component
value: storage
- uuid: 3a30a59aabd54c8b8feb1f4a8ba06db5
name: 'Azure: Inbound flows'
type: DEPENDENT
key: azure.vm.flows.inbound
delay: '0'
history: 7d
value_type: FLOAT
description: 'The number of current flows in the inbound direction (the traffic going into the VM).'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.InboundFlows.average
error_handler: DISCARD_VALUE
master_item:
key: azure.vm.data.get
tags:
- tag: component
value: network
- uuid: 3964ffbb7ea949f69863edcf91f5c555
name: 'Azure: Inbound flows max creation rate'
type: DEPENDENT
key: azure.vm.flows.inbound.max
delay: '0'
history: 7d
value_type: FLOAT
description: 'The maximum creation rate of the inbound flows (the traffic going into the VM).'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.InboundFlowsMaximumCreationRate.average
error_handler: DISCARD_VALUE
master_item:
key: azure.vm.data.get
tags:
- tag: component
value: network
- uuid: 2084cb1d010a4ab494c0826c458d922a
name: 'Azure: Outbound flows'
type: DEPENDENT
key: azure.vm.flows.outbound
delay: '0'
history: 7d
value_type: FLOAT
description: 'The number of current flows in the outbound direction (the traffic going out of the VM).'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.OutboundFlows.average
error_handler: DISCARD_VALUE
master_item:
key: azure.vm.data.get
tags:
- tag: component
value: network
- uuid: eac3e6b53d394e3289fc03bf5772799c
name: 'Azure: Outbound flows max creation rate'
type: DEPENDENT
key: azure.vm.flows.outbound.max
delay: '0'
history: 7d
value_type: FLOAT
description: 'The maximum creation rate of the outbound flows (the traffic going out of the VM).'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.OutboundFlowsMaximumCreationRate.average
error_handler: DISCARD_VALUE
master_item:
key: azure.vm.data.get
tags:
- tag: component
value: network
- uuid: 0a354c9b104b468d9749adfd28d1373e
name: 'Azure: Available memory'
type: DEPENDENT
key: azure.vm.memory.available
delay: '0'
history: 7d
units: B
description: 'The amount of physical memory (in bytes) immediately available for the allocation to a process or for a system use in the VM.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.AvailableMemoryBytes.average
master_item:
key: azure.vm.data.get
tags:
- tag: component
value: memory
- uuid: 411c5f6fcb374c4c90e2951a546c0c08
name: 'Azure: Network in total'
type: DEPENDENT
key: azure.vm.network.in.total
delay: '0'
history: 7d
value_type: FLOAT
units: bps
description: 'The number of bytes received by the VMs via all network interfaces (incoming traffic).'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.NetworkInTotal.total
error_handler: DISCARD_VALUE
- type: MULTIPLIER
parameters:
- '0.1333'
master_item:
key: azure.vm.data.get
tags:
- tag: component
value: network
- uuid: ee2ef1d1e2844ae8be2a5f04c86631ba
name: 'Azure: Network out total'
type: DEPENDENT
key: azure.vm.network.out.total
delay: '0'
history: 7d
value_type: FLOAT
units: bps
description: 'The number of bytes sent by the VMs via all network interfaces (outgoing traffic).'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.NetworkOutTotal.total
error_handler: DISCARD_VALUE
- type: MULTIPLIER
parameters:
- '0.1333'
master_item:
key: azure.vm.data.get
tags:
- tag: component
value: network
- uuid: 24c58e473c5c4b8388a0e78ae38378fc
name: 'Azure: OS disk bandwidth consumed percentage'
type: DEPENDENT
key: azure.vm.os.disk.bandwidth.consumed.percentage
delay: '0'
history: 7d
value_type: FLOAT
units: '%'
description: 'The percentage of the operating system''s disk bandwidth consumed per minute.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.OSDiskBandwidthConsumedPercentage.average
error_handler: DISCARD_VALUE
master_item:
key: azure.vm.data.get
tags:
- tag: component
value: storage
- uuid: 33a7fff9758046e3be07dad6c0a710ca
name: 'Azure: OS disk IOPS consumed percentage'
type: DEPENDENT
key: azure.vm.os.disk.iops.consumed.percentage
delay: '0'
history: 7d
value_type: FLOAT
units: '%'
description: 'The percentage of the operating system''s disk I/Os consumed per minute.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.OSDiskIOPSConsumedPercentage.average
error_handler: DISCARD_VALUE
master_item:
key: azure.vm.data.get
tags:
- tag: component
value: storage
- uuid: 7d0ca132bc264ac08e3c55809bdc40d1
name: 'Azure: OS disk max burst bandwidth'
type: DEPENDENT
key: azure.vm.os.disk.max.bandwidth
delay: '0'
history: 7d
value_type: FLOAT
units: Bps
description: 'Maximum bytes per second throughput that the OS Disk can achieve with bursting.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.OSDiskMaxBurstBandwidth.average
error_handler: DISCARD_VALUE
master_item:
key: azure.vm.data.get
tags:
- tag: component
value: storage
- uuid: 8374282688dc4fabb770c07eb335c666
name: 'Azure: OS disk max burst IOPS'
type: DEPENDENT
key: azure.vm.os.disk.max.iops
delay: '0'
history: 7d
value_type: FLOAT
units: '!iops'
description: 'Maximum IOPS that the OS Disk can achieve with bursting.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.OSDiskMaxBurstIOPS.average
error_handler: DISCARD_VALUE
master_item:
key: azure.vm.data.get
tags:
- tag: component
value: storage
- uuid: ca8fe9d0ea58482c9bb8b83a716362a2
name: 'Azure: OS disk queue depth'
type: DEPENDENT
key: azure.vm.os.disk.queue.depth
delay: '0'
history: 7d
value_type: FLOAT
description: 'The OS disk queue depth (or queue length).'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.OSDiskQueueDepth.average
error_handler: DISCARD_VALUE
master_item:
key: azure.vm.data.get
tags:
- tag: component
value: storage
- uuid: 30265aac759d45769769eae081f570ac
name: 'Azure: OS disk read rate'
type: DEPENDENT
key: azure.vm.os.disk.read.bps
delay: '0'
history: 7d
value_type: FLOAT
units: Bps
description: 'Bytes per second read from a single disk during the monitoring period for OS disk.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.OSDiskReadBytessec.average
error_handler: DISCARD_VALUE
master_item:
key: azure.vm.data.get
tags:
- tag: component
value: storage
- uuid: f11fcbbd63234993a9c301dc8bac3e80
name: 'Azure: OS disk read operations/sec'
type: DEPENDENT
key: azure.vm.os.disk.read.ops
delay: '0'
history: 7d
value_type: FLOAT
units: '!iops'
description: 'The read IOPS from a single disk during the monitoring period for OS disk.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.OSDiskReadOperationsSec.average
error_handler: DISCARD_VALUE
master_item:
key: azure.vm.data.get
tags:
- tag: component
value: storage
- uuid: 5cc422b7da3145fa885a88bb6165e3b9
name: 'Azure: OS disk target bandwidth'
type: DEPENDENT
key: azure.vm.os.disk.target.bandwidth
delay: '0'
history: 7d
value_type: FLOAT
units: Bps
description: 'Baseline bytes per second throughput that the OS Disk can achieve without bursting.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.OSDiskTargetBandwidth.average
error_handler: DISCARD_VALUE
master_item:
key: azure.vm.data.get
tags:
- tag: component
value: storage
- uuid: 556941b1df5d470f8de628230b085623
name: 'Azure: OS disk target IOPS'
type: DEPENDENT
key: azure.vm.os.disk.target.iops
delay: '0'
history: 7d
value_type: FLOAT
units: '!iops'
description: 'Baseline IOPS that the OS disk can achieve without bursting.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.OSDiskTargetIOPS.average
error_handler: DISCARD_VALUE
master_item:
key: azure.vm.data.get
tags:
- tag: component
value: storage
- uuid: 9d42609950864c899a0d63b94f1d2235
name: 'Azure: OS disk used burst BPS credits percentage'
type: DEPENDENT
key: azure.vm.os.disk.used.burst.bandwidth
delay: '0'
history: 7d
value_type: FLOAT
units: '%'
description: 'The percentage of the OS Disk burst bandwidth credits used so far.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.OSDiskUsedBurstBPSCreditsPercentage.average
error_handler: DISCARD_VALUE
master_item:
key: azure.vm.data.get
tags:
- tag: component
value: storage
- uuid: c08f45df2e594e1fab01ba63df7da05b
name: 'Azure: OS disk used burst IO credits percentage'
type: DEPENDENT
key: azure.vm.os.disk.used.burst.iops
delay: '0'
history: 7d
value_type: FLOAT
units: '%'
description: 'The percentage of the OS disk burst I/O credits used so far.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.OSDiskUsedBurstIOCreditsPercentage.average
error_handler: DISCARD_VALUE
master_item:
key: azure.vm.data.get
tags:
- tag: component
value: storage
- uuid: 7645519a786b42908f1ec693128899c2
name: 'Azure: OS disk write rate'
type: DEPENDENT
key: azure.vm.os.disk.write.bps
delay: '0'
history: 7d
value_type: FLOAT
units: Bps
description: 'Bytes per second written to a single disk during the monitoring period for OS disk.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.OSDiskWriteBytessec.average
error_handler: DISCARD_VALUE
master_item:
key: azure.vm.data.get
tags:
- tag: component
value: storage
- uuid: 1e9392bc0c934e7d93f743c86e36e23e
name: 'Azure: OS disk write operations/sec'
type: DEPENDENT
key: azure.vm.os.disk.write.ops
delay: '0'
history: 7d
value_type: FLOAT
units: '!iops'
description: 'The write IOPS from a single disk during the monitoring period for OS disk.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.OSDiskWriteOperationsSec.average
error_handler: DISCARD_VALUE
master_item:
key: azure.vm.data.get
tags:
- tag: component
value: storage
- uuid: d6fcff826cfa486d945f33708be2f630
name: 'Azure: Premium data disk cache read hit'
type: DEPENDENT
key: azure.vm.premium.data.disk.cache.read.hit
delay: '0'
history: 7d
units: '%'
description: 'Premium data disk cache read hit.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.PremiumDataDiskCacheReadHit.average
error_handler: DISCARD_VALUE
master_item:
key: azure.vm.data.get
tags:
- tag: component
value: storage
- uuid: 288853ee5d08442fa43f8df1dfcc7823
name: 'Azure: Premium data disk cache read miss'
type: DEPENDENT
key: azure.vm.premium.data.disk.cache.read.miss
delay: '0'
history: 7d
units: '%'
description: 'Premium data disk cache read miss.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.PremiumDataDiskCacheReadMiss.average
error_handler: DISCARD_VALUE
master_item:
key: azure.vm.data.get
tags:
- tag: component
value: storage
- uuid: 66b629ae3d7e4abeaf0282414c91876f
name: 'Azure: Premium OS disk cache read hit'
type: DEPENDENT
key: azure.vm.premium.os.disk.cache.read.hit
delay: '0'
history: 7d
units: '%'
description: 'Premium OS disk cache read hit.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.PremiumOSDiskCacheReadHit.average
error_handler: DISCARD_VALUE
master_item:
key: azure.vm.data.get
tags:
- tag: component
value: storage
- uuid: 3927f34d5d0649d7ac29703f64054dbf
name: 'Azure: Premium OS disk cache read miss'
type: DEPENDENT
key: azure.vm.premium.os.disk.cache.read.miss
delay: '0'
history: 7d
units: '%'
description: 'Premium OS disk cache read miss.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.PremiumOSDiskCacheReadMiss.average
error_handler: DISCARD_VALUE
master_item:
key: azure.vm.data.get
tags:
- tag: component
value: storage
- uuid: d6e85395e34b4288988a5287d287f182
name: 'Azure: VM uncached bandwidth consumed percentage'
type: DEPENDENT
key: azure.vm.uncached.bandwidth.consumed.percentage
delay: '0'
history: 7d
units: '%'
description: 'The percentage of the uncached disk bandwidth consumed by the VM.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.VMUncachedBandwidthConsumedPercentage.average
master_item:
key: azure.vm.data.get
tags:
- tag: component
value: storage
- uuid: 124203560922429bb32b76c45f24b2b9
name: 'Azure: VM uncached IOPS consumed percentage'
type: DEPENDENT
key: azure.vm.uncached.iops.consumed.percentage
delay: '0'
history: 7d
units: '%'
description: 'The percentage of the uncached disk IOPS consumed by the VM.'
preprocessing:
- type: JSONPATH
parameters:
- $.metrics.VMUncachedIOPSConsumedPercentage.average
master_item:
key: azure.vm.data.get
tags:
- tag: component
value: storage
tags:
- tag: class
value: software
- tag: target
value: azure
macros:
- macro: '{$AZURE.APP.ID}'
description: 'The App ID of Microsoft Azure.'
- macro: '{$AZURE.DATA.TIMEOUT}'
value: 15s
description: 'A response timeout for an API.'
- macro: '{$AZURE.PASSWORD}'
type: SECRET_TEXT
description: 'Microsoft Azure password.'
- macro: '{$AZURE.PROXY}'
description: 'Sets HTTP proxy value. If this macro is empty then no proxy is used.'
- macro: '{$AZURE.RESOURCE.ID}'
description: 'Microsoft Azure Virtual Machine ID.'
- macro: '{$AZURE.SUBSCRIPTION.ID}'
description: 'Microsoft Azure subscription ID.'
- macro: '{$AZURE.TENANT.ID}'
description: 'Microsoft Azure tenant ID.'
- macro: '{$AZURE.VM.CPU.UTIL.CRIT}'
value: '90'
description: 'The critical threshold of CPU utilization, expressed in %.'
valuemaps:
- uuid: 38c8ce1516704ec2a6f1ea9686db56b9
name: 'Azure resource health state'
mappings:
- value: '0'
newvalue: Available
- value: '1'
newvalue: Degraded
- value: '2'
newvalue: Unavailable
- value: '3'
newvalue: Unknown
graphs:
- uuid: 781dd83ed494465bbf2c16efbc753a51
name: 'Azure: Data disk read/write bytes'
graph_items:
- color: 199C0D
item:
host: 'Azure Virtual Machine by HTTP'
key: azure.vm.data.disk.read.bps
- sortorder: '1'
color: F63100
item:
host: 'Azure Virtual Machine by HTTP'
key: azure.vm.data.disk.write.bps
- uuid: 7d198b2f6186498ab39ece80f3f7b30e
name: 'Azure: Data disk read/write rates'
graph_items:
- color: 199C0D
item:
host: 'Azure Virtual Machine by HTTP'
key: azure.vm.data.disk.read.ops
- sortorder: '1'
color: F63100
item:
host: 'Azure Virtual Machine by HTTP'
key: azure.vm.data.disk.write.ops
- uuid: a2d0eb282276486896067f8a30f8ea51
name: 'Azure: Disk read/write bytes'
graph_items:
- color: 199C0D
item:
host: 'Azure Virtual Machine by HTTP'
key: azure.vm.disk.read.bytes
- sortorder: '1'
color: F63100
item:
host: 'Azure Virtual Machine by HTTP'
key: azure.vm.disk.write.bytes
- uuid: 58a8c6942314408ab0e88b15d53f67e5
name: 'Azure: Disk read/write rates'
graph_items:
- color: 199C0D
item:
host: 'Azure Virtual Machine by HTTP'
key: azure.vm.disk.read.ops
- sortorder: '1'
color: F63100
item:
host: 'Azure Virtual Machine by HTTP'
key: azure.vm.disk.write.ops
- uuid: b427ad3dbb8d4f8caf1edfb0cab04733
name: 'Azure: Flows'
graph_items:
- color: 199C0D
item:
host: 'Azure Virtual Machine by HTTP'
key: azure.vm.flows.inbound
- sortorder: '1'
color: F63100
item:
host: 'Azure Virtual Machine by HTTP'
key: azure.vm.flows.outbound
- sortorder: '2'
color: 00611C
item:
host: 'Azure Virtual Machine by HTTP'
key: azure.vm.flows.inbound.max
- sortorder: '3'
color: F7941D
item:
host: 'Azure Virtual Machine by HTTP'
key: azure.vm.flows.outbound.max
- uuid: f0f37dc8840a45ba8e8cb62f5fea6804
name: 'Azure: Network traffic'
graph_items:
- color: 199C0D
item:
host: 'Azure Virtual Machine by HTTP'
key: azure.vm.network.in.total
- sortorder: '1'
color: F63100
item:
host: 'Azure Virtual Machine by HTTP'
key: azure.vm.network.out.total
- uuid: 41bd1642704c4d3fbe4fb34c8c389320
name: 'Azure: OS disk read/write bytes'
graph_items:
- color: 199C0D
item:
host: 'Azure Virtual Machine by HTTP'
key: azure.vm.os.disk.read.bps
- sortorder: '1'
color: F63100
item:
host: 'Azure Virtual Machine by HTTP'
key: azure.vm.os.disk.write.bps
- uuid: df77fe1de4ae46f98744ff73ed427b3b
name: 'Azure: OS disk read/write rates'
graph_items:
- color: 199C0D
item:
host: 'Azure Virtual Machine by HTTP'
key: azure.vm.os.disk.read.ops
- sortorder: '1'
color: F63100
item:
host: 'Azure Virtual Machine by HTTP'
key: azure.vm.os.disk.write.ops
- uuid: 3051d683b44b48ee94030465254abc7f
name: 'Azure: Premium data disk cache read'
graph_items:
- color: 199C0D
item:
host: 'Azure Virtual Machine by HTTP'
key: azure.vm.premium.data.disk.cache.read.hit
- sortorder: '1'
color: F63100
item:
host: 'Azure Virtual Machine by HTTP'
key: azure.vm.premium.data.disk.cache.read.miss
- uuid: d727dc11deaa46b282892552c9b03752
name: 'Azure: Premium OS disk cache read'
graph_items:
- color: 199C0D
item:
host: 'Azure Virtual Machine by HTTP'
key: azure.vm.premium.os.disk.cache.read.hit
- sortorder: '1'
color: F63100
item:
host: 'Azure Virtual Machine by HTTP'
key: azure.vm.premium.os.disk.cache.read.miss
- uuid: 3b278de1b81a4be7acc865568962c323
name: 'Azure Microsoft SQL: Connections'
graph_items:
- color: 199C0D
item:
host: 'Azure Microsoft SQL Database by HTTP'
key: azure.db.mssql.connections.successful
- sortorder: '1'
color: F63100
item:
host: 'Azure Microsoft SQL Database by HTTP'
key: azure.db.mssql.connections.failed.system
- sortorder: '2'
color: 00611C
item:
host: 'Azure Microsoft SQL Database by HTTP'
key: azure.db.mssql.firewall.blocked
- uuid: 62a9a5e1fb044a52a0b534bd4eeea914
name: 'Azure Microsoft SQL: Connections'
graph_items:
- color: 199C0D
item:
host: 'Azure Microsoft SQL Serverless Database by HTTP'
key: azure.db.mssql.connections.successful
- sortorder: '1'
color: F63100
item:
host: 'Azure Microsoft SQL Serverless Database by HTTP'
key: azure.db.mssql.connections.failed.system
- sortorder: '2'
color: 00611C
item:
host: 'Azure Microsoft SQL Serverless Database by HTTP'
key: azure.db.mssql.firewall.blocked
- uuid: fe250a5f509d45babea9fcd12accbcac
name: 'Azure Microsoft SQL: CPU usage'
graph_items:
- color: 199C0D
item:
host: 'Azure Microsoft SQL Database by HTTP'
key: azure.db.mssql.cpu.limit
- sortorder: '1'
color: F63100
item:
host: 'Azure Microsoft SQL Database by HTTP'
key: azure.db.mssql.cpu.used
- uuid: 083d307db8954fc59e8e5cfccefc16c1
name: 'Azure Microsoft SQL: CPU usage'
graph_items:
- color: 199C0D
item:
host: 'Azure Microsoft SQL Serverless Database by HTTP'
key: azure.db.mssql.cpu.limit
- sortorder: '1'
color: F63100
item:
host: 'Azure Microsoft SQL Serverless Database by HTTP'
key: azure.db.mssql.cpu.used
- uuid: ec5714017c744484be8c264d24a0e694
name: 'Azure Microsoft SQL: Storage utilization'
graph_items:
- color: 199C0D
item:
host: 'Azure Microsoft SQL Database by HTTP'
key: azure.db.mssql.storage.used
- sortorder: '1'
color: F63100
item:
host: 'Azure Microsoft SQL Database by HTTP'
key: azure.db.mssql.storage.allocated
- uuid: f541b6591683433aba4b3e58a8ad1e5c
name: 'Azure Microsoft SQL: Storage utilization'
graph_items:
- color: 199C0D
item:
host: 'Azure Microsoft SQL Serverless Database by HTTP'
key: azure.db.mssql.storage.used
- sortorder: '1'
color: F63100
item:
host: 'Azure Microsoft SQL Serverless Database by HTTP'
key: azure.db.mssql.storage.allocated
- uuid: 89256a1eba8c49d2b7469a68ff050ac5
name: 'Azure MongoDB: Latency'
graph_items:
- color: 199C0D
item:
host: 'Azure Cosmos DB for MongoDB by HTTP'
key: azure.cosmosdb.server.side.latency.gateway
- sortorder: '1'
color: F63100
item:
host: 'Azure Cosmos DB for MongoDB by HTTP'
key: azure.cosmosdb.server.side.latency
- sortorder: '2'
color: 00611C
item:
host: 'Azure Cosmos DB for MongoDB by HTTP'
key: azure.cosmosdb.server.side.latency.direct
- sortorder: '3'
color: F7941D
item:
host: 'Azure Cosmos DB for MongoDB by HTTP'
key: azure.cosmosdb.replication.latency
- uuid: a1225fc27d334c5bbb5043e3d468bf02
name: 'Azure MongoDB: Requests'
graph_items:
- color: 199C0D
item:
host: 'Azure Cosmos DB for MongoDB by HTTP'
key: azure.cosmosdb.total.requests
- sortorder: '1'
color: F63100
item:
host: 'Azure Cosmos DB for MongoDB by HTTP'
key: azure.cosmosdb.total.request.units
- sortorder: '2'
color: 00611C
item:
host: 'Azure Cosmos DB for MongoDB by HTTP'
key: azure.cosmosdb.metadata.requests
- sortorder: '3'
color: F7941D
item:
host: 'Azure Cosmos DB for MongoDB by HTTP'
key: azure.cosmosdb.mongo.requests
- sortorder: '4'
color: FC6EA3
item:
host: 'Azure Cosmos DB for MongoDB by HTTP'
key: azure.cosmosdb.mongo.requests.charge
- uuid: 07168aaf3abb42f6b61746cc6e2d2910
name: 'Azure MongoDB: Usage'
graph_items:
- color: 199C0D
item:
host: 'Azure Cosmos DB for MongoDB by HTTP'
key: azure.cosmosdb.data.usage
- sortorder: '1'
color: F63100
item:
host: 'Azure Cosmos DB for MongoDB by HTTP'
key: azure.cosmosdb.index.usage
- sortorder: '2'
color: 00611C
item:
host: 'Azure Cosmos DB for MongoDB by HTTP'
key: azure.cosmosdb.document.quota
- uuid: 750ae48e6ef749c19a06f4bbe716f92f
name: 'Azure MySQL: Connections'
graph_items:
- color: 199C0D
item:
host: 'Azure MySQL Flexible Server by HTTP'
key: azure.db.mysql.connections.active
- sortorder: '1'
color: F63100
item:
host: 'Azure MySQL Flexible Server by HTTP'
key: azure.db.mysql.connections.total
- sortorder: '2'
color: 00611C
item:
host: 'Azure MySQL Flexible Server by HTTP'
key: azure.db.mysql.connections.aborted
- uuid: 360a24b56be74cf48df3135008437824
name: 'Azure MySQL: Connections'
graph_items:
- color: 199C0D
item:
host: 'Azure MySQL Single Server by HTTP'
key: azure.db.mysql.connections.active
- sortorder: '1'
color: F63100
item:
host: 'Azure MySQL Single Server by HTTP'
key: azure.db.mysql.connections.failed
- uuid: f929f47602734f82a79f22a5f4446f61
name: 'Azure MySQL: Network traffic'
graph_items:
- color: 199C0D
item:
host: 'Azure MySQL Flexible Server by HTTP'
key: azure.db.mysql.network.egress
- sortorder: '1'
color: F63100
item:
host: 'Azure MySQL Flexible Server by HTTP'
key: azure.db.mysql.network.ingress
- uuid: dc6840162405481ebc1c3c98fdfcaef1
name: 'Azure MySQL: Network traffic'
graph_items:
- color: 199C0D
item:
host: 'Azure MySQL Single Server by HTTP'
key: azure.db.mysql.network.egress
- sortorder: '1'
color: F63100
item:
host: 'Azure MySQL Single Server by HTTP'
key: azure.db.mysql.network.ingress
- uuid: 3fcf43fd338e4902874d940fc0bec8b9
name: 'Azure MySQL: Server log storage utilization'
graph_items:
- color: 199C0D
item:
host: 'Azure MySQL Single Server by HTTP'
key: azure.db.mysql.storage.server.log.used
- sortorder: '1'
color: F63100
item:
host: 'Azure MySQL Single Server by HTTP'
key: azure.db.mysql.storage.server.log.limit
- uuid: 4210e6b4ed8744589dce88217e961a56
name: 'Azure MySQL: Storage utilization'
graph_items:
- color: 199C0D
item:
host: 'Azure MySQL Flexible Server by HTTP'
key: azure.db.mysql.storage.used
- sortorder: '1'
color: F63100
item:
host: 'Azure MySQL Flexible Server by HTTP'
key: azure.db.mysql.storage.limit
- uuid: bdc178e6faaa4850badc0c60c7c80d40
name: 'Azure MySQL: Storage utilization'
graph_items:
- color: 199C0D
item:
host: 'Azure MySQL Single Server by HTTP'
key: azure.db.mysql.storage.used
- sortorder: '1'
color: F63100
item:
host: 'Azure MySQL Single Server by HTTP'
key: azure.db.mysql.storage.limit
- uuid: 2b60e8b1fd7c43f4ac61812e43c0e1ca
name: 'Azure PostgreSQL: Connections'
graph_items:
- color: 199C0D
item:
host: 'Azure PostgreSQL Flexible Server by HTTP'
key: azure.db.pgsql.connections.active
- sortorder: '1'
color: F63100
item:
host: 'Azure PostgreSQL Flexible Server by HTTP'
key: azure.db.pgsql.connections.succeeded
- sortorder: '2'
color: 00611C
item:
host: 'Azure PostgreSQL Flexible Server by HTTP'
key: azure.db.pgsql.connections.failed
- uuid: c76cf8ec6a584af6be815ec4a9257a8c
name: 'Azure PostgreSQL: Connections'
graph_items:
- color: 199C0D
item:
host: 'Azure PostgreSQL Single Server by HTTP'
key: azure.db.pgsql.connections.active
- sortorder: '1'
color: F63100
item:
host: 'Azure PostgreSQL Single Server by HTTP'
key: azure.db.pgsql.connections.failed
- uuid: a4679d243b574bea84397c980723c68b
name: 'Azure PostgreSQL: Network traffic'
graph_items:
- color: 199C0D
item:
host: 'Azure PostgreSQL Flexible Server by HTTP'
key: azure.db.pgsql.network.egress
- sortorder: '1'
color: F63100
item:
host: 'Azure PostgreSQL Flexible Server by HTTP'
key: azure.db.pgsql.network.ingress
- uuid: 8bc17d843775414ea971e640e1fe5ec0
name: 'Azure PostgreSQL: Network traffic'
graph_items:
- color: 199C0D
item:
host: 'Azure PostgreSQL Single Server by HTTP'
key: azure.db.pgsql.network.egress
- sortorder: '1'
color: F63100
item:
host: 'Azure PostgreSQL Single Server by HTTP'
key: azure.db.pgsql.network.ingress
- uuid: 9e750a5a462b4429ac5a36a72bd60c66
name: 'Azure PostgreSQL: Server log storage utilization'
graph_items:
- color: 199C0D
item:
host: 'Azure PostgreSQL Single Server by HTTP'
key: azure.db.pgsql.storage.server.log.used
- sortorder: '1'
color: F63100
item:
host: 'Azure PostgreSQL Single Server by HTTP'
key: azure.db.pgsql.storage.server.log.limit
- uuid: 5fa13cfbdd784475818fae06ff94f879
name: 'Azure PostgreSQL: Storage utilization'
graph_items:
- color: 199C0D
item:
host: 'Azure PostgreSQL Flexible Server by HTTP'
key: azure.db.pgsql.storage.used
- sortorder: '1'
color: F63100
item:
host: 'Azure PostgreSQL Flexible Server by HTTP'
key: azure.db.pgsql.storage.free
- uuid: 9ecd071a77364c4486fa5f63125cd985
name: 'Azure PostgreSQL: Storage utilization'
graph_items:
- color: 199C0D
item:
host: 'Azure PostgreSQL Single Server by HTTP'
key: azure.db.pgsql.storage.used
- sortorder: '1'
color: F63100
item:
host: 'Azure PostgreSQL Single Server by HTTP'
key: azure.db.pgsql.storage.limit