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

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

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:

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:

En el paso SQL discovery se podrán configurar las opciones de descubrimiento:

En el paso Modules se podrán activar o desactivar grupos de módulos:

Las tareas completadas con éxito tendrán un resumen de ejecución con información similar a:

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.