Azure gateway Este plugin de discovery de Azure Application Gateway para Pandora FMS está diseñado para automatizar la monitorización de recursos Azure Application Gateway dentro de una suscripción de Azure. Introducción Este plugin de discovery de Azure Application Gateway para Pandora FMS está diseñado para automatizar la monitorización de recursos Azure Application Gateway dentro de una suscripción de Azure. El plugin descubre de forma dinámica los Application Gateways disponibles, obtiene sus métricas principales mediante Azure Monitor y genera agentes y módulos en Pandora FMS. El plugin permite trabajar de dos formas: creando un agente por cada Application Gateway descubierto, o enviando todos los módulos a un único agente configurado por el usuario. También permite filtrar por grupo de recursos, aplicar prefijos personalizados, controlar la caché de entidades descubiertas, seleccionar grupos de módulos y filtrar módulos mediante expresiones regulares de allow y deny. Las métricas implementadas se basan en las métricas utilizadas para Azure Application Gateway, incluyendo rendimiento, peticiones, estado de backends, latencia, tráfico, seguridad, capacidad, WebSocket, WAF y conteo de recursos. Prerrequisitos El plugin se distribuye como un binario compilado que ya contiene todas las dependencias necesarias para su uso, 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 recursos Azure Application Gateway que puedan ser consultados por el plugin. 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 recursos de red y consultar métricas de Azure Monitor. En entornos de prueba se puede utilizar el campo Mock Azure API URL para apuntar a un mock que simule respuestas de Azure Application Gateway. En producción debe dejarse vacío. Parámetros Modo avanzado --conf ruta del archivo de configuración generado por la tarea de Discovery. Archivo de configuración (--conf) agents_group_id = id del grupo de agentes de Pandora FMS donde se crearán los agentes. interval = intervalo de monitorización de la tarea en segundos. subscription_id = identificador de la suscripción de Azure. tenant_id = identificador del tenant de Azure Active Directory. client_id = identificador de aplicación del Service Principal. client_secret = secreto del Service Principal. resource_group = grupo de recursos de Azure que se quiere monitorizar, opcional. Si se deja vacío, se descubren Application Gateways de toda la suscripción. target_agent = agente destino cuando no se crea un agente por cada Application Gateway. agent_per_application_gateway = crea un agente por cada Application Gateway descubierto. application_gateway_agent_prefix = prefijo opcional para el nombre de los agentes creados por Application Gateway. modules_prefix = prefijo opcional para los nombres de los módulos. scan_application_gateways = activa el descubrimiento automático de Application Gateways. entities_list = ruta del fichero temporal donde se almacenan las entidades descubiertas. enable_entities_interval = activa el refresco periódico del fichero de entidades. entities_interval = intervalo de refresco del fichero de entidades en segundos. time_window = ventana de tiempo en minutos usada para consultar métricas de Azure Monitor. metric_interval = granularidad de métrica de Azure Monitor en formato ISO-8601, por ejemplo PT1M. metric_timeout = timeout en segundos para llamadas a la API de Azure. Si se configura 0 o un valor negativo, el plugin usará 30 segundos. max_retries = número máximo de reintentos para errores temporales de API, incluyendo rate limit HTTP 429. output_format = formato de salida. json para Discovery y xml para pruebas manuales. module_allow_list_file = fichero opcional con expresiones regulares de módulos permitidos, una por línea. module_deny_list_file = fichero opcional con expresiones regulares de módulos descartados, una por línea. check_performance_modules = activa módulos de rendimiento. check_request_modules = activa módulos de peticiones. check_backend_modules = activa módulos de backend. check_latency_modules = activa módulos de latencia. check_traffic_modules = activa módulos de tráfico. check_security_modules = activa módulos de seguridad. check_capacity_modules = activa módulos de capacidad. check_waf_modules = activa módulos WAF. check_websocket_modules = activa módulos WebSocket. check_application_gateway_count = activa el módulo de conteo de Application Gateways. mock_api_url = URL opcional del mock de Azure para pruebas locales. En producción debe dejarse vacío. Ejemplo [CONF] agents_group_id = 10 interval = 300 subscription_id = 00000000-0000-0000-0000-000000000000 tenant_id = 11111111-1111-1111-1111-111111111111 client_id = 22222222-2222-2222-2222-222222222222 client_secret = my_client_secret resource_group = rg-production target_agent = Azure Application Gateways agent_per_application_gateway = 1 application_gateway_agent_prefix = Azure Application Gateway modules_prefix = scan_application_gateways = 1 entities_list = /tmp/tmp_discovery.azure_application_gateway.entities enable_entities_interval = 1 entities_interval = 3600 time_window = 5 metric_interval = PT1M metric_timeout = 30 max_retries = 2 output_format = json module_allow_list_file = module_deny_list_file = check_performance_modules = 1 check_request_modules = 1 check_backend_modules = 1 check_latency_modules = 1 check_traffic_modules = 1 check_security_modules = 1 check_capacity_modules = 1 check_waf_modules = 1 check_websocket_modules = 1 check_application_gateway_count = 1 mock_api_url = 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-application-gateway-discovery \ --role Reader \ --scopes /subscriptions/ La salida devolverá valores similares a estos: { "appId": "", "displayName": "pandora-azure-application-gateway-discovery", "password": "", "tenant": "" } La correspondencia con los campos del plugin es: tenant -> Azure Tenant ID appId -> Azure Client ID password -> Azure Client Secret subscription -> Azure Subscription ID Requisitos Para que el plugin pueda descubrir Application Gateways y consultar sus métricas, se recomienda utilizar un Service Principal con permisos de lectura. El plugin necesita permisos de lectura para: Listar recursos Microsoft.Network/applicationGateways . Leer la configuración básica del Application Gateway, incluyendo SKU y grupo de recursos. Consultar métricas de Azure Monitor asociadas al recurso. 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 resource group, 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_gateway --conf Ejemplo: ./pandora_azure_gateway --conf /etc/pandora/azure_application_gateway.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. Si se selecciona xml , el plugin genera una salida XML compatible con pruebas manuales. 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 recursos Azure Application Gateway creando tareas de Discovery desde la sección correspondiente de Cloud/Application Discovery. Para cada tarea se solicitarán los siguientes datos en el paso Azure Base : Azure Subscription ID: identificador de la suscripción de Azure donde se descubrirán los Application Gateways. Azure Tenant ID: identificador del tenant de Azure Active Directory usado por el Service Principal. Azure Client ID: identificador de aplicación del Service Principal. Azure Client Secret: secreto del Service Principal. Resource group: filtro opcional para limitar el descubrimiento a un grupo de recursos. Si se deja vacío, se descubren Application Gateways de toda la suscripción. En el paso Application Gateway Options se podrán configurar opciones adicionales: Target agent: agente destino donde se almacenarán todos los módulos cuando no se active la creación de agente por Application Gateway. Create one agent per Application Gateway: si está activo, cada Application Gateway genera su propio agente. Si está desactivado, todos los módulos se envían al agente indicado en Target agent . Application Gateway agent prefix: prefijo opcional para los agentes creados por Application Gateway. Por ejemplo, Azure Application Gateway creará agentes como Azure Application Gateway agw-production . Modules prefix: prefijo opcional para todos los nombres de módulos generados. Scan Application Gateways: activa el descubrimiento automático de Application Gateways. Entities file: fichero temporal donde se almacena la caché de recursos descubiertos. Enable entities file re-scan interval: activa el refresco periódico del fichero temporal de entidades descubiertas. Entities re-scan interval: intervalo usado para reconstruir la caché de entidades cuando el re-scan está activado. Mock Azure API URL: URL opcional para pruebas locales. En producción debe dejarse vacío. En el paso Metrics se podrán configurar las métricas y filtros: Metrics time window: ventana temporal usada para consultar métricas de Azure Monitor. Azure metric interval: granularidad de Azure Monitor en formato ISO-8601. Por defecto PT1M . Metric timeout: timeout en segundos para cada llamada a Azure. Si se configura 0 o un valor negativo, el plugin usará 30 segundos. Max retries: número máximo de reintentos para errores temporales de API, incluyendo rate limiting HTTP 429. Output format: formato de salida generado por el plugin. Para Discovery debe usarse JSON . Performance modules: crea módulos de CPU, conexiones actuales, throughput y nuevas conexiones por segundo. Request modules: crea módulos de peticiones fallidas, estado HTTP y total de peticiones. Backend modules: crea módulos de hosts sanos, hosts no sanos, peticiones por host sano y estado HTTP de backend. Latency modules: crea módulos de tiempo de conexión backend, primera respuesta, última respuesta, tiempo total y RTT de cliente. Traffic modules: crea módulos de bytes enviados y bytes recibidos. Security modules: crea módulos de protocolo TLS, errores de negociación TLS de backend y conexiones rechazadas. Capacity modules: crea módulos de unidades de cómputo, unidades de capacidad, capacidad facturada estimada y capacidad facturable fija. Estas métricas aplican a SKUs v2. WAF modules: crea módulos WAF de coincidencias, bloqueos, peticiones, reglas, bot protection, challenge y penalty box. Estas métricas aplican a SKUs WAF. WebSocket modules: crea módulos de conexiones WebSocket activas y código de cierre WebSocket. Application Gateway count module: crea el módulo de conteo de Application Gateways descubiertos. Modules allow regexp: permite definir expresiones regulares de módulos permitidos, una por línea. Si se configura, solo se crearán los módulos cuyo nombre final coincida con alguna expresión. Modules deny regexp: permite definir expresiones regulares de módulos descartados, una por línea. Si un módulo coincide con esta lista, no se crea. Las tareas completadas con éxito tendrán un resumen de ejecución con información similar a: application_gateways_discovered: número de Application Gateways descubiertos en la ejecución actual. application_gateways_vanished: número de Application Gateways almacenados 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. scan_source: origen del escaneo, azure cuando se consulta Azure o entities_cache cuando se reutiliza la caché. Agentes y módulos generados El plugin crea un módulo Application Gateway Connection para cada Application Gateway monitorizado. Este módulo se crea con valor 1 cuando el recurso está disponible y con valor 0 cuando el recurso almacenado en la caché de entidades ya no aparece en Azure. Si Create one agent per Application Gateway está activado, se crea un agente por cada Application Gateway descubierto. El nombre del agente se forma usando el prefijo configurado en Application Gateway agent prefix más el nombre del Application Gateway. Ejemplo: Application Gateway agent prefix: Azure Application Gateway Application Gateway name: agw-production-frontend Agent name: Azure Application Gateway agw-production-frontend Si Create one agent per Application Gateway está desactivado, todos los módulos se envían al agente indicado en Target agent . En este modo, el nombre del Application Gateway se añade como prefijo al nombre de cada módulo para evitar colisiones. Los módulos disponibles son: Application Gateway Connection: Estado del recurso Azure Application Gateway (1=UP, 0=DOWN). Se crea como generic_proc. CPU Utilization: Uso de CPU del Application Gateway. Current Connections: Número de conexiones actuales. Failed Requests: Número de peticiones fallidas. HTTP Status: Conteo de códigos de estado HTTP. Throughput: Throughput medio del Application Gateway. Total Requests: Número total de peticiones. Healthy Host Count: Número de hosts backend sanos. Unhealthy Host Count: Número de hosts backend no sanos. Average Request Count Per Healthy Host: Promedio de peticiones por host backend sano. Backend Connect Time: Tiempo de conexión al backend. Backend First Byte Response Time: Tiempo hasta el primer byte de respuesta del backend. Backend Last Byte Response Time: Tiempo hasta el último byte de respuesta del backend. Application Gateway Total Time: Tiempo total procesado por el Application Gateway. Client RTT: Round Trip Time del cliente. Bytes Sent: Bytes enviados. Bytes Received: Bytes recibidos. TLS Protocol: Conteo por protocolo TLS. Compute Units: Unidades de cómputo. Solo aplica a SKUs v2. Capacity Units: Unidades de capacidad. Solo aplica a SKUs v2. Estimated Billed Capacity Units: Capacidad facturada estimada. Solo aplica a SKUs v2. Fixed Billable Capacity Units: Capacidad facturable fija. Solo aplica a SKUs v2. New Connections Per Second: Nuevas conexiones por segundo. Solo aplica a SKUs v2. Backend HTTP Status: Conteo de códigos HTTP devueltos por backend. WAF Matched Count: Coincidencias WAF. Solo aplica a SKUs WAF. WAF Blocked Requests: Peticiones bloqueadas por WAF. Solo aplica a SKUs WAF. WAF Blocked Count: Conteo de bloqueos WAF. Solo aplica a SKUs WAF. WAF Total Requests: Peticiones totales procesadas por WAF. Solo aplica a SKUs WAF. WAF Security Rule: Coincidencias de reglas de seguridad WAF. Solo aplica a SKUs WAF. WAF Custom Rule: Coincidencias de reglas personalizadas WAF. Solo aplica a SKUs WAF. WAF Bot Protection: Eventos de bot protection WAF. Solo aplica a SKUs WAF. Backend TLS Negotiation Error: Errores de negociación TLS con backend. Rejected Connections: Conexiones rechazadas. Application Gateway Count: Conteo del recurso Application Gateway descubierto. WAF JS Challenge Request Count: Peticiones con challenge JS WAF. Solo aplica a SKUs WAF. WAF Penalty Box Hits: Hits de penalty box WAF. Solo aplica a SKUs WAF. WAF Penalty Box Size: Tamaño de penalty box WAF. Solo aplica a SKUs WAF. WebSocket Active Connections: Conexiones WebSocket activas. WebSocket Specific Close Status Code: Códigos de cierre WebSocket. WAF Captcha Challenge Request Count: Peticiones con CAPTCHA challenge WAF. Solo aplica a SKUs WAF. Mapeo de tipos de módulo Métrica Tipo de módulo Pandora FMS Agregación Azure Descripción Application Gateway Connection `generic_proc` Estado del recurso Azure Application Gateway. Valor 1 si está disponible y 0 si no se descubre en la ejecución actual. CPU Utilization `generic_data` Average Uso de CPU del Application Gateway. Current Connections `generic_data` Average Conexiones actuales. Failed Requests `generic_data` Total Peticiones fallidas. HTTP Status `generic_data` Total Conteo de estados HTTP. Throughput `generic_data` Average Throughput medio. Total Requests `generic_data` Total Total de peticiones. Backend and latency metrics `generic_data` Average or Total Métricas de backend, latencia, tráfico, seguridad, capacidad, WAF y WebSocket devueltas por Azure Monitor. Allow y deny regexp El filtro de módulos se aplica sobre el nombre final del módulo, una vez aplicado el prefijo configurado en Modules prefix . Cada línea del textarea se interpreta como una expresión regular. Ejemplo de Modules allow regexp : CPU|Throughput Backend.* Con esta configuración solo se crearán módulos cuyo nombre coincida con CPU|Throughput o con Backend.* . Ejemplo de Modules deny regexp : Bytes WAF.* Con esta configuración se descartan todos los módulos cuyo nombre contenga Bytes o empiece por WAF . Si se configuran ambos filtros, el módulo debe coincidir con el allow y no debe coincidir con el deny. El filtro deny se utiliza para descartar módulos concretos aunque el grupo general esté activado. Caché de entidades descubiertas El plugin utiliza un fichero temporal entities_list para almacenar los Application Gateways descubiertos. Esta lógica permite detectar recursos que existían en ejecuciones anteriores y que después han desaparecido de Azure. Cuando un Application Gateway está almacenado en el fichero de entidades pero ya no aparece en el descubrimiento actual, el plugin mantiene su agente y genera el módulo Application Gateway 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 Entities re-scan interval . Si se deja desactivado, se conserva la lista de entidades descubiertas para poder detectar desapariciones.