Todos os produtos
Search
Central de documentação

Application Real-Time Monitoring Service:Extrair parâmetros de negócio para sua aplicação Java

Última atualização: Aug 21, 2026

Ao diagnosticar problemas em produção, os dados de rastreamento padrão muitas vezes não oferecem o contexto de negócio necessário para identificar as causas raiz. Sem isso, não é possível filtrar traces por ID de pedido, ID de usuário ou código de transação. O Application Real-Time Monitoring Service (ARMS) resolve essa questão ao extrair parâmetros específicos de requisições HTTP, respostas e exceções no nível de span, sem exigir alterações no código da aplicação. Os parâmetros extraídos tornam-se atributos do span, permitindo filtrar traces, detectar erros de lógica de negócio e acionar alertas.

Casos de uso

Após configurar as regras de extração, o agente do ARMS captura os valores dos parâmetros e os grava como atributos do span. Esses atributos habilitam as seguintes capacidades:

  • Filtrar traces por contexto de negócio: localize todas as requisições associadas a um ID de pedido, ID de usuário ou código de transação específico na página Trace Explorer.

  • Detectar erros de lógica de negócio: marque spans como falhos quando o valor de um parâmetro extraído corresponder a uma regra personalizada de código de erro.

  • Configurar alertas: dispare notificações quando a contagem de erros baseada nos parâmetros extraídos ultrapassar os limiares definidos.

Pré-requisitos

Nota

A extração de parâmetros de negócio aplica-se exclusivamente a aplicações Java.

Antes de começar, verifique se:

  • Um agente do ARMS V4.1.0 ou posterior está instalado. Para mais informações, consulte {{XREF_0}}. O recurso não funciona em agentes anteriores à versão V4.1.0, mesmo que as regras estejam configuradas.

    • V4.2.0 ou posterior: é possível adicionar várias regras de correspondência de API e regras de extração de parâmetros a uma única regra de extração de parâmetros de negócio.

    • V4.1.0 a V4.2.0: apenas a primeira regra de correspondência tem efeito por regra.

O exemplo a seguir configura duas regras:

  • A primeira regra aplica-se a interfaces que começam com /api/book, utiliza Body como origem do parâmetro e emprega a expressão OGNL #this.data.code.

  • A segunda regra destina-se a interfaces iniciadas por /api/stationery, usa Body como fonte de parâmetro e adota a expressão OGNL #this.responseCode.

Tipos e origens de parâmetros suportados

O agente do ARMS detecta dinamicamente alterações nas regras e extrai parâmetros com base em todas as regras ativadas. A tabela abaixo lista os tipos de parâmetros suportados, as origens e os requisitos de framework.

Tipo de parâmetro

Origem do parâmetro

Framework suportado

Observações

Requisição de servidor HTTP

Header, Cookie, Parameter

Tomcat 7.0.4+, Jetty 8.0.0+, Undertow 1.4.0.Final+

O agente do ARMS invoca o método javax.servlet.ServletRequest.getParameters(). Para ContentType: application/x-www-form-urlencoded, isso provoca a leitura prematura do InputStream no corpo da requisição. Como o InputStream em ServletRequest permite apenas uma leitura, acessos subsequentes pelo código de negócio falharão. Caso seu código necessite acessar o InputStream, exclua a interface para evitar falhas.

Requisição de servidor HTTP

Body

Spring MVC 4.2.0+

A classe deve ter a anotação @Controller e o método deve ter a anotação @RequestBody.

Resposta de servidor HTTP

Header, Cookie

Tomcat 7.0.4+, Jetty 8.0.0+, Undertow 1.4.0.Final+

-

Resposta de servidor HTTP

Body

Spring MVC 4.2.0+

A classe precisa conter a anotação @Controller e o método requer a anotação @ResponseBody.

Requisição de cliente HTTP

Header, Parameter

Apache HttpClient 2.0+, OkHTTP 2.2+

-

Resposta de cliente HTTP

Header

Apache HttpClient 2.0+, OkHTTP 2.2+

-

Informações de exceção

Message

-

A classe deve herdar de java.lang.Exception.

Acessar a página de regras de extração

  1. Faça login no console do ARMS. No painel de navegação à esquerda, escolha Application Monitoring > Application List.

  2. Selecione uma região na barra de navegação superior e clique na aplicação desejada.

    Nota

    Os ícones na coluna Language indicam a linguagem de programação da aplicação: - Java图标: Java - image: Go - image: Python - - (Hífen): aplicação monitorada via Managed Service for OpenTelemetry

  3. Na barra de navegação superior, selecione Configuration > Business Parameter Extraction Rules.

  4. Na seção Business Parameter Extraction Rules, crie, visualize ou modifique as regras de extração da aplicação.

A lista de regras contém as seguintes colunas: Rule Name, Attribute name, Parameter extraction type, a coluna de regra de correspondência, a coluna de parâmetro extraído, Enabling Status e a coluna Actions (Edit e Delete). Acima da lista, estão disponíveis o botão New Rule, uma caixa de pesquisa por nome de regra e um filtro por tipo de extração de parâmetro. Abaixo da lista, encontram-se os botões Batch Delete e Bulk Copy to Other Applications.

  1. Na seção Customizing Error Settings, configure regras de correspondência de códigos de erro personalizados para filtrar os valores dos parâmetros extraídos.

Ao ativar a chave Custom error code, adicione regras de correspondência: um span será marcado como erro quando o valor do atributo biz.resp.body for maior que 200 e quando o valor do atributo biz.exception exceder 0.

Criar uma regra de extração

Importante
  • As regras são entregues ao agente em tempo real no momento da criação e ativação. A primeira regra exige reinicialização da aplicação para entrar em vigor. As regras subsequentes passam a valer entre 1 e 2 minutos, sem necessidade de reinício.

  • Os parâmetros extraídos ficam registrados como atributos do span. Consulte-os na página Trace Explorer.

  • Os nomes dos atributos recebem o prefixo biz. por padrão e devem ser únicos.

  • O reporte dos dados do span depende da política de amostragem. Para garantir que dados importantes sejam reportados, ajuste essa política. Para mais detalhes, veja {{XREF_1}}.

  • Caso os parâmetros extraídos não apareçam no trace, verifique se a configuração da regra está correta.

Na seção Business Parameter Extraction Rules, clique em New Rule. Configure os parâmetros abaixo e clique em OK.

Parâmetro

Descrição

Rule Name

Nome da regra.

Attribute name

Chave do atributo do span para o valor extraído. Formato: prefixo biz. seguido de palavras separadas por pontos. Cada palavra pode conter letras, dígitos, hífens (-) e underscores (_). Máximo de 10 palavras.

Parameter extraction type

Tipo de parâmetro a ser extraído: requisição de servidor HTTP, resposta de servidor HTTP, requisição de cliente HTTP, resposta de cliente HTTP ou informações de exceção.

Effective Interface

Interfaces HTTP às quais a regra se aplica. O agente do ARMS extrai parâmetros apenas das interfaces correspondentes. Disponível somente quando Parameter extraction type estiver definido como requisição de servidor HTTP ou resposta de servidor HTTP.

Exception Class Name

Nomes das classes de exceção a serem correspondidos. O agente do ARMS extrai parâmetros apenas das exceções correspondentes. Disponível apenas quando Parameter extraction type estiver configurado como informações de exceção.

Text encoding type

Formato de codificação dos parâmetros a extrair.

Enabling Status

Define se a regra deve ser ativada.

Regras de extração de parâmetros

Especifique as origens que contêm os parâmetros a serem extraídos e o método de extração. É possível utilizar múltiplas fontes de parâmetros e etapas de processamento. Quando houver parâmetros disponíveis em várias origens, a extração seguirá a ordem de definição das etapas. Para mais informações, consulte {{XREF_2}}.

  • Parameter Source: origem de onde os parâmetros serão extraídos. Ao selecionar Header, Cookie ou Parameter, insira a chave para a extração inicial. Se escolher Body ou Message, os parâmetros serão extraídos de todo o corpo ou mensagem.

  • Add parameter processing steps: defina etapas para analisar os valores dos parâmetros a partir de uma ou mais origens. A saída de cada etapa torna-se a entrada da próxima. Sem nenhuma etapa especificada, o texto JSON bruto da origem será utilizado. Para mais detalhes, veja {{XREF_3}}. Os seguintes métodos de extração são suportados:

    Método

    Descrição

    Exemplo

    OGNL

    A entrada deve ser um objeto Java. Suporta expressões OGNL com notação de ponto.

    #this.data.getCode()

    JsonPath

    Requer uma string JSON na entrada. Aceita expressões JsonPath com notação de ponto.

    $.data.code

    Regex

    Exige uma string como entrada. Utiliza grupos de captura nomeados. A substring a ser extraída deve corresponder a um grupo de captura chamado res.

    .*from:(?<res>[a-z]+).*

Verificar uma regra de extração

Depois que uma regra entrar em vigor, verifique na página Trace Explorer o trace relacionado. Se um atributo personalizado aparecer no span da interface correspondente, a regra estará funcionando corretamente.

  1. Localize o nome do atributo correspondente à regra.

    Na lista Business Parameter Extraction Rules, encontre o Attribute name da regra criada, por exemplo, aquela cujo atributo é biz.resp.body.

  2. Na página Trace Explorer, adicione attributes.$attributesName como condição de filtro para consultar spans.

    Na área de consulta avançada, inclua a condição de filtro attributes.biz.resp.body = 211.

  3. Clique em um trace para visualizar os atributos personalizados do span.

Gerenciar regras de extração

  • Para ativar ou desativar uma regra, alterne a chave Enabling Status.

  • Para modificar ou excluir uma regra, clique em Edit ou Delete na coluna Actions.

  • Para remover várias regras simultaneamente, selecione-as e clique em Batch Delete abaixo da lista.

  • Para copiar regras para outras aplicações, selecione-as e clique em Bulk Copy to Other Applications. Na caixa de diálogo, especifique se deseja copiar as regras para todas as aplicações ou para uma específica.

Nota
  • Aguarde de 1 a 2 minutos para que as alterações tenham efeito.

  • Apenas as regras de extração são copiadas. As configurações personalizadas de erro não são incluídas.

  • Os nomes dos atributos precisam ser únicos. Se já existir um atributo com o mesmo nome na aplicação de destino, a regra não será copiada.

Configurar correspondência de código de erro personalizado

Quando o valor de um parâmetro extraído corresponde a uma regra de código de erro personalizado, o span é marcado como falho. Spans falhos incrementam a métrica arms_$callType_requests_error_count, que pode ser usada para alertas.

Nota
  • A política de amostragem não afeta a coleta de dados para códigos de erro personalizados. Spans falhos que não forem amostrados ainda assim serão contabilizados.

  • Para tipos de acesso a service e dimensões disponíveis, consulte {{XREF_4}}.

Criar uma regra de código de erro personalizado

  1. Na seção Customizing Error Settings, ative a chave Custom error code.

  2. Clique em Add matching rules.

  3. Selecione uma regra de extração e configure a condição de filtro.

    Após ativar a chave Custom error code, adicione regras de correspondência: um span será marcado como erro quando o valor do atributo biz.resp.body for maior que 200 e quando o valor do atributo biz.exception for superior a 0.

  4. Clique em Save. A regra entra em vigor dentro de 1 a 2 minutos, sem necessidade de reiniciar a aplicação.

Verificar uma regra de código de erro personalizado

Após configurar uma regra, verifique na página Trace Explorer se há spans falhos que atendam às condições da regra.

  1. Confirme o nome do atributo e a condição utilizados pela regra.

  2. Na página Trace Explorer, filtre por spans falhos.

    Na página Trace Explorer, utilize a área de filtro rápido à esquerda para filtrar spans cujo status seja de erro. A condição de consulta resultante é serviceName="arms-custom-extraction-demoextracted" AND statusCode IN (2, 3) AND spanName="/api/v1/http_server/body". Neste exemplo, a consulta retorna 3.642 chamadas com erro, cada uma com duração de 0 ms e status de erro.

  3. Clique em um trace e verifique se o valor do atributo corresponde à condição da regra. No exemplo a seguir, o valor do atributo biz.resp.body é 670, valor superior a 499 (o limiar especificado pela regra de correspondência de erro).

  4. Na página Overview, confirme se a contagem de erros está refletida corretamente no painel de erros.

    image

Exemplos de regras de extração

Os exemplos a seguir encadeiam os métodos OGNL, JsonPath e Regex. A saída de cada etapa alimenta a próxima como entrada.

OGNL

A Object-Graph Navigation Language (OGNL) lê e define propriedades de objetos Java. Utilize-a para extrair campos de objetos anotados com @ResponseBody ou @RequestBody. O resultado é convertido em string. Caso o valor extraído seja um objeto Java, ele será serializado para uma string JSON para permitir extrações adicionais.

@RestController
@RequestMapping("/components/api/v1/mall")
public class MallController {
  @RequestMapping("/product")
  @ResponseBody
  public ResponseBody product(@RequestBody RequestBody req) {
    // Business code
  }

  static class RequestBody {
    String requestId;
    Map<String, String> queryParam;

    public String getQueryJsonStr() {
      return JSON.toJsonString(queryParam);
    }
  }

  static class ResponseBody {
    int code;
    boolean success;
    String message;
  }
}

Extrair o campo requestId de RequestBody.

Extrair o campo code de ResponseBody.

Invocar um método getter para extrair o resultado de getQueryJsonStr().

Importante

Certifique-se de que o método getQueryJsonStr() exista na classe.

JsonPath

Expressões JsonPath extraem propriedades de uma string JSON.

{
  "code": 200,
  "message": "Query success.",
  "success": true,
  "data": {
    "name": "John",
    "age": 21
  }
}

Extrair data.age dos dados JSON.

Regex

Expressões regulares correspondem a combinações de caracteres em strings. Use um grupo de captura chamado res para especificar o resultado da extração.

Nota

Por padrão, uma regex inicia a correspondência no começo da string. Para corresponder em qualquer posição, adicione .* antes e depois da expressão.

https://test.aliyun.com/v2/workitem#requestId=0c978f115b6f7&cityCode=34&env=online

Extrair o valor de cityCode da URL.

Extração em múltiplas etapas

Este exemplo encadeia OGNL, JsonPath e Regex para extrair um valor aninhado do corpo de uma resposta.

A classe a seguir contém o objeto do corpo da resposta:

class DemoResponse {
    int code = 200;
    boolean success = true;
    String message = "text content";
    String extraInfo = "{\"id\": 15, \"cityInfo\": \"from:hangzhou,to:beijing\"}";

    public String getExtraInfo() {
        return this.extraInfo;
    }
}

Objetivo: extrair o nome da cidade indicado por "from" no subcampo cityInfo de extraInfo.

O agente do ARMS processa a extração nestas etapas:

  1. Obter o objeto DemoResponse do corpo da resposta.

  2. Executar #this.getExtraInfo() (OGNL) para obter o campo extraInfo.

  3. Executar $.cityInfo (JsonPath) para analisar extraInfo como JSON e obter o subcampo cityInfo.

  4. Executar ^from:(?<res>[a-z]+).* (Regex) para corresponder ao grupo de captura chamado res, que retorna hangzhou.

  5. Gravar hangzhou como valor do atributo no span.

Etapas de extração de parâmetros

Como funcionam as etapas

As etapas de extração recuperam e analisam valores dos dados de origem. Elas formam um pipeline: a saída de cada etapa torna-se a entrada da seguinte.

image

Cada método exige um tipo de entrada específico. Se a entrada não corresponder, o pipeline é interrompido e o resultado atual é registrado como valor final.

Método de extração

Tipo de dado de entrada

Tipo de dado de saída

OGNL

Objeto Java

String ou string JSON após serialização

JsonPath

String JSON

String

Regex

String

String

Restrições de sintaxe

O ARMS impõe restrições de sintaxe mais rigorosas do que as versões open-source de OGNL, JsonPath e regex para manter a segurança.

Método

Referência de sintaxe

Restrições

Exemplo válido

OGNL

Apache Commons OGNL

Apenas notação de ponto. Métodos invocados devem começar com get. Profundidade máxima de acesso: 10.

#this.extraInfo.getPid()

JsonPath

JsonPath

Somente notação de ponto. Profundidade máxima de acesso: 10.

$.cityInfo

Regex

Java Regex

Deve incluir exatamente um grupo de captura chamado res.

^from:(?<res>[a-z]+).*

Considerações de desempenho

As etapas de extração envolvem serialização/desserialização, reflexão Java e processamento de regex — as operações mais intensivas em recursos no pipeline de extração. Para interfaces sensíveis a latência, considere estas alternativas:

  • Escreva parâmetros nos headers HTTP diretamente no código de negócio (caso a conformidade de segurança permita).

  • Utilize o OpenTelemetry SDK for Java para gravar atributos diretamente nos spans. Para mais informações, consulte {{XREF_5}}.

Sobrecarga de desempenho

A extração de parâmetros de negócio adiciona sobrecarga de CPU e memória devido à serialização/desserialização e reflexão Java. O benchmark a seguir quantifica esse impacto.

Ambiente de teste:

  • Especificações do Pod: 1 núcleo, 2 GB de memória

  • 5 interfaces HTTP com 2.000 QPS cada

  • 240 parâmetros personalizados extraídos a cada 100 chamadas: 20 expressões regex, 40 JsonPath e 40 OGNL

image

Item

Recurso desativado (linha de base)

Recurso ativado

Aumento

CPU

0,230 c

0,257 c

+0,027 c

Memória (20 minutos após inicialização)

575 MB

693 MB

+118 MB

Tempo de resposta

101 ms

101 ms

+0 ms

Importante

A extração envolve reflexão Java e serialização/desserialização, o que aumenta o uso de CPU e memória. Para interfaces com requisitos rígidos de latência, grave parâmetros nos headers ou utilize o OpenTelemetry SDK.

Perguntas frequentes

O que fazer se a extração de parâmetros falhar?

A causa depende da origem do parâmetro:

  • Body: verifique se o Spring MVC está em uso, se a classe possui a anotação @Controller e se o método tem a anotação @RequestBody ou @ResponseBody.

  • Response Cookie: confirme que está executando Tomcat v7.0.4-9.x ou Undertow v1.4.0.Final+. Caso contrário, utilize request Cookie.

Qual é o escopo da extração de exceções?

O agente do ARMS para Java captura apenas exceções personalizadas lançadas fora dos spans. Para extrair exceções de métodos de chamada essenciais dentro dos spans e marcá-las como erros, instrumente o método de chamada. Para mais informações, consulte {{XREF_6}}.

Como mapear anotações do Spring MVC para regras de extração?

Anotação

Tipo de parâmetro

Origem do parâmetro

@RequestParam

Requisição de servidor HTTP

Parameter

@RequestHeader

Requisição de servidor HTTP

Header

@CookieValue

Requisição de servidor HTTP

Cookie

@RequestBody

Requisição de servidor HTTP

Body

@ResponseBody

Resposta de servidor HTTP

Body

Como extrair tipos de parâmetros não suportados?

Utilize os SDKs do OpenTelemetry para instrumentar sua aplicação e gravar os parâmetros diretamente como atributos do span. Para mais detalhes, consulte {{XREF_7}}.

A extração suporta objetos Body com RequestBodyAdvice e ResponseBodyAdvice?

Sim. O agente do ARMS extrai parâmetros após a execução do BodyAdvice definido pelo usuário, mas antes do BodyAdvice nativo do Spring.