O agente do Application Real-Time Monitoring Service (ARMS) coleta dados de métricas como contagem de requisições, contagem de erros e tempos de resposta. Para melhorar a diversidade e a precisão dos dados, as métricas incluem dimensões como endereços IP, instruções SQL e URLs.
Algumas dimensões podem gerar um grande número de valores únicos, caracterizando alta cardinalidade. Por exemplo, uma API RESTful com o modelo de URL /api/v1/users/{ID}/info gera uma URL distinta para cada ID de usuário. A alta cardinalidade sobrecarrega o armazenamento, causa perda de gravação e consultas lentas, além de aumentar os custos.
Para resolver isso, o ARMS aplica políticas de convergência que substituem valores de dimensão de alta cardinalidade por placeholders normalizados.
No agente ARMS V4.x e versões posteriores, toda a convergência ocorre no agente, garantindo 100% de precisão dos dados. Tanto os valores originais quanto os convergidos são registrados nos dados de rastreamento. Use o
para visualizar os valores originais antes da convergência.
Referência rápida: formatos de convergência
A tabela a seguir resume os formatos de placeholder e quando cada um aparece.
|
Formato |
Cenário |
|
|
O número de endereços IP acessando a mesma porta excede o limiar (padrão: 50). |
|
|
A URL aponta para um recurso estático. |
|
|
A URL contém strings exploráveis em ciberataques. |
|
|
A URL contém parâmetros de consulta. |
|
|
O número de valores de dimensão registrados em um período excede o limiar do espaço de cardinalidade. Para os limiares padrão, consulte Convergência de espaço de cardinalidade. |
|
|
Os segmentos de caminho da URL (separados por |
|
|
Os segmentos de caminho da URL (separados por |
|
|
Os segmentos de caminho da URL (separados por |
|
|
A URL utiliza anotações do Spring Controller. |
|
String contendo |
Convergência baseada em estatísticas de memória (apenas para agente ARMS anterior à V4.x). |
Políticas de convergência
Todas as políticas de convergência estão ativadas por padrão. Exceto pela convergência de espaço de cardinalidade, você pode desativar todas manualmente.
Cada política suporta tipos de dados específicos. A seção de cada política abaixo especifica o tipo de dado suportado.
Convergência baseada em anotações do Spring
Em APIs RESTful com variáveis de caminho, usar URLs de requisição brutas como valores de dimensão leva à divergência. O ARMS lê as informações de caminho das anotações de roteamento do Spring (como @RequestMapping) e usa o caminho definido pela anotação como valor da dimensão.
|
Propriedade |
Detalhes |
|
Lógica |
Lê as informações de caminho das anotações de roteamento das URLs do Spring. |
|
Formato |
O valor configurado nas anotações de roteamento. |
|
Tipo de dado suportado |
URL (apenas URLs de service de entrada; URLs de saída não são suportadas). |
|
Localização |
Agente ARMS |
|
Versões do agente suportadas |
2.9.1.2 e posteriores |
Exemplo
O seguinte APIController define um endpoint RESTful que recupera informações do usuário usando uma variável de caminho. A anotação @RequestMapping("/api/v1/user/{userId}/info") especifica o padrão da 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 para /api/v1/user/{userId}/info.
Convergência baseada em estatísticas de memória
Para aplicações que não usam o framework Spring Web, ou quando a convergência baseada em anotações falha, o ARMS recorre à convergência baseada em estatísticas de memória.
Esta política se aplica apenas a versões do agente ARMS anteriores à V4.x.
|
Propriedade |
Detalhes |
|
Lógica |
1. Divide cada entrada por delimitadores predefinidos (como |
|
Formato |
String contendo |
|
Tipos de dados suportados |
Todos |
|
Localização |
Agente ARMS |
|
Versões do agente suportadas |
2.x e versões posteriores a 2.x, mas anteriores a 4.x |
Exemplo
Uma aplicação fornece o modelo de URL /api/v1/user/${userId}/info. O módulo de estatísticas de memória detecta divergência nos IDs de usuário e converge a URL para /api/v1/user/*/info.
Convergência personalizada
Defina regras de convergência personalizadas para corresponder URLs a expressões regulares e substituí-las por um alvo especificado.
|
Propriedade |
Detalhes |
|
Lógica |
Corresponde às regras de convergência personalizadas sequencialmente. Aplica a primeira regra correspondente. |
|
Formato |
Determinado pela sua configuração. |
|
Tipo de dado suportado |
URL |
|
Localização |
Agente ARMS V4.x e posteriores: agente. Agente ARMS anterior à V4.x: servidor. |
|
Versões do agente suportadas |
Todas |
Exemplo
Regra personalizada: convergir todas as URLs que correspondem a /api/v1/user/[\d]+/info para /api/v1/getUserInfo.
Resultado: todas as URLs que correspondem à expressão regular /api/v1/user/[\d]+/info convergem para /api/v1/getUserInfo.
Convergência de recursos estáticos
Algumas versões mais antigas do agente ARMS monitoram métricas de recursos estáticos. Como as URLs de recursos estáticos mudam frequentemente, a convergência para essas métricas é ativada por padrão.
|
Propriedade |
Detalhes |
|
Lógica |
Verifica se o sufixo da URL corresponde à lista padrão de extensões de recursos estáticos. Em caso afirmativo, converge a URL. |
|
Formato |
Padrão: |
|
Tipo de dado suportado |
URL |
|
Localização |
Agente ARMS V4.x e posteriores: agente. Agente ARMS anterior à V4.x: servidor. |
|
Versões do agente suportadas |
Todas |
Extensões padrão de recursos estáticos:
.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
Exemplo
Por padrão, /api/v1/hello.jpg converge para {ARMS_STATIC_REQ}. Com a configuração avançada ativada, converge para {ARMS_S_JPG}.
Convergência de requisições de ciberataque
Os services podem receber requisições de ciberataque (como tentativas de ler o arquivo /etc/passwd). Essas requisições são criadas por invasores e mudam frequentemente. Registrar todas elas sobrecarrega os recursos de armazenamento.
|
Propriedade |
Detalhes |
|
Lógica |
Verifica se uma URL contém caracteres comumente explorados em ciberataques. Em caso afirmativo, converge a URL. |
|
Formato |
|
|
Tipo de dado suportado |
URL |
|
Localização |
Agente ARMS V4.x e posteriores: agente. Agente ARMS anterior à V4.x: servidor. |
|
Versões do agente suportadas |
Todas |
Caracteres padrão: ' $ \ ' !
Exemplo
/app/v1/user/info?cmd='more /etc/passwd' converge para {ARMS_ATTACK_REQ}.
Convergência de parâmetros de consulta
Por padrão, o agente ARMS não captura parâmetros de consulta ao coletar URLs. No entanto, algumas URLs contêm parâmetros de consulta que podem levar à divergência.
|
Propriedade |
Detalhes |
|
Lógica |
Verifica se uma URL contém parâmetros de consulta. Em caso afirmativo, converge a URL. |
|
Formato |
Padrão: |
|
Tipo de dado suportado |
URL |
|
Localização |
Agente ARMS V4.x e posteriores: agente. Agente ARMS anterior à V4.x: servidor. |
|
Versões do agente suportadas |
Todas |
Delimitadores padrão de parâmetros de consulta: ; ? &
Exemplo
Por padrão, /api/v1/user/info?userId=12345 converge para {ARMS_PARAMED_REQ}. Com a configuração avançada ativada, converge para /api/v1/user/info?{ARMS_REQ_PARAMS}.
Convergência de palavras sem significado
URLs com palavras excessivamente longas ou strings de dígitos tendem a divergir. O ARMS substitui segmentos de caminho que excedem os limiares de comprimento especificados.
|
Propriedade |
Detalhes |
|
Lógica |
Divide uma URL em um array de termos por barra ( |
|
Formato |
Dígitos excessivamente longos: |
|
Tipo de dado suportado |
URL |
|
Localização |
Agente ARMS V4.x e posteriores: agente. Agente ARMS anterior à V4.x: servidor. |
|
Versões do agente suportadas |
Todas |
Exemplo
/api/2024040710/hello2024040710 converge para /api/{ARMS_NUMBER}/{ARMS_ANY}.
Convergência inteligente
Após a aplicação das políticas anteriores, algumas URLs divergentes podem permanecer. O ARMS gera periodicamente regras de convergência usando algoritmos para lidar com essas URLs.
|
Propriedade |
Detalhes |
|
Lógica |
1. Agrupa URLs de amostra usando algoritmos. 2. Identifica o padrão de URL de cada grupo e gera regras de convergência. 3. Mescla regras de convergência entre os grupos. |
|
Formato |
Segmentos de dígitos divergentes: |
|
Tipo de dado suportado |
URL |
|
Localização |
Agente ARMS V4.x e posteriores: agente. Agente ARMS anterior à V4.x: servidor. |
|
Versões do agente suportadas |
Todas |
Exemplo
/api/product/1/info
/api/product/2/info
....
/api/product/N/info
O servidor corresponde a essas URLs usando a expressão regular /api/product/[\d]+/info e as converge para /api/product/{ARMS_NUMBER}/info.
Normalização de SQL
O agente ARMS pode coletar um grande número de instruções SQL devido a sharding, anotações ou literais inline. O ARMS normaliza cada instrução SQL substituindo valores divergentes.
|
Propriedade |
Detalhes |
|
Lógica |
1. Remove anotações. 2. Substitui texto simples. 3. Substitui nomes de bancos de dados e tabelas com sharding. |
|
Formato |
Substitui dígitos ou letras divergentes. |
|
Tipo de dado suportado |
SQL |
|
Localização |
Agente ARMS |
|
Versões do agente suportadas |
4.x e posteriores |
Exemplo
select * from cache_0 where ckey='23'
Resultado:
select * from cache_{NUM} where ckey=?
Convergência de endereços ip
Se sua aplicação depender de muitos services externos acessados por endereços ip, o agente ARMS poderá coletar um grande número de endereços ip únicos, levando à divergência.
|
Propriedade |
Detalhes |
|
Lógica |
1. Agrupa endereços ip por porta. 2. Aplica convergência se o número de endereços ip em um grupo exceder o limiar (padrão: 50). |
|
Formato |
|
|
Tipo de dado suportado |
ip |
|
Localização |
Agente ARMS V4.x e posteriores: agente. Agente ARMS anterior à V4.x: servidor. |
|
Versões do agente suportadas |
Todas |
Exemplo
1.1.1.1:8080
...
1.1.1.255:8080
Esses endereços ip convergem para {ARMS_IP}:8080.
Convergência de espaço de cardinalidade
As políticas anteriores resolvem a maioria dos problemas de alta cardinalidade em URLs. No entanto, para instruções SQL e outros tipos de dados, um grande número de valores de dimensão ainda pode ser registrado. Para evitar isso, o ARMS limita o número de valores de dimensão registrados em cada período.
Não é possível desativar esta política manualmente.
|
Propriedade |
Detalhes |
|
Lógica |
1. Gera periodicamente um espaço de cardinalidade de tamanho fixo. 2. Para cada valor de dimensão, verifica se ele existe no espaço de cardinalidade. Se sim, retorna o valor como está. Se não, adiciona o valor ao espaço de cardinalidade. Se o espaço estiver cheio, retorna |
|
Formato |
|
|
Tipos de dados suportados |
Todos |
|
Localização |
Agente ARMS V4.x e posteriores: agente. Agente ARMS anterior à V4.x: servidor. |
|
Versões do agente suportadas |
Todas |
Limiares horários padrão
|
Item |
Limiar horário |
|
Interface de URL |
500 |
|
Tarefa de agendamento |
1.000 |
|
Interface RPC |
1.000 |
|
Interface upstream |
200 |
|
Chamada SQL normal |
100 |
|
Chamada SQL lenta |
100 |
|
URL de requisição externa |
200 |
|
Endereço de requisição externa |
100 |
Exemplo
Suponha que o tamanho do espaço de cardinalidade esteja definido como 100 registros por hora. Endereços de service externo:
www.a1.com
www.a2.com
....
www.a1000.com
Apenas os primeiros 100 endereços são registrados por hora. Os endereços subsequentes convergem para {ARMS_OTHERS}.
Ordem de execução
As políticas de convergência são executadas sequencialmente na ordem listada abaixo. Assim que um valor de dimensão corresponde a uma política, as políticas restantes são ignoradas.
Agente ARMS anterior à V4.x
Lado do agente:
URL: Convergência baseada em anotações do Spring > Convergência baseada em estatísticas de memória
SQL: Convergência baseada em estatísticas de memória
ip e outros: Convergência baseada em estatísticas de memória
Lado do servidor:
URL: Convergência personalizada > Convergência de requisições de ciberataque > Convergência de parâmetros de consulta > Convergência de recursos estáticos > Convergência de palavras sem significado > Convergência inteligente > Convergência de espaço de cardinalidade
SQL: Convergência personalizada > Convergência de espaço de cardinalidade
ip e outros: Convergência personalizada > Convergência de endereços ip > Convergência de espaço de cardinalidade
Agente ARMS V4.x e posteriores
Lado do agente:
URL: Convergência baseada em anotações do Spring > Convergência personalizada > Convergência de requisições de ciberataque > Convergência de parâmetros de consulta > Convergência de recursos estáticos > Convergência de palavras sem significado > Convergência inteligente > Convergência de espaço de cardinalidade
SQL: Convergência personalizada > Normalização de SQL > Convergência de espaço de cardinalidade
ip e outros: Convergência personalizada > Convergência de endereços ip > Convergência de espaço de cardinalidade
Lado do servidor: N/D (toda a convergência ocorre no agente).
Perguntas frequentes
Como visualize os valores originais antes da convergência?
Agente ARMS V4.x e posteriores: Tanto os valores originais quanto os convergidos são registrados nos dados de rastreamento. Use Trace Explorer para visualizar os valores originais.
Agente ARMS anterior à V4.x: Os valores originais não estão disponíveis porque a convergência ocorre no servidor.
Como personalizo as regras de convergência?
Defina regras de convergência personalizadas no console do ARMS. Na página de detalhes da aplicação, escolha Configuration > Convergence na barra de navegação superior.

Por exemplo, especifique a expressão regular /api/v1/user/\d+/info para convergir todas as URLs correspondentes para /api/v1/user/userId/info. A URL /api/v1/user/124343543/info então converge para /api/v1/user/userId/info.
Como excluo URLs específicas da convergência?
Especifique as URLs a serem excluídas da convergência no console do ARMS. Acesse a mesma página Configuration > Convergence descrita na pergunta anterior.
Por exemplo, se você excluir /api/v1/user/9999/info da convergência, esta URL não será convergida para /api/v1/user/userId/info.
Qual é a diferença entre convergência no lado do agente e no lado do servidor?
A convergência no lado do agente processa dados no agente ARMS antes de relatá-los ao servidor. Isso reduz a pressão de processamento no servidor e garante 100% de precisão dos dados.
A convergência no lado do servidor se aplica quando a versão do agente não suporta certas políticas. Sem a convergência no lado do agente, o agente envie pacotes de dados não convergidos para o servidor. Pacotes grandes geram dois riscos:
Perda de dados: Pacotes excessivamente grandes podem ser rejeitados.
Precisão reduzida: As limitações de processamento do servidor podem afetar a precisão dos dados convergidos.
Atualize para a versão mais recente do agente ARMS para execute todas as políticas de convergência no agente.