Discovery Azure Health Events
El plugin Azure Service Health Events descubre los eventos de estado del servicio que afectan a las suscripciones de Azure accesibles para una aplicación registrada. Los eventos se agrupan por región impactada y se convierten en agentes y módulos de Pandora FMS.
- Introducción
- Requisitos
- Configuración en Azure
- Permisos
- Configuración de la tarea Discovery
- Filtros
- Agentes y Módulos generados
Introducción
El plugin Azure Service Health Events descubre los eventos de estado del servicio que afectan a las suscripciones de Azure accesibles para una aplicación registrada. Los eventos se agrupan por región impactada y se convierten en agentes y módulos de Pandora FMS.
El plugin permite:
- Consultar todas las suscripciones visibles para el Service Principal.
- Recuperar eventos de Azure Service Health mediante la API de Azure Resource Health.
- Agrupar los eventos por región impactada.
- Crear un agente por región o concentrar todos los módulos en un único agente.
- Aplicar filtros en Azure y filtros locales mediante expresiones regulares.
- Detectar eventos nuevos o actualizados entre ejecuciones.
- Mantener un registro JSONL de los eventos para búsquedas posteriores.
- Detectar regiones que dejan de aparecer en la consulta.
Requisitos
- Pandora FMS con Discovery y capacidad para cargar el paquete
.disco. - Conectividad HTTPS desde el servidor de Pandora FMS hacia:
-
https://login.microsoftonline.com -
https://management.azure.com
-
- Una aplicación registrada en Microsoft Entra ID con Service Principal.
- Un secreto de cliente válido.
- Acceso de lectura a todas las suscripciones que se quieran monitorizar.
- Un grupo de agentes válido en la definición de la tarea Discovery. El grupo
Allno es válido.
Configuración en Azure
En Microsoft Entra ID se debe crear una aplicación registrada y generar un secreto de cliente. Para configurar la tarea se necesitan:
- Tenant ID: identificador del tenant de Microsoft Entra ID.
- Client ID: identificador de la aplicación registrada.
- Client secret: valor del secreto creado para la aplicación.
El plugin utiliza OAuth 2.0 Client Credentials y solicita un token para el ámbito:
https://management.azure.com/.default
Permisos
La opción recomendada es asignar al Service Principal el rol Reader en cada suscripción que se quiera monitorizar. Como mínimo, una función personalizada debe permitir enumerar las suscripciones accesibles y leer los eventos de Service Health, incluyendo Microsoft.ResourceHealth/events/read.
Los detalles sensibles de algunos avisos de seguridad pueden estar ocultos para identidades sin permisos elevados. El plugin consulta el listado de eventos, pero no ejecuta la operación adicional fetchEventDetails para obtener contenido sensible.
Configuración de la tarea Discovery
El asistente contiene cuatro pasos visibles.
1. Task definition
Se configuran los datos generales de la tarea Discovery:
- Nombre de la tarea.
- Grupo de agentes.
- Intervalo de ejecución.
Debe seleccionarse un grupo real de Pandora FMS. No se debe utilizar All, ya que el plugin rechaza identificadores de grupo vacíos o menores o iguales a cero.
2. Azure credentials
| Campo | Obligatorio | Descripción |
|---|---|---|
| Tenant ID | Sí | Tenant de Microsoft Entra ID. |
| Client ID | Sí | Identificador de la aplicación registrada. |
| Client secret | Sí | Secreto de la aplicación. |
| API endpoint | No | Vacío utiliza https://management.azure.com. Solo se modifica para nubes soberanas o entornos personalizados. |
| Login endpoint | No | Vacío utiliza https://login.microsoftonline.com. Solo se modifica para nubes soberanas o entornos personalizados. |
3. Azure event query and filters
| Campo | Valor predeterminado | Descripción |
|---|---|---|
| Event history in days | 15 |
Periodo consultado, entre 1 y 365 días. |
| Azure API filter | Vacío | Expresión enviada a Azure mediante $filter. |
| Subscription allow regexp | Vacío | Expresiones aplicadas al ID y al nombre de la suscripción. |
| Region allow regexp | Vacío | Regiones que puede aceptar el plugin. |
| Service allow regexp | Vacío | Servicios impactados que puede aceptar el plugin. |
| Event type allow regexp | Vacío | Tipos de evento permitidos. |
| Status allow regexp | Vacío | Estados regionales o generales permitidos. |
| Level allow regexp | Vacío | Niveles permitidos. |
| Event search allow regexp | Vacío | Al menos una expresión debe coincidir con el texto completo del evento. |
| Event search deny regexp | Vacío | Descarta los eventos que coincidan. |
| First run events are new | Desactivado | Si se activa, todos los eventos de la primera ejecución se consideran nuevos. |
4. Agents modules and execution
| Campo | Valor predeterminado | Descripción |
|---|---|---|
| Create agent per impacted region | Activado | Crea un agente por cada región. Desactivado utiliza Target agent. |
| Target agent | Azure Service Health Events |
Agente único utilizado cuando no se crea un agente por región. |
| Agent prefix | Azure Service Health |
Prefijo de los agentes regionales. |
| Module prefix | Vacío | Prefijo añadido al nombre final de los módulos. |
| State modules | Activado | Crea el módulo Connection. |
| Event count modules | Activado | Crea los cinco módulos de recuento. |
| Event detail modules | Activado | Crea Events y New events. |
| Maximum event detail length | 16000 |
Máximo de caracteres de los módulos de detalle. El mínimo efectivo es 1000. |
| Modules allow regexp | Vacío | Solo crea módulos cuyo nombre final coincida. |
| Modules deny regexp | Vacío | Descarta módulos cuyo nombre final coincida. |
| Write event log | Activado | Habilita el registro JSONL. |
| Maximum event log size | 20 |
Rota el log al alcanzar este tamaño. |
| HTTP timeout | 30 |
Tiempo máximo por petición. Cero o un valor negativo se convierte en 30 segundos. |
| Maximum retries | 2 |
Reintentos para HTTP 429 y errores temporales de Azure. |
| Verify SSL certificates | Activado | Debe permanecer activo en producción. |
| Proxy URL | Vacío | Proxy HTTP o HTTPS opcional. |
| Mock Azure API URL | Vacío | Campo reservado para pruebas; debe permanecer vacío en producción. |
Filtros
Filtro aplicado por Azure
Azure API filter se envía directamente a la API y reduce los eventos devueltos por Azure. La documentación oficial muestra expresiones sobre servicio y región, por ejemplo:
service eq 'Virtual Machines' or region eq 'West US'
El plugin no valida ni modifica esta expresión. Una sintaxis no aceptada por Azure hará que la suscripción correspondiente devuelva un error.
Filtros locales de eventos
Los demás filtros se aplican localmente después de descargar los eventos. Cada textarea acepta una expresión regular por línea:
^West Europe$
^Spain Central$
Las expresiones no distinguen entre mayúsculas y minúsculas. Se ignoran las líneas vacías y las que comienzan por #.
Los filtros allow funcionan de esta forma:
- Si están vacíos, permiten todos los valores.
- Si contienen expresiones, al menos una debe coincidir.
El filtro Event search allow regexp busca sobre suscripción, tracking ID, título, resumen, estado, nivel, tipo, subtipo, servicio y región. Event search deny regexp busca sobre los mismos campos y tiene prioridad para descartar el evento.
Filtros de módulos
Los filtros Modules allow regexp y Modules deny regexp se aplican al nombre final del módulo, después de añadir prefijos y, en modo de agente único, el nombre de la región.
Si un módulo coincide simultáneamente con allow y deny, prevalece deny.
Ejemplo para conservar únicamente conexión y contadores:
Connection$|events count$
Agentes y Módulos generados
Un agente por región
Con Create agent per impacted region activado, el nombre se forma así:
<Agent prefix><Impacted region>
Ejemplo:
Azure Service Health West Europe
Agente único
Con la opción desactivada, todos los módulos se asignan a Target agent. Para evitar colisiones, cada módulo incorpora la región:
West Europe Events count
Spain Central Events count
Si también se configura Module prefix, este aparece antes de la región.
Módulos generados
Todos los módulos se asignan al grupo de módulos Azure Service Health Events.
| Módulo | Tipo Módulo Pandora | Dato |
|---|---|---|
Connection |
generic_proc |
1 si la región aparece en la consulta actual y 0 si ha desaparecido. |
Events count |
generic_data |
Número de eventos únicos que afectan a la región. |
New events count |
generic_data |
Número de eventos nuevos o actualizados desde la ejecución anterior. |
Active events count |
generic_data |
Eventos con estado regional o general Active |
Critical events count |
generic_data |
Eventos con nivel Critical |
Warning events count |
generic_data |
Eventos con nivel Warning |
Events |
generic_data_string |
Detalle de todos los eventos coincidentes. |
New events |
generic_data_string |
Detalle de eventos nuevos o actualizados; devuelve el entero 0 cuando no existen novedades. |
Los módulos de detalle incluyen, cuando están disponibles: título, tracking ID, suscripción, estado, nivel, tipo, subtipo, fechas, servicio, región y resumen. Si el texto supera el máximo configurado, se trunca y se indica que el contenido completo está disponible en el log JSONL.