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
- Prerrequisitos
- Parámetros
- Crear Service Principal
- Requisitos
- Ejecución manual
- Discovery
- Agentes y módulos generados
Introducción
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.
El plugin puede trabajar creando un agente por cada base de datos descubierta o enviando todos los módulos a un agente único configurado por el usuario. También permite filtrar por grupo de recursos, servidor SQL o base de datos, aplicar prefijos personalizados, controlar la caché de entidades descubiertas, omitir la base de datos master y seleccionar grupos de módulos.
Las métricas implementadas cubren disponibilidad, estado de base de datos, rendimiento, uso de almacenamiento, conexiones, uso de tempdb, almacenamiento XTP y deadlocks.
Prerrequisitos
- El plugin se distribuye como un binario compilado dentro del paquete
.disco, por lo que no requiere instalar Python ni librerías adicionales en el servidor donde se ejecute. - Es necesario disponer de una suscripción de Azure con bases de datos Azure SQL Database.
- Es necesario disponer de credenciales de Azure mediante un Service Principal con permisos de lectura sobre la suscripción o sobre el grupo de recursos que se quiera monitorizar.
- El Service Principal debe poder listar servidores SQL, listar bases de datos y consultar métricas de Azure Monitor.
- En la tarea de Discovery se debe seleccionar un grupo de agentes válido. El grupo
Allno es válido para crear agentes o módulos con este plugin.
Parámetros
Modo avanzado
| Parámetro | Descripción |
|---|---|
--conf |
Ruta del archivo de configuración generado por la tarea de Discovery. |
Archivo de configuración (--conf)
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 API de Azure. Si se deja vacío, se usa https://management.azure.com.
login_endpoint=endpoint de login de Azure. Si se deja vacío, se usa https://login.microsoftonline.com.
resource_group=grupo de recursos opcional. Si se deja vacío, se buscan servidores SQL en toda la suscripción.
server_name=nombre de servidor SQL opcional. Si se deja vacío, se buscan todos los servidores SQL accesibles.
database_name=nombre de base de datos opcional. Si se deja vacío, se monitorizan todas las bases de datos descubiertas.
agent_per_database=crea un agente por cada base de datos descubierta.
target_agent=agente destino cuando no se crea un agente por base de datos.
agent_prefix=prefijo opcional para los agentes creados por base de datos.
module_prefix=prefijo opcional para los módulos creados.
interval=intervalo de los agentes creados o actualizados.
group_id=id del grupo de agentes de Pandora FMS donde se crearán los agentes.
timeout=timeout HTTP en segundos. Si el valor es inferior a 30, el plugin usa 30 segundos.
scan_databases=activa el descubrimiento automático de bases de datos.
entities_list=fichero temporal donde se almacenan las bases de datos descubiertas.
enable_entities_interval=activa el refresco periódico del fichero de entidades.
entities_interval=intervalo de refresco del fichero de entidades.
skip_master_database=omite la base de datos master.
performance_metrics_enabled=activa módulos de rendimiento.
storage_metrics_enabled=activa módulos de almacenamiento.
connection_metrics_enabled=activa módulos de conexiones.
tempdb_xtp_metrics_enabled=activa módulos de tempdb y XTP.
deadlock_metrics_enabled=activa módulos de deadlocks.
Ejemplo
[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
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:
- Listar recursos
Microsoft.Sql/servers. - Listar bases de datos
Microsoft.Sql/servers/databases. - Leer propiedades básicas de las bases de datos, como estado, edición, SKU y tamaño máximo.
- Consultar métricas de Azure Monitor asociadas a cada base de datos.
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
El formato de ejecución del plugin es el siguiente:
./pandora_azure_sql --conf <ruta al fichero de configuración>
Ejemplo:
./pandora_azure_sql --conf /etc/pandora/azure_sql.conf
En modo Discovery, Pandora FMS genera automáticamente el fichero de configuración temporal y ejecuta el binario con el parámetro --conf.
La ejecución devuelve una salida JSON con información de resumen y datos de monitorización en el campo monitoring_data, para que puedan ser consumidos por el servidor de Discovery.
Discovery
Este plugin puede integrarse con el Discovery de Pandora FMS.
Para ello se debe cargar el paquete .disco correspondiente desde la librería de Pandora FMS o desde el sistema de plugins de la consola.
Una vez cargado, se podrán monitorizar bases de datos Azure SQL creando tareas de Discovery desde la sección correspondiente de Cloud/Application Discovery.
En el paso Azure credentials se solicitarán los siguientes datos:
- Tenant ID: identificador del tenant de Azure usado por el Service Principal.
- Subscription ID: identificador de la suscripción de Azure donde se descubrirán los recursos.
- Client ID: identificador de aplicación del Service Principal.
- Client secret: secreto del Service Principal.
- API endpoint: endpoint de gestión de Azure. En entornos estándar debe dejarse vacío.
- Login endpoint: endpoint de autenticación de Azure. En entornos estándar debe dejarse vacío.
En el paso SQL discovery se podrán configurar las opciones de descubrimiento:
- Resource group: filtro opcional para limitar el descubrimiento a un grupo de recursos.
- SQL server name: filtro opcional para limitar el descubrimiento a un servidor SQL concreto.
- Database name: filtro opcional para monitorizar una única base de datos.
- Create agent per database: si está activo, cada base de datos genera su propio agente. Si está desactivado, todos los módulos se envían al agente indicado en Target agent.
- Target agent: agente destino usado únicamente cuando Create agent per database está desactivado.
- Agent prefix: prefijo opcional para los agentes creados por base de datos.
- Module prefix: prefijo opcional para los nombres de módulos.
- Agent interval: intervalo de los agentes creados o actualizados.
-
Timeout: timeout de llamadas HTTP a Azure. Si se configura un valor inferior a
30, el plugin utilizará30segundos. - Scan databases: activa la consulta a Azure para descubrir bases de datos.
- Enable entities file re-scan interval: activa el refresco periódico del fichero de entidades.
- Re-scan entities file interval: intervalo usado para reconstruir la caché de entidades cuando el re-scan está activado.
-
Skip master database: evita crear módulos para la base de datos
master.
En el paso Modules se podrán activar o desactivar grupos de módulos:
- Performance modules: crea módulos de CPU, DTU, lecturas físicas, escritura de log, sesiones y workers.
- Storage modules: crea módulos de espacio usado, porcentaje de uso y almacenamiento asignado.
- Connection modules: crea módulos de conexiones correctas, conexiones fallidas y conexiones bloqueadas por firewall.
-
Tempdb and XTP modules: crea módulos de tamaño de datos de
tempdb, tamaño de log detempdb, porcentaje de log usado y almacenamiento XTP. - Deadlock modules: crea el módulo de deadlocks.
Las tareas completadas con éxito tendrán un resumen de ejecución con información similar a:
- resources_discovered: número de bases de datos descubiertas en la ejecución actual.
- resources_vanished: número de bases de datos almacenadas previamente que ya no aparecen en el descubrimiento actual.
- modules: número total de módulos generados.
- errors: número de errores detectados durante la ejecución.
Agentes y módulos generados
El plugin crea un módulo Azure SQL Connection para cada base de datos monitorizada. Este módulo se crea con valor 1 cuando la base de datos está disponible y con valor 0 cuando una base de datos almacenada en la caché de entidades ya no aparece en Azure.
Si Create agent per database está activado, se crea un agente por cada base de datos descubierta. El nombre del agente se forma usando el prefijo configurado en Agent prefix, seguido de Azure SQL, el nombre del servidor y el nombre de la base de datos.
Ejemplo:
Agent prefix:
SQL server name: sql-production
Database name: appdb
Agent name: Azure SQL sql-production/appdb
Si Create agent per database está desactivado, todos los módulos se envían al agente indicado en Target agent. En este modo, el nombre del servidor y la base de datos se añaden al nombre de cada módulo para evitar colisiones.
Los módulos disponibles son:
Azure SQL Connection: estado de conexión de la base de datos. Se crea como generic_proc.
Database online: estado operativo de la base de datos. Se crea como generic_proc.
CPU percent: porcentaje de CPU usado por la base de datos.
DTU consumption percent: porcentaje de DTU consumido por la base de datos.
Physical data read percent: porcentaje de lectura física de datos.
Log write percent: porcentaje de escritura de log.
Sessions percent: porcentaje de sesiones usadas.
Workers percent: porcentaje de workers usados.
Data space used: espacio de datos usado en bytes.
Data space used percent: porcentaje de espacio de datos usado.
Data space allocated: espacio de datos asignado en bytes.
Successful connections: total de conexiones correctas.
Failed connections: total de conexiones fallidas.
Blocked by firewall connections: total de conexiones bloqueadas por firewall.
Tempdb data size: tamaño de datos de tempdb.
Tempdb log size: tamaño de log de tempdb.
Tempdb log used percent: porcentaje de log usado de tempdb.
XTP storage percent: porcentaje de almacenamiento XTP usado.
Deadlocks: número total de deadlocks.
Mapeo de tipos de módulo
| Módulo | Tipo Pandora FMS | Agregación Azure | Descripción |
|---|---|---|---|
| Azure SQL Connection | generic_proc |
Estado de conexión de la base de datos. Valor 1 si está disponible y 0 si desaparece del descubrimiento. |
|
| Database online | generic_proc |
Estado lógico de la base de datos según Azure. | |
| CPU percent | generic_data |
Average | Porcentaje de CPU usado. |
| DTU consumption percent | generic_data |
Average | Porcentaje de DTU consumido. |
| Physical data read percent | generic_data |
Average | Porcentaje de lectura física de datos. |
| Log write percent | generic_data |
Average | Porcentaje de escritura de log. |
| Sessions percent | generic_data |
Average | Porcentaje de sesiones usadas. |
| Workers percent | generic_data |
Average | Porcentaje de workers usados. |
| Data space used | generic_data |
Average | Espacio de datos usado en bytes. |
| Data space used percent | generic_data |
Average | Porcentaje de espacio de datos usado. |
| Data space allocated | generic_data |
Average | Espacio de datos asignado en bytes. |
| Successful connections | generic_data |
Total | Conexiones correctas. |
| Failed connections | generic_data |
Total | Conexiones fallidas. |
| Blocked by firewall connections | generic_data |
Total | Conexiones bloqueadas por firewall. |
| Tempdb data size | generic_data |
Average | Tamaño de datos de tempdb. |
| Tempdb log size | generic_data |
Average | Tamaño de log de tempdb. |
| Tempdb log used percent | generic_data |
Average | Porcentaje de log usado en tempdb. |
| XTP storage percent | generic_data |
Average | Porcentaje de almacenamiento XTP usado. |
| Deadlocks | generic_data |
Total | Deadlocks detectados. |
Caché de entidades descubiertas
El plugin utiliza un fichero temporal entities_list para almacenar las bases de datos descubiertas. Esta lógica permite detectar bases de datos que existían en ejecuciones anteriores y que después han desaparecido de Azure.
Cuando una base de datos está almacenada en el fichero de entidades pero ya no aparece en el descubrimiento actual, el plugin mantiene su agente y genera el módulo Azure SQL Connection con valor 0. De esta forma Pandora FMS puede alertar de la desaparición del recurso en lugar de eliminarlo silenciosamente de la monitorización.
Si se activa Enable entities file re-scan interval, el fichero de entidades se refresca cuando se supera el intervalo configurado en Re-scan entities file interval. Si se deja desactivado, se conserva la lista de entidades descubiertas para poder detectar desapariciones.