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-11-09 13:20:02 +0300
committerVyacheslav Khaliev <vyacheslav.khaliev@zabbix.com>2022-11-09 13:20:02 +0300
commit689a5591eb20a54bf5c1114a9147bc8e6451d43c (patch)
treed3d35cda26bb3f5b6b668da4feac1492f4a487a1
parent8979160c194d661ebe0d93ba300aa9c65345e1f6 (diff)
parentdda499f21be5ba95131939d442ab7c5a9dc14008 (diff)
.........T [ZBXNEXT-7903] added templates for Azure PostgreSQL servers
Merge in ZBX/zabbix from feature/ZBXNEXT-7903-6.3 to master * commit 'dda499f21be5ba95131939d442ab7c5a9dc14008': .........T [ZBXNEXT-7903] added templates for Azure PostgreSQL servers
-rw-r--r--ChangeLog.d/feature/ZBXNEXT-79031
-rw-r--r--templates/cloud/azure_http/README.md274
-rw-r--r--templates/cloud/azure_http/template_cloud_azure_http.yaml2066
3 files changed, 2258 insertions, 83 deletions
diff --git a/ChangeLog.d/feature/ZBXNEXT-7903 b/ChangeLog.d/feature/ZBXNEXT-7903
new file mode 100644
index 00000000000..48f0ec949d0
--- /dev/null
+++ b/ChangeLog.d/feature/ZBXNEXT-7903
@@ -0,0 +1 @@
+.........T [ZBXNEXT-7903] added templates for Azure PostgreSQL servers (vkhaliev)
diff --git a/templates/cloud/azure_http/README.md b/templates/cloud/azure_http/README.md
index 929c1d2e46e..5438a7a88fc 100644
--- a/templates/cloud/azure_http/README.md
+++ b/templates/cloud/azure_http/README.md
@@ -6,6 +6,7 @@
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.
+Currently the template supports discovery of virtual machines (VMs), MySQL and PosgtreSQL servers.
## Setup
@@ -18,7 +19,7 @@ It works without any external scripts and uses the script item.
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}, and {$AZURE.SUBSCRIPTION_ID}.
## Zabbix configuration
@@ -30,11 +31,15 @@ No specific Zabbix configuration is required.
|----|-----------|-------|
|{$AZURE.APP_ID} |<p>Microsoft Azure app ID.</p> |`` |
|{$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.MYSQL.DB.LOCATION.MATCHES} |<p>This macro is used in MySQL servers discovery rule.</p> |`.*` |
+|{$AZURE.MYSQL.DB.LOCATION.NOT_MATCHES} |<p>This macro is used in MySQL servers discovery rule.</p> |`CHANGE_IF_NEEDED` |
+|{$AZURE.MYSQL.DB.NAME.MATCHES} |<p>This macro is used in MySQL servers discovery rule.</p> |`.*` |
+|{$AZURE.MYSQL.DB.NAME.NOT_MATCHES} |<p>This macro is used in MySQL servers discovery rule.</p> |`CHANGE_IF_NEEDED` |
|{$AZURE.PASSWORD} |<p>Microsoft Azure password.</p> |`` |
+|{$AZURE.PGSQL.DB.LOCATION.MATCHES} |<p>This macro is used in PostgreSQL servers discovery rule.</p> |`.*` |
+|{$AZURE.PGSQL.DB.LOCATION.NOT_MATCHES} |<p>This macro is used in PostgreSQL servers discovery rule.</p> |`CHANGE_IF_NEEDED` |
+|{$AZURE.PGSQL.DB.NAME.MATCHES} |<p>This macro is used in PostgreSQL servers discovery rule.</p> |`.*` |
+|{$AZURE.PGSQL.DB.NAME.NOT_MATCHES} |<p>This macro is used in PostgreSQL servers discovery rule.</p> |`CHANGE_IF_NEEDED` |
|{$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> |`` |
@@ -53,13 +58,14 @@ There are no template links in this template.
|Name|Description|Type|Key and additional info|
|----|-----------|----|----|
|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> |
+|PostgreSQL servers discovery |<p>The list of the PostgreSQL servers is provided by the subscription.</p> |DEPENDENT |azure.pgsql.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.DBforPostgreSQL`</p><p>- {#NAME} MATCHES_REGEX `{$AZURE.PGSQL.DB.NAME.MATCHES}`</p><p>- {#NAME} NOT_MATCHES_REGEX `{$AZURE.PGSQL.DB.NAME.NOT_MATCHES}`</p><p>- {#LOCATION} MATCHES_REGEX `{$AZURE.PGSQL.DB.LOCATION.MATCHES}`</p><p>- {#LOCATION} NOT_MATCHES_REGEX `{$AZURE.PGSQL.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.DBforPostgreSQL/flexibleServers`<br> - HOST_PROTOTYPE REGEXP ``</p><p>Single server<br> - {#TYPE} MATCHES_REGEX `Microsoft.DBforPostgreSQL/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 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 resources |<p>The result of API requests is expressed 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
@@ -72,7 +78,7 @@ There are no template links in this template.
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/).
+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
@@ -93,7 +99,7 @@ It works without any external scripts and uses the script item.
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}.
+3. Configure macros {$AZURE.APP_ID}, {$AZURE.PASSWORD}, {$AZURE.TENANT_ID}, {$AZURE.SUBSCRIPTION_ID}, and {$AZURE.RESOURCE_ID}.
## Zabbix configuration
@@ -109,7 +115,7 @@ No specific Zabbix configuration is required.
|{$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> |`` |
-|{$AZURE.VM.CPU.UTIL.CRIT} |<p>The critical threshold of the CPU utilization in %.</p> |`90` |
+|{$AZURE.VM.CPU.UTIL.CRIT} |<p>The critical threshold of the CPU utilization expressed in %.</p> |`90` |
## Template links
@@ -122,7 +128,7 @@ There are no template links in this template.
|Group|Name|Description|Type|Key and additional info|
|-----|----|-----------|----|---------------------|
-|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 data |<p>The result of API requests is expressed 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>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> |
@@ -183,13 +189,13 @@ There are no template links in this template.
|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>The 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/).
+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
@@ -210,7 +216,7 @@ It works without any external scripts and uses the script item.
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}.
+3. Configure macros {$AZURE.APP_ID}, {$AZURE.PASSWORD}, {$AZURE.TENANT_ID}, {$AZURE.SUBSCRIPTION_ID}, and {$AZURE.RESOURCE_ID}.
## Zabbix configuration
@@ -223,10 +229,9 @@ No specific Zabbix configuration is required.
|{$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.DB.CPU.UTIL.CRIT} |<p>The critical threshold of the CPU utilization expressed in %.</p> |`90` |
+|{$AZURE.DB.STORAGE.PUSED.CRIT} |<p>The critical threshold of the storage utilization expressed in %.</p> |`90` |
+|{$AZURE.DB.STORAGE.PUSED.WARN} |<p>The warning threshold of the storage utilization expressed 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> |`` |
@@ -243,7 +248,7 @@ There are no template links in this template.
|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 data |<p>The result of API requests is expressed 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> |
@@ -256,11 +261,11 @@ There are no template links in this template.
|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: Storage percent |<p>The storage utilization expressed 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 expressed 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 expressed 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>Used backup storage expressed 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>The replication lag expressed 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> |
@@ -272,7 +277,7 @@ There are no template links in this template.
|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: High CPU utilization |<p>The 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 | |
@@ -281,7 +286,7 @@ There are no template links in this template.
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/).
+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
@@ -302,7 +307,7 @@ It works without any external scripts and uses the script item.
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}.
+3. Configure macros {$AZURE.APP_ID}, {$AZURE.PASSWORD}, {$AZURE.TENANT_ID}, {$AZURE.SUBSCRIPTION_ID}, and {$AZURE.RESOURCE_ID}.
## Zabbix configuration
@@ -314,11 +319,11 @@ No specific Zabbix configuration is required.
|----|-----------|-------|
|{$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.CPU.UTIL.CRIT} |<p>The critical threshold of the CPU utilization expressed 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.DB.MEMORY.UTIL.CRIT} |<p>The critical threshold of the memory utilization expressed in %.</p> |`90` |
+|{$AZURE.DB.STORAGE.PUSED.CRIT} |<p>The critical threshold of the storage utilization expressed in %.</p> |`90` |
+|{$AZURE.DB.STORAGE.PUSED.WARN} |<p>The warning threshold of the storage utilization expressed 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> |`` |
@@ -335,7 +340,7 @@ There are no template links in this template.
|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 data |<p>The result of API requests is expressed 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> |
@@ -346,14 +351,14 @@ There are no template links in this template.
|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> |
+|Azure |Azure MySQL: Storage percent |<p>The storage utilization expressed 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 expressed 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 expressed 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>Used backup storage expressed 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>The replication lag expressed 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 expressed 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 expressed 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 a server log expressed in bytes.</p> |DEPENDENT |azure.db.mysql.storage.server.log.limit<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.serverlog_storage_limit.maximum`</p> |
## Triggers
@@ -363,7 +368,7 @@ There are no template links in this template.
|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 CPU utilization |<p>The 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 | |
@@ -373,5 +378,192 @@ There are no template links in this template.
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/).
+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 PostgreSQL flexible server by HTTP
+
+## Overview
+
+For Zabbix version: 6.4 and higher.
+This template is designed to monitor Microsoft Azure PostgreSQL flexible servers by HTTP.
+It works without any external scripts and uses the script item.
+
+## Setup
+
+> 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 expressed in %.</p> |`90` |
+|{$AZURE.DB.MEMORY.UTIL.CRIT} |<p>The critical threshold of the memory utilization expressed in %.</p> |`90` |
+|{$AZURE.DB.STORAGE.PUSED.CRIT} |<p>The critical threshold of the storage utilization expressed in %.</p> |`90` |
+|{$AZURE.DB.STORAGE.PUSED.WARN} |<p>The warning threshold of the storage utilization expressed 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 PostgreSQL: Get data |<p>The result of API requests is expressed in the JSON.</p> |SCRIPT |azure.db.pgsql.data.get<p>**Expression**:</p>`The text is too long. Please see the template.` |
+|Azure |Azure PostgreSQL: Get errors |<p>A list of errors from API requests.</p> |DEPENDENT |azure.db.pgsql.data.errors<p>**Preprocessing**:</p><p>- JSONPATH: `$.errors`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1h`</p> |
+|Azure |Azure PostgreSQL: Availability state |<p>The availability status of the resource.</p> |DEPENDENT |azure.db.pgsql.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 PostgreSQL: Availability status detailed |<p>The summary description of the availability status.</p> |DEPENDENT |azure.db.pgsql.availability.details<p>**Preprocessing**:</p><p>- JSONPATH: `$.health.summary`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1h`</p> |
+|Azure |Azure PostgreSQL: Percentage CPU |<p>The CPU percent of a host.</p> |DEPENDENT |azure.db.pgsql.cpu.percentage<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.cpu_percent.average`</p> |
+|Azure |Azure PostgreSQL: Memory utilization |<p>The memory percent of a host.</p> |DEPENDENT |azure.db.pgsql.memory.percentage<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.memory_percent.average`</p> |
+|Azure |Azure PostgreSQL: Network out |<p>Network outbound traffic across the active connections.</p> |DEPENDENT |azure.db.pgsql.network.egress<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.network_bytes_egress.total`</p><p>- MULTIPLIER: `0.1333`</p> |
+|Azure |Azure PostgreSQL: Network in |<p>Network inbound traffic across the active connections.</p> |DEPENDENT |azure.db.pgsql.network.ingress<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.network_bytes_ingress.total`</p><p>- MULTIPLIER: `0.1333`</p> |
+|Azure |Azure PostgreSQL: Connections active |<p>The count of active connections.</p> |DEPENDENT |azure.db.pgsql.connections.active<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.active_connections.average`</p> |
+|Azure |Azure PostgreSQL: Connections succeeded |<p>The count of succeeded connections.</p> |DEPENDENT |azure.db.pgsql.connections.succeeded<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.connections_succeeded.total`</p> |
+|Azure |Azure PostgreSQL: Connections failed |<p>The count of failed connections.</p> |DEPENDENT |azure.db.pgsql.connections.failed<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.connections_failed.total`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
+|Azure |Azure PostgreSQL: Storage percent |<p>The storage utilization expressed in %.</p> |DEPENDENT |azure.db.pgsql.storage.percent<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.storage_percent.average`</p> |
+|Azure |Azure PostgreSQL: Storage used |<p>Used storage space expressed in bytes.</p> |DEPENDENT |azure.db.pgsql.storage.used<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.storage_used.average`</p> |
+|Azure |Azure PostgreSQL: Storage free |<p>Free storage space expressed in bytes.</p> |DEPENDENT |azure.db.pgsql.storage.free<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.storage_free.average`</p> |
+|Azure |Azure PostgreSQL: Backup storage used |<p>Used backup storage expressed in bytes.</p> |DEPENDENT |azure.db.pgsql.storage.backup.used<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.backup_storage_used.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
+|Azure |Azure PostgreSQL: CPU credits remaining |<p>The total number of credits available to burst.</p> |DEPENDENT |azure.db.pgsql.cpu.credits.remaining<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.cpu_credits_remaining.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
+|Azure |Azure PostgreSQL: CPU credits consumed |<p>The total number of credits consumed by the database server.</p> |DEPENDENT |azure.db.pgsql.cpu.credits.consumed<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.cpu_credits_consumed.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
+|Azure |Azure PostgreSQL: Data disk queue depth |<p>The number of outstanding I/O operations to the data disk.</p> |DEPENDENT |azure.db.pgsql.disk.queue.depth<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.disk_queue_depth.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
+|Azure |Azure PostgreSQL: Data disk IOPS |<p>I/O Operations per second.</p> |DEPENDENT |azure.db.pgsql.iops<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.iops.average`</p> |
+|Azure |Azure PostgreSQL: Data disk read IOPS |<p>The number of the data disk I/O read operations per second.</p> |DEPENDENT |azure.db.pgsql.iops.read<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.read_iops.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
+|Azure |Azure PostgreSQL: Data disk write IOPS |<p>The number of the data disk I/O write operations per second.</p> |DEPENDENT |azure.db.pgsql.iops.write<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.write_iops.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
+|Azure |Azure PostgreSQL: Data disk read Bps |<p>Bytes read per second from the data disk during the monitoring period.</p> |DEPENDENT |azure.db.pgsql.disk.bps.read<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.read_throughput.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
+|Azure |Azure PostgreSQL: Data disk write Bps |<p>Bytes written per second to the data disk during the monitoring period.</p> |DEPENDENT |azure.db.pgsql.disk.bps.write<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.write_throughput.average`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
+|Azure |Azure PostgreSQL: Transaction log storage used |<p>The storage space used by a transaction log expressed in bytes.</p> |DEPENDENT |azure.db.pgsql.storage.txlogs.used<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.txlogs_storage_used.average`</p> |
+|Azure |Azure PostgreSQL: Maximum used transaction IDs |<p>The maximum number of used transaction IDs.</p> |DEPENDENT |azure.db.pgsql.txid.used.max<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.maximum_used_transactionIDs.average`</p> |
+
+## Triggers
+
+|Name|Description|Expression|Severity|Dependencies and additional info|
+|----|-----------|----|----|----|
+|Azure PostgreSQL: There are errors in requests to API |<p>Zabbix has received errors in response to API requests.</p> |`length(last(/Azure PostgreSQL flexible server by HTTP/azure.db.pgsql.data.errors))>0` |AVERAGE | |
+|Azure PostgreSQL: PostgreSQL server is unavailable |<p>The resource state is unavailable.</p> |`last(/Azure PostgreSQL flexible server by HTTP/azure.db.pgsql.availability.state)=2` |HIGH | |
+|Azure PostgreSQL: PostgreSQL server is degraded |<p>The resource is in degraded state.</p> |`last(/Azure PostgreSQL flexible server by HTTP/azure.db.pgsql.availability.state)=1` |AVERAGE | |
+|Azure PostgreSQL: PostgreSQL server is in unknown state |<p>The resource state is unknown.</p> |`last(/Azure PostgreSQL flexible server by HTTP/azure.db.pgsql.availability.state)=3` |WARNING | |
+|Azure PostgreSQL: High CPU utilization |<p>The CPU utilization is too high. The system might be slow to respond.</p> |`min(/Azure PostgreSQL flexible server by HTTP/azure.db.pgsql.cpu.percentage,5m)>{$AZURE.DB.CPU.UTIL.CRIT}` |HIGH | |
+|Azure PostgreSQL: High memory utilization |<p>The system is running out of free memory.</p> |`min(/Azure PostgreSQL flexible server by HTTP/azure.db.pgsql.memory.percentage,5m)>{$AZURE.DB.MEMORY.UTIL.CRIT}` |AVERAGE | |
+|Azure PostgreSQL: Storage space is critically low |<p>Critical utilization of the storage space.</p> |`last(/Azure PostgreSQL flexible server by HTTP/azure.db.pgsql.storage.percent)>{$AZURE.DB.STORAGE.PUSED.CRIT}` |AVERAGE | |
+|Azure PostgreSQL: Storage space is low |<p>High utilization of the storage space.</p> |`last(/Azure PostgreSQL flexible server by HTTP/azure.db.pgsql.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 PostgreSQL single server by HTTP
+
+## Overview
+
+For Zabbix version: 6.4 and higher.
+This template is designed to monitor Microsoft Azure PostgreSQL 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 expressed in %.</p> |`90` |
+|{$AZURE.DB.MEMORY.UTIL.CRIT} |<p>The critical threshold of the memory utilization expressed in %.</p> |`90` |
+|{$AZURE.DB.STORAGE.PUSED.CRIT} |<p>The critical threshold of the storage utilization expressed in %.</p> |`90` |
+|{$AZURE.DB.STORAGE.PUSED.WARN} |<p>The warning threshold of the storage utilization expressed 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 PostgreSQL: Get data |<p>The result of API requests is expressed in the JSON.</p> |SCRIPT |azure.db.pgsql.data.get<p>**Expression**:</p>`The text is too long. Please see the template.` |
+|Azure |Azure PostgreSQL: Get errors |<p>A list of errors from API requests.</p> |DEPENDENT |azure.db.pgsql.data.errors<p>**Preprocessing**:</p><p>- JSONPATH: `$.errors`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1h`</p> |
+|Azure |Azure PostgreSQL: Availability state |<p>The availability status of the resource.</p> |DEPENDENT |azure.db.pgsql.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 PostgreSQL: Availability status detailed |<p>The summary description of the availability status.</p> |DEPENDENT |azure.db.pgsql.availability.details<p>**Preprocessing**:</p><p>- JSONPATH: `$.health.summary`</p><p>- DISCARD_UNCHANGED_HEARTBEAT: `1h`</p> |
+|Azure |Azure PostgreSQL: Percentage CPU |<p>The CPU percent of a host.</p> |DEPENDENT |azure.db.pgsql.cpu.percentage<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.cpu_percent.average`</p> |
+|Azure |Azure PsotgreSQL: Memory utilization |<p>The memory percent of a host.</p> |DEPENDENT |azure.db.pgsql.memory.percentage<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.memory_percent.average`</p> |
+|Azure |Azure PostgreSQL: Network out |<p>Network outbound traffic across the active connections.</p> |DEPENDENT |azure.db.pgsql.network.egress<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.network_bytes_egress.total`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p><p>- MULTIPLIER: `0.1333`</p> |
+|Azure |Azure PosgtreSQL: Network in |<p>Network inbound traffic across the active connections.</p> |DEPENDENT |azure.db.pgsql.network.ingress<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.network_bytes_ingress.total`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p><p>- MULTIPLIER: `0.1333`</p> |
+|Azure |Azure PostgreSQL: Connections active |<p>The count of active connections.</p> |DEPENDENT |azure.db.pgsql.connections.active<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.active_connections.average`</p> |
+|Azure |Azure PostgreSQL: Connections failed |<p>The count of failed connections.</p> |DEPENDENT |azure.db.pgsql.connections.failed<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.connections_failed.total`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
+|Azure |Azure PostgreSQL: IO consumption percent |<p>The IO Percent.</p> |DEPENDENT |azure.db.pgsql.io.consumption.percent<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.io_consumption_percent.average`</p> |
+|Azure |Azure PostgreSQL: Storage percent |<p>The storage utilization expressed in %.</p> |DEPENDENT |azure.db.pgsql.storage.percent<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.storage_percent.average`</p> |
+|Azure |Azure PostgreSQL: Storage used |<p>Used storage space expressed in bytes.</p> |DEPENDENT |azure.db.pgsql.storage.used<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.storage_used.average`</p> |
+|Azure |Azure PostgreSQL: Storage limit |<p>The storage limit expressed in bytes.</p> |DEPENDENT |azure.db.pgsql.storage.limit<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.storage_limit.maximum`</p> |
+|Azure |Azure PostgreSQL: Backup storage used |<p>Used backup storage expressed in bytes.</p> |DEPENDENT |azure.db.pgsql.storage.backup.used<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.backup_storage_used.average`</p> |
+|Azure |Azure PostgreSQL: Replication lag |<p>The replication lag expressed in seconds.</p> |DEPENDENT |azure.db.pgsql.replica.log.delay<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.pg_replica_log_delay_in_seconds.maximum`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
+|Azure |Azure PostgreSQL: Max lag across replicas in bytes |<p>Lag expressed in bytes for the most lagging replica.</p> |DEPENDENT |azure.db.pgsql.replica.log.delay.bytes<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.pg_replica_log_delay_in_bytes.maximum`</p><p>⛔️ON_FAIL: `DISCARD_VALUE -> `</p> |
+|Azure |Azure PostgreSQL: Server log storage percent |<p>The storage utilization by a server log expressed in %.</p> |DEPENDENT |azure.db.pgsql.storage.server.log.percent<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.serverlog_storage_percent.average`</p> |
+|Azure |Azure PostgreSQL: Server log storage used |<p>The storage space used by a server log expressed in bytes.</p> |DEPENDENT |azure.db.pgsql.storage.server.log.used<p>**Preprocessing**:</p><p>- JSONPATH: `$.metrics.serverlog_storage_usage.average`</p> |
+|Azure |Azure PostgreSQL: Server log storage limit |<p>The storage limit of a server log expressed in bytes.</p> |DEPENDENT |azure.db.pgsql.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 PostgreSQL: There are errors in requests to API |<p>Zabbix has received errors in response to API requests.</p> |`length(last(/Azure PostgreSQL single server by HTTP/azure.db.pgsql.data.errors))>0` |AVERAGE | |
+|Azure PostgreSQL: PostgreSQL server is unavailable |<p>The resource state is unavailable.</p> |`last(/Azure PostgreSQL single server by HTTP/azure.db.pgsql.availability.state)=2` |HIGH | |
+|Azure PostgreSQL: PostgreSQL server is degraded |<p>The resource is in degraded state.</p> |`last(/Azure PostgreSQL single server by HTTP/azure.db.pgsql.availability.state)=1` |AVERAGE | |
+|Azure PostgreSQL: PostgreSQL server is in unknown state |<p>The resource state is unknown.</p> |`last(/Azure PostgreSQL single server by HTTP/azure.db.pgsql.availability.state)=3` |WARNING | |
+|Azure PostgreSQL: High CPU utilization |<p>The CPU utilization is too high. The system might be slow to respond.</p> |`min(/Azure PostgreSQL single server by HTTP/azure.db.pgsql.cpu.percentage,5m)>{$AZURE.DB.CPU.UTIL.CRIT}` |HIGH | |
+|Azure PsotgreSQL: High memory utilization |<p>The system is running out of free memory.</p> |`min(/Azure PostgreSQL single server by HTTP/azure.db.pgsql.memory.percentage,5m)>{$AZURE.DB.MEMORY.UTIL.CRIT}` |AVERAGE | |
+|Azure PostgreSQL: Storage space is critically low |<p>Critical utilization of the storage space.</p> |`last(/Azure PostgreSQL single server by HTTP/azure.db.pgsql.storage.percent)>{$AZURE.DB.STORAGE.PUSED.CRIT}` |AVERAGE | |
+|Azure PostgreSQL: Storage space is low |<p>High utilization of the storage space.</p> |`last(/Azure PostgreSQL single server by HTTP/azure.db.pgsql.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/).
diff --git a/templates/cloud/azure_http/template_cloud_azure_http.yaml b/templates/cloud/azure_http/template_cloud_azure_http.yaml
index 53bcf884e79..6cb3b0e55a8 100644
--- a/templates/cloud/azure_http/template_cloud_azure_http.yaml
+++ b/templates/cloud/azure_http/template_cloud_azure_http.yaml
@@ -1,6 +1,6 @@
zabbix_export:
version: '6.4'
- date: '2022-10-17T08:20:23Z'
+ date: '2022-11-08T08:52:11Z'
template_groups:
-
uuid: c2c162144c2d4c5491c8801193af4945
@@ -20,13 +20,14 @@ zabbix_export:
description: |
This template is designed to monitor Microsoft Azure by HTTP.
It works without any external scripts and uses the script item.
+ Currently the template supports discovery of virtual machines (VMs), MySQL and PosgtreSQL servers.
Setup:
1. Create an Azure service principal via the Azure command-line interface (Azure CLI) for your subscription.
`az ad sp create-for-rbac --name zabbix --role reader --scope /subscriptions/<subscription_id>`
See https://docs.microsoft.com/en-us/cli/azure/create-an-azure-service-principal-azure-cli for more details.
2. Link the template to a host.
- 3. Configure macros {$AZURE.APP_ID}, {$AZURE.PASSWORD}, {$AZURE.TENANT_ID} and {$AZURE.SUBSCRIPTION_ID}.
+ 3. Configure macros {$AZURE.APP_ID}, {$AZURE.PASSWORD}, {$AZURE.TENANT_ID}, and {$AZURE.SUBSCRIPTION_ID}.
You can discuss this template or leave feedback on our forum https://www.zabbix.com/forum/zabbix-suggestions-and-feedback/
@@ -137,7 +138,9 @@ zabbix_export:
types = [
{"method": "Microsoft.Compute/virtualMachines", "version": "2022-03-01"},
{"method": "Microsoft.DBforMySQL/flexibleServers", "version": "2021-05-01"},
- {"method": "Microsoft.DBforMySQL/servers", "version": "2017-12-01"}
+ {"method": "Microsoft.DBforMySQL/servers", "version": "2017-12-01"},
+ {"method": "Microsoft.DBforPostgreSQL/flexibleServers", "version": "2021-06-01"},
+ {"method": "Microsoft.DBforPostgreSQL/servers", "version": "2017-12-01"}
];
data['errors'] = {},
data['resources'] = {};
@@ -204,7 +207,7 @@ zabbix_export:
}
return JSON.stringify(data);
- description: 'The result of API requests is in the JSON.'
+ description: 'The result of API requests is expressed in the JSON.'
timeout: '{$AZURE.DATA.TIMEOUT}'
parameters:
-
@@ -358,6 +361,139 @@ zabbix_export:
-
name: 'Azure MySQL single server by HTTP'
-
+ uuid: a4b35b5fe8c04b52a9640f2f41013230
+ name: 'PostgreSQL servers discovery'
+ type: DEPENDENT
+ key: azure.pgsql.servers.discovery
+ delay: '0'
+ filter:
+ evaltype: AND
+ conditions:
+ -
+ macro: '{#TYPE}'
+ value: ^Microsoft.DBforPostgreSQL
+ formulaid: G
+ -
+ macro: '{#NAME}'
+ value: '{$AZURE.PGSQL.DB.NAME.MATCHES}'
+ formulaid: E
+ -
+ macro: '{#NAME}'
+ value: '{$AZURE.PGSQL.DB.NAME.NOT_MATCHES}'
+ operator: NOT_MATCHES_REGEX
+ formulaid: F
+ -
+ macro: '{#LOCATION}'
+ value: '{$AZURE.PGSQL.DB.LOCATION.MATCHES}'
+ formulaid: C
+ -
+ macro: '{#LOCATION}'
+ value: '{$AZURE.PGSQL.DB.LOCATION.NOT_MATCHES}'
+ operator: NOT_MATCHES_REGEX
+ formulaid: D
+ -
+ macro: '{#GROUP}'
+ value: '{$AZURE.RESOURCE_GROUP.MATCHES}'
+ formulaid: B
+ -
+ macro: '{#GROUP}'
+ value: '{$AZURE.RESOURCE_GROUP.NOT_MATCHES}'
+ operator: NOT_MATCHES_REGEX
+ formulaid: A
+ description: 'The list of the PostgreSQL servers is provided by the subscription.'
+ host_prototypes:
+ -
+ uuid: 54f0e0ec288f4feb9a2dc58a8726bd1d
+ host: 'Azure PostgreSQL server {#NAME}'
+ name: 'Azure PostgreSQL server {#NAME}'
+ group_links:
+ -
+ group:
+ name: Databases
+ macros:
+ -
+ macro: '{$AZURE.RESOURCE_ID}'
+ value: '{#ID}'
+ tags:
+ -
+ tag: location
+ value: '{#LOCATION}'
+ -
+ tag: resource-group
+ value: '{#GROUP}'
+ -
+ tag: size
+ value: '{#SIZE}'
+ -
+ tag: version
+ value: '{#VERSION}'
+ master_item:
+ key: azure.get.resources
+ lld_macro_paths:
+ -
+ lld_macro: '{#GROUP}'
+ path: $.resourceGroup
+ -
+ lld_macro: '{#ID}'
+ path: $.id
+ -
+ lld_macro: '{#LOCATION}'
+ path: $.location
+ -
+ lld_macro: '{#NAME}'
+ path: $.name
+ -
+ lld_macro: '{#SIZE}'
+ path: $.sku.name
+ -
+ lld_macro: '{#TYPE}'
+ path: $.type
+ -
+ lld_macro: '{#VERSION}'
+ path: $.properties.version
+ preprocessing:
+ -
+ type: JSONPATH
+ parameters:
+ - $.resources.value
+ -
+ type: DISCARD_UNCHANGED_HEARTBEAT
+ parameters:
+ - 6h
+ overrides:
+ -
+ name: 'Flexible server'
+ step: '1'
+ filter:
+ conditions:
+ -
+ macro: '{#TYPE}'
+ value: Microsoft.DBforPostgreSQL/flexibleServers
+ formulaid: A
+ operations:
+ -
+ operationobject: HOST_PROTOTYPE
+ operator: REGEXP
+ templates:
+ -
+ name: 'Azure PostgreSQL flexible server by HTTP'
+ -
+ name: 'Single server'
+ step: '2'
+ filter:
+ conditions:
+ -
+ macro: '{#TYPE}'
+ value: Microsoft.DBforPostgreSQL/servers
+ formulaid: A
+ operations:
+ -
+ operationobject: HOST_PROTOTYPE
+ operator: REGEXP
+ templates:
+ -
+ name: 'Azure PostgreSQL single server by HTTP'
+ -
uuid: f9386233186648ce828f406c52972ce5
name: 'Virtual machines discovery'
type: DEPENDENT
@@ -478,24 +614,40 @@ zabbix_export:
-
macro: '{$AZURE.MYSQL.DB.LOCATION.MATCHES}'
value: '.*'
- description: 'This macro is used in MySQL servers discovery rules.'
+ description: 'This macro is used in MySQL servers discovery rule.'
-
macro: '{$AZURE.MYSQL.DB.LOCATION.NOT_MATCHES}'
value: CHANGE_IF_NEEDED
- description: 'This macro is used in MySQL servers discovery rules.'
+ description: 'This macro is used in MySQL servers discovery rule.'
-
macro: '{$AZURE.MYSQL.DB.NAME.MATCHES}'
value: '.*'
- description: 'This macro is used in MySQL servers discovery rules.'
+ description: 'This macro is used in MySQL servers discovery rule.'
-
macro: '{$AZURE.MYSQL.DB.NAME.NOT_MATCHES}'
value: CHANGE_IF_NEEDED
- description: 'This macro is used in MySQL servers discovery rules.'
+ description: 'This macro is used in MySQL servers discovery rule.'
-
macro: '{$AZURE.PASSWORD}'
type: SECRET_TEXT
description: 'Microsoft Azure password.'
-
+ macro: '{$AZURE.PGSQL.DB.LOCATION.MATCHES}'
+ value: '.*'
+ description: 'This macro is used in PostgreSQL servers discovery rule.'
+ -
+ macro: '{$AZURE.PGSQL.DB.LOCATION.NOT_MATCHES}'
+ value: CHANGE_IF_NEEDED
+ description: 'This macro is used in PostgreSQL servers discovery rule.'
+ -
+ macro: '{$AZURE.PGSQL.DB.NAME.MATCHES}'
+ value: '.*'
+ description: 'This macro is used in PostgreSQL servers discovery rule.'
+ -
+ macro: '{$AZURE.PGSQL.DB.NAME.NOT_MATCHES}'
+ value: CHANGE_IF_NEEDED
+ description: 'This macro is used in PostgreSQL servers discovery rule.'
+ -
macro: '{$AZURE.RESOURCE_GROUP.MATCHES}'
value: '.*'
description: 'This macro is used in discovery rules.'
@@ -538,7 +690,7 @@ zabbix_export:
`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}.
+ 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/
@@ -802,7 +954,7 @@ zabbix_export:
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.'
+ description: 'The CPU utilization is too high. The system might be slow to respond.'
tags:
-
tag: scope
@@ -998,7 +1150,7 @@ zabbix_export:
}
return JSON.stringify(data);
- description: 'The result of API requests is in the JSON.'
+ description: 'The result of API requests is expressed in the JSON.'
timeout: '{$AZURE.DATA.TIMEOUT}'
parameters:
-
@@ -1141,7 +1293,7 @@ zabbix_export:
history: 7d
value_type: FLOAT
units: s
- description: 'Replication lag in seconds.'
+ description: 'The replication lag expressed in seconds.'
preprocessing:
-
type: JSONPATH
@@ -1163,7 +1315,7 @@ zabbix_export:
history: 7d
value_type: FLOAT
units: B
- description: 'The backup storage used in bytes.'
+ description: 'Used backup storage expressed in bytes.'
preprocessing:
-
type: JSONPATH
@@ -1184,7 +1336,7 @@ zabbix_export:
history: 7d
value_type: FLOAT
units: B
- description: 'The storage limit in bytes.'
+ description: 'The storage limit expressed in bytes.'
preprocessing:
-
type: JSONPATH
@@ -1205,7 +1357,7 @@ zabbix_export:
history: 7d
value_type: FLOAT
units: '%'
- description: 'Storage utilization in %.'
+ description: 'The storage utilization expressed in %.'
preprocessing:
-
type: JSONPATH
@@ -1249,7 +1401,7 @@ zabbix_export:
history: 7d
value_type: FLOAT
units: B
- description: 'Used storage space in bytes.'
+ description: 'Used storage space expressed in bytes.'
preprocessing:
-
type: JSONPATH
@@ -1283,19 +1435,15 @@ zabbix_export:
-
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 %.'
+ description: 'The critical threshold of the CPU utilization expressed in %.'
-
macro: '{$AZURE.DB.STORAGE.PUSED.CRIT}'
value: '90'
- description: 'The critical threshold of the storage utilization in %.'
+ description: 'The critical threshold of the storage utilization expressed in %.'
-
macro: '{$AZURE.DB.STORAGE.PUSED.WARN}'
value: '80'
- description: 'The warning threshold of the storage utilization in %.'
+ description: 'The warning threshold of the storage utilization expressed in %.'
-
macro: '{$AZURE.PASSWORD}'
type: SECRET_TEXT
@@ -1339,7 +1487,7 @@ zabbix_export:
`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}.
+ 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/
@@ -1542,7 +1690,7 @@ zabbix_export:
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.'
+ description: 'The CPU utilization is too high. The system might be slow to respond.'
tags:
-
tag: scope
@@ -1737,7 +1885,7 @@ zabbix_export:
}
return JSON.stringify(data);
- description: 'The result of API requests is in the JSON.'
+ description: 'The result of API requests is expressed in the JSON.'
timeout: '{$AZURE.DATA.TIMEOUT}'
parameters:
-
@@ -1874,7 +2022,7 @@ zabbix_export:
history: 7d
value_type: FLOAT
units: s
- description: 'Replication lag in seconds.'
+ description: 'The replication lag expressed in seconds.'
preprocessing:
-
type: JSONPATH
@@ -1896,7 +2044,7 @@ zabbix_export:
history: 7d
value_type: FLOAT
units: B
- description: 'The backup storage used in bytes.'
+ description: 'Used backup storage expressed in bytes.'
preprocessing:
-
type: JSONPATH
@@ -1917,7 +2065,7 @@ zabbix_export:
history: 7d
value_type: FLOAT
units: B
- description: 'The storage limit in bytes.'
+ description: 'The storage limit expressed in bytes.'
preprocessing:
-
type: JSONPATH
@@ -1938,7 +2086,7 @@ zabbix_export:
history: 7d
value_type: FLOAT
units: '%'
- description: 'Storage utilization in %.'
+ description: 'The storage utilization expressed in %.'
preprocessing:
-
type: JSONPATH
@@ -1982,7 +2130,7 @@ zabbix_export:
history: 7d
value_type: FLOAT
units: B
- description: 'The storage limit of server log in bytes.'
+ description: 'The storage limit of a server log expressed in bytes.'
preprocessing:
-
type: JSONPATH
@@ -2003,7 +2151,7 @@ zabbix_export:
history: 7d
value_type: FLOAT
units: '%'
- description: 'The storage utilization by a server log in %.'
+ description: 'The storage utilization by a server log expressed in %.'
preprocessing:
-
type: JSONPATH
@@ -2024,7 +2172,7 @@ zabbix_export:
history: 7d
value_type: FLOAT
units: B
- description: 'The storage space used by a server log in bytes.'
+ description: 'The storage space used by a server log expressed in bytes.'
preprocessing:
-
type: JSONPATH
@@ -2045,7 +2193,7 @@ zabbix_export:
history: 7d
value_type: FLOAT
units: B
- description: 'Used storage space in bytes.'
+ description: 'Used storage space expressed in bytes.'
preprocessing:
-
type: JSONPATH
@@ -2075,7 +2223,7 @@ zabbix_export:
-
macro: '{$AZURE.DB.CPU.UTIL.CRIT}'
value: '90'
- description: 'The critical threshold of the CPU utilization in %.'
+ description: 'The critical threshold of the CPU utilization expressed in %.'
-
macro: '{$AZURE.DB.FAILED_CONN.MAX.WARN}'
value: '25'
@@ -2083,15 +2231,15 @@ zabbix_export:
-
macro: '{$AZURE.DB.MEMORY.UTIL.CRIT}'
value: '90'
- description: 'The critical threshold of the memory utilization in %.'
+ description: 'The critical threshold of the memory utilization expressed in %.'
-
macro: '{$AZURE.DB.STORAGE.PUSED.CRIT}'
value: '90'
- description: 'The critical threshold of the storage utilization in %.'
+ description: 'The critical threshold of the storage utilization expressed in %.'
-
macro: '{$AZURE.DB.STORAGE.PUSED.WARN}'
value: '80'
- description: 'The warning threshold of the storage utilization in %.'
+ description: 'The warning threshold of the storage utilization expressed in %.'
-
macro: '{$AZURE.PASSWORD}'
type: SECRET_TEXT
@@ -2123,6 +2271,1729 @@ zabbix_export:
value: '3'
newvalue: Unknown
-
+ uuid: 35ef29f24158444097272d2ea7fa6044
+ template: 'Azure PostgreSQL flexible server by HTTP'
+ name: 'Azure PostgreSQL flexible server by HTTP'
+ description: |
+ This template is designed to monitor Microsoft Azure PostgreSQL flexible servers by HTTP.
+ It works without any external scripts and uses the script item.
+
+ Setup:
+ 1. Create an Azure service principal via the Azure command-line interface (Azure CLI) for your subscription.
+ `az ad sp create-for-rbac --name zabbix --role reader --scope /subscriptions/<subscription_id>`
+ See https://docs.microsoft.com/en-us/cli/azure/create-an-azure-service-principal-azure-cli for more details.
+ 2. Link the template to a host.
+ 3. Configure 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: 7f7deae517e54cf582ae758a6988037b
+ name: 'Azure PostgreSQL: Availability status detailed'
+ type: DEPENDENT
+ key: azure.db.pgsql.availability.details
+ delay: '0'
+ history: 7d
+ trends: '0'
+ value_type: CHAR
+ description: 'The summary description of the availability status.'
+ preprocessing:
+ -
+ type: JSONPATH
+ parameters:
+ - $.health.summary
+ -
+ type: DISCARD_UNCHANGED_HEARTBEAT
+ parameters:
+ - 1h
+ master_item:
+ key: azure.db.pgsql.data.get
+ tags:
+ -
+ tag: component
+ value: health
+ -
+ uuid: cd9072a3895c42dab794707f3bcaf743
+ name: 'Azure PostgreSQL: Availability state'
+ type: DEPENDENT
+ key: azure.db.pgsql.availability.state
+ delay: '0'
+ history: 7d
+ description: 'The availability status of the resource.'
+ valuemap:
+ name: 'Azure resource health state'
+ preprocessing:
+ -
+ type: JSONPATH
+ parameters:
+ - $.health.availabilityState
+ error_handler: CUSTOM_VALUE
+ error_handler_params: '3'
+ -
+ type: STR_REPLACE
+ parameters:
+ - Available
+ - '0'
+ -
+ type: STR_REPLACE
+ parameters:
+ - Degraded
+ - '1'
+ -
+ type: STR_REPLACE
+ parameters:
+ - Unavailable
+ - '2'
+ -
+ type: STR_REPLACE
+ parameters:
+ - Unknown
+ - '3'
+ -
+ type: IN_RANGE
+ parameters:
+ - '0'
+ - '3'
+ error_handler: CUSTOM_VALUE
+ error_handler_params: '3'
+ -
+ type: DISCARD_UNCHANGED_HEARTBEAT
+ parameters:
+ - 1h
+ master_item:
+ key: azure.db.pgsql.data.get
+ tags:
+ -
+ tag: component
+ value: health
+ triggers:
+ -
+ uuid: 65b5c39b48e248c4866c511bbba91e1b
+ expression: 'last(/Azure PostgreSQL flexible server by HTTP/azure.db.pgsql.availability.state)=1'
+ name: 'Azure PostgreSQL: PostgreSQL server is degraded'
+ opdata: '{ITEM.LASTVALUE1}'
+ priority: AVERAGE
+ description: 'The resource is in degraded state.'
+ tags:
+ -
+ tag: scope
+ value: availability
+ -
+ uuid: d8ce86c853064cba80c9883052ed1403
+ expression: 'last(/Azure PostgreSQL flexible server by HTTP/azure.db.pgsql.availability.state)=3'
+ name: 'Azure PostgreSQL: PostgreSQL server is in unknown state'
+ opdata: '{ITEM.LASTVALUE1}'
+ priority: WARNING
+ description: 'The resource state is unknown.'
+ tags:
+ -
+ tag: scope
+ value: availability
+ -
+ uuid: 9572c9e56a6b44368bcf2d8a17a220d8
+ expression: 'last(/Azure PostgreSQL flexible server by HTTP/azure.db.pgsql.availability.state)=2'
+ name: 'Azure PostgreSQL: PostgreSQL server is unavailable'
+ opdata: '{ITEM.LASTVALUE1}'
+ priority: HIGH
+ description: 'The resource state is unavailable.'
+ tags:
+ -
+ tag: scope
+ value: availability
+ -
+ uuid: 05ada75c666e45269c3c36159f9902cc
+ name: 'Azure PostgreSQL: Connections active'
+ type: DEPENDENT
+ key: azure.db.pgsql.connections.active
+ delay: '0'
+ history: 7d
+ value_type: FLOAT
+ description: 'The count of active connections.'
+ preprocessing:
+ -
+ type: JSONPATH
+ parameters:
+ - $.metrics.active_connections.average
+ master_item:
+ key: azure.db.pgsql.data.get
+ tags:
+ -
+ tag: component
+ value: network
+ -
+ uuid: 00d1116141874dbfb204ebfe96c203f1
+ name: 'Azure PostgreSQL: Connections failed'
+ type: DEPENDENT
+ key: azure.db.pgsql.connections.failed
+ delay: '0'
+ history: 7d
+ value_type: FLOAT
+ description: 'The count of failed connections.'
+ preprocessing:
+ -
+ type: JSONPATH
+ parameters:
+ - $.metrics.connections_failed.total
+ error_handler: DISCARD_VALUE
+ master_item:
+ key: azure.db.pgsql.data.get
+ tags:
+ -
+ tag: component
+ value: network
+ -
+ uuid: f422f01bf1c9484e880581f31f70e120
+ name: 'Azure PostgreSQL: Connections succeeded'
+ type: DEPENDENT
+ key: azure.db.pgsql.connections.succeeded
+ delay: '0'
+ history: 7d
+ value_type: FLOAT
+ description: 'The count of succeeded connections.'
+ preprocessing:
+ -
+ type: JSONPATH
+ parameters:
+ - $.metrics.connections_succeeded.total
+ master_item:
+ key: azure.db.pgsql.data.get
+ tags:
+ -
+ tag: component
+ value: network
+ -
+ uuid: 1f1270c6981b4d08864572410fdeccde
+ name: 'Azure PostgreSQL: CPU credits consumed'
+ type: DEPENDENT
+ key: azure.db.pgsql.cpu.credits.consumed
+ delay: '0'
+ history: 7d
+ value_type: FLOAT
+ description: 'The total number of credits consumed by the database server.'
+ preprocessing:
+ -
+ type: JSONPATH
+ parameters:
+ - $.metrics.cpu_credits_consumed.average
+ error_handler: DISCARD_VALUE
+ master_item:
+ key: azure.db.pgsql.data.get
+ tags:
+ -
+ tag: component
+ value: cpu
+ -
+ uuid: e55082c4a278435286335cebd2ae1cac
+ name: 'Azure PostgreSQL: CPU credits remaining'
+ type: DEPENDENT
+ key: azure.db.pgsql.cpu.credits.remaining
+ delay: '0'
+ history: 7d
+ value_type: FLOAT
+ description: 'The total number of credits available to burst.'
+ preprocessing:
+ -
+ type: JSONPATH
+ parameters:
+ - $.metrics.cpu_credits_remaining.average
+ error_handler: DISCARD_VALUE
+ master_item:
+ key: azure.db.pgsql.data.get
+ tags:
+ -
+ tag: component
+ value: cpu
+ -
+ uuid: 8d85c5c73c894cdda6324832a703fea2
+ name: 'Azure PostgreSQL: Percentage CPU'
+ type: DEPENDENT
+ key: azure.db.pgsql.cpu.percentage
+ delay: '0'
+ history: 7d
+ value_type: FLOAT
+ units: '%'
+ description: 'The CPU percent of a host.'
+ preprocessing:
+ -
+ type: JSONPATH
+ parameters:
+ - $.metrics.cpu_percent.average
+ master_item:
+ key: azure.db.pgsql.data.get
+ tags:
+ -
+ tag: component
+ value: cpu
+ triggers:
+ -
+ uuid: f8672e4488b740a9a17395689c3d853c
+ expression: 'min(/Azure PostgreSQL flexible server by HTTP/azure.db.pgsql.cpu.percentage,5m)>{$AZURE.DB.CPU.UTIL.CRIT}'
+ name: 'Azure PostgreSQL: High CPU utilization'
+ opdata: 'Current utilization: {ITEM.LASTVALUE1}'
+ priority: HIGH
+ description: 'The CPU utilization is too high. The system might be slow to respond.'
+ tags:
+ -
+ tag: scope
+ value: performance
+ -
+ uuid: 06c4226667ec4c4489e6d3ad31c3135f
+ name: 'Azure PostgreSQL: Get errors'
+ type: DEPENDENT
+ key: azure.db.pgsql.data.errors
+ delay: '0'
+ history: 7d
+ trends: '0'
+ value_type: TEXT
+ description: 'A list of errors from API requests.'
+ preprocessing:
+ -
+ type: JSONPATH
+ parameters:
+ - $.errors
+ -
+ type: DISCARD_UNCHANGED_HEARTBEAT
+ parameters:
+ - 1h
+ master_item:
+ key: azure.db.pgsql.data.get
+ tags:
+ -
+ tag: component
+ value: raw
+ triggers:
+ -
+ uuid: 55962f0d8a4c44c9a6b09da705e94c59
+ expression: 'length(last(/Azure PostgreSQL flexible server by HTTP/azure.db.pgsql.data.errors))>0'
+ name: 'Azure PostgreSQL: There are errors in requests to API'
+ opdata: '{ITEM.LASTVALUE1}'
+ priority: AVERAGE
+ description: 'Zabbix has received errors in response to API requests.'
+ tags:
+ -
+ tag: scope
+ value: availability
+ -
+ uuid: 1792c0566e8a438dad5e299d8f5b9094
+ name: 'Azure PostgreSQL: Get data'
+ type: SCRIPT
+ key: azure.db.pgsql.data.get
+ history: 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',
+ 'iops',
+ 'disk_queue_depth',
+ 'read_throughput',
+ 'write_throughput',
+ 'read_iops',
+ 'write_iops',
+ 'network_bytes_egress',
+ 'network_bytes_ingress',
+ 'active_connections',
+ 'connections_failed',
+ 'connections_succeeded',
+ 'storage_percent',
+ 'storage_used',
+ 'storage_free',
+ 'txlogs_storage_used',
+ 'backup_storage_used',
+ 'maximum_used_transactionIDs',
+ 'cpu_credits_remaining',
+ 'cpu_credits_consumed'
+ ],
+ prepared_metrics = [],
+ data = {};
+ data['errors'] = {};
+ data['metrics'] = {};
+
+ try {
+ AzureDB.setParams(JSON.parse(value));
+
+ try {
+ result = AzureDB.request(
+ 'https://login.microsoftonline.com/' + encodeURIComponent(AzureDB.params.tenant_id) + '/oauth2/token',
+ 'grant_type=client_credentials&resource=' + encodeURIComponent('https://management.azure.com/') + '&client_id=' + encodeURIComponent(AzureDB.params.app_id) + '&client_secret=' + encodeURIComponent(AzureDB.params.password)
+ );
+
+ if ('access_token' in result) {
+ AzureDB.token = result['access_token'];
+ } else {
+ throw 'Auth response does not contain access token.';
+ }
+ }
+ catch (error) {
+ data.errors.auth = error.toString();
+ }
+
+ if (!('auth' in data.errors)) {
+ try {
+ health = AzureDB.request('https://management.azure.com' + AzureDB.params.resource_id + '/providers/Microsoft.ResourceHealth/availabilityStatuses?api-version=2020-05-01');
+ data.health = health.value[0].properties;
+ }
+ catch (error) {
+ data.errors.health = error.toString();
+ }
+
+ for (var i = 0; i < metrics.length; i += 20) {
+ var chunk = metrics.slice(i, i + 20);
+
+ prepared_metrics.push(
+ chunk.map(function(element) {
+ return encodeURIComponent(element);
+ }).join(',')
+ );
+ }
+
+ start_date = new Date((new Date().getTime()) - 600000).toISOString().replace(/\.\d+/, '');
+ end_date = new Date().toISOString().replace(/\.\d+/, '');
+
+ for (var j in prepared_metrics) {
+ try {
+ metrics_data = AzureDB.request('https://management.azure.com' + AzureDB.params.resource_id + '/providers/Microsoft.Insights/metrics?metricnames=' + prepared_metrics[j] + '&timespan=' + encodeURIComponent(start_date) + '/' + encodeURIComponent(end_date) + '&api-version=2021-05-01');
+ for (k in metrics_data.value) {
+ if (metrics_data.value[k].name.value === 'disk_queue_depth' ||
+ metrics_data.value[k].name.value === 'read_throughput' ||
+ metrics_data.value[k].name.value === 'write_throughput' ||
+ metrics_data.value[k].name.value === 'read_iops' ||
+ metrics_data.value[k].name.value === 'write_iops') {
+ data.metrics[metrics_data.value[k].name.value.replace(/(\s|\/)+/g, '')] = metrics_data.value[k].timeseries[0].data[metrics_data.value[k].timeseries[0].data.length - 6];
+ } else {
+ data.metrics[metrics_data.value[k].name.value.replace(/(\s|\/)+/g, '')] = metrics_data.value[k].timeseries[0].data[metrics_data.value[k].timeseries[0].data.length - 1];
+ }
+ }
+ }
+ catch (error) {
+ data.errors[prepared_metrics[j]] = error.toString();
+ }
+ }
+ }
+ }
+ catch (error) {
+ data.errors.params = error.toString();
+ }
+
+ if (Object.keys(data.errors).length !== 0) {
+ errors = 'Failed to receive data:';
+ for (var error in data.errors) {
+ errors += '\n' + error + ' : ' + data.errors[error];
+ }
+ data.errors = errors;
+ }
+ else {
+ data.errors = '';
+ }
+
+ return JSON.stringify(data);
+ description: 'The result of API requests is expressed in the JSON.'
+ timeout: '{$AZURE.DATA.TIMEOUT}'
+ parameters:
+ -
+ name: app_id
+ value: '{$AZURE.APP_ID}'
+ -
+ name: password
+ value: '{$AZURE.PASSWORD}'
+ -
+ name: tenant_id
+ value: '{$AZURE.TENANT_ID}'
+ -
+ name: subscription_id
+ value: '{$AZURE.SUBSCRIPTION_ID}'
+ -
+ name: resource_id
+ value: '{$AZURE.RESOURCE_ID}'
+ tags:
+ -
+ tag: component
+ value: raw
+ -
+ uuid: 9fc7a458995d4ac8a4c1d8550177471d
+ name: 'Azure PostgreSQL: Data disk read Bps'
+ type: DEPENDENT
+ key: azure.db.pgsql.disk.bps.read
+ delay: '0'
+ history: 7d
+ value_type: FLOAT
+ units: Bps
+ description: 'Bytes read per second from the data disk during the monitoring period.'
+ preprocessing:
+ -
+ type: JSONPATH
+ parameters:
+ - $.metrics.read_throughput.average
+ error_handler: DISCARD_VALUE
+ master_item:
+ key: azure.db.pgsql.data.get
+ tags:
+ -
+ tag: component
+ value: storage
+ -
+ uuid: 46c500b44164430c952be3a1b2008fb8
+ name: 'Azure PostgreSQL: Data disk write Bps'
+ type: DEPENDENT
+ key: azure.db.pgsql.disk.bps.write
+ delay: '0'
+ history: 7d
+ value_type: FLOAT
+ units: Bps
+ description: 'Bytes written per second to the data disk during the monitoring period.'
+ preprocessing:
+ -
+ type: JSONPATH
+ parameters:
+ - $.metrics.write_throughput.average
+ error_handler: DISCARD_VALUE
+ master_item:
+ key: azure.db.pgsql.data.get
+ tags:
+ -
+ tag: component
+ value: storage
+ -
+ uuid: b8812461d49a4ff5a2177c2990969c38
+ name: 'Azure PostgreSQL: Data disk queue depth'
+ type: DEPENDENT
+ key: azure.db.pgsql.disk.queue.depth
+ delay: '0'
+ history: 7d
+ value_type: FLOAT
+ description: 'The number of outstanding I/O operations to the data disk.'
+ preprocessing:
+ -
+ type: JSONPATH
+ parameters:
+ - $.metrics.disk_queue_depth.average
+ error_handler: DISCARD_VALUE
+ master_item:
+ key: azure.db.pgsql.data.get
+ tags:
+ -
+ tag: component
+ value: storage
+ -
+ uuid: 10dd8ed658d8442ca39ac1decf9bc2f8
+ name: 'Azure PostgreSQL: Data disk IOPS'
+ type: DEPENDENT
+ key: azure.db.pgsql.iops
+ delay: '0'
+ history: 7d
+ value_type: FLOAT
+ units: '!ops'
+ description: 'I/O Operations per second.'
+ preprocessing:
+ -
+ type: JSONPATH
+ parameters:
+ - $.metrics.iops.average
+ master_item:
+ key: azure.db.pgsql.data.get
+ tags:
+ -
+ tag: component
+ value: storage
+ -
+ uuid: dee65b110a4842ccba8e74eefc097304
+ name: 'Azure PostgreSQL: Data disk read IOPS'
+ type: DEPENDENT
+ key: azure.db.pgsql.iops.read
+ delay: '0'
+ history: 7d
+ value_type: FLOAT
+ units: '!ops'
+ description: 'The number of the data disk I/O read operations per second.'
+ preprocessing:
+ -
+ type: JSONPATH
+ parameters:
+ - $.metrics.read_iops.average
+ error_handler: DISCARD_VALUE
+ master_item:
+ key: azure.db.pgsql.data.get
+ tags:
+ -
+ tag: component
+ value: storage
+ -
+ uuid: 805dfa040c0a4700acac4b5b1f8a4d11
+ name: 'Azure PostgreSQL: Data disk write IOPS'
+ type: DEPENDENT
+ key: azure.db.pgsql.iops.write
+ delay: '0'
+ history: 7d
+ value_type: FLOAT
+ units: '!ops'
+ description: 'The number of the data disk I/O write operations per second.'
+ preprocessing:
+ -
+ type: JSONPATH
+ parameters:
+ - $.metrics.write_iops.average
+ error_handler: DISCARD_VALUE
+ master_item:
+ key: azure.db.pgsql.data.get
+ tags:
+ -
+ tag: component
+ value: storage
+ -
+ uuid: d1d909c2dd0d42649094ec8339e08881
+ name: 'Azure PostgreSQL: Memory utilization'
+ type: DEPENDENT
+ key: azure.db.pgsql.memory.percentage
+ delay: '0'
+ history: 7d
+ value_type: FLOAT
+ units: '%'
+ description: 'The memory percent of a host.'
+ preprocessing:
+ -
+ type: JSONPATH
+ parameters:
+ - $.metrics.memory_percent.average
+ master_item:
+ key: azure.db.pgsql.data.get
+ tags:
+ -
+ tag: component
+ value: memory
+ triggers:
+ -
+ uuid: aac52a89709044ed987a365a1d5af17b
+ expression: 'min(/Azure PostgreSQL flexible server by HTTP/azure.db.pgsql.memory.percentage,5m)>{$AZURE.DB.MEMORY.UTIL.CRIT}'
+ name: 'Azure PostgreSQL: High memory utilization'
+ opdata: 'Current utilization: {ITEM.LASTVALUE1}'
+ priority: AVERAGE
+ description: 'The system is running out of free memory.'
+ tags:
+ -
+ tag: scope
+ value: performance
+ -
+ uuid: 040898e15a26455a9992c603ca2d45df
+ name: 'Azure PostgreSQL: Network out'
+ type: DEPENDENT
+ key: azure.db.pgsql.network.egress
+ delay: '0'
+ history: 7d
+ value_type: FLOAT
+ units: bps
+ description: 'Network outbound traffic across the active connections.'
+ preprocessing:
+ -
+ type: JSONPATH
+ parameters:
+ - $.metrics.network_bytes_egress.total
+ -
+ type: MULTIPLIER
+ parameters:
+ - '0.1333'
+ master_item:
+ key: azure.db.pgsql.data.get
+ tags:
+ -
+ tag: component
+ value: network
+ -
+ uuid: 8e398d8b33444a148760ec33622755a6
+ name: 'Azure PostgreSQL: Network in'
+ type: DEPENDENT
+ key: azure.db.pgsql.network.ingress
+ delay: '0'
+ history: 7d
+ value_type: FLOAT
+ units: bps
+ description: 'Network inbound traffic across the active connections.'
+ preprocessing:
+ -
+ type: JSONPATH
+ parameters:
+ - $.metrics.network_bytes_ingress.total
+ -
+ type: MULTIPLIER
+ parameters:
+ - '0.1333'
+ master_item:
+ key: azure.db.pgsql.data.get
+ tags:
+ -
+ tag: component
+ value: network
+ -
+ uuid: ebebf8b3a2884576abb250fdc2385c6f
+ name: 'Azure PostgreSQL: Backup storage used'
+ type: DEPENDENT
+ key: azure.db.pgsql.storage.backup.used
+ delay: '0'
+ history: 7d
+ value_type: FLOAT
+ units: B
+ description: 'Used backup storage expressed in bytes.'
+ preprocessing:
+ -
+ type: JSONPATH
+ parameters:
+ - $.metrics.backup_storage_used.average
+ error_handler: DISCARD_VALUE
+ master_item:
+ key: azure.db.pgsql.data.get
+ tags:
+ -
+ tag: component
+ value: storage
+ -
+ uuid: 9bbfba89a1834798b71260536fedab55
+ name: 'Azure PostgreSQL: Storage free'
+ type: DEPENDENT
+ key: azure.db.pgsql.storage.free
+ delay: '0'
+ history: 7d
+ value_type: FLOAT
+ units: B
+ description: 'Free storage space expressed in bytes.'
+ preprocessing:
+ -
+ type: JSONPATH
+ parameters:
+ - $.metrics.storage_free.average
+ master_item:
+ key: azure.db.pgsql.data.get
+ tags:
+ -
+ tag: component
+ value: storage
+ -
+ uuid: d9d97e728d1741568fce925c0fca33a8
+ name: 'Azure PostgreSQL: Storage percent'
+ type: DEPENDENT
+ key: azure.db.pgsql.storage.percent
+ delay: '0'
+ history: 7d
+ value_type: FLOAT
+ units: '%'
+ description: 'The storage utilization expressed in %.'
+ preprocessing:
+ -
+ type: JSONPATH
+ parameters:
+ - $.metrics.storage_percent.average
+ master_item:
+ key: azure.db.pgsql.data.get
+ tags:
+ -
+ tag: component
+ value: storage
+ triggers:
+ -
+ uuid: de3142bed28340d9abe518cd3967b024
+ expression: 'last(/Azure PostgreSQL flexible server by HTTP/azure.db.pgsql.storage.percent)>{$AZURE.DB.STORAGE.PUSED.CRIT}'
+ name: 'Azure PostgreSQL: Storage space is critically low'
+ opdata: 'Current utilization: {ITEM.LASTVALUE1}'
+ priority: AVERAGE
+ description: 'Critical utilization of the storage space.'
+ tags:
+ -
+ tag: scope
+ value: capacity
+ -
+ uuid: e948600affaa4ff4a0ab4e50f4858c0a
+ expression: 'last(/Azure PostgreSQL flexible server by HTTP/azure.db.pgsql.storage.percent)>{$AZURE.DB.STORAGE.PUSED.WARN}'
+ name: 'Azure PostgreSQL: Storage space is low'
+ opdata: 'Current utilization: {ITEM.LASTVALUE1}'
+ priority: WARNING
+ description: 'High utilization of the storage space.'
+ tags:
+ -
+ tag: scope
+ value: capacity
+ -
+ uuid: 4dae6c2c1dbf4492a73fd1834cae6aad
+ name: 'Azure PostgreSQL: Transaction log storage used'
+ type: DEPENDENT
+ key: azure.db.pgsql.storage.txlogs.used
+ delay: '0'
+ history: 7d
+ value_type: FLOAT
+ units: B
+ description: 'The storage space used by a transaction log expressed in bytes.'
+ preprocessing:
+ -
+ type: JSONPATH
+ parameters:
+ - $.metrics.txlogs_storage_used.average
+ master_item:
+ key: azure.db.pgsql.data.get
+ tags:
+ -
+ tag: component
+ value: storage
+ -
+ uuid: 7a85b5223ec44ff8bc996c9df1673611
+ name: 'Azure PostgreSQL: Storage used'
+ type: DEPENDENT
+ key: azure.db.pgsql.storage.used
+ delay: '0'
+ history: 7d
+ value_type: FLOAT
+ units: B
+ description: 'Used storage space expressed in bytes.'
+ preprocessing:
+ -
+ type: JSONPATH
+ parameters:
+ - $.metrics.storage_used.average
+ master_item:
+ key: azure.db.pgsql.data.get
+ tags:
+ -
+ tag: component
+ value: storage
+ -
+ uuid: 6df77ed1d4614ca793df56dbc70d821c
+ name: 'Azure PostgreSQL: Maximum used transaction IDs'
+ type: DEPENDENT
+ key: azure.db.pgsql.txid.used.max
+ delay: '0'
+ history: 7d
+ value_type: FLOAT
+ description: 'The maximum number of used transaction IDs.'
+ preprocessing:
+ -
+ type: JSONPATH
+ parameters:
+ - $.metrics.maximum_used_transactionIDs.average
+ master_item:
+ key: azure.db.pgsql.data.get
+ tags:
+ -
+ tag: component
+ value: storage
+ tags:
+ -
+ tag: class
+ value: software
+ -
+ tag: target
+ value: azure
+ 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 expressed in %.'
+ -
+ macro: '{$AZURE.DB.MEMORY.UTIL.CRIT}'
+ value: '90'
+ description: 'The critical threshold of the memory utilization expressed in %.'
+ -
+ macro: '{$AZURE.DB.STORAGE.PUSED.CRIT}'
+ value: '90'
+ description: 'The critical threshold of the storage utilization expressed in %.'
+ -
+ macro: '{$AZURE.DB.STORAGE.PUSED.WARN}'
+ value: '80'
+ description: 'The warning threshold of the storage utilization expressed in %.'
+ -
+ macro: '{$AZURE.PASSWORD}'
+ type: SECRET_TEXT
+ description: 'Microsoft Azure password.'
+ -
+ macro: '{$AZURE.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: f208cf6141c44659a2c6904ec4cd7ac3
+ name: 'Azure resource health state'
+ mappings:
+ -
+ value: '0'
+ newvalue: Available
+ -
+ value: '1'
+ newvalue: Degraded
+ -
+ value: '2'
+ newvalue: Unavailable
+ -
+ value: '3'
+ newvalue: Unknown
+ -
+ uuid: d023e2cd326c486f908e3e361d1fe157
+ template: 'Azure PostgreSQL single server by HTTP'
+ name: 'Azure PostgreSQL single server by HTTP'
+ description: |
+ This template is designed to monitor Microsoft Azure PostgreSQL servers by HTTP.
+ It works without any external scripts and uses the script item.
+
+ Setup:
+ 1. Create an Azure service principal via the Azure command-line interface (Azure CLI) for your subscription.
+ `az ad sp create-for-rbac --name zabbix --role reader --scope /subscriptions/<subscription_id>`
+ See https://docs.microsoft.com/en-us/cli/azure/create-an-azure-service-principal-azure-cli for more details.
+ 2. Link the template to a host.
+ 3. Configure 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: 9eb43a5ffb0d4e07be8d1fccfdecd2aa
+ name: 'Azure PostgreSQL: Availability status detailed'
+ type: DEPENDENT
+ key: azure.db.pgsql.availability.details
+ delay: '0'
+ history: 7d
+ trends: '0'
+ value_type: CHAR
+ description: 'The summary description of the availability status.'
+ preprocessing:
+ -
+ type: JSONPATH
+ parameters:
+ - $.health.summary
+ -
+ type: DISCARD_UNCHANGED_HEARTBEAT
+ parameters:
+ - 1h
+ master_item:
+ key: azure.db.pgsql.data.get
+ tags:
+ -
+ tag: component
+ value: health
+ -
+ uuid: df4c66646f864f79b5f5e9f71dbefe82
+ name: 'Azure PostgreSQL: Availability state'
+ type: DEPENDENT
+ key: azure.db.pgsql.availability.state
+ delay: '0'
+ history: 7d
+ description: 'The availability status of the resource.'
+ valuemap:
+ name: 'Azure resource health state'
+ preprocessing:
+ -
+ type: JSONPATH
+ parameters:
+ - $.health.availabilityState
+ error_handler: CUSTOM_VALUE
+ error_handler_params: '3'
+ -
+ type: STR_REPLACE
+ parameters:
+ - Available
+ - '0'
+ -
+ type: STR_REPLACE
+ parameters:
+ - Degraded
+ - '1'
+ -
+ type: STR_REPLACE
+ parameters:
+ - Unavailable
+ - '2'
+ -
+ type: STR_REPLACE
+ parameters:
+ - Unknown
+ - '3'
+ -
+ type: IN_RANGE
+ parameters:
+ - '0'
+ - '3'
+ error_handler: CUSTOM_VALUE
+ error_handler_params: '3'
+ -
+ type: DISCARD_UNCHANGED_HEARTBEAT
+ parameters:
+ - 1h
+ master_item:
+ key: azure.db.pgsql.data.get
+ tags:
+ -
+ tag: component
+ value: health
+ triggers:
+ -
+ uuid: 699ca12c916746b1bf1e121261771cc3
+ expression: 'last(/Azure PostgreSQL single server by HTTP/azure.db.pgsql.availability.state)=1'
+ name: 'Azure PostgreSQL: PostgreSQL server is degraded'
+ opdata: '{ITEM.LASTVALUE1}'
+ priority: AVERAGE
+ description: 'The resource is in degraded state.'
+ tags:
+ -
+ tag: scope
+ value: availability
+ -
+ uuid: 14e45ba0bc26409a89d92edfda152947
+ expression: 'last(/Azure PostgreSQL single server by HTTP/azure.db.pgsql.availability.state)=3'
+ name: 'Azure PostgreSQL: PostgreSQL server is in unknown state'
+ opdata: '{ITEM.LASTVALUE1}'
+ priority: WARNING
+ description: 'The resource state is unknown.'
+ tags:
+ -
+ tag: scope
+ value: availability
+ -
+ uuid: 4dc9113f8a914ac098d8736dba5aed4a
+ expression: 'last(/Azure PostgreSQL single server by HTTP/azure.db.pgsql.availability.state)=2'
+ name: 'Azure PostgreSQL: PostgreSQL server is unavailable'
+ opdata: '{ITEM.LASTVALUE1}'
+ priority: HIGH
+ description: 'The resource state is unavailable.'
+ tags:
+ -
+ tag: scope
+ value: availability
+ -
+ uuid: 3d0d3e1fe77740e4bd7b720368707214
+ name: 'Azure PostgreSQL: Connections active'
+ type: DEPENDENT
+ key: azure.db.pgsql.connections.active
+ delay: '0'
+ history: 7d
+ value_type: FLOAT
+ description: 'The count of active connections.'
+ preprocessing:
+ -
+ type: JSONPATH
+ parameters:
+ - $.metrics.active_connections.average
+ master_item:
+ key: azure.db.pgsql.data.get
+ tags:
+ -
+ tag: component
+ value: network
+ -
+ uuid: 353a6ba543a84b32b16a5809ae63b4e1
+ name: 'Azure PostgreSQL: Connections failed'
+ type: DEPENDENT
+ key: azure.db.pgsql.connections.failed
+ delay: '0'
+ history: 7d
+ value_type: FLOAT
+ description: 'The count of failed connections.'
+ preprocessing:
+ -
+ type: JSONPATH
+ parameters:
+ - $.metrics.connections_failed.total
+ error_handler: DISCARD_VALUE
+ master_item:
+ key: azure.db.pgsql.data.get
+ tags:
+ -
+ tag: component
+ value: network
+ -
+ uuid: 537330b2372b434ebcea8a77a809c2f3
+ name: 'Azure PostgreSQL: Percentage CPU'
+ type: DEPENDENT
+ key: azure.db.pgsql.cpu.percentage
+ delay: '0'
+ history: 7d
+ value_type: FLOAT
+ units: '%'
+ description: 'The CPU percent of a host.'
+ preprocessing:
+ -
+ type: JSONPATH
+ parameters:
+ - $.metrics.cpu_percent.average
+ master_item:
+ key: azure.db.pgsql.data.get
+ tags:
+ -
+ tag: component
+ value: cpu
+ triggers:
+ -
+ uuid: 33bd2ef88ad3468b9f0b2b1358cc7448
+ expression: 'min(/Azure PostgreSQL single server by HTTP/azure.db.pgsql.cpu.percentage,5m)>{$AZURE.DB.CPU.UTIL.CRIT}'
+ name: 'Azure PostgreSQL: High CPU utilization'
+ opdata: 'Current utilization: {ITEM.LASTVALUE1}'
+ priority: HIGH
+ description: 'The CPU utilization is too high. The system might be slow to respond.'
+ tags:
+ -
+ tag: scope
+ value: performance
+ -
+ uuid: 5b132ff050c94daa92b252529a52c535
+ name: 'Azure PostgreSQL: Get errors'
+ type: DEPENDENT
+ key: azure.db.pgsql.data.errors
+ delay: '0'
+ history: 7d
+ trends: '0'
+ value_type: TEXT
+ description: 'A list of errors from API requests.'
+ preprocessing:
+ -
+ type: JSONPATH
+ parameters:
+ - $.errors
+ -
+ type: DISCARD_UNCHANGED_HEARTBEAT
+ parameters:
+ - 1h
+ master_item:
+ key: azure.db.pgsql.data.get
+ tags:
+ -
+ tag: component
+ value: raw
+ triggers:
+ -
+ uuid: dd3d0be997204f8b9968ef5839fb7a9b
+ expression: 'length(last(/Azure PostgreSQL single server by HTTP/azure.db.pgsql.data.errors))>0'
+ name: 'Azure PostgreSQL: There are errors in requests to API'
+ opdata: '{ITEM.LASTVALUE1}'
+ priority: AVERAGE
+ description: 'Zabbix has received errors in response to API requests.'
+ tags:
+ -
+ tag: scope
+ value: availability
+ -
+ uuid: e47d863822e64e6292bfa3e684bc2839
+ name: 'Azure PostgreSQL: Get data'
+ type: SCRIPT
+ key: azure.db.pgsql.data.get
+ history: 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',
+ 'backup_storage_used',
+ 'network_bytes_egress',
+ 'network_bytes_ingress',
+ 'pg_replica_log_delay_in_seconds',
+ 'pg_replica_log_delay_in_bytes'
+ ],
+ prepared_metrics = [],
+ data = {};
+ data['errors'] = {};
+ data['metrics'] = {};
+
+ try {
+ AzureDB.setParams(JSON.parse(value));
+
+ try {
+ result = AzureDB.request(
+ 'https://login.microsoftonline.com/' + encodeURIComponent(AzureDB.params.tenant_id) + '/oauth2/token',
+ 'grant_type=client_credentials&resource=' + encodeURIComponent('https://management.azure.com/') + '&client_id=' + encodeURIComponent(AzureDB.params.app_id) + '&client_secret=' + encodeURIComponent(AzureDB.params.password)
+ );
+
+ if ('access_token' in result) {
+ AzureDB.token = result['access_token'];
+ } else {
+ throw 'Auth response does not contain access token.';
+ }
+ }
+ catch (error) {
+ data.errors.auth = error.toString();
+ }
+
+ if (!('auth' in data.errors)) {
+ try {
+ health = AzureDB.request('https://management.azure.com' + AzureDB.params.resource_id + '/providers/Microsoft.ResourceHealth/availabilityStatuses?api-version=2020-05-01');
+ 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 expressed in the JSON.'
+ timeout: '{$AZURE.DATA.TIMEOUT}'
+ parameters:
+ -
+ name: app_id
+ value: '{$AZURE.APP_ID}'
+ -
+ name: password
+ value: '{$AZURE.PASSWORD}'
+ -
+ name: tenant_id
+ value: '{$AZURE.TENANT_ID}'
+ -
+ name: subscription_id
+ value: '{$AZURE.SUBSCRIPTION_ID}'
+ -
+ name: resource_id
+ value: '{$AZURE.RESOURCE_ID}'
+ tags:
+ -
+ tag: component
+ value: raw
+ -
+ uuid: 9eade85c49bc462aab33b03e37581d87
+ name: 'Azure PostgreSQL: IO consumption percent'
+ type: DEPENDENT
+ key: azure.db.pgsql.io.consumption.percent
+ delay: '0'
+ history: 7d
+ value_type: FLOAT
+ units: '%'
+ description: 'The IO Percent.'
+ preprocessing:
+ -
+ type: JSONPATH
+ parameters:
+ - $.metrics.io_consumption_percent.average
+ master_item:
+ key: azure.db.pgsql.data.get
+ tags:
+ -
+ tag: component
+ value: operations
+ -
+ uuid: e2ee4882b08f45788e6abb698265810e
+ name: 'Azure PsotgreSQL: Memory utilization'
+ type: DEPENDENT
+ key: azure.db.pgsql.memory.percentage
+ delay: '0'
+ history: 7d
+ value_type: FLOAT
+ units: '%'
+ description: 'The memory percent of a host.'
+ preprocessing:
+ -
+ type: JSONPATH
+ parameters:
+ - $.metrics.memory_percent.average
+ master_item:
+ key: azure.db.pgsql.data.get
+ tags:
+ -
+ tag: component
+ value: memory
+ triggers:
+ -
+ uuid: 3119f21167a546369c05d31cda2e0147
+ expression: 'min(/Azure PostgreSQL single server by HTTP/azure.db.pgsql.memory.percentage,5m)>{$AZURE.DB.MEMORY.UTIL.CRIT}'
+ name: 'Azure PsotgreSQL: High memory utilization'
+ opdata: 'Current utilization: {ITEM.LASTVALUE1}'
+ priority: AVERAGE
+ description: 'The system is running out of free memory.'
+ tags:
+ -
+ tag: scope
+ value: performance
+ -
+ uuid: f81eeb98d5e942f296c360ff71e8bf8d
+ name: 'Azure PostgreSQL: Network out'
+ type: DEPENDENT
+ key: azure.db.pgsql.network.egress
+ delay: '0'
+ history: 7d
+ value_type: FLOAT
+ units: bps
+ description: 'Network outbound traffic across the active connections.'
+ preprocessing:
+ -
+ type: JSONPATH
+ parameters:
+ - $.metrics.network_bytes_egress.total
+ error_handler: DISCARD_VALUE
+ -
+ type: MULTIPLIER
+ parameters:
+ - '0.1333'
+ master_item:
+ key: azure.db.pgsql.data.get
+ tags:
+ -
+ tag: component
+ value: network
+ -
+ uuid: 51f7e35042d04ddb88c7703d1b015d3b
+ name: 'Azure PosgtreSQL: Network in'
+ type: DEPENDENT
+ key: azure.db.pgsql.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.1333'
+ master_item:
+ key: azure.db.pgsql.data.get
+ tags:
+ -
+ tag: component
+ value: network
+ -
+ uuid: 1db9e470b527476fae1d26d4b67f855b
+ name: 'Azure PostgreSQL: Replication lag'
+ type: DEPENDENT
+ key: azure.db.pgsql.replica.log.delay
+ delay: '0'
+ history: 7d
+ value_type: FLOAT
+ units: s
+ description: 'The replication lag expressed in seconds.'
+ preprocessing:
+ -
+ type: JSONPATH
+ parameters:
+ - $.metrics.pg_replica_log_delay_in_seconds.maximum
+ error_handler: DISCARD_VALUE
+ master_item:
+ key: azure.db.pgsql.data.get
+ tags:
+ -
+ tag: component
+ value: replication
+ -
+ uuid: 6cdfda8f9e6640f8a8536f88729d75d6
+ name: 'Azure PostgreSQL: Max lag across replicas in bytes'
+ type: DEPENDENT
+ key: azure.db.pgsql.replica.log.delay.bytes
+ delay: '0'
+ history: 7d
+ value_type: FLOAT
+ units: B
+ description: 'Lag expressed in bytes for the most lagging replica.'
+ preprocessing:
+ -
+ type: JSONPATH
+ parameters:
+ - $.metrics.pg_replica_log_delay_in_bytes.maximum
+ error_handler: DISCARD_VALUE
+ master_item:
+ key: azure.db.pgsql.data.get
+ tags:
+ -
+ tag: component
+ value: replication
+ -
+ uuid: 6b06fb0e008640839dc3cda5bcc3f91a
+ name: 'Azure PostgreSQL: Backup storage used'
+ type: DEPENDENT
+ key: azure.db.pgsql.storage.backup.used
+ delay: '0'
+ history: 7d
+ value_type: FLOAT
+ units: B
+ description: 'Used backup storage expressed in bytes.'
+ preprocessing:
+ -
+ type: JSONPATH
+ parameters:
+ - $.metrics.backup_storage_used.average
+ master_item:
+ key: azure.db.pgsql.data.get
+ tags:
+ -
+ tag: component
+ value: storage
+ -
+ uuid: b8d5ac0b049a4d73b2f35f59c7e7609c
+ name: 'Azure PostgreSQL: Storage limit'
+ type: DEPENDENT
+ key: azure.db.pgsql.storage.limit
+ delay: '0'
+ history: 7d
+ value_type: FLOAT
+ units: B
+ description: 'The storage limit expressed in bytes.'
+ preprocessing:
+ -
+ type: JSONPATH
+ parameters:
+ - $.metrics.storage_limit.maximum
+ master_item:
+ key: azure.db.pgsql.data.get
+ tags:
+ -
+ tag: component
+ value: storage
+ -
+ uuid: 750b4d3438614cc992694136d309c3cb
+ name: 'Azure PostgreSQL: Storage percent'
+ type: DEPENDENT
+ key: azure.db.pgsql.storage.percent
+ delay: '0'
+ history: 7d
+ value_type: FLOAT
+ units: '%'
+ description: 'The storage utilization expressed in %.'
+ preprocessing:
+ -
+ type: JSONPATH
+ parameters:
+ - $.metrics.storage_percent.average
+ master_item:
+ key: azure.db.pgsql.data.get
+ tags:
+ -
+ tag: component
+ value: storage
+ triggers:
+ -
+ uuid: 6538d2c8ed774feb951204308f1458ce
+ expression: 'last(/Azure PostgreSQL single server by HTTP/azure.db.pgsql.storage.percent)>{$AZURE.DB.STORAGE.PUSED.CRIT}'
+ name: 'Azure PostgreSQL: Storage space is critically low'
+ opdata: 'Current utilization: {ITEM.LASTVALUE1}'
+ priority: AVERAGE
+ description: 'Critical utilization of the storage space.'
+ tags:
+ -
+ tag: scope
+ value: capacity
+ -
+ uuid: 7f7a004cfc2a492092dd74c475888e8b
+ expression: 'last(/Azure PostgreSQL single server by HTTP/azure.db.pgsql.storage.percent)>{$AZURE.DB.STORAGE.PUSED.WARN}'
+ name: 'Azure PostgreSQL: Storage space is low'
+ opdata: 'Current utilization: {ITEM.LASTVALUE1}'
+ priority: WARNING
+ description: 'High utilization of the storage space.'
+ tags:
+ -
+ tag: scope
+ value: capacity
+ -
+ uuid: 399ef67426494a5cb7a820d056dfd4d5
+ name: 'Azure PostgreSQL: Server log storage limit'
+ type: DEPENDENT
+ key: azure.db.pgsql.storage.server.log.limit
+ delay: '0'
+ history: 7d
+ value_type: FLOAT
+ units: B
+ description: 'The storage limit of a server log expressed in bytes.'
+ preprocessing:
+ -
+ type: JSONPATH
+ parameters:
+ - $.metrics.serverlog_storage_limit.maximum
+ master_item:
+ key: azure.db.pgsql.data.get
+ tags:
+ -
+ tag: component
+ value: storage
+ -
+ uuid: ef6890330ebe4fe09f46b0d2f6d3f827
+ name: 'Azure PostgreSQL: Server log storage percent'
+ type: DEPENDENT
+ key: azure.db.pgsql.storage.server.log.percent
+ delay: '0'
+ history: 7d
+ value_type: FLOAT
+ units: '%'
+ description: 'The storage utilization by a server log expressed in %.'
+ preprocessing:
+ -
+ type: JSONPATH
+ parameters:
+ - $.metrics.serverlog_storage_percent.average
+ master_item:
+ key: azure.db.pgsql.data.get
+ tags:
+ -
+ tag: component
+ value: storage
+ -
+ uuid: 36bd10a959964083ae47349dd83ec695
+ name: 'Azure PostgreSQL: Server log storage used'
+ type: DEPENDENT
+ key: azure.db.pgsql.storage.server.log.used
+ delay: '0'
+ history: 7d
+ value_type: FLOAT
+ units: B
+ description: 'The storage space used by a server log expressed in bytes.'
+ preprocessing:
+ -
+ type: JSONPATH
+ parameters:
+ - $.metrics.serverlog_storage_usage.average
+ master_item:
+ key: azure.db.pgsql.data.get
+ tags:
+ -
+ tag: component
+ value: storage
+ -
+ uuid: dcbb87d442a04938b23e68f739f1e36f
+ name: 'Azure PostgreSQL: Storage used'
+ type: DEPENDENT
+ key: azure.db.pgsql.storage.used
+ delay: '0'
+ history: 7d
+ value_type: FLOAT
+ units: B
+ description: 'Used storage space expressed in bytes.'
+ preprocessing:
+ -
+ type: JSONPATH
+ parameters:
+ - $.metrics.storage_used.average
+ master_item:
+ key: azure.db.pgsql.data.get
+ tags:
+ -
+ tag: component
+ value: storage
+ tags:
+ -
+ tag: class
+ value: software
+ -
+ tag: target
+ value: azure
+ 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 expressed in %.'
+ -
+ macro: '{$AZURE.DB.MEMORY.UTIL.CRIT}'
+ value: '90'
+ description: 'The critical threshold of the memory utilization expressed in %.'
+ -
+ macro: '{$AZURE.DB.STORAGE.PUSED.CRIT}'
+ value: '90'
+ description: 'The critical threshold of the storage utilization expressed in %.'
+ -
+ macro: '{$AZURE.DB.STORAGE.PUSED.WARN}'
+ value: '80'
+ description: 'The warning threshold of the storage utilization expressed in %.'
+ -
+ macro: '{$AZURE.PASSWORD}'
+ type: SECRET_TEXT
+ description: 'Microsoft Azure password.'
+ -
+ macro: '{$AZURE.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: 61fc206aaae04abda4012e031f0e27ac
+ name: 'Azure resource health state'
+ mappings:
+ -
+ value: '0'
+ newvalue: Available
+ -
+ value: '1'
+ newvalue: Degraded
+ -
+ value: '2'
+ newvalue: Unavailable
+ -
+ value: '3'
+ newvalue: Unknown
+ -
uuid: 820fa4a1565c43e4aac07a691a5bface
template: 'Azure virtual machine by HTTP'
name: 'Azure virtual machine by HTTP'
@@ -2135,7 +4006,7 @@ zabbix_export:
`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}.
+ 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/
@@ -2367,7 +4238,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: 'The CPU utilization is too high. The system might be slow to respond.'
tags:
-
tag: scope
@@ -2882,7 +4753,7 @@ zabbix_export:
}
return JSON.stringify(data);
- description: 'The result of API requests is in the JSON.'
+ description: 'The result of API requests is expressed in the JSON.'
timeout: '{$AZURE.DATA.TIMEOUT}'
parameters:
-
@@ -3592,7 +5463,7 @@ zabbix_export:
-
macro: '{$AZURE.VM.CPU.UTIL.CRIT}'
value: '90'
- description: 'The critical threshold of the CPU utilization in %.'
+ description: 'The critical threshold of the CPU utilization expressed in %.'
valuemaps:
-
uuid: 38c8ce1516704ec2a6f1ea9686db56b9
@@ -3884,3 +5755,114 @@ zabbix_export:
item:
host: 'Azure MySQL flexible server by HTTP'
key: azure.db.mysql.storage.limit
+ -
+ uuid: 2b60e8b1fd7c43f4ac61812e43c0e1ca
+ name: 'Azure PostgreSQL: Connections'
+ graph_items:
+ -
+ color: 1A7C11
+ item:
+ host: 'Azure PostgreSQL flexible server by HTTP'
+ key: azure.db.pgsql.connections.active
+ -
+ sortorder: '1'
+ color: 2774A4
+ item:
+ host: 'Azure PostgreSQL flexible server by HTTP'
+ key: azure.db.pgsql.connections.succeeded
+ -
+ sortorder: '2'
+ color: F63100
+ item:
+ host: 'Azure PostgreSQL flexible server by HTTP'
+ key: azure.db.pgsql.connections.failed
+ -
+ uuid: c76cf8ec6a584af6be815ec4a9257a8c
+ name: 'Azure PostgreSQL: Connections'
+ graph_items:
+ -
+ color: 1A7C11
+ item:
+ host: 'Azure PostgreSQL single server by HTTP'
+ key: azure.db.pgsql.connections.active
+ -
+ sortorder: '1'
+ color: 2774A4
+ item:
+ host: 'Azure PostgreSQL single server by HTTP'
+ key: azure.db.pgsql.connections.failed
+ -
+ uuid: a4679d243b574bea84397c980723c68b
+ name: 'Azure PostgreSQL: Network traffic'
+ graph_items:
+ -
+ color: 1A7C11
+ item:
+ host: 'Azure PostgreSQL flexible server by HTTP'
+ key: azure.db.pgsql.network.egress
+ -
+ sortorder: '1'
+ color: 2774A4
+ item:
+ host: 'Azure PostgreSQL flexible server by HTTP'
+ key: azure.db.pgsql.network.ingress
+ -
+ uuid: 8bc17d843775414ea971e640e1fe5ec0
+ name: 'Azure PostgreSQL: Network traffic'
+ graph_items:
+ -
+ color: 1A7C11
+ item:
+ host: 'Azure PostgreSQL single server by HTTP'
+ key: azure.db.pgsql.network.egress
+ -
+ sortorder: '1'
+ color: 2774A4
+ item:
+ host: 'Azure PostgreSQL single server by HTTP'
+ key: azure.db.pgsql.network.ingress
+ -
+ uuid: 9e750a5a462b4429ac5a36a72bd60c66
+ name: 'Azure PostgreSQL: Server log storage utilization'
+ graph_items:
+ -
+ color: 1A7C11
+ item:
+ host: 'Azure PostgreSQL single server by HTTP'
+ key: azure.db.pgsql.storage.server.log.used
+ -
+ sortorder: '1'
+ color: 2774A4
+ item:
+ host: 'Azure PostgreSQL single server by HTTP'
+ key: azure.db.pgsql.storage.server.log.limit
+ -
+ uuid: 5fa13cfbdd784475818fae06ff94f879
+ name: 'Azure PostgreSQL: Storage utilization'
+ graph_items:
+ -
+ color: 1A7C11
+ item:
+ host: 'Azure PostgreSQL flexible server by HTTP'
+ key: azure.db.pgsql.storage.used
+ -
+ sortorder: '1'
+ color: 2774A4
+ item:
+ host: 'Azure PostgreSQL flexible server by HTTP'
+ key: azure.db.pgsql.storage.free
+ -
+ uuid: 9ecd071a77364c4486fa5f63125cd985
+ name: 'Azure PostgreSQL: Storage utilization'
+ graph_items:
+ -
+ color: 1A7C11
+ item:
+ host: 'Azure PostgreSQL single server by HTTP'
+ key: azure.db.pgsql.storage.used
+ -
+ sortorder: '1'
+ color: 2774A4
+ item:
+ host: 'Azure PostgreSQL single server by HTTP'
+ key: azure.db.pgsql.storage.limit