Discovery Azure SQL

Este plugin de Discovery de Azure SQL para Pandora FMS está diseñado para automatizar la monitorización de bases de datos Azure SQL Database dentro de una suscripción de Azure. El plugin descubre servidores SQL y bases de datos, consulta métricas mediante Azure Monitor y genera agentes y módulos en Pandora FMS.

Introducción

El plugin Azure SQL Discovery permite descubrir servidores y bases de datos de Azure SQL Database, consultar su estado y sus métricas mediante Azure Resource Manager y Azure Monitor, y crear agentes y módulos en Pandora FMS sin establecer una conexión SQL directa. Admite filtros múltiples y puede crear un agente por base de datos o consolidar los módulos en un agente existente. Si se necesitan consultas SQL personalizadas contra el motor de base de datos, se debe utilizar el plugin Discovery de MSSQL, diseñado para conectarse directamente al servidor y ejecutar consultas SQL.

Prerrequisitos

Parámetros

Parámetro Descripción
--conf, -c Ruta del fichero de configuración.
--credentials Credencial de Azure codificada en Base64.
--tenant-id Identificador del tenant de Azure.
--subscription-id Identificador de la suscripción de Azure.
--client-id Identificador de aplicación del Service Principal.
--client-secret Secreto del Service Principal.
--api-endpoint Endpoint de Azure Resource Manager.
--login-endpoint Endpoint de autenticación de Azure.
--resource-group Filtro exacto de grupos de recursos. Admite valores separados por ;.
--server-name Filtro exacto de servidores SQL. Admite valores separados por ;.
--database-name Filtro exacto de bases de datos. Admite valores separados por ;.
--agent-per-database Activa la creación de un agente por base de datos.
--target-agent Agente de destino del modo consolidado.
--agent-autodisable Activa el modo de autodeshabilitado del agente.
--agent-prefix Prefijo opcional para los agentes.
--module-prefix Prefijo opcional para los módulos.
--interval Intervalo de los agentes en segundos.
--group-id Identificador del grupo de agentes. Debe ser mayor que 0.
--timeout Timeout HTTP en segundos. El mínimo aplicado es 30.
--scan-databases Activa el descubrimiento de bases de datos.
--entities-list Ruta del fichero de entidades.
--enable-entities-interval Activa la reconstrucción periódica del fichero de entidades.
--entities-interval Intervalo de reconstrucción del fichero de entidades.
--skip-master-database Omite la base de datos master.
--performance-metrics-enabled Activa los módulos de rendimiento.
--storage-metrics-enabled Activa los módulos de almacenamiento.
--connection-metrics-enabled Activa los módulos de conexiones.
--tempdb-xtp-metrics-enabled Activa los módulos de TempDB y XTP.
--deadlock-metrics-enabled Activa el módulo de deadlocks.
--debug Muestra las excepciones completas.

Crear Service Principal

Desde Azure CLI se puede crear un Service Principal con rol Reader sobre una suscripción:

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

La salida devolverá valores similares a estos:

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

La correspondencia con los campos del plugin es:

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

Requisitos

Para que el plugin pueda descubrir bases de datos Azure SQL y consultar sus métricas, se recomienda utilizar un Service Principal con permisos de lectura.

El plugin necesita permisos para:

En la mayoría de entornos el rol Reader sobre la suscripción o sobre el grupo de recursos será suficiente. Si se limita el permiso a un único grupo de recursos, se recomienda configurar también el campo Resource group en la tarea de Discovery.

Ejecución manual

Las credenciales pueden indicarse directamente en el fichero de configuración durante una ejecución manual. Los filtros son opcionales y admiten varios valores exactos separados por ;.

[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
resource_group=rg-production;rg-development
server_name=sql-production;sql-development
database_name=appdb;billing
agent_per_database=1
agent_autodisable=0
interval=300
group_id=10
timeout=30
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
./pandora_azure_sql --conf /etc/pandora/azure_sql.conf

El plugin devuelve JSON con los campos summary y monitoring_data.

Discovery

Paso Azure credentials

Paso SQL discovery

Paso Modules

Agentes y módulos generados

Con Create agent per database activo, cada base de datos genera un agente con el formato [Agent prefix]Azure SQL <servidor>/<base de datos>. En modo consolidado, todos los módulos se envían a Target agent y sus nombres incluyen el servidor y la base de datos. Agent autodisable mode genera los agentes con agent_mode igual a 2; si está desactivado, se utiliza 1.

Los filtros son exactos, no expresiones regulares, y se comparan sin distinguir mayúsculas y minúsculas. Los valores múltiples se separan por ;.

El fichero de entidades conserva recursos descubiertos anteriormente. Una entidad almacenada que deja de aparecer se contabiliza en resources_vanished y genera únicamente Azure SQL Connection con valor 0. Cuando vence el intervalo de re-scan, la caché se reconstruye sin comparar con las entidades anteriores.

Módulos creados siempre

Módulo Tipo Unidad Descripción
Azure SQL Connection generic_proc Vale 1 para una base descubierta y 0 para una entidad desaparecida.
Database online generic_proc Vale 1 cuando el estado es Online o Ready; en caso contrario vale 0.

Performance modules

Módulo Tipo Unidad Agregación
CPU percent generic_data % Average
DTU consumption percent generic_data % Average
Physical data read percent generic_data % Average
Log write percent generic_data % Average
Sessions percent generic_data % Average
Workers percent generic_data % Average

Storage modules

Módulo Tipo Unidad Agregación
Data space used GB generic_data GB Average
Data space used percent generic_data % Average
Data space allocated GB generic_data GB Average

Connection modules

Módulo Tipo Unidad Agregación
Successful connections generic_data Count Total
Failed connections generic_data Count Total
Blocked by firewall connections generic_data Count Total

Tempdb and XTP modules

Módulo Tipo Unidad Agregación
Tempdb data size MB generic_data MB Average
Tempdb log size MB generic_data MB Average
Tempdb log used percent generic_data % Average
XTP storage percent generic_data % Average

Deadlock modules

Módulo Tipo Unidad Agregación
Deadlocks generic_data Count Total