Todos os produtos
Search
Central de documentação

Application Real-Time Monitoring Service:Conectar traces de frontend e backend

Última atualização: Aug 27, 2026

O ARMS Real User Monitoring (RUM) permite usar uma sessão de usuário como ponto de partida para rastrear erros, desempenho lento e exceções durante interações. A integração com o ARMS Application Monitoring viabiliza o rastreamento de ponta a ponta e simplifica o fluxo de análise de problemas. Este tópico descreve como conectar traces de frontend e backend para aplicativos móveis.

Pré-requisitos

  • Instrumente seu aplicativo móvel (Android ou iOS) com a versão mais recente do RUM SDK. Para mais informações, consulte Monitor Android apps.

    Nota

    A versão do SDK deve ser 0.2.0 ou posterior para Android e 0.2.0 ou posterior para iOS.

  • Monitore seu aplicativo de backend com o ARMS Application Monitoring ou o Managed Service for OpenTelemetry. Para mais informações, consulte Integration guide.

  • Forneça um web service (HTTP) no aplicativo de backend capaz de analisar headers e correlacionar o contexto de trace.

Importante

Não há mais suporte para conexão de traces entre aplicativos de frontend e backend em regiões diferentes. Se seus aplicativos estiverem em regiões distintas, acesse o console do CloudMonitor 2.0 e instrumente o aplicativo de frontend na mesma região e workspace do aplicativo de backend.

Protocolos de trace suportados

  • SkyWalking: v3 (para agentes SkyWalking 8.x)

  • OpenTelemetry (W3C)

Procedimento

Adicionar domínios de service e ativar a propagação de trace

  1. Faça login no console do ARMS.

  2. No painel de navegação à esquerda, escolha Real User Monitoring > Application List e selecione sua região na barra de navegação superior.

  3. Clique em no nome do aplicativo e, em seguida, clique em Application Settings.

  4. Na seção Request Management, configure o domínio do service.

    Importante

    Não adicione domínios de services de terceiros como se fossem seus. Caso contrário, a propagação de trace pode falhar.

    Adicione o domínio do service, ative a opção Trace Propagation e selecione o protocolo de propagação correspondente ao service de backend.

    Nota

    Certifique-se de que o aplicativo de backend já esteja instrumentado para rastreamento no ARMS. Para mais informações, consulte Integration guide.

    Nome do formato

    Formato

    sw8 (Skywalking v3)

    sw8: {sample}-{trace-id}-{segment-id}-{0}-{service}-{instance}-{endpoint}-{peer}

    tracecontext

    traceparent : {version}-{trace-id}-{parent-id}-{trace-flags}

    tracestate: rum={version}&{appType}&{pid}&{sessionId}

  5. Clique em Confirm. O sistema envia automaticamente a configuração de propagação de trace para o aplicativo móvel.

    Importante
    • A aplicação da configuração no lado do cliente pode levar alguns minutos, dependendo do comportamento do usuário. Por padrão, o SDK busca a configuração uma vez durante a inicialização a frio do aplicativo e também a busca novamente se o aplicativo for reaberto após permanecer em segundo plano por mais de 30 segundos.

    • Embora aplicativos móveis não estejam sujeitos à política de compartilhamento de recursos de origem cruzada (CORS) de aplicações web, o gateway do servidor deve suportar a propagação de headers de solicitação para cada protocolo. Sem esse suporte, o service de backend não recebe os headers e a conexão entre os traces do RUM e do backend falha.

Verificar a configuração

Esta seção usa o protocolo de propagação SkyWalking v3 como exemplo para verificar a configuração.

Android

Use a ferramenta App Inspection no Android Studio para verificar a presença de informações do protocolo sw8 nos headers de solicitação de rede. A presença dessas informações confirma o sucesso da configuração.

iOS

Use a ferramenta Xcode Profile para verificar as informações do protocolo sw8 nos headers de solicitação de rede. Para isso, na barra de ferramentas do Xcode, escolha Product > Profile > Network.

Na interface do Instruments, selecione a faixa HTTP Traffic. Na lista suspensa no canto inferior esquerdo, mude para a visualização List: HTTP Transactions. Selecione a solicitação desejada e verifique se o header sw8 injetado aparece na seção Request Headers do painel de detalhes à direita.

Configurar a correlação de traces no backend

Para estabelecer um trace completo de ponta a ponta, configure também o aplicativo de backend. Os tipos de aplicativos de backend suportados e os métodos de instrumentação são:

Java application

Application Monitoring agent

O agente do ARMS Application Monitoring possui suporte nativo ao protocolo OpenTelemetry. Portanto, é possível correlacionar traces com o RUM sem configurações adicionais. No entanto, certifique-se dos seguintes pontos:

  • O agente do Application Monitoring deve ser da versão 2.x, 3.x ou 4.x. Recomendamos atualizar para a versão 4.x para garantir a melhor experiência.

  • Use um container web mainstream, como Tomcat, Jetty, WebLogic ou Undertow, além de um framework suportado, como SpringBoot ou SpringMVC. Para obter a lista completa de componentes e frameworks suportados, consulte Java components and frameworks supported by Application Monitoring.

Para instruções sobre como instalar o agente do Application Monitoring, consulte Monitor Java applications.

OpenTelemetry

Instrumente seu aplicativo com OpenTelemetry e relate dados ao ARMS (Managed Service for OpenTelemetry). Existem dois métodos disponíveis: instrumentação automática e instrumentação manual.

  • A instrumentação automática não exige configurações extras para correlacionar traces com o RUM, pois o OpenTelemetry suporta a maioria dos frameworks mainstream.

    Nota

    Para informações sobre os frameworks Java suportados pelo OpenTelemetry, consulte Report Java application data by using OpenTelemetry.

  • Na instrumentação manual, use o mecanismo de extensão do SDK do OpenTelemetry para correlacionar os traces. Esse processo envolve analisar o contexto de trace a partir dos headers traceparent e tracestate das solicitações de frontend. O código abaixo apresenta um exemplo para uma aplicação SpringBoot:

    1. Adicione as dependências do OpenTelemetry.

      <dependency>
        <groupId>io.opentelemetry</groupId>
        <artifactId>opentelemetry-api</artifactId>
      </dependency>
      <dependency>
        <groupId>io.opentelemetry</groupId>
        <artifactId>opentelemetry-sdk-trace</artifactId>
      </dependency>
      <dependency>
        <groupId>io.opentelemetry</groupId>
        <artifactId>opentelemetry-extension-annotations</artifactId>
        <version>1.18.0</version>
      </dependency>
      <dependency>
        <groupId>io.opentelemetry</groupId>
        <artifactId>opentelemetry-exporter-otlp</artifactId>
      </dependency>
      <dependency>
        <groupId>io.opentelemetry</groupId>
        <artifactId>opentelemetry-sdk</artifactId>
      </dependency>
      <dependency>
        <groupId>io.opentelemetry</groupId>
        <artifactId>opentelemetry-semconv</artifactId>
        <version>1.30.1-alpha</version>
      </dependency>
      <dependency>
        <groupId>io.opentelemetry</groupId>
        <artifactId>opentelemetry-sdk-extension-autoconfigure</artifactId>
        <version>1.34.1</version>
      </dependency>
      <dependency>
        <groupId>io.opentelemetry</groupId>
        <artifactId>opentelemetry-extension-incubator</artifactId>
        <version>1.35.0-alpha</version>
      </dependency>
    2. Adicione o propagador W3C durante a inicialização do OpenTelemetry.

      Resource resource = Resource.getDefault()
              .merge(Resource.create(Attributes.of(
                      ResourceAttributes.SERVICE_NAME, "otel-demo",
                      ResourceAttributes.HOST_NAME, "xxxx"
      )));
      
      SdkTracerProvider sdkTracerProvider = SdkTracerProvider.builder()
              .addSpanProcessor(BatchSpanProcessor.builder(OtlpHttpSpanExporter.builder()
                      .setEndpoint("Your Endpoint")
                      .addHeader("Authentication", "Your Token")
                      .build()).build())
              .setResource(resource)
              .build();
      
      openTelemetry = OpenTelemetrySdk.builder()
              .setTracerProvider(sdkTracerProvider)
              // Add the W3C propagator here.
              .setPropagators(ContextPropagators.create(
                      TextMapPropagator.composite(W3CTraceContextPropagator.getInstance(), W3CBaggagePropagator.getInstance()))
               ).buildAndRegisterGlobal();
      // An extended Tracer is required here.
      tracer = ExtendedTracer.create(openTelemetry.getTracer("com.example.tracer", "1.0.0"));
    3. Na interface de negócios, adicione o parâmetro de headers, analise o contexto de trace a partir do header da solicitação e defina o parent.

      // Add the request header parameter in the Controller to parse the trace context.
      @RequestMapping("/test")
      public String test(@RequestHeader Map<String, String> headers) {
          Span span = OpenTelemetrySupport.getTracer()
                  .spanBuilder("/test")
                  // Parse the parent span from the headers.
                  .setParentFrom(OpenTelemetrySupport.getContextPropagators(), headers)
                  .setSpanKind(SpanKind.SERVER)
                  .startSpan();
          try (Scope scope = span.makeCurrent()) {
              // do something
          } catch (Throwable t) {
              span.setStatus(StatusCode.ERROR, "handle parent span error");
          } finally {
              span.end();
          }
          return "success";
      }

SkyWalking

Para o procedimento completo de instrumentação, consulte Java Agent plugin.

Atualmente, o SkyWalking fornece apenas o Java Agent para instrumentação. Basta seguir as instruções no documento vinculado para correlacionar os traces do RUM e do backend.

Correspondência de protocolo: O protocolo sw8 (v3) configurado no lado do RUM corresponde ao agente SkyWalking 8.x.

Go application

OpenTelemetry

Para o procedimento completo de instrumentação, consulte Report Go application data by using OpenTelemetry.

Siga a documentação para instrumentar seu aplicativo. Em seguida, gere um span a partir do contexto da solicitação no handler de requisições HTTP para correlacioná-lo com o trace do RUM.

// Initialize the tracer.
tracer := otel.Tracer(common.TraceInstrumentationName)
// Generate a span from the request context.
handler := http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
    ctx := req.Context()
    span := trace.SpanFromContext(ctx)
    // do something
    w.Write([]byte("Hello World"))
})

SkyWalking

Para o procedimento completo de instrumentação, consulte Report Go application data by using SkyWalking.

Siga a documentação para instrumentar seu aplicativo. Recomendamos usar o método skywalking-go, que suporta frameworks web mainstream como Gin, go-restful, http, go-kratos v2, go-micro e go-resty. Isso permite correlacionar traces do RUM sem modificar o código.

Para analisar manualmente o contexto de trace a partir dos headers de solicitação HTTP, utilize o seguinte código:

// Extract context from the 'sw8' HTTP request header.
span, ctx, err := tracer.CreateEntrySpan(r.Context(), "/api/test", func(key string) (string, error) {
		return r.Header.Get(key), nil
})

Python application

OpenTelemetry

Para o procedimento completo de instrumentação, consulte Report Python application data by using OpenTelemetry.

Siga a documentação para instrumentar seu aplicativo. Depois, analise o contexto do span a partir dos headers de solicitação HTTP para correlacionar com o trace do RUM. Veja abaixo um exemplo de código:

// Initialize the tracer.
trace.set_tracer_provider(TracerProvider())
trace.get_tracer_provider().add_span_processor(BatchSpanProcessor(ConsoleSpanExporter()))

tracer = trace.get_tracer(__name__)

@app.route('/test')
def test():
    headers = dict(request.headers)

    // Parse the trace context from the headers.
    carrier ={'traceparent': headers['Traceparent'], 'tracestate': headers['Tracestate']}
    ctx = TraceContextTextMapPropagator().extract(carrier=carrier)

    with tracer.start_span("test", context=ctx):
        // do something
        return "success"

SkyWalking

Para o procedimento completo de instrumentação, consulte Report Python application data by using SkyWalking.

Siga a documentação para instrumentar seu aplicativo. Em seguida, analise o contexto do span a partir dos headers de solicitação HTTP para correlacionar com o trace do RUM. Confira o exemplo de código a seguir:

from skywalking import config, agent
from skywalking.trace.context import SpanContext, get_context
from skywalking.trace.carrier import CarrierItem

# Configure SkyWalking. Adjust parameters as needed.
config.init(agent_collector_backend_services='<endpoint>',
            agent_authentication='<auth-token>')

agent.start()

# Sample HTTP request handler that requires passing in HTTP request headers.
def handle_request(headers):
    # Extract trace information from the request headers.
    carrier_items = []
    for item in SpanContext.make_carrier():
        carrier_header = headers.get(item.key.lower())
        if carrier_header:
            carrier_items.append(CarrierItem(item.key, carrier_header))

    carrier = SpanContext.make_carrier(carrier_items)

    # Extract the trace context from the carrier.
    context = get_context().extract(carrier)
    
    # Create a new span to process the request.
    with get_context().new_entry_span(op='operation_name') as span:
        # Process the request here. The span is automatically submitted when finished.
        ...

# Simulate a received HTTP request header that includes sw8.
incoming_headers = {
    'sw8': '1-My40LjU=-MTY1MTcwNDI5OTk5OA==-xxxx-xx-x-x==',  # Sample value. Use the actual value from the request.
    # Other headers...
}

# Call the function to process the request.
handle_request(incoming_headers)

Visualize dados de trace de ponta a ponta

Após conectar os traces de frontend e backend, visualize a cadeia de chamadas para solicitações de frontend no console do ARMS RUM.

Clique em View Call Chain para visualizar a cadeia de chamadas completa e a topologia do aplicativo referente à solicitação. Assim, você diagnostica solicitações lentas ou com erros combinando os detalhes da solicitação do RUM com os dados de trace do backend.

O span de nível superior representa o span de entrada do RUM. A categorização desse span de entrada ocorre conforme o tipo de instrumentação do lado do cliente:

  • Web & H5: O nome do aplicativo é rum-browser e o prefixo do nome do span é "browser.request:".

  • Mini-programs: O nome do aplicativo é rum-miniapp e o prefixo do nome do span é "miniapp.request:".

  • Android: O nome do aplicativo é rum-android e o prefixo do nome do span é "android.request:".

  • iOS: O nome do aplicativo é rum-ios e o prefixo do nome do span é "ios.request:".

Também é possível usar o gráfico de topologia para visualizar os services upstream e downstream de toda a solicitação.