Azure Load Balancer Este plugin de discovery de Azure Load Balancer para Pandora FMS está diseñado para automatizar la monitorización de los recursos Azure Load Balancer de una suscripción de Azure. El plugin descubre de forma dinámica los Load Balancers disponibles, obtiene sus métricas principales mediante Azure Monitor y genera agentes y módulos en Pandora FMS. Introducción Este plugin de discovery de Azure Load Balancer para Pandora FMS está diseñado para automatizar la monitorización de los recursos Azure Load Balancer de una suscripción de Azure. El plugin descubre de forma dinámica los Load Balancers 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 Load Balancer 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 y seleccionar grupos de módulos según el tipo de métrica que se quiera monitorizar. Las métricas implementadas se basan en las métricas utilizadas para Azure Load Balancer, incluyendo disponibilidad, estado de health probes, tráfico, SYN packets, consumo de puertos SNAT y conteo de hosts en backend pools. 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 Load Balancer 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 contenedor mock que simule respuestas de Azure Load Balancer. 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 Load Balancers de toda la suscripción. threads = número máximo de hilos de ejecución. target_agent = agente destino cuando no se crea un agente por cada Load Balancer. modules_prefix = prefijo opcional para los nombres de los módulos. scan_load_balancers = activa el descubrimiento automático de Load Balancers. agent_per_load_balancer = crea un agente por cada Load Balancer descubierto. lb_agent_prefix = prefijo opcional para el nombre de los agentes creados por Load Balancer. 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. time_window = ventana de tiempo usada para consultar métricas de Azure Monitor. check_availability_modules = activa módulos de disponibilidad. check_traffic_modules = activa módulos de tráfico. check_snat_modules = activa módulos SNAT. check_backend_pool_host_count = activa el módulo de conteo de hosts en backend pools. check_load_balancer_count = activa el módulo de conteo de Load Balancers. 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. 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 threads = 1 target_agent = Azure Load Balancer modules_prefix = scan_load_balancers = 1 agent_per_load_balancer = 1 lb_agent_prefix = Azure LB entities_list = /tmp/tmp_discovery.azure_load_balancer.entities enable_entities_interval = 0 entities_interval = 86400 time_window = 300 check_availability_modules = 1 check_traffic_modules = 1 check_snat_modules = 1 check_backend_pool_host_count = 1 check_load_balancer_count = 1 metric_interval = PT1M metric_timeout = 30 max_retries = 3 mock_api_url = Ejemplo usando mock local [CONF] agents_group_id = 10 interval = 300 subscription_id = test-subscription tenant_id = test-tenant client_id = test-client client_secret = test-secret resource_group = threads = 1 target_agent = Azure Load Balancer modules_prefix = scan_load_balancers = 1 agent_per_load_balancer = 1 lb_agent_prefix = Azure LB entities_list = /tmp/azure_lb_mock.entities enable_entities_interval = 0 entities_interval = 86400 time_window = 300 check_availability_modules = 1 check_traffic_modules = 1 check_snat_modules = 1 check_backend_pool_host_count = 1 check_load_balancer_count = 1 metric_interval = PT1M metric_timeout = 30 max_retries = 3 mock_api_url = http://azure-load-balancer-mock:8080 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-lb-discovery \ --role Reader \ --scopes /subscriptions/ La salida devolverá valores similares a estos: { "appId": "", "displayName": "pandora-azure-lb-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 Load Balancers 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/loadBalancers . Leer la configuración de backend pools. 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_load_balancer --conf Ejemplo: ./pandora_azure_load_balancer --conf /etc/pandora/azure_load_balancer.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 recursos Azure Load Balancer 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 Load Balancers. 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 Load Balancers de toda la suscripción. En el paso Azure Load Balancer Detailed se podrán configurar opciones adicionales: Max threads: número máximo de hilos usados para procesar los Load Balancers descubiertos. Target agent: agente destino donde se almacenarán todos los módulos cuando no se active la creación de agente por Load Balancer. Custom module prefix: prefijo opcional para todos los nombres de módulos generados. Scan Load Balancers: activa el descubrimiento automático de Load Balancers. Create agent per Load Balancer: si está activo, cada Load Balancer genera su propio agente. Si está desactivado, todos los módulos se envían al agente indicado en Target agent . Custom Load Balancer agent prefix: prefijo opcional para los agentes creados por Load Balancer. Por ejemplo, Azure LB creará agentes como Azure LB my-load-balancer . Enable entities file re-scan interval: activa el refresco periódico del fichero temporal de entidades descubiertas. Re-scan entities file interval: intervalo usado para reconstruir la caché de entidades cuando el re-scan está activado. Metric time window: ventana temporal usada para consultar métricas de Azure Monitor. Normalmente debe coincidir o ser ligeramente superior al intervalo de la tarea. Availability metrics: crea módulos de disponibilidad: data path availability y health probe status . Traffic metrics: crea módulos de tráfico: byte count , packet count y SYN count . SNAT metrics: crea módulos SNAT: allocated SNAT ports , used SNAT ports y SNAT connection count . Backend pool host count: crea el módulo de conteo de hosts configurados en backend pools. Load Balancer count: crea el módulo de conteo de recursos Load Balancer descubiertos. Azure Monitor metric interval: granularidad de Azure Monitor en formato ISO-8601. Por defecto PT1M . Azure API timeout: timeout en segundos para cada llamada a Azure. Si se configura 0 o un valor negativo, el plugin usará 30 segundos. Azure API max retries: número máximo de reintentos para errores temporales de API, incluyendo rate limiting HTTP 429. Las tareas completadas con éxito tendrán un resumen de ejecución con información similar a: Total agents: número total de agentes generados por la tarea. Targets up: número de Load Balancers disponibles o descubiertos correctamente. Targets down: número de Load Balancers almacenados previamente que ya no aparecen en el descubrimiento actual. Load Balancers discovered: número de Load Balancers descubiertos en la ejecución actual. Agentes y módulos generados por el plugin El plugin crea un módulo connection para cada Load Balancer monitorizado. Este módulo se crea siempre, con valor 1 cuando el recurso está disponible y 0 cuando el recurso almacenado en la caché de entidades ya no aparece en Azure. Si Create agent per Load Balancer está activado, se crea un agente por cada Load Balancer descubierto. El nombre del agente se forma usando el prefijo configurado en Custom Load Balancer agent prefix más el nombre del Load Balancer. Ejemplo: Custom Load Balancer agent prefix: Azure LB Load Balancer name: lb-production-frontend Agent name: Azure LB lb-production-frontend Si Create agent per Load Balancer está desactivado, todos los módulos se envían al agente indicado en Target agent . En este modo, el nombre del Load Balancer se añade como prefijo al nombre de cada módulo para evitar colisiones. Los módulos disponibles son: connection: Estado del recurso Azure Load Balancer (1=UP, 0=DOWN). Siempre se monitoriza (generic_proc). allocated SNAT ports: Número de puertos SNAT asignados en el periodo seleccionado (generic_data). backend pool host count: Número de hosts configurados en los backend pools del Load Balancer (generic_data). byte count: Bytes transmitidos en el periodo seleccionado (generic_data_inc). health probe status: Estado medio de los health probes del Load Balancer (generic_data). packet count: Paquetes transmitidos en el periodo seleccionado (generic_data_inc). SNAT connection count: Nuevas conexiones SNAT creadas en el periodo seleccionado (generic_data_inc). load balancer count: Conteo de recurso Load Balancer descubierto (generic_data). SYN count: Paquetes SYN transmitidos en el periodo seleccionado (generic_data_inc). used SNAT ports: Número de puertos SNAT utilizados en el periodo seleccionado (generic_data). data path availability: Disponibilidad media de la ruta de datos del Load Balancer (generic_data). Los módulos byte count , packet count , SNAT connection count y SYN count son de tipo generic_data_inc . Al ser contadores incrementales, Pandora FMS puede necesitarlos en dos ejecuciones antes de mostrar el dato calculado correctamente. Mapeo de tipos de módulo Métrica Tipo de módulo Pandora FMS Unidad Descripción connection `generic_proc` Estado del recurso Azure Load Balancer. Valor 1 si está disponible y 0 si no se descubre en la ejecución actual. allocated SNAT ports `generic_data` ports Número de puertos SNAT asignados durante la ventana seleccionada. backend pool host count `generic_data` hosts Número de hosts configurados en los backend pools. Se calcula desde la configuración del Load Balancer. byte count `generic_data_inc` bytes Bytes transmitidos. Pandora FMS calcula la tasa a partir del contador incremental. health probe status `generic_data` % Estado medio de las comprobaciones de health probe. packet count `generic_data_inc` packets Paquetes transmitidos. Pandora FMS calcula la tasa a partir del contador incremental. SNAT connection count `generic_data_inc` connections Nuevas conexiones SNAT creadas en la ventana seleccionada. load balancer count `generic_data` count Conteo del recurso Load Balancer descubierto. El plugin informa 1 por cada Load Balancer. SYN count `generic_data_inc` packets Paquetes SYN transmitidos. Pandora FMS calcula la tasa a partir del contador incremental. used SNAT ports `generic_data` ports Número de puertos SNAT utilizados durante la ventana seleccionada. data path availability `generic_data` % Disponibilidad media de la ruta de datos del Load Balancer. El plugin puede asignar identificadores estables en los agentes y módulos para facilitar su identificación posterior desde la consola, dashboards, extensiones o consultas SQL. El identificador externo recomendado para estos datos es el resource_id de Azure o el nombre del Load Balancer. Formato recomendado: Agente: azure_load_balancer:target: — identifica el Load Balancer monitorizado. Módulo connection: azure_load_balancer:metric_connection: . Módulos de métricas: azure_load_balancer:metric_: . Estos marcadores deben ser estables y no depender únicamente del nombre visible del agente o del módulo, ya que esos campos pueden cambiar por configuración de prefijos. Caché de entidades descubiertas El plugin utiliza un fichero temporal entities_list para almacenar los Load Balancers descubiertos. Esta lógica permite detectar recursos que existían en ejecuciones anteriores y que después han desaparecido de Azure. Cuando un Load Balancer 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 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 limpia y reconstruye 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.