Discovery Azure SQL

This Azure SQL Discovery plugin for Pandora FMS automates the monitoring of Azure SQL Database resources in an Azure subscription. It discovers SQL servers and databases, retrieves their Azure Monitor metrics, and generates Pandora FMS agents and modules.

Introduction

This Azure SQL Discovery plugin for Pandora FMS automates the monitoring of Azure SQL Database resources in an Azure subscription. It discovers SQL servers and databases, retrieves their Azure Monitor metrics, and generates Pandora FMS agents and modules.

The plugin can create one Pandora FMS agent for each discovered database, or it can send all generated modules to a single target agent. It also supports filtering by resource group, SQL server, or database name, adding custom agent and module prefixes, tracking previously discovered entities, skipping the master database, and enabling or disabling module groups.

The implemented checks cover availability, database status, performance, storage usage, connections, tempdb usage, XTP storage, and deadlocks.

Prerequisites

Parameters

Advanced mode

Parameter Description
--conf Path to the configuration file generated by the Discovery task.

Configuration file (--conf)

tenant_id=Azure tenant identifier.
subscription_id=Azure subscription identifier.
client_id=Service Principal application identifier.
client_secret=Service Principal secret.
api_endpoint=Azure management API endpoint. If left empty, https://management.azure.com is used.
login_endpoint=Azure login endpoint. If left empty, https://login.microsoftonline.com is used.
resource_group=optional resource group filter. If left empty, SQL servers are discovered across the subscription.
server_name=optional SQL server filter. If left empty, all accessible SQL servers are discovered.
database_name=optional database filter. If left empty, all discovered databases are monitored.
agent_per_database=create one Pandora FMS agent for each discovered database.
target_agent=target agent used when one agent per database is not created.
agent_prefix=optional prefix for database agents.
module_prefix=optional prefix for generated modules.
interval=interval for created or updated agents.
group_id=Pandora FMS agent group id where agents will be created.
timeout=HTTP timeout in seconds. Values lower than 30 are raised to 30 seconds.
scan_databases=enable automatic database discovery.
entities_list=temporary file used to store discovered databases.
enable_entities_interval=enable periodic refresh of the entities file.
entities_interval=entities file refresh interval.
skip_master_database=skip the master database.
performance_metrics_enabled=enable performance modules.
storage_metrics_enabled=enable storage modules.
connection_metrics_enabled=enable connection modules.
tempdb_xtp_metrics_enabled=enable tempdb and XTP modules.
deadlock_metrics_enabled=enable deadlock modules.

Example

[CONF]
tenant_id=11111111-1111-1111-1111-111111111111
subscription_id=00000000-0000-0000-0000-000000000000
client_id=22222222-2222-2222-2222-222222222222
client_secret=my_client_secret
api_endpoint=
login_endpoint=
resource_group=rg-production
server_name=sql-production
database_name=
agent_per_database=1
target_agent=Azure SQL
agent_prefix=
module_prefix=
interval=300
group_id=10
timeout=30
scan_databases=1
entities_list=/tmp/tmp_discovery.azure_sql.entities
enable_entities_interval=0
entities_interval=86400
skip_master_database=1
performance_metrics_enabled=1
storage_metrics_enabled=1
connection_metrics_enabled=1
tempdb_xtp_metrics_enabled=1
deadlock_metrics_enabled=1

Create a Service Principal

The following Azure CLI command creates a Service Principal with the Reader role on a subscription:

az ad sp create-for-rbac \
  --name pandora-azure-sql-discovery \
  --role Reader \
  --scopes /subscriptions/<SUBSCRIPTION_ID>

The command returns values similar to these:

{
  "appId": "<CLIENT_ID>",
  "displayName": "pandora-azure-sql-discovery",
  "password": "<CLIENT_SECRET>",
  "tenant": "<TENANT_ID>"
}

Use them in the Discovery task as follows:

tenant       -> Tenant ID
appId        -> Client ID
password     -> Client secret
subscription -> Subscription ID

Requirements

The plugin needs permission to:

In most environments, the Reader role on the subscription or on the target resource group is enough. When access is limited to a single resource group, the Resource group field should also be configured in the Discovery task.

Manual Execution

The plugin execution format is:

./pandora_azure_sql --conf <path to configuration file>

Example:

./pandora_azure_sql --conf /etc/pandora/azure_sql.conf

When the plugin runs from Pandora FMS Discovery, the console creates a temporary configuration file and executes the binary with the --conf parameter automatically.

The plugin returns JSON output with a summary and a monitoring_data field. This is the data consumed by the Discovery server to create or update agents and modules.

Discovery

This plugin can be used from Pandora FMS Discovery.

Upload the corresponding .disco package from the Pandora FMS library or from the console plugin management view. After that, Azure SQL monitoring tasks can be created from the Cloud/Application Discovery section.

The Azure credentials step asks for:

The SQL discovery step controls resource discovery and agent creation:

The Modules step enables or disables module groups:

Successful executions include a summary similar to:

Generated Agents and Modules

The plugin creates an Azure SQL Connection module for each monitored database. The module value is 1 when the database is available and 0 when a database stored in the entity cache no longer appears in Azure.

When Create agent per database is enabled, the plugin creates one agent for every discovered database. The agent name is built from the optional Agent prefix, followed by Azure SQL, the SQL server name, and the database name.

Example:

Agent prefix:
SQL server name: sql-production
Database name: appdb
Agent name: Azure SQL sql-production/appdb

When Create agent per database is disabled, every module is sent to the configured Target agent. In that mode, the SQL server and database name are added to each module name to avoid name collisions.

Available modules:

Azure SQL Connection: database connection status. Created as generic_proc.
Database online: database operational status. Created as generic_proc.
CPU percent: CPU percentage used by the database.
DTU consumption percent: DTU percentage consumed by the database.
Physical data read percent: physical data read percentage.
Log write percent: log write percentage.
Sessions percent: session usage percentage.
Workers percent: worker usage percentage.
Data space used: used data space in bytes.
Data space used percent: used data space percentage.
Data space allocated: allocated data storage in bytes.
Successful connections: total successful connections.
Failed connections: total failed connections.
Blocked by firewall connections: total connections blocked by firewall.
Tempdb data size: tempdb data size.
Tempdb log size: tempdb log size.
Tempdb log used percent: tempdb log usage percentage.
XTP storage percent: XTP storage usage percentage.
Deadlocks: total number of deadlocks.

Module type mapping

Module Pandora FMS type Azure aggregation Description
Azure SQL Connection generic_proc Database connection status. Value 1 means available and 0 means vanished from discovery.
Database online generic_proc Logical database status according to Azure.
CPU percent generic_data Average CPU usage percentage.
DTU consumption percent generic_data Average DTU consumption percentage.
Physical data read percent generic_data Average Physical data read percentage.
Log write percent generic_data Average Log write percentage.
Sessions percent generic_data Average Session usage percentage.
Workers percent generic_data Average Worker usage percentage.
Data space used generic_data Average Used data space in bytes.
Data space used percent generic_data Average Used data space percentage.
Data space allocated generic_data Average Allocated data storage in bytes.
Successful connections generic_data Total Successful connections.
Failed connections generic_data Total Failed connections.
Blocked by firewall connections generic_data Total Connections blocked by firewall.
Tempdb data size generic_data Average tempdb data size.
Tempdb log size generic_data Average tempdb log size.
Tempdb log used percent generic_data Average tempdb log usage percentage.
XTP storage percent generic_data Average XTP storage usage percentage.
Deadlocks generic_data Total Detected deadlocks.

Discovered entity cache

The plugin uses the entities_list temporary file to store discovered databases. This allows Pandora FMS to detect databases that existed in previous executions but no longer appear in Azure.

When a database is present in the entity file but is missing from the current Azure discovery, the plugin keeps the related agent and sends Azure SQL Connection with value 0. This makes the disappearance visible in Pandora FMS instead of silently dropping the resource from monitoring.

If Enable entities file re-scan interval is enabled, the entity file is refreshed after the selected Re-scan entities file interval expires. If it is disabled, the previously discovered entity list is preserved so vanished databases can still be detected.