AWS X-Ray SDK para Java - AWS X-Ray

AWS X-Ray SDK para Java

O X-Ray SDK para Java é um conjunto de bibliotecas para aplicações Java que fornece classes e métodos para gerar e enviar dados de rastreamento ao daemon do X-Ray. Os dados de rastreamento incluem informações sobre as solicitações HTTP de entrada atendidas pela aplicação e as chamadas que a aplicação faz para serviços subsequentes usando o SDK da AWS, clientes HTTP ou um conector de banco de dados SQL. Você também pode criar segmentos manualmente e adicionar informações de depuração em anotações e metadados.

O X-Ray SDK para Java é um projeto de código aberto. Você pode acompanhar o projeto, além de enviar problemas e puxar solicitações no GitHub: github.com/aws/aws-xray-sdk-java

Comece adicionando AWSXRayServletFilter como um filtro de servlet para rastrear as solicitações de entrada. Um filtro de servlet cria um segmento. Embora o segmento esteja aberto, você pode usar os métodos do cliente do SDK para adicionar informações ao segmento e criar subsegmentos para rastrear as chamadas subsequentes. O SDK também registra automaticamente exceções que seu aplicativo lança enquanto o segmento está aberto.

A partir da versão 1.3, você pode instrumentar seu aplicativo usando a programação orientada a aspectos (AOP) no Spring. Isso significa que você pode instrumentar a aplicação enquanto ela está sendo executada na AWS sem adicionar nenhum código no runtime da aplicação.

Em seguida, use o X-Ray SDK para Java para instrumentar clientes do AWS SDK for Java incluindo o submódulo Instrumentor do SDK na configuração da compilação. Sempre que você faz uma chamada para um recurso ou AWS service (Serviço da AWS) subsequente com um cliente instrumentado, o SDK registra informações sobre a chamada em um subsegmento. Os Serviços da AWS e os recursos que você acessa dentro dos serviços aparecem como nós subsequentes no mapa de rastreamento para ajudar a identificar erros e problemas de controle de utilização em conexões específicas.

Se você não deseja instrumentar todas as chamadas subsequentes para Serviços da AWS, pode sair do submódulo Instrumentor e escolher quais clientes instrumentar. Instrumente clientes individuais adicionando um TracingHandler a um cliente de serviço de SDK da AWS.

Outros submódulos do X-Ray SDK para Java oferecem instrumentação para as chamadas subsequentes para APIs da web HTTP e bancos de dados SQL. Você pode usar as versões HTTPClient e HTTPClientBuilder do X-Ray SDK para Java no submódulo Apache HTTP para instrumentar clientes do Apache HTTP. Para instrumentar consultas SQL, adicione o interceptor do SDK para sua fonte de dados.

Depois que você começar a usar o SDK, personalize seu comportamento configurando o gravador e o filtro de servlet. Você pode adicionar plug-ins para registrar dados sobre os recursos de computação que executam sua aplicação, personalizar o comportamento de amostragem, estipulando regras de amostragem, e definir o nível de log para ver mais ou menos informações do SDK nos logs da aplicação.

Registre informações adicionais sobre as solicitações e o trabalho que o a aplicação faz em anotações e metadados. Anotações são simples pares de chave-valor que são indexados para serem usados com expressões de filtro para que você possa pesquisar rastreamentos que contêm dados específicos. As entradas de metadados são menos restritivas e podem registrar matrizes e objetos inteiros: tudo o que pode ser serializado em JSON.

Anotações e metadados

Anotações e metadados são textos arbitrários que você adiciona aos segmentos com o X-Ray SDK. As anotações são indexadas para serem usadas com expressões de filtro. Os metadados não são indexados, mas podem ser visualizados no segmento bruto com o console ou a API do X-Ray. Qualquer pessoa à qual você conceder acesso de leitura ao X-Ray poderá visualizar esses dados.

Quando você tem uma grande quantidade de clientes instrumentados em seu código, um único segmento de solicitação pode conter muitos subsegmentos, um para cada chamada feita com um cliente instrumentado. Você pode organizar e agrupar subsegmentos integrando chamadas de clientes em subsegmentos personalizados. Você pode criar um subsegmento personalizado para uma função inteira ou qualquer seção de código e registrar metadados e anotações no subsegmento em vez de gravar tudo no segmento principal.

Submódulos

Você pode baixar o X-Ray SDK para Java do Maven. O X-Ray SDK para Java é dividido em submódulos por caso de uso, com uma lista de materiais para gerenciamento de versões:

Se você usar o Maven ou o Gradle para criar sua aplicação, adicione o X-Ray SDK para Java à configuração de compilação.

Para documentação de referência das classes e métodos do SDK, consulte Referência de API do AWS X-Ray SDK para Java.

Requisitos

O X-Ray SDK para Java requer o Java 8 ou posterior, a API Servlet 3, o SDK da AWS e Jackson.

O SDK depende das seguintes bibliotecas para compilação e tempo de execução:

  • AWS SDK para Java versão 1.11.398 ou posterior

  • API Servlet 3.1.0

Essas dependências são declaradas no arquivo pom.xml do SDK e serão incluídas automaticamente se você criar usando Maven ou Gradle.

Se você usar uma biblioteca que esteja incluída no X-Ray SDK para Java, deverá usar a versão incluída. Por exemplo, se você já usa Jackson em tempo de execução e inclui arquivos JAR em sua implantação para essa dependência, deverá remover esses arquivos JAR porque o SDK JAR inclui suas próprias versões de bibliotecas Jackson.

Gerenciar dependências

O SDK para Java do X-Ray para Java está disponível no Maven:

  • Grupo: com.amazonaws

  • Artefato: aws-xray-recorder-sdk-bom

  • Versão: 2.11.0

Se você usar o Maven para criar seu aplicativo, adicione o SDK como uma dependência no arquivo pom.xml.

exemplo pom.xml: dependências
<dependencyManagement> <dependencies> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-xray-recorder-sdk-bom</artifactId> <version>2.11.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-xray-recorder-sdk-core</artifactId> </dependency> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-xray-recorder-sdk-apache-http</artifactId> </dependency> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-xray-recorder-sdk-aws-sdk</artifactId> </dependency> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-xray-recorder-sdk-aws-sdk-instrumentor</artifactId> </dependency> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-xray-recorder-sdk-sql-postgres</artifactId> </dependency> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-xray-recorder-sdk-sql-mysql</artifactId> </dependency> </dependencies>

Para Gradle, adicione o SDK como uma dependência de tempo de compilação ao arquivo build.gradle.

exemplo build.gradle: dependências
dependencies { compile("org.springframework.boot:spring-boot-starter-web") testCompile("org.springframework.boot:spring-boot-starter-test") compile("com.amazonaws:aws-java-sdk-dynamodb") compile("com.amazonaws:aws-xray-recorder-sdk-core") compile("com.amazonaws:aws-xray-recorder-sdk-aws-sdk") compile("com.amazonaws:aws-xray-recorder-sdk-aws-sdk-instrumentor") compile("com.amazonaws:aws-xray-recorder-sdk-apache-http") compile("com.amazonaws:aws-xray-recorder-sdk-sql-postgres") compile("com.amazonaws:aws-xray-recorder-sdk-sql-mysql") testCompile("junit:junit:4.11") } dependencyManagement { imports { mavenBom('com.amazonaws:aws-java-sdk-bom:1.11.39') mavenBom('com.amazonaws:aws-xray-recorder-sdk-bom:2.11.0') } }

Se você usar o Elastic Beanstalk para implantar a aplicação, poderá usar o Maven ou o Gradle para criar na instância toda vez que implantar, em vez de criar e carregar um grande arquivo que inclui todas as suas dependências. Consulte o aplicativo de amostra para obter um exemplo que usa Gradle.

Métricas do AWS X-Ray do X-Ray SDK para Java

Este tópico descreve o namespace, as métricas e as dimensões do AWS X-Ray. Você pode usar o X-Ray SDK para Java para publicar métricas sem amostragem do Amazon CloudWatch usando os segmentos do X-Ray coletados. Essas métricas são derivadas da hora de início e término do segmento e dos sinalizadores de status de erro, falha e limitação. Use essas métricas de rastreamento para expor novas tentativas e problemas de dependência dentro de subsegmentos.

O CloudWatch é um repositório de métricas. Uma métrica é um conceito fundamental no CloudWatch e representa um conjunto de pontos de dados ordenados por tempo. Você (ou os Serviços da AWS) publica pontos de dados de métricas no CloudWatch e recupera estatísticas sobre os pontos de dados como uma série ordenada de dados de séries temporais.

As métricas são definidas exclusivamente por um nome, um namespace e uma ou mais dimensões. Cada ponto de dados tem um timestamp e, opcionalmente, uma unidade de medida. Quando você solicita estatísticas, o fluxo de dados apresentado é identificado pelo namespace, pelo nome da métrica e pela dimensão.

Para obter mais informações sobre o CloudWatch, consulte o Guia do usuário do Amazon CloudWatch.

Métricas do CloudWatch para o X-Ray

O namespace ServiceMetrics/SDK inclui as métricas a seguir.

Métrica Estatísticas disponíveis Descrição Unidades

Latency

Média, Mínimo Máximo, Contagem

A diferença entre a hora de início e de término. A média, o mínimo e o máximo descrevem a latência operacional. A contagem descreve a contagem de chamadas.

Milissegundos

ErrorRate

Média, Soma

A taxa de solicitações que falharam com um código de status 4xx Client Error, resultando em um erro.

Percentual

FaultRate

Média, Soma

A taxa de rastreamentos que falharam com um código de status 5xx Server Error, resultando em uma falha.

Percentual

ThrottleRate

Média, Soma

A taxa de rastreamentos limitados que retornam um código de status 429. Este é um subconjunto da métrica ErrorRate.

Percentual

OkRate

Média, Soma

A taxa de solicitações rastreadas que resultam em um código de status OK.

Percentual

Dimensões do CloudWatch para o X-Ray

Use as dimensões na tabela a seguir para refinar as métricas retornadas para aplicações Java instrumentadas do X-Ray.

Dimensão Descrição

ServiceType

O tipo do serviço, por exemplo, AWS::EC2::Instance ou NONE, se não for conhecido.

ServiceName

O nome canônico do serviço.

Habilitar métricas do CloudWatch para o X-Ray

Use o procedimento a seguir para habilitar métricas de rastreamento na aplicação Java instrumentada.

Para configurar métricas de rastreamento
  1. Adicione o pacote aws-xray-recorder-sdk-metrics como uma dependência do Apache Maven. Para obter mais informações, consulte Submódulos do X-Ray SDK para Java.

  2. Ative um novo MetricsSegmentListener() como parte da compilação global de gravador.

    exemplo src/com/myapp/web/Startup.java
    import com.amazonaws.xray.AWSXRay; import com.amazonaws.xray.AWSXRayRecorderBuilder; import com.amazonaws.xray.plugins.EC2Plugin; import com.amazonaws.xray.plugins.ElasticBeanstalkPlugin; import com.amazonaws.xray.strategy.sampling.LocalizedSamplingStrategy; @Configuration public class WebConfig { ... static { AWSXRayRecorderBuilder builder = AWSXRayRecorderBuilder .standard() .withPlugin(new EC2Plugin()) .withPlugin(new ElasticBeanstalkPlugin()) .withSegmentListener(new MetricsSegmentListener()); URL ruleFile = WebConfig.class.getResource("/sampling-rules.json"); builder.withSamplingStrategy(new LocalizedSamplingStrategy(ruleFile)); AWSXRay.setGlobalRecorder(builder.build()); } }
  3. Implante o agente do CloudWatch para coletar métricas usando o Amazon Elastic Compute Cloud (Amazon EC2), Amazon Elastic Container Service (Amazon ECS) ou Amazon Elastic Kubernetes Service (Amazon EKS):

  4. Configure o SDK para se comunicar com o agente do CloudWatch. Por padrão, o SDK se comunica com o agente do CloudWatch no endereço 127.0.0.1. É possível configurar endereços alternativos definindo a variável de ambiente ou a propriedade do Java como address:port.

    exemplo Variável de ambiente
    AWS_XRAY_METRICS_DAEMON_ADDRESS=address:port
    exemplo Propriedade do Java
    com.amazonaws.xray.metrics.daemonAddress=address:port
Para validar a configuração
  1. Faça login no AWS Management Console e abra o console do CloudWatch em https://console.aws.amazon.com/cloudwatch/.

  2. Abra a guia Métricas para observar o influxo de suas métricas.

  3. (Opcional) No console do CloudWatch, na guia Logs, abra o grupo de logs ServiceMetricsSDK. Procure um fluxo de log que corresponda às métricas do host e confirme as mensagens de log.