El agente de Application Real-Time Monitoring Service (ARMS) recopila datos de métricas como el conteo de solicitudes, el conteo de errores y los tiempos de respuesta. Para mejorar la diversidad y la precisión de los datos, las métricas incluyen dimensiones como direcciones IP, instrucciones SQL y URL.
Algunas dimensiones generan una gran cantidad de valores únicos, lo que se conoce como alta cardinalidad. Por ejemplo, una API RESTful con la plantilla de URL /api/v1/users/{ID}/info genera una URL distinta para cada identificador de usuario. La alta cardinalidad satura el almacenamiento, provoca pérdida de escrituras y consultas lentas, además de incrementar los costos.
Para resolver esto, ARMS aplica políticas de convergencia que reemplazan los valores de dimensión de alta cardinalidad por marcadores de posición normalizados.
En el agente de ARMS V4.x y versiones posteriores, toda la convergencia se ejecuta en el agente, lo que garantiza un 100 % de precisión en los datos. Los valores originales y los convergidos se registran en los datos de trazas. Use
para consultar los valores originales antes de la convergencia.
Referencia rápida: formatos de convergencia
A continuación se presenta una tabla que resume los formatos de los marcadores de posición y cuándo aparece cada uno.
|
Formato |
Escenario |
|
|
El número de direcciones IP que acceden al mismo puerto supera el umbral (predeterminado: 50). |
|
|
La URL apunta a un recurso estático. |
|
|
La URL contiene cadenas que pueden aprovecharse para ciberataques. |
|
|
La URL contiene parámetros de consulta. |
|
|
El número de valores de dimensión registrados en un periodo de tiempo supera el umbral del espacio de cardinalidad. Consulte Cardinality space convergence para ver los umbrales predeterminados. |
|
|
Los segmentos de ruta de la URL (separados por |
|
|
Los segmentos de ruta de la URL (separados por |
|
|
Los segmentos de ruta de la URL (separados por |
|
|
La URL usa anotaciones de Spring Controller. |
|
Cadena que contiene |
Convergencia basada en estadísticas de memoria (solo para agentes de ARMS anteriores a la V4.x). |
Políticas de convergencia
Todas las políticas de convergencia están habilitadas de forma predeterminada. Se puede deshabilitar manualmente cualquier política, excepto la convergencia de espacio de cardinalidad.
Cada política admite tipos de datos específicos. El tipo de dato compatible se indica en la sección correspondiente de cada política.
Convergencia basada en anotaciones de Spring
En las API RESTful con variables de ruta, usar las URL de solicitud sin procesar como valores de dimensión provoca divergencia. ARMS lee la información de ruta desde las anotaciones de enrutamiento de Spring (como @RequestMapping) y utiliza la ruta definida en la anotación como valor de dimensión.
|
Propiedad |
Detalles |
|
Lógica |
Lee la información de ruta de las anotaciones de enrutamiento de las URL de Spring. |
|
Formato |
El valor configurado en las anotaciones de enrutamiento. |
|
Tipo de dato compatible |
URL (solo URL de servicio entrantes; no se admiten URL salientes). |
|
Ubicación |
Agente de ARMS |
|
Versiones de agente compatibles |
2.9.1.2 y posteriores |
Ejemplo
El siguiente APIController define un endpoint RESTful que recupera información de usuarios mediante una variable de ruta. La anotación @RequestMapping("/api/v1/user/{userId}/info") especifica el patrón de la URL.
@RestController
@RequestMapping("/api/v1")
public class APIController {
@RequestMapping("/user/{userId}/info")
public String getUserInfo(@PathVariable("userId") String userId) {
return "hello " + userId;
}
}
Resultado: /api/v1/user/1234/info converge a /api/v1/user/{userId}/info.
Convergencia basada en estadísticas de memoria
Cuando las aplicaciones no usan el framework Spring Web, o si la convergencia basada en anotaciones falla, ARMS recurre a la convergencia basada en estadísticas de memoria.
Esta política solo aplica a versiones del agente de ARMS anteriores a la V4.x.
|
Propiedad |
Detalles |
|
Lógica |
1. Divide cada entrada mediante delimitadores predefinidos (como |
|
Formato |
Cadena que contiene |
|
Tipos de datos compatibles |
Todos |
|
Ubicación |
Agente de ARMS |
|
Versiones de agente compatibles |
2.x, y versiones posteriores a 2.x pero anteriores a 4.x |
Ejemplo
Una aplicación proporciona la plantilla de URL /api/v1/user/${userId}/info. El módulo de estadísticas de memoria detecta divergencia en los identificadores de usuario y hace que la URL converja a /api/v1/user/*/info.
Convergencia personalizada
Defina reglas de convergencia personalizadas para comparar URL con expresiones regulares y reemplazarlas por un destino específico.
|
Propiedad |
Detalles |
|
Lógica |
Evalúa las reglas de convergencia personalizadas de forma secuencial. Se aplica la primera regla que coincida. |
|
Formato |
Determinado por su configuración. |
|
Tipo de dato compatible |
URL |
|
Ubicación |
Agente de ARMS V4.x y posteriores: agente. Agente de ARMS anterior a V4.x: servidor. |
|
Versiones de agente compatibles |
Todas |
Ejemplo
Regla personalizada: hacer que todas las URL que coincidan con /api/v1/user/[\d]+/info converjan a /api/v1/getUserInfo.
Resultado: todas las URL que coinciden con la expresión regular /api/v1/user/[\d]+/info convergen a /api/v1/getUserInfo.
Convergencia de recursos estáticos
Algunas versiones anteriores del agente de ARMS monitorean métricas de recursos estáticos. Dado que las URL de estos recursos cambian con frecuencia, la convergencia para dichas métricas está habilitada de forma predeterminada.
|
Propiedad |
Detalles |
|
Lógica |
Comprueba si el sufijo de la URL coincide con la lista predeterminada de extensiones de recursos estáticos. De ser así, la URL converge. |
|
Formato |
Predeterminado: |
|
Tipo de dato compatible |
URL |
|
Ubicación |
Agente de ARMS V4.x y posteriores: agente. Agente de ARMS anterior a V4.x: servidor. |
|
Versiones de agente compatibles |
Todas |
Extensiones de recursos estáticos predeterminadas:
.log .7z .tgz .jpg .jpeg .png .gif .css .js .ico .woff2 .xml .svg .pdf .txt .text .ppt .word .xlsx .tar.gz .tar.bz2 .sh .yml .yaml .zip .gz .ttf .woff .eot .rar .properties
Ejemplo
De forma predeterminada, /api/v1/hello.jpg converge a {ARMS_STATIC_REQ}. Con la configuración avanzada habilitada, converge a {ARMS_S_JPG}.
Convergencia de solicitudes de ciberataque
Los servicios pueden recibir solicitudes de ciberataque (como intentos de leer el archivo /etc/passwd). Estas solicitudes las elaboran los atacantes y cambian con frecuencia, por lo que registrarlas todas satura los recursos de almacenamiento.
|
Propiedad |
Detalles |
|
Lógica |
Comprueba si una URL contiene caracteres que suelen aprovecharse para ciberataques. De ser así, la URL converge. |
|
Formato |
|
|
Tipo de dato compatible |
URL |
|
Ubicación |
Agente de ARMS V4.x y posteriores: agente. Agente de ARMS anterior a V4.x: servidor. |
|
Versiones de agente compatibles |
Todas |
Caracteres predeterminados: ' $ \ ' !
Ejemplo
/app/v1/user/info?cmd='more /etc/passwd' converge a {ARMS_ATTACK_REQ}.
Convergencia de parámetros de consulta
De forma predeterminada, el agente de ARMS no captura los parámetros de consulta al recopilar URL. Sin embargo, algunas URL contienen parámetros de consulta que pueden provocar divergencia.
|
Propiedad |
Detalles |
|
Lógica |
Comprueba si una URL contiene parámetros de consulta. De ser así, la URL converge. |
|
Formato |
Predeterminado: |
|
Tipo de dato compatible |
URL |
|
Ubicación |
Agente de ARMS V4.x y posteriores: agente. Agente de ARMS anterior a V4.x: servidor. |
|
Versiones de agente compatibles |
Todas |
Delimitadores de parámetros de consulta predeterminados: ; ? &
Ejemplo
De forma predeterminada, /api/v1/user/info?userId=12345 converge a {ARMS_PARAMED_REQ}. Con la configuración avanzada habilitada, converge a /api/v1/user/info?{ARMS_REQ_PARAMS}.
Convergencia de palabras sin significado
Las URL con palabras o cadenas de dígitos demasiado largas tienden a divergir. ARMS reemplaza los segmentos de ruta que superan los umbrales de longitud especificados.
|
Propiedad |
Detalles |
|
Lógica |
Divide una URL en una matriz de términos mediante la barra diagonal ( |
|
Formato |
Dígitos demasiado largos: |
|
Tipo de dato compatible |
URL |
|
Ubicación |
Agente de ARMS V4.x y posteriores: agente. Agente de ARMS anterior a V4.x: servidor. |
|
Versiones de agente compatibles |
Todas |
Ejemplo
/api/2024040710/hello2024040710 converge a /api/{ARMS_NUMBER}/{ARMS_ANY}.
Convergencia inteligente
Después de aplicar las políticas anteriores, es posible que queden algunas URL divergentes. ARMS genera periódicamente reglas de convergencia mediante algoritmos para gestionar estas URL.
|
Propiedad |
Detalles |
|
Lógica |
1. Agrupa URL de muestra mediante algoritmos. 2. Identifica el patrón de URL de cada grupo y genera reglas de convergencia. 3. Combina las reglas de convergencia entre grupos. |
|
Formato |
Segmentos de dígitos divergentes: |
|
Tipo de dato compatible |
URL |
|
Ubicación |
Agente de ARMS V4.x y posteriores: agente. Agente de ARMS anterior a V4.x: servidor. |
|
Versiones de agente compatibles |
Todas |
Ejemplo
/api/product/1/info
/api/product/2/info
....
/api/product/N/info
El servidor compara estas URL mediante la expresión regular /api/product/[\d]+/info y las hace converger a /api/product/{ARMS_NUMBER}/info.
Normalización de SQL
El agente de ARMS puede recopilar una gran cantidad de instrucciones SQL debido a la fragmentación (sharding), las anotaciones o los literales en línea. ARMS normaliza cada instrucción SQL al reemplazar los valores divergentes.
|
Propiedad |
Detalles |
|
Lógica |
1. Elimina las anotaciones. 2. Reemplaza el texto sin formato. 3. Reemplaza los nombres de bases de datos y tablas fragmentadas. |
|
Formato |
Se reemplazan los dígitos o letras divergentes. |
|
Tipo de dato compatible |
SQL |
|
Ubicación |
Agente de ARMS |
|
Versiones de agente compatibles |
4.x y posteriores |
Ejemplo
select * from cache_0 where ckey='23'
Resultado:
select * from cache_{NUM} where ckey=?
Convergencia de direcciones IP
Si su aplicación depende de muchos servicios externos a los que se accede mediante direcciones IP, el agente de ARMS puede recopilar una gran cantidad de direcciones IP únicas, lo que provoca divergencia.
|
Propiedad |
Detalles |
|
Lógica |
1. Agrupa las direcciones IP por puerto. 2. Aplica la convergencia si el número de direcciones IP en un grupo supera el umbral (predeterminado: 50). |
|
Formato |
|
|
Tipo de dato compatible |
IP |
|
Ubicación |
Agente de ARMS V4.x y posteriores: agente. Agente de ARMS anterior a V4.x: servidor. |
|
Versiones de agente compatibles |
Todas |
Ejemplo
1.1.1.1:8080
...
1.1.1.255:8080
Estas direcciones IP convergen a {ARMS_IP}:8080.
Convergencia de espacio de cardinalidad
Las políticas anteriores resuelven la mayoría de los problemas de alta cardinalidad en las URL. Sin embargo, en las instrucciones SQL y otros tipos de datos aún se puede registrar una gran cantidad de valores de dimensión. Para evitarlo, ARMS limita el número de valores de dimensión que se registran en cada periodo de tiempo.
Esta política no se puede deshabilitar manualmente.
|
Propiedad |
Detalles |
|
Lógica |
1. Genera periódicamente un espacio de cardinalidad de tamaño fijo. 2. Para cada valor de dimensión, comprueba si existe en el espacio de cardinalidad. Si existe, devuelve el valor tal cual. Si no, lo agrega al espacio de cardinalidad. Si el espacio está lleno, devuelve |
|
Formato |
|
|
Tipos de datos compatibles |
Todos |
|
Ubicación |
Agente de ARMS V4.x y posteriores: agente. Agente de ARMS anterior a V4.x: servidor. |
|
Versiones de agente compatibles |
Todas |
Umbrales horarios predeterminados
|
Elemento |
Umbral horario |
|
Interfaz de URL |
500 |
|
Tarea de programación |
1,000 |
|
Interfaz RPC |
1,000 |
|
Interfaz ascendente |
200 |
|
Llamada SQL normal |
100 |
|
Llamada SQL lenta |
100 |
|
URL de solicitud externa |
200 |
|
Dirección de solicitud externa |
100 |
Ejemplo
Suponga que el tamaño del espacio de cardinalidad se establece en 100 registros por hora. Direcciones de servicios externos:
www.a1.com
www.a2.com
....
www.a1000.com
Solo se registran las primeras 100 direcciones por hora. Las direcciones posteriores convergen a {ARMS_OTHERS}.
Orden de ejecución
Las políticas de convergencia se ejecutan de forma secuencial en el orden que se muestra a continuación. Una vez que un valor de dimensión coincide con una política, se omiten las restantes.
Agente de ARMS anterior a V4.x
En el lado del agente:
URL: Convergencia basada en anotaciones de Spring > Convergencia basada en estadísticas de memoria
SQL: Convergencia basada en estadísticas de memoria
IP y otros: Convergencia basada en estadísticas de memoria
En el lado del servidor:
URL: Convergencia personalizada > Convergencia de solicitudes de ciberataque > Convergencia de parámetros de consulta > Convergencia de recursos estáticos > Convergencia de palabras sin significado > Convergencia inteligente > Convergencia de espacio de cardinalidad
SQL: Convergencia personalizada > Convergencia de espacio de cardinalidad
IP y otros: Convergencia personalizada > Convergencia de direcciones IP > Convergencia de espacio de cardinalidad
Agente de ARMS V4.x y posteriores
En el lado del agente:
URL: Convergencia basada en anotaciones de Spring > Convergencia personalizada > Convergencia de solicitudes de ciberataque > Convergencia de parámetros de consulta > Convergencia de recursos estáticos > Convergencia de palabras sin significado > Convergencia inteligente > Convergencia de espacio de cardinalidad
SQL: Convergencia personalizada > Normalización de SQL > Convergencia de espacio de cardinalidad
IP y otros: Convergencia personalizada > Convergencia de direcciones IP > Convergencia de espacio de cardinalidad
En el lado del servidor: No aplica (toda la convergencia se ejecuta en el agente).
Preguntas frecuentes
¿Cómo consulto los valores originales antes de la convergencia?
Agente de ARMS V4.x y posteriores: Tanto los valores originales como los convergidos se registran en los datos de trazas. Use Trace Explorer para consultar los valores originales.
Agente de ARMS anterior a V4.x: Los valores originales no están disponibles porque la convergencia ocurre en el servidor.
¿Cómo personalizo las reglas de convergencia?
Defina reglas de convergencia personalizadas en la consola de ARMS. En la página de detalles de la aplicación, elija Configuration > Convergence en la barra de navegación superior.

Por ejemplo, especifique la expresión regular /api/v1/user/\d+/info para que todas las URL coincidentes converjan a /api/v1/user/userId/info. Así, la URL /api/v1/user/124343543/info converge a /api/v1/user/userId/info.
¿Cómo excluyo URL específicas de la convergencia?
Especifique las URL que desea excluir de la convergencia en la consola de ARMS. Vaya a la misma página Configuration > Convergence descrita en la pregunta anterior.
Por ejemplo, si excluye /api/v1/user/9999/info de la convergencia, esta URL no convergerá a /api/v1/user/userId/info.
¿Cuál es la diferencia entre la convergencia en el agente y en el servidor?
La convergencia en el lado del agente procesa los datos en el agente de ARMS antes de enviarlos al servidor. Esto reduce la carga de procesamiento del servidor y garantiza un 100 % de precisión en los datos.
La convergencia en el lado del servidor se aplica cuando la versión del agente no es compatible con ciertas políticas. Sin la convergencia en el agente, este envía paquetes de datos sin converger al servidor. Los paquetes grandes generan dos riesgos:
Pérdida de datos: los paquetes demasiado grandes pueden rechazarse.
Menor precisión: las limitaciones de procesamiento del servidor pueden afectar la precisión de los datos convergidos.
Actualice a la versión más reciente del agente de ARMS para ejecutar todas las políticas de convergencia en el agente.