diff options
author | Vyacheslav Khaliev <vyacheslav.khaliev@zabbix.com> | 2022-11-08 14:51:21 +0300 |
---|---|---|
committer | Vyacheslav Khaliev <vyacheslav.khaliev@zabbix.com> | 2022-11-08 14:51:21 +0300 |
commit | dda499f21be5ba95131939d442ab7c5a9dc14008 (patch) | |
tree | 8b316b30864614019665519bcb588ae8dbc6effa | |
parent | 2aeaf5a6e708bb09765e740d90350e03e481fd35 (diff) |
.........T [ZBXNEXT-7903] added templates for Azure PostgreSQL servers
-rw-r--r-- | ChangeLog.d/feature/ZBXNEXT-7903 | 1 | ||||
-rw-r--r-- | templates/cloud/azure_http/README.md | 274 | ||||
-rw-r--r-- | templates/cloud/azure_http/template_cloud_azure_http.yaml | 2066 |
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] + '×pan=' + 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] + '×pan=' + 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 |