Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/zabbix/zabbix.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVyacheslav Khaliev <vyacheslav.khaliev@zabbix.com>2022-10-17 11:59:57 +0300
committerVyacheslav Khaliev <vyacheslav.khaliev@zabbix.com>2022-10-17 11:59:57 +0300
commit09245945a158d13a306490816319afaabce75b2c (patch)
treec946c295cb9b657a94e44b2cb6c81f2be74f17f9 /templates
parented5cc5e40fa9f5b5c99309a1ae68431320a5d153 (diff)
parenta0002c7b36fa170250e583ab08f7f704d99581ab (diff)
.........T [ZBXNEXT-7902] added templates for Azure MySQL servers
Merge in ZBX/zabbix from feature/ZBXNEXT-7902-6.3 to master * commit 'a0002c7b36fa170250e583ab08f7f704d99581ab': .........T [ZBXNEXT-7902] fixed descriptions in Microsoft Azure templates .........T [ZBXNEXT-7902] added templates for Azure MySQL servers
Diffstat (limited to 'templates')
-rw-r--r--templates/cloud/azure_http/README.md307
-rw-r--r--templates/cloud/azure_http/template_cloud_azure_http.yaml2026
2 files changed, 2195 insertions, 138 deletions
diff --git a/templates/cloud/azure_http/README.md b/templates/cloud/azure_http/README.md
index e0c47cb5fed..929c1d2e46e 100644
--- a/templates/cloud/azure_http/README.md
+++ b/templates/cloud/azure_http/README.md
@@ -3,15 +3,15 @@
## Overview
-For Zabbix version: 6.4 and higher
-The template to monitor Microsoft Azure by HTTP.
+For Zabbix version: 6.4 and higher.
+This template is designed to monitor Microsoft Azure by HTTP.
It works without any external scripts and uses the script item.
## Setup
> See [Zabbix template operation](https://www.zabbix.com/documentation/6.4/manual/config/templates_out_of_the_box/http) for basic instructions.
-1. Create an Azure service principal via Azure CLI for your subscription.
+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>`
@@ -29,16 +29,20 @@ No specific Zabbix configuration is required.
|Name|Description|Default|
|----|-----------|-------|
|{$AZURE.APP_ID} |<p>Microsoft Azure app ID.</p> |`` |
-|{$AZURE.DATA.TIMEOUT} |<p>Response timeout for API.</p> |`15s` |
+|{$AZURE.DATA.TIMEOUT} |<p>A response timeout for API.</p> |`15s` |
+|{$AZURE.MYSQL.DB.LOCATION.MATCHES} |<p>This macro is used in MySQL servers discovery rules.</p> |`.*` |
+|{$AZURE.MYSQL.DB.LOCATION.NOT_MATCHES} |<p>This macro is used in MySQL servers discovery rules.</p> |`CHANGE_IF_NEEDED` |
+|{$AZURE.MYSQL.DB.NAME.MATCHES} |<p>This macro is used in MySQL servers discovery rules.</p> |`.*` |
+|{$AZURE.MYSQL.DB.NAME.NOT_MATCHES} |<p>This macro is used in MySQL servers discovery rules.</p> |`CHANGE_IF_NEEDED` |
|{$AZURE.PASSWORD} |<p>Microsoft Azure password.</p> |`` |
+|{$AZURE.RESOURCE_GROUP.MATCHES} |<p>This macro is used in discovery rules.</p> |`.*` |
+|{$AZURE.RESOURCE_GROUP.NOT_MATCHES} |<p>This macro is used in discovery rules.</p> |`CHANGE_IF_NEEDED` |
|{$AZURE.SUBSCRIPTION_ID} |<p>Microsoft Azure subscription ID.</p> |`` |
|{$AZURE.TENANT_ID} |<p>Microsoft Azure tenant ID.</p> |`` |
-|{$AZURE.VM.LOCATION.MATCHES} |<p>This macro used in virtual machines discovery rule.</p> |`.*` |
-|{$AZURE.VM.LOCATION.NOT_MATCHES} |<p>This macro used in virtual machines discovery rule.</p> |`CHANGE_IF_NEEDED` |
-|{$AZURE.VM.NAME.MATCHES} |<p>This macro used in virtual machines discovery rule.</p> |`.*` |
-|{$AZURE.VM.NAME.NOT_MATCHES} |<p>This macro used in virtual machines discovery rule.</p> |`CHANGE_IF_NEEDED` |
-|{$AZURE.VM.RESOURCE_GROUP.MATCHES} |<p>This macro used in virtual machines discovery rule.</p> |`.*` |
-|{$AZURE.VM.RESOURCE_GROUP.NOT_MATCHES} |<p>This macro used in virtual machines discovery rule.</p> |`CHANGE_IF_NEEDED` |
+|{$AZURE.VM.LOCATION.MATCHES} |<p>This macro is used in virtual machines discovery rule.</p> |`.*` |
+|{$AZURE.VM.LOCATION.NOT_MATCHES} |<p>This macro is used in virtual machines discovery rule.</p> |`CHANGE_IF_NEEDED` |
+|{$AZURE.VM.NAME.MATCHES} |<p>This macro is used in virtual machines discovery rule.</p> |`.*` |
+|{$AZURE.VM.NAME.NOT_MATCHES} |<p>This macro is used in virtual machines discovery rule.</p> |`CHANGE_IF_NEEDED` |
## Template links
@@ -48,47 +52,48 @@ There are no template links in this template.
|Name|Description|Type|Key and additional info|
|----|-----------|----|----|
-|Virtual machines discovery |<p>A list of the virtual machines in the subscription.</p> |DEPENDENT |azure.vm.discovery<p>**Preprocessing**:</p><p>- JSONPATH: `$.resources.value`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p><p>**Filter**:</p>AND <p>- {#TYPE} MATCHES_REGEX `^Microsoft.Compute/virtualMachines$`</p><p>- {#NAME} MATCHES_REGEX `{$AZURE.VM.NAME.MATCHES}`</p><p>- {#NAME} NOT_MATCHES_REGEX `{$AZURE.VM.NAME.NOT_MATCHES}`</p><p>- {#LOCATION} MATCHES_REGEX `{$AZURE.VM.LOCATION.MATCHES}`</p><p>- {#LOCATION} NOT_MATCHES_REGEX `{$AZURE.VM.LOCATION.NOT_MATCHES}`</p><p>- {#GROUP} MATCHES_REGEX `{$AZURE.VM.RESOURCE_GROUP.MATCHES}`</p><p>- {#GROUP} NOT_MATCHES_REGEX `{$AZURE.VM.RESOURCE_GROUP.NOT_MATCHES}`</p> |
+|MySQL servers discovery |<p>The list of the MySQL servers is provided by the subscription.</p> |DEPENDENT |azure.mysql.servers.discovery<p>**Preprocessing**:</p><p>- JSONPATH: `$.resources.value`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p><p>**Filter**:</p>AND <p>- {#TYPE} MATCHES_REGEX `^Microsoft.DBforMySQL`</p><p>- {#NAME} MATCHES_REGEX `{$AZURE.MYSQL.DB.NAME.MATCHES}`</p><p>- {#NAME} NOT_MATCHES_REGEX `{$AZURE.MYSQL.DB.NAME.NOT_MATCHES}`</p><p>- {#LOCATION} MATCHES_REGEX `{$AZURE.MYSQL.DB.LOCATION.MATCHES}`</p><p>- {#LOCATION} NOT_MATCHES_REGEX `{$AZURE.MYSQL.DB.LOCATION.NOT_MATCHES}`</p><p>- {#GROUP} MATCHES_REGEX `{$AZURE.RESOURCE_GROUP.MATCHES}`</p><p>- {#GROUP} NOT_MATCHES_REGEX `{$AZURE.RESOURCE_GROUP.NOT_MATCHES}`</p><p>**Overrides:**</p><p>Flexible server<br> - {#TYPE} MATCHES_REGEX `Microsoft.DBforMySQL/flexibleServers`<br> - HOST_PROTOTYPE REGEXP ``</p><p>Single server<br> - {#TYPE} MATCHES_REGEX `Microsoft.DBforMySQL/servers`<br> - HOST_PROTOTYPE REGEXP ``</p> |
+|Virtual machines discovery |<p>The list of the virtual machines is provided by the subscription.</p> |DEPENDENT |azure.vm.discovery<p>**Preprocessing**:</p><p>- JSONPATH: `$.resources.value`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `6h`</p><p>**Filter**:</p>AND <p>- {#TYPE} MATCHES_REGEX `^Microsoft.Compute/virtualMachines$`</p><p>- {#NAME} MATCHES_REGEX `{$AZURE.VM.NAME.MATCHES}`</p><p>- {#NAME} NOT_MATCHES_REGEX `{$AZURE.VM.NAME.NOT_MATCHES}`</p><p>- {#LOCATION} MATCHES_REGEX `{$AZURE.VM.LOCATION.MATCHES}`</p><p>- {#LOCATION} NOT_MATCHES_REGEX `{$AZURE.VM.LOCATION.NOT_MATCHES}`</p><p>- {#GROUP} MATCHES_REGEX `{$AZURE.RESOURCE_GROUP.MATCHES}`</p><p>- {#GROUP} NOT_MATCHES_REGEX `{$AZURE.RESOURCE_GROUP.NOT_MATCHES}`</p> |
## Items collected
|Group|Name|Description|Type|Key and additional info|
|-----|----|-----------|----|---------------------|
-|Azure |Azure: Get resources |<p>The JSON with result of API requests.</p> |SCRIPT |azure.get.resources<p>**Expression**:</p>`The text is too long. Please see the template.` |
+|Azure |Azure: Get resources |<p>The result of API requests is in the JSON.</p> |SCRIPT |azure.get.resources<p>**Expression**:</p>`The text is too long. Please see the template.` |
|Azure |Azure: Get errors |<p>A list of errors from API requests.</p> |DEPENDENT |azure.get.errors<p>**Preprocessing**:</p><p>- JSONPATH: `$.errors`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1h`</p> |
## Triggers
|Name|Description|Expression|Severity|Dependencies and additional info|
|----|-----------|----|----|----|
-|Azure: There are errors in requests to API |<p>Zabbix has received errors in requests to API.</p> |`length(last(/Azure by HTTP/azure.get.errors))>0` |AVERAGE | |
+|Azure: There are errors in requests to API |<p>Zabbix has received errors in response to API requests.</p> |`length(last(/Azure by HTTP/azure.get.errors))>0` |AVERAGE | |
## Feedback
-Please report any issues with the template at https://support.zabbix.com
+Please report any issues with the template at https://support.zabbix.com.
-You can also provide feedback, discuss the template or ask for help with it at [ZABBIX forums](https://www.zabbix.com/forum/zabbix-suggestions-and-feedback/).
+You can also provide feedback, discuss the template or ask for help at [ZABBIX forums](https://www.zabbix.com/forum/zabbix-suggestions-and-feedback/).
# Azure virtual machine by HTTP
## Overview
-For Zabbix version: 6.4 and higher
-The template to monitor Microsoft Azure virtual machines by HTTP.
+For Zabbix version: 6.4 and higher.
+This template is designed to monitor Microsoft Azure virtual machines by HTTP.
It works without any external scripts and uses the script item.
## Setup
> See [Zabbix template operation](https://www.zabbix.com/documentation/6.4/manual/config/templates_out_of_the_box/http) for basic instructions.
-1. Create an Azure service principal via Azure CLI for your subscription.
+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 [Azure documentation](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 macros {$AZURE.APP_ID}, {$AZURE.PASSWORD}, {$AZURE.TENANT_ID} and {$AZURE.SUBSCRIPTION_ID}.
+3. Configure macros {$AZURE.APP_ID}, {$AZURE.PASSWORD}, {$AZURE.TENANT_ID}, {$AZURE.SUBSCRIPTION_ID} and {$AZURE.RESOURCE_ID}.
## Zabbix configuration
@@ -99,7 +104,7 @@ No specific Zabbix configuration is required.
|Name|Description|Default|
|----|-----------|-------|
|{$AZURE.APP_ID} |<p>Microsoft Azure app ID.</p> |`` |
-|{$AZURE.DATA.TIMEOUT} |<p>Response timeout for API.</p> |`60s` |
+|{$AZURE.DATA.TIMEOUT} |<p>A response timeout for API.</p> |`60s` |
|{$AZURE.PASSWORD} |<p>Microsoft Azure password.</p> |`` |
|{$AZURE.RESOURCE_ID} |<p>Microsoft Azure virtual machine ID.</p> |`` |
|{$AZURE.SUBSCRIPTION_ID} |<p>Microsoft Azure subscription ID.</p> |`` |
@@ -117,72 +122,256 @@ There are no template links in this template.
|Group|Name|Description|Type|Key and additional info|
|-----|----|-----------|----|---------------------|
-|Azure |Azure: Get data |<p>The JSON with result of API requests.</p> |SCRIPT |azure.vm.data.get<p>**Expression**:</p>`The text is too long. Please see the template.` |
+|Azure |Azure: Get data |<p>The result of API requests is in the JSON.</p> |SCRIPT |azure.vm.data.get<p>**Expression**:</p>`The text is too long. Please see the template.` |
|Azure |Azure: Get errors |<p>A list of errors from API requests.</p> |DEPENDENT |azure.vm.data.errors<p>**Preprocessing**:</p><p>- JSONPATH: `$.errors`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1h`</p> |
-|Azure |Azure: Availability state |<p>Availability status of the resource.</p> |DEPENDENT |azure.vm.availability.state<p>**Preprocessing**:</p><p>- JSONPATH: `$.health.availabilityState`</p><p>⛔️ON_FAIL: `CUSTOM_VALUE -> 3`</p><p>- STR_REPLACE: `Available 0`</p><p>- STR_REPLACE: `Degraded 1`</p><p>- STR_REPLACE: `Unavailable 2`</p><p>- STR_REPLACE: `Unknown 3`</p><p>- IN_RANGE: `0 3 `</p><p>⛔️ON_FAIL: `CUSTOM_VALUE -> 3`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1h`</p> |
-|Azure |Azure: Availability status detailed |<p>Summary description of the availability status.</p> |DEPENDENT |azure.vm.availability.details<p>**Preprocessing**:</p><p>- JSONPATH: `$.health.summary`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1h`</p> |
+|Azure |Azure: Availability state |<p>The availability status of the resource.</p> |DEPENDENT |azure.vm.availability.state<p>**Preprocessing**:</p><p>- JSONPATH: `$.health.availabilityState`</p><p>⛔️ON_FAIL: `CUSTOM_VALUE -> 3`</p><p>- STR_REPLACE: `Available 0`</p><p>- STR_REPLACE: `Degraded 1`</p><p>- STR_REPLACE: `Unavailable 2`</p><p>- STR_REPLACE: `Unknown 3`</p><p>- IN_RANGE: `0 3 `</p><p>⛔️ON_FAIL: `CUSTOM_VALUE -> 3`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1h`</p> |
+|Azure |Azure: Availability status detailed |<p>The summary description of the availability status.</p> |DEPENDENT |azure.vm.availability.details<p>**Preprocessing**:</p><p>- JSONPATH: `$.health.summary`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1h`</p> |
|Azure |Azure: Percentage CPU |<p>The percentage of allocated compute units that are currently in use by the Virtual Machine(s).</p> |DEPENDENT |azure.vm.cpu.percentage<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.PercentageCPU.average`</p> |
-|Azure |Azure: Disk read rate |<p>Bytes read from disk during monitoring period (1 minute).</p> |DEPENDENT |azure.vm.disk.read.bytes<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.DiskReadBytes.total`</p><p>- MULTIPLIER: `0.0167`</p> |
-|Azure |Azure: Disk write rate |<p>Bytes written to disk during monitoring period (1 minute).</p> |DEPENDENT |azure.vm.disk.write.bytes<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.DiskWriteBytes.total`</p><p>- MULTIPLIER: `0.0167`</p> |
-|Azure |Azure: Disk read Operations/Sec |<p>Disk read IOPS.</p> |DEPENDENT |azure.vm.disk.read.ops<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.DiskReadOperationsSec.average`</p> |
-|Azure |Azure: Disk write Operations/Sec |<p>Disk write IOPS.</p> |DEPENDENT |azure.vm.disk.write.ops<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.DiskWriteOperationsSec.average`</p> |
-|Azure |Azure: CPU credits remaining |<p>Total number of credits available to burst. Only available on B-series burstable VMs.</p> |DEPENDENT |azure.vm.cpu.credits.remaining<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.CPUCreditsRemaining.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
-|Azure |Azure: CPU credits consumed |<p>Total number of credits consumed by the Virtual Machine. Only available on B-series burstable VMs.</p> |DEPENDENT |azure.vm.cpu.credits.consumed<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.CPUCreditsConsumed.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
-|Azure |Azure: Data disk read rate |<p>Bytes/Sec read from a single disk during monitoring period.</p> |DEPENDENT |azure.vm.data.disk.read.bps<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.DataDiskReadBytessec.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
-|Azure |Azure: Data disk write rate |<p>Bytes/Sec written to a single disk during monitoring period.</p> |DEPENDENT |azure.vm.data.disk.write.bps<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.DataDiskWriteBytessec.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
-|Azure |Azure: Data disk read operations/sec |<p>Read IOPS from a single disk during monitoring period.</p> |DEPENDENT |azure.vm.data.disk.read.ops<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.DataDiskReadOperationsSec.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
-|Azure |Azure: Data disk write operations/sec |<p>Write IOPS from a single disk during monitoring period.</p> |DEPENDENT |azure.vm.data.disk.write.ops<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.DataDiskWriteOperationsSec.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
-|Azure |Azure: Data disk queue depth |<p>Data Disk Queue Depth(or Queue Length).</p> |DEPENDENT |azure.vm.data.disk.queue.depth<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.DataDiskQueueDepth.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
-|Azure |Azure: Data disk bandwidth consumed percentage |<p>Percentage of data disk bandwidth consumed per minute.</p> |DEPENDENT |azure.vm.data.disk.bandwidth.consumed.percentage<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.DataDiskBandwidthConsumedPercentage.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
-|Azure |Azure: Data disk IOPS consumed percentage |<p>Percentage of data disk I/Os consumed per minute.</p> |DEPENDENT |azure.vm.data.disk.iops.consumed.percentage<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.DataDiskIOPSConsumedPercentage.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
+|Azure |Azure: Disk read rate |<p>Bytes read from the disk during the monitoring period (1 minute).</p> |DEPENDENT |azure.vm.disk.read.bytes<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.DiskReadBytes.total`</p><p>- MULTIPLIER: `0.0167`</p> |
+|Azure |Azure: Disk write rate |<p>Bytes written to the disk during the monitoring period (1 minute).</p> |DEPENDENT |azure.vm.disk.write.bytes<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.DiskWriteBytes.total`</p><p>- MULTIPLIER: `0.0167`</p> |
+|Azure |Azure: Disk read Operations/Sec |<p>The count of read operations from the disk per second.</p> |DEPENDENT |azure.vm.disk.read.ops<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.DiskReadOperationsSec.average`</p> |
+|Azure |Azure: Disk write Operations/Sec |<p>The count of write operations to the disk per second.</p> |DEPENDENT |azure.vm.disk.write.ops<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.DiskWriteOperationsSec.average`</p> |
+|Azure |Azure: CPU credits remaining |<p>The total number of credits available to burst. Only available on B-series burstable VMs.</p> |DEPENDENT |azure.vm.cpu.credits.remaining<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.CPUCreditsRemaining.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
+|Azure |Azure: CPU credits consumed |<p>The total number of credits consumed by the Virtual Machine. Only available on B-series burstable VMs.</p> |DEPENDENT |azure.vm.cpu.credits.consumed<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.CPUCreditsConsumed.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
+|Azure |Azure: Data disk read rate |<p>Bytes/Sec read from a single disk during the monitoring period.</p> |DEPENDENT |azure.vm.data.disk.read.bps<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.DataDiskReadBytessec.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
+|Azure |Azure: Data disk write rate |<p>Bytes/Sec written to a single disk during the monitoring period.</p> |DEPENDENT |azure.vm.data.disk.write.bps<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.DataDiskWriteBytessec.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
+|Azure |Azure: Data disk read operations/sec |<p>The read IOPS from a single disk during the monitoring period.</p> |DEPENDENT |azure.vm.data.disk.read.ops<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.DataDiskReadOperationsSec.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
+|Azure |Azure: Data disk write operations/sec |<p>The write IOPS from a single disk during the monitoring period.</p> |DEPENDENT |azure.vm.data.disk.write.ops<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.DataDiskWriteOperationsSec.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
+|Azure |Azure: Data disk queue depth |<p>The queue depth (or queue length) of the Data Disk.</p> |DEPENDENT |azure.vm.data.disk.queue.depth<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.DataDiskQueueDepth.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
+|Azure |Azure: Data disk bandwidth consumed percentage |<p>The percentage of the Data Disk bandwidth consumed per minute.</p> |DEPENDENT |azure.vm.data.disk.bandwidth.consumed.percentage<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.DataDiskBandwidthConsumedPercentage.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
+|Azure |Azure: Data disk IOPS consumed percentage |<p>The percentage of the Data Disk I/Os consumed per minute.</p> |DEPENDENT |azure.vm.data.disk.iops.consumed.percentage<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.DataDiskIOPSConsumedPercentage.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
|Azure |Azure: Data disk target bandwidth |<p>Baseline bytes per second throughput Data Disk can achieve without bursting.</p> |DEPENDENT |azure.vm.data.disk.target.bandwidth<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.DataDiskTargetBandwidth.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
|Azure |Azure: Data disk target IOPS |<p>Baseline IOPS Data Disk can achieve without bursting.</p> |DEPENDENT |azure.vm.data.disk.target.iops<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.DataDiskTargetIOPS.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
|Azure |Azure: Data disk max burst bandwidth |<p>Maximum bytes per second throughput Data Disk can achieve with bursting.</p> |DEPENDENT |azure.vm.data.disk.max.bandwidth<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.DataDiskMaxBurstBandwidth.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
|Azure |Azure: Data disk max burst IOPS |<p>Maximum IOPS Data Disk can achieve with bursting.</p> |DEPENDENT |azure.vm.data.disk.max.iops<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.DataDiskMaxBurstIOPS.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
-|Azure |Azure: Data disk used burst BPS credits percentage |<p>Percentage of Data Disk burst bandwidth credits used so far.</p> |DEPENDENT |azure.vm.data.disk.used.burst.bandwidth<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.DataDiskUsedBurstBPSCreditsPercentage.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
-|Azure |Azure: Data disk used burst IO credits percentage |<p>Percentage of Data Disk burst I/O credits used so far.</p> |DEPENDENT |azure.vm.data.disk.used.burst.iops<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.DataDiskUsedBurstIOCreditsPercentage.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
-|Azure |Azure: OS disk read rate |<p>Bytes/Sec read from a single disk during monitoring period for OS disk.</p> |DEPENDENT |azure.vm.os.disk.read.bps<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.OSDiskReadBytessec.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
-|Azure |Azure: OS disk write rate |<p>Bytes/Sec written to a single disk during monitoring period for OS disk.</p> |DEPENDENT |azure.vm.os.disk.write.bps<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.OSDiskWriteBytessec.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
-|Azure |Azure: OS disk read operations/sec |<p>Read IOPS from a single disk during monitoring period for OS disk.</p> |DEPENDENT |azure.vm.os.disk.read.ops<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.OSDiskReadOperationsSec.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
-|Azure |Azure: OS disk write operations/sec |<p>Write IOPS from a single disk during monitoring period for OS disk.</p> |DEPENDENT |azure.vm.os.disk.write.ops<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.OSDiskWriteOperationsSec.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
-|Azure |Azure: OS disk queue depth |<p>OS Disk Queue Depth(or Queue Length).</p> |DEPENDENT |azure.vm.os.disk.queue.depth<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.OSDiskQueueDepth.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
-|Azure |Azure: OS disk bandwidth consumed percentage |<p>Percentage of operating system disk bandwidth consumed per minute.</p> |DEPENDENT |azure.vm.os.disk.bandwidth.consumed.percentage<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.OSDiskBandwidthConsumedPercentage.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
-|Azure |Azure: OS disk IOPS consumed percentage |<p>Percentage of operating system disk I/Os consumed per minute.</p> |DEPENDENT |azure.vm.os.disk.iops.consumed.percentage<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.OSDiskIOPSConsumedPercentage.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
+|Azure |Azure: Data disk used burst BPS credits percentage |<p>The percentage of the Data Disk burst bandwidth credits used so far.</p> |DEPENDENT |azure.vm.data.disk.used.burst.bandwidth<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.DataDiskUsedBurstBPSCreditsPercentage.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
+|Azure |Azure: Data disk used burst IO credits percentage |<p>The percentage of the Data Disk burst I/O credits used so far.</p> |DEPENDENT |azure.vm.data.disk.used.burst.iops<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.DataDiskUsedBurstIOCreditsPercentage.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
+|Azure |Azure: OS disk read rate |<p>Bytes/Sec read from a single disk during the monitoring period for OS disk.</p> |DEPENDENT |azure.vm.os.disk.read.bps<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.OSDiskReadBytessec.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
+|Azure |Azure: OS disk write rate |<p>Bytes/Sec written to a single disk during the monitoring period for OS disk.</p> |DEPENDENT |azure.vm.os.disk.write.bps<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.OSDiskWriteBytessec.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
+|Azure |Azure: OS disk read operations/sec |<p>The read IOPS from a single disk during the monitoring period for OS disk.</p> |DEPENDENT |azure.vm.os.disk.read.ops<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.OSDiskReadOperationsSec.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
+|Azure |Azure: OS disk write operations/sec |<p>The write IOPS from a single disk during the monitoring period for OS disk.</p> |DEPENDENT |azure.vm.os.disk.write.ops<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.OSDiskWriteOperationsSec.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
+|Azure |Azure: OS disk queue depth |<p>The OS disk queue depth (or queue length).</p> |DEPENDENT |azure.vm.os.disk.queue.depth<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.OSDiskQueueDepth.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
+|Azure |Azure: OS disk bandwidth consumed percentage |<p>The percentage of the operating system disk bandwidth consumed per minute.</p> |DEPENDENT |azure.vm.os.disk.bandwidth.consumed.percentage<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.OSDiskBandwidthConsumedPercentage.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
+|Azure |Azure: OS disk IOPS consumed percentage |<p>The percentage of the operating system disk I/Os consumed per minute.</p> |DEPENDENT |azure.vm.os.disk.iops.consumed.percentage<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.OSDiskIOPSConsumedPercentage.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
|Azure |Azure: OS disk target bandwidth |<p>Baseline bytes per second throughput OS Disk can achieve without bursting.</p> |DEPENDENT |azure.vm.os.disk.target.bandwidth<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.OSDiskTargetBandwidth.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
|Azure |Azure: OS disk target IOPS |<p>Baseline IOPS OS Disk can achieve without bursting.</p> |DEPENDENT |azure.vm.os.disk.target.iops<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.OSDiskTargetIOPS.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
|Azure |Azure: OS disk max burst bandwidth |<p>Maximum bytes per second throughput OS Disk can achieve with bursting.</p> |DEPENDENT |azure.vm.os.disk.max.bandwidth<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.OSDiskMaxBurstBandwidth.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
|Azure |Azure: OS disk max burst IOPS |<p>Maximum IOPS OS Disk can achieve with bursting.</p> |DEPENDENT |azure.vm.os.disk.max.iops<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.OSDiskMaxBurstIOPS.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
-|Azure |Azure: OS disk used burst BPS credits percentage |<p>Percentage of OS Disk burst bandwidth credits used so far.</p> |DEPENDENT |azure.vm.os.disk.used.burst.bandwidth<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.OSDiskUsedBurstBPSCreditsPercentage.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
+|Azure |Azure: OS disk used burst BPS credits percentage |<p>The percentage of the OS Disk burst bandwidth credits used so far.</p> |DEPENDENT |azure.vm.os.disk.used.burst.bandwidth<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.OSDiskUsedBurstBPSCreditsPercentage.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
|Azure |Azure: OS disk used burst IO credits percentage |<p>Percentage of OS Disk burst I/O credits used so far.</p> |DEPENDENT |azure.vm.os.disk.used.burst.iops<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.OSDiskUsedBurstIOCreditsPercentage.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
-|Azure |Azure: Inbound flows |<p>Inbound Flows are number of current flows in the inbound direction (traffic going into the VM).</p> |DEPENDENT |azure.vm.flows.inbound<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.InboundFlows.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
-|Azure |Azure: Outbound flows |<p>Outbound Flows are number of current flows in the outbound direction (traffic going out of the VM).</p> |DEPENDENT |azure.vm.flows.outbound<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.OutboundFlows.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
-|Azure |Azure: Inbound flows max creation rate |<p>The maximum creation rate of inbound flows (traffic going into the VM).</p> |DEPENDENT |azure.vm.flows.inbound.max<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.InboundFlowsMaximumCreationRate.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
-|Azure |Azure: Outbound flows max creation rate |<p>The maximum creation rate of outbound flows (traffic going out of the VM).</p> |DEPENDENT |azure.vm.flows.outbound.max<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.OutboundFlowsMaximumCreationRate.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
-|Azure |Azure: Premium data disk cache read hit |<p>Premium data disk cache read hit.</p> |DEPENDENT |azure.vm.premium.data.disk.cache.read.hit<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.PremiumDataDiskCacheReadHit.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
-|Azure |Azure: Premium data disk cache read miss |<p>Premium data disk cache read miss.</p> |DEPENDENT |azure.vm.premium.data.disk.cache.read.miss<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.PremiumDataDiskCacheReadMiss.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
+|Azure |Azure: Inbound flows |<p>Inbound Flows are number of the current flows in the inbound direction (traffic going into the VM).</p> |DEPENDENT |azure.vm.flows.inbound<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.InboundFlows.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
+|Azure |Azure: Outbound flows |<p>Outbound Flows are number of the current flows in the outbound direction (traffic going out of the VM).</p> |DEPENDENT |azure.vm.flows.outbound<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.OutboundFlows.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
+|Azure |Azure: Inbound flows max creation rate |<p>The maximum creation rate of the inbound flows (traffic going into the VM).</p> |DEPENDENT |azure.vm.flows.inbound.max<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.InboundFlowsMaximumCreationRate.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
+|Azure |Azure: Outbound flows max creation rate |<p>The maximum creation rate of the outbound flows (traffic going out of the VM).</p> |DEPENDENT |azure.vm.flows.outbound.max<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.OutboundFlowsMaximumCreationRate.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
+|Azure |Azure: Premium data disk cache read hit |<p>Premium Data Disk cache read hit.</p> |DEPENDENT |azure.vm.premium.data.disk.cache.read.hit<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.PremiumDataDiskCacheReadHit.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
+|Azure |Azure: Premium data disk cache read miss |<p>Premium Data Disk cache read miss.</p> |DEPENDENT |azure.vm.premium.data.disk.cache.read.miss<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.PremiumDataDiskCacheReadMiss.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
|Azure |Azure: Premium OS disk cache read hit |<p>Premium OS disk cache read hit.</p> |DEPENDENT |azure.vm.premium.os.disk.cache.read.hit<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.PremiumOSDiskCacheReadHit.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
|Azure |Azure: Premium OS disk cache read miss |<p>Premium OS disk cache read miss.</p> |DEPENDENT |azure.vm.premium.os.disk.cache.read.miss<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.PremiumOSDiskCacheReadMiss.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
|Azure |Azure: VM cached bandwidth consumed percentage |<p>Percentage of cached disk bandwidth consumed by the VM.</p> |DEPENDENT |azure.vm.cached.bandwidth.consumed.percentage<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.VMCachedBandwidthConsumedPercentage.average`</p> |
|Azure |Azure: VM cached IOPS consumed percentage |<p>Percentage of cached disk IOPS consumed by the VM.</p> |DEPENDENT |azure.vm.cached.iops.consumed.percentage<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.VMCachedIOPSConsumedPercentage.average`</p> |
-|Azure |Azure: VM uncached bandwidth consumed percentage |<p>Percentage of uncached disk bandwidth consumed by the VM.</p> |DEPENDENT |azure.vm.uncached.bandwidth.consumed.percentage<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.VMUncachedBandwidthConsumedPercentage.average`</p> |
-|Azure |Azure: VM uncached IOPS consumed percentage |<p>Percentage of uncached disk IOPS consumed by the VM.</p> |DEPENDENT |azure.vm.uncached.iops.consumed.percentage<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.VMUncachedIOPSConsumedPercentage.average`</p> |
+|Azure |Azure: VM uncached bandwidth consumed percentage |<p>The percentage of the uncached disk bandwidth consumed by the VM.</p> |DEPENDENT |azure.vm.uncached.bandwidth.consumed.percentage<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.VMUncachedBandwidthConsumedPercentage.average`</p> |
+|Azure |Azure: VM uncached IOPS consumed percentage |<p>The percentage of the uncached disk IOPS consumed by the VM.</p> |DEPENDENT |azure.vm.uncached.iops.consumed.percentage<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.VMUncachedIOPSConsumedPercentage.average`</p> |
|Azure |Azure: Network in total |<p>The number of bytes received on all network interfaces by the Virtual Machine(s) (Incoming Traffic).</p> |DEPENDENT |azure.vm.network.in.total<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.NetworkInTotal.total`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p><p>- MULTIPLIER: `0.1333`</p> |
|Azure |Azure: Network out total |<p>The number of bytes out on all network interfaces by the Virtual Machine(s) (Outgoing Traffic).</p> |DEPENDENT |azure.vm.network.out.total<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.NetworkOutTotal.total`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p><p>- MULTIPLIER: `0.1333`</p> |
-|Azure |Azure: Available memory |<p>Amount of physical memory, in bytes, immediately available for allocation to a process or for system use in the Virtual Machine.</p> |DEPENDENT |azure.vm.memory.available<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.AvailableMemoryBytes.average`</p> |
+|Azure |Azure: Available memory |<p>The amount of physical memory, in bytes, immediately available for allocation to a process or for system use in the Virtual Machine.</p> |DEPENDENT |azure.vm.memory.available<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.AvailableMemoryBytes.average`</p> |
## Triggers
|Name|Description|Expression|Severity|Dependencies and additional info|
|----|-----------|----|----|----|
-|Azure: There are errors in requests to API |<p>Zabbix has received errors in requests to API.</p> |`length(last(/Azure virtual machine by HTTP/azure.vm.data.errors))>0` |AVERAGE | |
+|Azure: There are errors in requests to API |<p>Zabbix has received errors in response to API requests.</p> |`length(last(/Azure virtual machine by HTTP/azure.vm.data.errors))>0` |AVERAGE | |
|Azure: Virtual machine is unavailable |<p>The resource state is unavailable.</p> |`last(/Azure virtual machine by HTTP/azure.vm.availability.state)=2` |HIGH | |
|Azure: Virtual machine is degraded |<p>The resource is in degraded state.</p> |`last(/Azure virtual machine by HTTP/azure.vm.availability.state)=1` |AVERAGE | |
|Azure: Virtual machine is in unknown state |<p>The resource state is unknown.</p> |`last(/Azure virtual machine by HTTP/azure.vm.availability.state)=3` |WARNING | |
-|Azure: High CPU utilization |<p>CPU utilization is too high. the system might be slow to respond.</p> |`min(/Azure virtual machine by HTTP/azure.vm.cpu.percentage,5m)>{$AZURE.VM.CPU.UTIL.CRIT}` |HIGH | |
+|Azure: High CPU utilization |<p>CPU utilization is too high. The system might be slow to respond.</p> |`min(/Azure virtual machine by HTTP/azure.vm.cpu.percentage,5m)>{$AZURE.VM.CPU.UTIL.CRIT}` |HIGH | |
+
+## Feedback
+
+Please report any issues with the template at https://support.zabbix.com.
+
+You can also provide feedback, discuss the template or ask for help at [ZABBIX forums](https://www.zabbix.com/forum/zabbix-suggestions-and-feedback/).
+
+# Azure MySQL flexible server by HTTP
+
+## Overview
+
+For Zabbix version: 6.4 and higher.
+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
+
+> See [Zabbix template operation](https://www.zabbix.com/documentation/6.4/manual/config/templates_out_of_the_box/http) for basic instructions.
+
+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 [Azure documentation](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 macros {$AZURE.APP_ID}, {$AZURE.PASSWORD}, {$AZURE.TENANT_ID}, {$AZURE.SUBSCRIPTION_ID} and {$AZURE.RESOURCE_ID}.
+
+## Zabbix configuration
+
+No specific Zabbix configuration is required.
+
+### Macros used
+
+|Name|Description|Default|
+|----|-----------|-------|
+|{$AZURE.APP_ID} |<p>Microsoft Azure app ID.</p> |`` |
+|{$AZURE.DATA.TIMEOUT} |<p>A response timeout for API.</p> |`60s` |
+|{$AZURE.DB.ABORTED_CONN.MAX.WARN} |<p>The number of failed attempts to connect to the MySQL server for trigger expression.</p> |`25` |
+|{$AZURE.DB.CPU.UTIL.CRIT} |<p>The critical threshold of the CPU utilization in %.</p> |`90` |
+|{$AZURE.DB.MEMORY.UTIL.CRIT} |<p>The critical threshold of the memory utilization in %.</p> |`90` |
+|{$AZURE.DB.STORAGE.PUSED.CRIT} |<p>The critical threshold of the storage utilization in %.</p> |`90` |
+|{$AZURE.DB.STORAGE.PUSED.WARN} |<p>The warning threshold of the storage utilization in %.</p> |`80` |
+|{$AZURE.PASSWORD} |<p>Microsoft Azure password.</p> |`` |
+|{$AZURE.RESOURCE_ID} |<p>Microsoft Azure virtual machine ID.</p> |`` |
+|{$AZURE.SUBSCRIPTION_ID} |<p>Microsoft Azure subscription ID.</p> |`` |
+|{$AZURE.TENANT_ID} |<p>Microsoft Azure tenant ID.</p> |`` |
+
+## Template links
+
+There are no template links in this template.
+
+## Discovery rules
+
+
+## Items collected
+
+|Group|Name|Description|Type|Key and additional info|
+|-----|----|-----------|----|---------------------|
+|Azure |Azure MySQL: Get data |<p>The result of API requests is in the JSON.</p> |SCRIPT |azure.db.mysql.data.get<p>**Expression**:</p>`The text is too long. Please see the template.` |
+|Azure |Azure MySQL: Get errors |<p>A list of errors from API requests.</p> |DEPENDENT |azure.db.mysql.data.errors<p>**Preprocessing**:</p><p>- JSONPATH: `$.errors`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1h`</p> |
+|Azure |Azure MySQL: Availability state |<p>The availability status of the resource.</p> |DEPENDENT |azure.db.mysql.availability.state<p>**Preprocessing**:</p><p>- JSONPATH: `$.health.availabilityState`</p><p>⛔️ON_FAIL: `CUSTOM_VALUE -> 3`</p><p>- STR_REPLACE: `Available 0`</p><p>- STR_REPLACE: `Degraded 1`</p><p>- STR_REPLACE: `Unavailable 2`</p><p>- STR_REPLACE: `Unknown 3`</p><p>- IN_RANGE: `0 3 `</p><p>⛔️ON_FAIL: `CUSTOM_VALUE -> 3`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1h`</p> |
+|Azure |Azure MySQL: Availability status detailed |<p>The summary description of the availability status.</p> |DEPENDENT |azure.db.mysql.availability.details<p>**Preprocessing**:</p><p>- JSONPATH: `$.health.summary`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1h`</p> |
+|Azure |Azure MySQL: Percentage CPU |<p>The CPU percent of a host.</p> |DEPENDENT |azure.db.mysql.cpu.percentage<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.cpu_percent.maximum`</p> |
+|Azure |Azure MySQL: Memory utilization |<p>The memory percent of a host.</p> |DEPENDENT |azure.db.mysql.memory.percentage<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.memory_percent.maximum`</p> |
+|Azure |Azure MySQL: Network out |<p>Network egress of a host in bytes.</p> |DEPENDENT |azure.db.mysql.network.egress<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.network_bytes_egress.total`</p><p>- MULTIPLIER: `0.0088`</p> |
+|Azure |Azure MySQL: Network in |<p>Network ingress of a host in bytes.</p> |DEPENDENT |azure.db.mysql.network.ingress<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.network_bytes_ingress.total`</p><p>- MULTIPLIER: `0.0088`</p> |
+|Azure |Azure MySQL: Connections active |<p>The count of active connections.</p> |DEPENDENT |azure.db.mysql.connections.active<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.active_connections.maximum`</p> |
+|Azure |Azure MySQL: Connections total |<p>The count of total connections.</p> |DEPENDENT |azure.db.mysql.connections.total<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.total_connections.total`</p> |
+|Azure |Azure MySQL: Connections aborted |<p>The count of aborted connections.</p> |DEPENDENT |azure.db.mysql.connections.aborted<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.aborted_connections.total`</p> |
+|Azure |Azure MySQL: Queries |<p>The count of queries.</p> |DEPENDENT |azure.db.mysql.queries<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.Queries.total`</p> |
+|Azure |Azure MySQL: IO consumption percent |<p>The IO percent.</p> |DEPENDENT |azure.db.mysql.io.consumption.percent<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.io_consumption_percent.maximum`</p> |
+|Azure |Azure MySQL: Storage percent |<p>Storage utilization in %.</p> |DEPENDENT |azure.db.mysql.storage.percent<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.storage_percent.maximum`</p> |
+|Azure |Azure MySQL: Storage used |<p>Used storage space in bytes.</p> |DEPENDENT |azure.db.mysql.storage.used<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.storage_used.maximum`</p> |
+|Azure |Azure MySQL: Storage limit |<p>The storage limit in bytes.</p> |DEPENDENT |azure.db.mysql.storage.limit<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.storage_limit.maximum`</p> |
+|Azure |Azure MySQL: Backup storage used |<p>The backup storage used in bytes.</p> |DEPENDENT |azure.db.mysql.storage.backup.used<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.backup_storage_used.maximum`</p> |
+|Azure |Azure MySQL: Replication lag |<p>Replication lag in seconds.</p> |DEPENDENT |azure.db.mysql.replication.lag<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.replication_lag.maximum`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
+|Azure |Azure MySQL: CPU credits remaining |<p>Remaining CPU credits.</p> |DEPENDENT |azure.db.mysql.cpu.credits.remaining<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.cpu_credits_remaining.maximum`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
+|Azure |Azure MySQL: CPU credits consumed |<p>Consumed CPU credits.</p> |DEPENDENT |azure.db.mysql.cpu.credits.consumed<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.cpu_credits_consumed.maximum`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
+
+## Triggers
+
+|Name|Description|Expression|Severity|Dependencies and additional info|
+|----|-----------|----|----|----|
+|Azure MySQL: There are errors in requests to API |<p>Zabbix has received errors in response to API requests.</p> |`length(last(/Azure MySQL flexible server by HTTP/azure.db.mysql.data.errors))>0` |AVERAGE | |
+|Azure MySQL: MySQL server is unavailable |<p>The resource state is unavailable.</p> |`last(/Azure MySQL flexible server by HTTP/azure.db.mysql.availability.state)=2` |HIGH | |
+|Azure MySQL: MySQL server is degraded |<p>The resource is in degraded state.</p> |`last(/Azure MySQL flexible server by HTTP/azure.db.mysql.availability.state)=1` |AVERAGE | |
+|Azure MySQL: MySQL server is in unknown state |<p>The resource state is unknown.</p> |`last(/Azure MySQL flexible server by HTTP/azure.db.mysql.availability.state)=3` |WARNING | |
+|Azure MySQL: High CPU utilization |<p>CPU utilization is too high. The system might be slow to respond.</p> |`min(/Azure MySQL flexible server by HTTP/azure.db.mysql.cpu.percentage,5m)>{$AZURE.DB.CPU.UTIL.CRIT}` |HIGH | |
+|Azure MySQL: Server has aborted connections |<p>The number of failed attempts to connect to the MySQL server is more than {$AZURE.DB.ABORTED_CONN.MAX.WARN}.</p> |`min(/Azure MySQL flexible server by HTTP/azure.db.mysql.connections.aborted,5m)>{$AZURE.DB.ABORTED_CONN.MAX.WARN}` |AVERAGE | |
+|Azure MySQL: Storage space is critically low |<p>Critical utilization of the storage space.</p> |`last(/Azure MySQL flexible server by HTTP/azure.db.mysql.storage.percent)>{$AZURE.DB.STORAGE.PUSED.CRIT}` |AVERAGE | |
+|Azure MySQL: Storage space is low |<p>High utilization of the storage space.</p> |`last(/Azure MySQL flexible server by HTTP/azure.db.mysql.storage.percent)>{$AZURE.DB.STORAGE.PUSED.WARN}` |WARNING | |
+
+## Feedback
+
+Please report any issues with the template at https://support.zabbix.com.
+
+You can also provide feedback, discuss the template or ask for help at [ZABBIX forums](https://www.zabbix.com/forum/zabbix-suggestions-and-feedback/).
+
+# Azure MySQL single server by HTTP
+
+## Overview
+
+For Zabbix version: 6.4 and higher.
+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
+
+> See [Zabbix template operation](https://www.zabbix.com/documentation/6.4/manual/config/templates_out_of_the_box/http) for basic instructions.
+
+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 [Azure documentation](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 macros {$AZURE.APP_ID}, {$AZURE.PASSWORD}, {$AZURE.TENANT_ID}, {$AZURE.SUBSCRIPTION_ID} and {$AZURE.RESOURCE_ID}.
+
+## Zabbix configuration
+
+No specific Zabbix configuration is required.
+
+### Macros used
+
+|Name|Description|Default|
+|----|-----------|-------|
+|{$AZURE.APP_ID} |<p>Microsoft Azure app ID.</p> |`` |
+|{$AZURE.DATA.TIMEOUT} |<p>A response timeout for API.</p> |`60s` |
+|{$AZURE.DB.CPU.UTIL.CRIT} |<p>The critical threshold of the CPU utilization in %.</p> |`90` |
+|{$AZURE.DB.FAILED_CONN.MAX.WARN} |<p>The number of failed attempts to connect to the MySQL server for trigger expression.</p> |`25` |
+|{$AZURE.DB.MEMORY.UTIL.CRIT} |<p>The critical threshold of the memory utilization in %.</p> |`90` |
+|{$AZURE.DB.STORAGE.PUSED.CRIT} |<p>The critical threshold of the storage utilization in %.</p> |`90` |
+|{$AZURE.DB.STORAGE.PUSED.WARN} |<p>The warning threshold of the storage utilization in %.</p> |`80` |
+|{$AZURE.PASSWORD} |<p>Microsoft Azure password.</p> |`` |
+|{$AZURE.RESOURCE_ID} |<p>Microsoft Azure virtual machine ID.</p> |`` |
+|{$AZURE.SUBSCRIPTION_ID} |<p>Microsoft Azure subscription ID.</p> |`` |
+|{$AZURE.TENANT_ID} |<p>Microsoft Azure tenant ID.</p> |`` |
+
+## Template links
+
+There are no template links in this template.
+
+## Discovery rules
+
+
+## Items collected
+
+|Group|Name|Description|Type|Key and additional info|
+|-----|----|-----------|----|---------------------|
+|Azure |Azure MySQL: Get data |<p>The result of API requests is in the JSON.</p> |SCRIPT |azure.db.mysql.data.get<p>**Expression**:</p>`The text is too long. Please see the template.` |
+|Azure |Azure MySQL: Get errors |<p>A list of errors from API requests.</p> |DEPENDENT |azure.db.mysql.data.errors<p>**Preprocessing**:</p><p>- JSONPATH: `$.errors`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1h`</p> |
+|Azure |Azure MySQL: Availability state |<p>The availability status of the resource.</p> |DEPENDENT |azure.db.mysql.availability.state<p>**Preprocessing**:</p><p>- JSONPATH: `$.health.availabilityState`</p><p>⛔️ON_FAIL: `CUSTOM_VALUE -> 3`</p><p>- STR_REPLACE: `Available 0`</p><p>- STR_REPLACE: `Degraded 1`</p><p>- STR_REPLACE: `Unavailable 2`</p><p>- STR_REPLACE: `Unknown 3`</p><p>- IN_RANGE: `0 3 `</p><p>⛔️ON_FAIL: `CUSTOM_VALUE -> 3`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1h`</p> |
+|Azure |Azure MySQL: Availability status detailed |<p>The summary description of the availability status.</p> |DEPENDENT |azure.db.mysql.availability.details<p>**Preprocessing**:</p><p>- JSONPATH: `$.health.summary`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1h`</p> |
+|Azure |Azure MySQL: Percentage CPU |<p>The CPU percent of a host.</p> |DEPENDENT |azure.db.mysql.cpu.percentage<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.cpu_percent.average`</p> |
+|Azure |Azure MySQL: Memory utilization |<p>The memory percent of a host.</p> |DEPENDENT |azure.db.mysql.memory.percentage<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.memory_percent.average`</p> |
+|Azure |Azure MySQL: Network out |<p>Network outbound traffic across the active connections.</p> |DEPENDENT |azure.db.mysql.network.egress<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.network_bytes_egress.total`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p><p>- MULTIPLIER: `0.0088`</p> |
+|Azure |Azure MySQL: Network in |<p>Network inbound traffic across the active connections.</p> |DEPENDENT |azure.db.mysql.network.ingress<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.network_bytes_ingress.total`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p><p>- MULTIPLIER: `0.0088`</p> |
+|Azure |Azure MySQL: Connections active |<p>The count of active connections.</p> |DEPENDENT |azure.db.mysql.connections.active<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.active_connections.average`</p> |
+|Azure |Azure MySQL: Connections failed |<p>The count of failed connections.</p> |DEPENDENT |azure.db.mysql.connections.failed<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.connections_failed.total`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
+|Azure |Azure MySQL: IO consumption percent |<p>The IO percent.</p> |DEPENDENT |azure.db.mysql.io.consumption.percent<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.io_consumption_percent.average`</p> |
+|Azure |Azure MySQL: Storage percent |<p>Storage utilization in %.</p> |DEPENDENT |azure.db.mysql.storage.percent<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.storage_percent.average`</p> |
+|Azure |Azure MySQL: Storage used |<p>Used storage space in bytes.</p> |DEPENDENT |azure.db.mysql.storage.used<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.storage_used.average`</p> |
+|Azure |Azure MySQL: Storage limit |<p>The storage limit in bytes.</p> |DEPENDENT |azure.db.mysql.storage.limit<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.storage_limit.maximum`</p> |
+|Azure |Azure MySQL: Backup storage used |<p>The backup storage used in bytes.</p> |DEPENDENT |azure.db.mysql.storage.backup.used<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.backup_storage_used.average`</p> |
+|Azure |Azure MySQL: Replication lag |<p>Replication lag in seconds.</p> |DEPENDENT |azure.db.mysql.replication.lag<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.seconds_behind_master.maximum`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
+|Azure |Azure MySQL: Server log storage percent |<p>The storage utilization by a server log in %.</p> |DEPENDENT |azure.db.mysql.storage.server.log.percent<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.serverlog_storage_percent.average`</p> |
+|Azure |Azure MySQL: Server log storage used |<p>The storage space used by a server log in bytes.</p> |DEPENDENT |azure.db.mysql.storage.server.log.used<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.serverlog_storage_usage.average`</p> |
+|Azure |Azure MySQL: Server log storage limit |<p>The storage limit of server log in bytes.</p> |DEPENDENT |azure.db.mysql.storage.server.log.limit<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.serverlog_storage_limit.maximum`</p> |
+
+## Triggers
+
+|Name|Description|Expression|Severity|Dependencies and additional info|
+|----|-----------|----|----|----|
+|Azure MySQL: There are errors in requests to API |<p>Zabbix has received errors in response to API requests.</p> |`length(last(/Azure MySQL single server by HTTP/azure.db.mysql.data.errors))>0` |AVERAGE | |
+|Azure MySQL: MySQL server is unavailable |<p>The resource state is unavailable.</p> |`last(/Azure MySQL single server by HTTP/azure.db.mysql.availability.state)=2` |HIGH | |
+|Azure MySQL: MySQL server is degraded |<p>The resource is in degraded state.</p> |`last(/Azure MySQL single server by HTTP/azure.db.mysql.availability.state)=1` |AVERAGE | |
+|Azure MySQL: MySQL server is in unknown state |<p>The resource state is unknown.</p> |`last(/Azure MySQL single server by HTTP/azure.db.mysql.availability.state)=3` |WARNING | |
+|Azure MySQL: High CPU utilization |<p>CPU utilization is too high. The system might be slow to respond.</p> |`min(/Azure MySQL single server by HTTP/azure.db.mysql.cpu.percentage,5m)>{$AZURE.DB.CPU.UTIL.CRIT}` |HIGH | |
+|Azure MySQL: High memory utilization |<p>The system is running out of free memory.</p> |`min(/Azure MySQL single server by HTTP/azure.db.mysql.memory.percentage,5m)>{$AZURE.DB.MEMORY.UTIL.CRIT}` |AVERAGE | |
+|Azure MySQL: Server has failed connections |<p>The number of failed attempts to connect to the MySQL server is more than {$AZURE.DB.FAILED_CONN.MAX.WARN}.</p> |`min(/Azure MySQL single server by HTTP/azure.db.mysql.connections.failed,5m)>{$AZURE.DB.FAILED_CONN.MAX.WARN}` |AVERAGE | |
+|Azure MySQL: Storage space is critically low |<p>Critical utilization of the storage space.</p> |`last(/Azure MySQL single server by HTTP/azure.db.mysql.storage.percent)>{$AZURE.DB.STORAGE.PUSED.CRIT}` |AVERAGE | |
+|Azure MySQL: Storage space is low |<p>High utilization of the storage space.</p> |`last(/Azure MySQL single server by HTTP/azure.db.mysql.storage.percent)>{$AZURE.DB.STORAGE.PUSED.WARN}` |WARNING | |
## Feedback
-Please report any issues with the template at https://support.zabbix.com
+Please report any issues with the template at https://support.zabbix.com.
-You can also provide feedback, discuss the template or ask for help with it at [ZABBIX forums](https://www.zabbix.com/forum/zabbix-suggestions-and-feedback/).
+You can also provide feedback, discuss the template or ask for help at [ZABBIX forums](https://www.zabbix.com/forum/zabbix-suggestions-and-feedback/).
diff --git a/templates/cloud/azure_http/template_cloud_azure_http.yaml b/templates/cloud/azure_http/template_cloud_azure_http.yaml
index ac6f0800ee3..53bcf884e79 100644
--- a/templates/cloud/azure_http/template_cloud_azure_http.yaml
+++ b/templates/cloud/azure_http/template_cloud_azure_http.yaml
@@ -1,12 +1,15 @@
zabbix_export:
- version: '6.2'
- date: '2022-08-11T12:57:51Z'
+ version: '6.4'
+ date: '2022-10-17T08:20:23Z'
template_groups:
-
uuid: c2c162144c2d4c5491c8801193af4945
name: Templates/Cloud
host_groups:
-
+ uuid: 748ad4d098d447d492bb935c907f652f
+ name: Databases
+ -
uuid: 137f19e6e2dc4219b33553b812627bc2
name: 'Virtual machines'
templates:
@@ -15,11 +18,11 @@ zabbix_export:
template: 'Azure by HTTP'
name: 'Azure by HTTP'
description: |
- The template to monitor Microsoft Azure by HTTP.
+ This template is designed to monitor Microsoft Azure by HTTP.
It works without any external scripts and uses the script item.
Setup:
- 1. Create an Azure service principal via Azure CLI for your subscription.
+ 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.
@@ -64,7 +67,7 @@ zabbix_export:
name: 'Azure: There are errors in requests to API'
opdata: '{ITEM.LASTVALUE1}'
priority: AVERAGE
- description: 'Zabbix has received errors in requests to API.'
+ description: 'Zabbix has received errors in response to API requests.'
tags:
-
tag: scope
@@ -130,8 +133,15 @@ zabbix_export:
};
var result,
- data = {};
- data['errors'] = {};
+ 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"}
+ ];
+ data['errors'] = {},
+ data['resources'] = {};
+ data.resources.value = [];
try {
Azure.setParams(JSON.parse(value));
@@ -154,23 +164,24 @@ zabbix_export:
if (!('auth' in data.errors)) {
try {
- raw_data = Azure.request('https://management.azure.com/subscriptions/' + encodeURIComponent(Azure.params.subscription_id) + '/providers/Microsoft.Compute/virtualMachines?api-version=2022-03-01');
+ for (var i in types) {
+ 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) {
- next_data = raw_data;
- while ('nextLink' in next_data) {
- next_data = Azure.request(next_data.nextLink);
- next_data.value.forEach(function (value) {
- raw_data.value.push(value);
- });
+ if ('nextLink' in raw_data) {
+ next_data = raw_data;
+ while ('nextLink' in next_data) {
+ next_data = Azure.request(next_data.nextLink);
+ next_data.value.forEach(function (value) {
+ raw_data.value.push(value);
+ });
+ }
}
- }
- raw_data.value.forEach(function (value) {
- value.resourceGroup = value.id.split("/")[4];
- });
-
- data.resources = 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();
@@ -193,7 +204,7 @@ zabbix_export:
}
return JSON.stringify(data);
- description: 'The JSON with result of API requests.'
+ description: 'The result of API requests is in the JSON.'
timeout: '{$AZURE.DATA.TIMEOUT}'
parameters:
-
@@ -214,6 +225,139 @@ zabbix_export:
value: raw
discovery_rules:
-
+ 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: B
+ -
+ macro: '{#GROUP}'
+ value: '{$AZURE.RESOURCE_GROUP.NOT_MATCHES}'
+ operator: NOT_MATCHES_REGEX
+ formulaid: A
+ 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: f9386233186648ce828f406c52972ce5
name: 'Virtual machines discovery'
type: DEPENDENT
@@ -246,14 +390,14 @@ zabbix_export:
formulaid: D
-
macro: '{#GROUP}'
- value: '{$AZURE.VM.RESOURCE_GROUP.MATCHES}'
- formulaid: A
+ value: '{$AZURE.RESOURCE_GROUP.MATCHES}'
+ formulaid: B
-
macro: '{#GROUP}'
- value: '{$AZURE.VM.RESOURCE_GROUP.NOT_MATCHES}'
+ value: '{$AZURE.RESOURCE_GROUP.NOT_MATCHES}'
operator: NOT_MATCHES_REGEX
- formulaid: B
- description: 'A list of the virtual machines in the subscription.'
+ formulaid: A
+ description: 'The list of the virtual machines is provided by the subscription.'
host_prototypes:
-
uuid: d08c0ee33c924b28bf1fed571da6c7f4
@@ -330,12 +474,36 @@ zabbix_export:
-
macro: '{$AZURE.DATA.TIMEOUT}'
value: 15s
- description: 'Response timeout for API.'
+ description: 'A response timeout for API.'
+ -
+ macro: '{$AZURE.MYSQL.DB.LOCATION.MATCHES}'
+ value: '.*'
+ description: 'This macro is used in MySQL servers discovery rules.'
+ -
+ macro: '{$AZURE.MYSQL.DB.LOCATION.NOT_MATCHES}'
+ value: CHANGE_IF_NEEDED
+ description: 'This macro is used in MySQL servers discovery rules.'
+ -
+ macro: '{$AZURE.MYSQL.DB.NAME.MATCHES}'
+ value: '.*'
+ description: 'This macro is used in MySQL servers discovery rules.'
+ -
+ macro: '{$AZURE.MYSQL.DB.NAME.NOT_MATCHES}'
+ value: CHANGE_IF_NEEDED
+ description: 'This macro is used in MySQL servers discovery rules.'
-
macro: '{$AZURE.PASSWORD}'
type: SECRET_TEXT
description: 'Microsoft Azure password.'
-
+ 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.SUBSCRIPTION_ID}'
description: 'Microsoft Azure subscription ID.'
-
@@ -344,41 +512,1630 @@ zabbix_export:
-
macro: '{$AZURE.VM.LOCATION.MATCHES}'
value: '.*'
- description: 'This macro used in virtual machines discovery rule.'
+ description: 'This macro is used in virtual machines discovery rule.'
-
macro: '{$AZURE.VM.LOCATION.NOT_MATCHES}'
value: CHANGE_IF_NEEDED
- description: 'This macro used in virtual machines discovery rule.'
+ description: 'This macro is used in virtual machines discovery rule.'
-
macro: '{$AZURE.VM.NAME.MATCHES}'
value: '.*'
- description: 'This macro used in virtual machines discovery rule.'
+ description: 'This macro is used in virtual machines discovery rule.'
-
macro: '{$AZURE.VM.NAME.NOT_MATCHES}'
value: CHANGE_IF_NEEDED
- description: 'This macro used in virtual machines discovery rule.'
+ description: 'This macro is used in virtual machines discovery rule.'
+ -
+ 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 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/
+
+ Template tooling version used: 0.42
+ groups:
-
- macro: '{$AZURE.VM.RESOURCE_GROUP.MATCHES}'
- value: '.*'
- description: 'This macro used in virtual machines discovery rule.'
+ name: Templates/Cloud
+ items:
-
- macro: '{$AZURE.VM.RESOURCE_GROUP.NOT_MATCHES}'
- value: CHANGE_IF_NEEDED
- description: 'This macro used in virtual machines discovery rule.'
+ 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: '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: '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: '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: 0d
+ 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 (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');
+ 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');
+ for (k in metrics_data.value) {
+ 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 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}'
+ 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 IO percent.'
+ 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 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 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: 'Replication lag 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: 'The backup storage used 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 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: 'Storage utilization 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 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
+ macros:
+ -
+ macro: '{$AZURE.APP_ID}'
+ description: 'Microsoft Azure app ID.'
+ -
+ macro: '{$AZURE.DATA.TIMEOUT}'
+ value: 60s
+ description: 'A response timeout for API.'
+ -
+ macro: '{$AZURE.DB.ABORTED_CONN.MAX.WARN}'
+ value: '25'
+ description: 'The number of failed attempts to connect to the MySQL server for trigger expression.'
+ -
+ macro: '{$AZURE.DB.CPU.UTIL.CRIT}'
+ value: '90'
+ description: 'The critical threshold of the CPU utilization in %.'
+ -
+ macro: '{$AZURE.DB.MEMORY.UTIL.CRIT}'
+ value: '90'
+ description: 'The critical threshold of the memory utilization in %.'
+ -
+ macro: '{$AZURE.DB.STORAGE.PUSED.CRIT}'
+ value: '90'
+ description: 'The critical threshold of the storage utilization in %.'
+ -
+ macro: '{$AZURE.DB.STORAGE.PUSED.WARN}'
+ value: '80'
+ description: 'The warning threshold of the storage utilization in %.'
+ -
+ macro: '{$AZURE.PASSWORD}'
+ type: SECRET_TEXT
+ description: 'Microsoft Azure password.'
+ -
+ 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.'
+ 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 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/
+
+ Template tooling version used: 0.42
+ 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: '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: 0d
+ 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 (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');
+ 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');
+ for (k in metrics_data.value) {
+ 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 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}'
+ 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 IO percent.'
+ 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: '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: '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: 'Replication lag 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: 'The backup storage used 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 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: 'Storage utilization 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 server log 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 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 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 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
+ macros:
+ -
+ macro: '{$AZURE.APP_ID}'
+ description: 'Microsoft Azure app ID.'
+ -
+ macro: '{$AZURE.DATA.TIMEOUT}'
+ value: 60s
+ description: 'A response timeout for API.'
+ -
+ macro: '{$AZURE.DB.CPU.UTIL.CRIT}'
+ value: '90'
+ description: 'The critical threshold of the CPU utilization 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 the memory utilization in %.'
+ -
+ macro: '{$AZURE.DB.STORAGE.PUSED.CRIT}'
+ value: '90'
+ description: 'The critical threshold of the storage utilization in %.'
+ -
+ macro: '{$AZURE.DB.STORAGE.PUSED.WARN}'
+ value: '80'
+ description: 'The warning threshold of the storage utilization in %.'
+ -
+ macro: '{$AZURE.PASSWORD}'
+ type: SECRET_TEXT
+ description: 'Microsoft Azure password.'
+ -
+ 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.'
+ 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: 820fa4a1565c43e4aac07a691a5bface
template: 'Azure virtual machine by HTTP'
name: 'Azure virtual machine by HTTP'
description: |
- The template to monitor Microsoft Azure virtual machines by HTTP.
+ This template is designed to monitor Microsoft Azure virtual machines by HTTP.
It works without any external scripts and uses the script item.
Setup:
- 1. Create an Azure service principal via Azure CLI for your subscription.
+ 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 macros {$AZURE.APP_ID}, {$AZURE.PASSWORD}, {$AZURE.TENANT_ID} and {$AZURE.SUBSCRIPTION_ID}.
+ 3. Configure 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/
@@ -396,7 +2153,7 @@ zabbix_export:
history: 7d
trends: '0'
value_type: CHAR
- description: 'Summary description of the availability status.'
+ description: 'The summary description of the availability status.'
preprocessing:
-
type: JSONPATH
@@ -419,7 +2176,7 @@ zabbix_export:
key: azure.vm.availability.state
delay: '0'
history: 7d
- description: 'Availability status of the resource.'
+ description: 'The availability status of the resource.'
valuemap:
name: 'Azure resource health state'
preprocessing:
@@ -548,7 +2305,7 @@ zabbix_export:
delay: '0'
history: 7d
value_type: FLOAT
- description: 'Total number of credits consumed by the Virtual Machine. Only available on B-series burstable VMs.'
+ description: 'The total number of credits consumed by the Virtual Machine. Only available on B-series burstable VMs.'
preprocessing:
-
type: JSONPATH
@@ -569,7 +2326,7 @@ zabbix_export:
delay: '0'
history: 7d
value_type: FLOAT
- description: 'Total number of credits available to burst. Only available on B-series burstable VMs.'
+ description: 'The total number of credits available to burst. Only available on B-series burstable VMs.'
preprocessing:
-
type: JSONPATH
@@ -610,7 +2367,7 @@ zabbix_export:
name: 'Azure: High CPU utilization'
opdata: '{ITEM.LASTVALUE1}'
priority: HIGH
- description: 'CPU utilization is too high. the system might be slow to respond.'
+ description: 'CPU utilization is too high. The system might be slow to respond.'
tags:
-
tag: scope
@@ -624,7 +2381,7 @@ zabbix_export:
history: 7d
value_type: FLOAT
units: '%'
- description: 'Percentage of data disk bandwidth consumed per minute.'
+ description: 'The percentage of the Data Disk bandwidth consumed per minute.'
preprocessing:
-
type: JSONPATH
@@ -646,7 +2403,7 @@ zabbix_export:
history: 7d
value_type: FLOAT
units: '%'
- description: 'Percentage of data disk I/Os consumed per minute.'
+ description: 'The percentage of the Data Disk I/Os consumed per minute.'
preprocessing:
-
type: JSONPATH
@@ -711,7 +2468,7 @@ zabbix_export:
delay: '0'
history: 7d
value_type: FLOAT
- description: 'Data Disk Queue Depth(or Queue Length).'
+ description: 'The queue depth (or queue length) of the Data Disk.'
preprocessing:
-
type: JSONPATH
@@ -733,7 +2490,7 @@ zabbix_export:
history: 7d
value_type: FLOAT
units: Bps
- description: 'Bytes/Sec read from a single disk during monitoring period.'
+ description: 'Bytes/Sec read from a single disk during the monitoring period.'
preprocessing:
-
type: JSONPATH
@@ -755,7 +2512,7 @@ zabbix_export:
history: 7d
value_type: FLOAT
units: '!iops'
- description: 'Read IOPS from a single disk during monitoring period.'
+ description: 'The read IOPS from a single disk during the monitoring period.'
preprocessing:
-
type: JSONPATH
@@ -821,7 +2578,7 @@ zabbix_export:
history: 7d
value_type: FLOAT
units: '%'
- description: 'Percentage of Data Disk burst bandwidth credits used so far.'
+ description: 'The percentage of the Data Disk burst bandwidth credits used so far.'
preprocessing:
-
type: JSONPATH
@@ -843,7 +2600,7 @@ zabbix_export:
history: 7d
value_type: FLOAT
units: '%'
- description: 'Percentage of Data Disk burst I/O credits used so far.'
+ description: 'The percentage of the Data Disk burst I/O credits used so far.'
preprocessing:
-
type: JSONPATH
@@ -865,7 +2622,7 @@ zabbix_export:
history: 7d
value_type: FLOAT
units: Bps
- description: 'Bytes/Sec written to a single disk during monitoring period.'
+ description: 'Bytes/Sec written to a single disk during the monitoring period.'
preprocessing:
-
type: JSONPATH
@@ -887,7 +2644,7 @@ zabbix_export:
history: 7d
value_type: FLOAT
units: '!iops'
- description: 'Write IOPS from a single disk during monitoring period.'
+ description: 'The write IOPS from a single disk during the monitoring period.'
preprocessing:
-
type: JSONPATH
@@ -932,7 +2689,7 @@ zabbix_export:
name: 'Azure: There are errors in requests to API'
opdata: '{ITEM.LASTVALUE1}'
priority: AVERAGE
- description: 'Zabbix has received errors in requests to API.'
+ description: 'Zabbix has received errors in response to API requests.'
tags:
-
tag: scope
@@ -1125,7 +2882,7 @@ zabbix_export:
}
return JSON.stringify(data);
- description: 'The JSON with result of API requests.'
+ description: 'The result of API requests is in the JSON.'
timeout: '{$AZURE.DATA.TIMEOUT}'
parameters:
-
@@ -1156,7 +2913,7 @@ zabbix_export:
history: 7d
value_type: FLOAT
units: Bps
- description: 'Bytes read from disk during monitoring period (1 minute).'
+ description: 'Bytes read from the disk during the monitoring period (1 minute).'
preprocessing:
-
type: JSONPATH
@@ -1181,7 +2938,7 @@ zabbix_export:
history: 7d
value_type: FLOAT
units: '!iops'
- description: 'Disk read IOPS.'
+ description: 'The count of read operations from the disk per second.'
preprocessing:
-
type: JSONPATH
@@ -1202,7 +2959,7 @@ zabbix_export:
history: 7d
value_type: FLOAT
units: Bps
- description: 'Bytes written to disk during monitoring period (1 minute).'
+ description: 'Bytes written to the disk during the monitoring period (1 minute).'
preprocessing:
-
type: JSONPATH
@@ -1227,7 +2984,7 @@ zabbix_export:
history: 7d
value_type: FLOAT
units: '!iops'
- description: 'Disk write IOPS.'
+ description: 'The count of write operations to the disk per second.'
preprocessing:
-
type: JSONPATH
@@ -1247,7 +3004,7 @@ zabbix_export:
delay: '0'
history: 7d
value_type: FLOAT
- description: 'Inbound Flows are number of current flows in the inbound direction (traffic going into the VM).'
+ description: 'Inbound Flows are number of the current flows in the inbound direction (traffic going into the VM).'
preprocessing:
-
type: JSONPATH
@@ -1268,7 +3025,7 @@ zabbix_export:
delay: '0'
history: 7d
value_type: FLOAT
- description: 'The maximum creation rate of inbound flows (traffic going into the VM).'
+ description: 'The maximum creation rate of the inbound flows (traffic going into the VM).'
preprocessing:
-
type: JSONPATH
@@ -1289,7 +3046,7 @@ zabbix_export:
delay: '0'
history: 7d
value_type: FLOAT
- description: 'Outbound Flows are number of current flows in the outbound direction (traffic going out of the VM).'
+ description: 'Outbound Flows are number of the current flows in the outbound direction (traffic going out of the VM).'
preprocessing:
-
type: JSONPATH
@@ -1310,7 +3067,7 @@ zabbix_export:
delay: '0'
history: 7d
value_type: FLOAT
- description: 'The maximum creation rate of outbound flows (traffic going out of the VM).'
+ description: 'The maximum creation rate of the outbound flows (traffic going out of the VM).'
preprocessing:
-
type: JSONPATH
@@ -1331,7 +3088,7 @@ zabbix_export:
delay: '0'
history: 7d
units: B
- description: 'Amount of physical memory, in bytes, immediately available for allocation to a process or for system use in the Virtual Machine.'
+ description: 'The amount of physical memory, in bytes, immediately available for allocation to a process or for system use in the Virtual Machine.'
preprocessing:
-
type: JSONPATH
@@ -1404,7 +3161,7 @@ zabbix_export:
history: 7d
value_type: FLOAT
units: '%'
- description: 'Percentage of operating system disk bandwidth consumed per minute.'
+ description: 'The percentage of the operating system disk bandwidth consumed per minute.'
preprocessing:
-
type: JSONPATH
@@ -1426,7 +3183,7 @@ zabbix_export:
history: 7d
value_type: FLOAT
units: '%'
- description: 'Percentage of operating system disk I/Os consumed per minute.'
+ description: 'The percentage of the operating system disk I/Os consumed per minute.'
preprocessing:
-
type: JSONPATH
@@ -1491,7 +3248,7 @@ zabbix_export:
delay: '0'
history: 7d
value_type: FLOAT
- description: 'OS Disk Queue Depth(or Queue Length).'
+ description: 'The OS disk queue depth (or queue length).'
preprocessing:
-
type: JSONPATH
@@ -1513,7 +3270,7 @@ zabbix_export:
history: 7d
value_type: FLOAT
units: Bps
- description: 'Bytes/Sec read from a single disk during monitoring period for OS disk.'
+ description: 'Bytes/Sec read from a single disk during the monitoring period for OS disk.'
preprocessing:
-
type: JSONPATH
@@ -1535,7 +3292,7 @@ zabbix_export:
history: 7d
value_type: FLOAT
units: '!iops'
- description: 'Read IOPS from a single disk during monitoring period for OS disk.'
+ description: 'The read IOPS from a single disk during the monitoring period for OS disk.'
preprocessing:
-
type: JSONPATH
@@ -1601,7 +3358,7 @@ zabbix_export:
history: 7d
value_type: FLOAT
units: '%'
- description: 'Percentage of OS Disk burst bandwidth credits used so far.'
+ description: 'The percentage of the OS Disk burst bandwidth credits used so far.'
preprocessing:
-
type: JSONPATH
@@ -1645,7 +3402,7 @@ zabbix_export:
history: 7d
value_type: FLOAT
units: Bps
- description: 'Bytes/Sec written to a single disk during monitoring period for OS disk.'
+ description: 'Bytes/Sec written to a single disk during the monitoring period for OS disk.'
preprocessing:
-
type: JSONPATH
@@ -1667,7 +3424,7 @@ zabbix_export:
history: 7d
value_type: FLOAT
units: '!iops'
- description: 'Write IOPS from a single disk during monitoring period for OS disk.'
+ description: 'The write IOPS from a single disk during the monitoring period for OS disk.'
preprocessing:
-
type: JSONPATH
@@ -1688,7 +3445,7 @@ zabbix_export:
delay: '0'
history: 7d
units: '%'
- description: 'Premium data disk cache read hit.'
+ description: 'Premium Data Disk cache read hit.'
preprocessing:
-
type: JSONPATH
@@ -1709,7 +3466,7 @@ zabbix_export:
delay: '0'
history: 7d
units: '%'
- description: 'Premium data disk cache read miss.'
+ description: 'Premium Data Disk cache read miss.'
preprocessing:
-
type: JSONPATH
@@ -1772,7 +3529,7 @@ zabbix_export:
delay: '0'
history: 7d
units: '%'
- description: 'Percentage of uncached disk bandwidth consumed by the VM.'
+ description: 'The percentage of the uncached disk bandwidth consumed by the VM.'
preprocessing:
-
type: JSONPATH
@@ -1792,7 +3549,7 @@ zabbix_export:
delay: '0'
history: 7d
units: '%'
- description: 'Percentage of uncached disk IOPS consumed by the VM.'
+ description: 'The percentage of the uncached disk IOPS consumed by the VM.'
preprocessing:
-
type: JSONPATH
@@ -1818,7 +3575,7 @@ zabbix_export:
-
macro: '{$AZURE.DATA.TIMEOUT}'
value: 60s
- description: 'Response timeout for API.'
+ description: 'A response timeout for API.'
-
macro: '{$AZURE.PASSWORD}'
type: SECRET_TEXT
@@ -2016,3 +3773,114 @@ zabbix_export:
item:
host: 'Azure virtual machine by HTTP'
key: azure.vm.premium.os.disk.cache.read.miss
+ -
+ uuid: 750ae48e6ef749c19a06f4bbe716f92f
+ name: 'Azure MySQL: Connections'
+ graph_items:
+ -
+ color: 1A7C11
+ item:
+ host: 'Azure MySQL flexible server by HTTP'
+ key: azure.db.mysql.connections.active
+ -
+ sortorder: '1'
+ color: 2774A4
+ item:
+ host: 'Azure MySQL flexible server by HTTP'
+ key: azure.db.mysql.connections.total
+ -
+ sortorder: '2'
+ color: F63100
+ item:
+ host: 'Azure MySQL flexible server by HTTP'
+ key: azure.db.mysql.connections.aborted
+ -
+ uuid: 360a24b56be74cf48df3135008437824
+ name: 'Azure MySQL: Connections'
+ graph_items:
+ -
+ color: 1A7C11
+ item:
+ host: 'Azure MySQL single server by HTTP'
+ key: azure.db.mysql.connections.active
+ -
+ sortorder: '1'
+ color: 2774A4
+ item:
+ host: 'Azure MySQL single server by HTTP'
+ key: azure.db.mysql.connections.failed
+ -
+ uuid: f929f47602734f82a79f22a5f4446f61
+ name: 'Azure MySQL: Network traffic'
+ graph_items:
+ -
+ color: 1A7C11
+ item:
+ host: 'Azure MySQL flexible server by HTTP'
+ key: azure.db.mysql.network.egress
+ -
+ sortorder: '1'
+ color: 2774A4
+ item:
+ host: 'Azure MySQL flexible server by HTTP'
+ key: azure.db.mysql.network.ingress
+ -
+ uuid: dc6840162405481ebc1c3c98fdfcaef1
+ name: 'Azure MySQL: Network traffic'
+ graph_items:
+ -
+ color: 1A7C11
+ item:
+ host: 'Azure MySQL single server by HTTP'
+ key: azure.db.mysql.network.egress
+ -
+ sortorder: '1'
+ color: 2774A4
+ 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: 1A7C11
+ item:
+ host: 'Azure MySQL single server by HTTP'
+ key: azure.db.mysql.storage.server.log.used
+ -
+ sortorder: '1'
+ color: 2774A4
+ item:
+ host: 'Azure MySQL single server by HTTP'
+ key: azure.db.mysql.storage.server.log.limit
+ -
+ uuid: bdc178e6faaa4850badc0c60c7c80d40
+ name: 'Azure MySQL: Storage utilization'
+ graph_items:
+ -
+ color: 1A7C11
+ item:
+ host: 'Azure MySQL single server by HTTP'
+ key: azure.db.mysql.storage.used
+ -
+ sortorder: '1'
+ color: 2774A4
+ item:
+ host: 'Azure MySQL single server by HTTP'
+ key: azure.db.mysql.storage.limit
+ -
+ uuid: 4210e6b4ed8744589dce88217e961a56
+ name: 'Azure MySQL: Storage utilization'
+ graph_items:
+ -
+ color: 1A7C11
+ item:
+ host: 'Azure MySQL flexible server by HTTP'
+ key: azure.db.mysql.storage.used
+ -
+ sortorder: '1'
+ color: 2774A4
+ item:
+ host: 'Azure MySQL flexible server by HTTP'
+ key: azure.db.mysql.storage.limit