Agente de instrumentação automática do AWS X-Ray para Java - AWS X-Ray

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Agente de instrumentação automática do AWS X-Ray para Java

O agente de AWS X-Ray instrumentação automática para Java é uma solução de rastreamento que instrumenta seus aplicativos web Java com o mínimo esforço de desenvolvimento. O agente permite o rastreamento de aplicações baseadas em servlets e de todas as solicitações subsequentes do agente feitas com frameworks e bibliotecas compatíveis. Isso inclui HTTP solicitações, AWS SDK solicitações e SQL consultas downstream do Apache feitas usando um driver. JDBC O agente propaga o contexto do X-Ray, incluindo todos os segmentos e subsegmentos ativos, em todos os threads. Todas as configurações e versatilidade do X-Ray ainda SDK estão disponíveis com o agente Java. Os padrões adequados foram escolhidos para garantir que o agente trabalhe com o mínimo esforço.

A solução de agente do X-Ray é mais adequada para servidores de aplicações web Java baseadas em servlets e de solicitação e resposta. Se seu aplicativo usa uma estrutura assíncrona ou não está bem modelado como um serviço de solicitação-resposta, talvez você queira considerar a instrumentação manual com o. SDK 

O agente X-Ray é construído usando o kit de ferramentas Distributed Systems Comprehension, ou D. iSCo D iSCo é uma estrutura de código aberto para criar agentes Java que podem ser usados em sistemas distribuídos. Embora não seja necessário entender D iSCo para usar o agente X-Ray, você pode aprender mais sobre o projeto visitando sua página inicial em GitHub. O agente do X-Ray também é totalmente de código aberto. Para ver o código-fonte, fazer contribuições ou levantar questões sobre o agente, visite seu repositório em GitHub.

Aplicação de exemplo

A aplicação eb-java-scorekeepda amostra é adaptada para ser instrumentada com o agente X-Ray. Essa ramificação não contém filtro de servlet ou configuração de gravador, pois essas funções são executadas pelo agente. Para executar a aplicação localmente ou usando recursos da AWS , siga as etapas no arquivo readme da aplicação de exemplo. As instruções sobre como usar a aplicação de exemplo para gerar rastreamentos do X-Ray estão no tutorial da aplicação de exemplo.

Conceitos básicos

Para começar a usar o agente do Java de instrumentação automática do X-Ray em sua aplicação, siga as etapas abaixo.

  1. Execute o daemon do X-Ray no seu ambiente. Para ter mais informações, consulte AWS X-Ray daemon.

  2. Baixe a distribuição mais recente do agente. Descompacte o arquivo e anote a respectiva localização no sistema de arquivos. O conteúdo deve ser semelhante ao apresentado abaixo.

    disco 
    ├── disco-java-agent.jar 
    └── disco-plugins 
        ├── aws-xray-agent-plugin.jar 
        ├── disco-java-agent-aws-plugin.jar 
        ├── disco-java-agent-sql-plugin.jar 
        └── disco-java-agent-web-plugin.jar
  3. Modifique os JVM argumentos do seu aplicativo para incluir o seguinte, que habilita o agente. O argumento -javaagent deve ser colocado antes do argumento -jar, se aplicável. O processo para modificar JVM argumentos varia de acordo com as ferramentas e estruturas que você usa para iniciar seu servidor Java. Consulte a documentação do framework do servidor para obter orientação específica.

    -javaagent:/<path-to-disco>/disco-java-agent.jar=pluginPath=/<path-to-disco>/disco-plugins
  4. Para especificar como o nome da aplicação aparece no console do X-Ray, defina a variável de ambiente AWS_XRAY_TRACING_NAME ou a propriedade do sistema com.amazonaws.xray.strategy.tracingName. Se nenhum nome for fornecido, será usado um nome padrão.

  5. Reinicie o servidor ou contêiner. As solicitações recebidas e as chamadas subsequentes agora são rastreadas. Se você não vir os resultados esperados, consulte Solução de problemas.

Configuração

O agente X-Ray é configurado por um JSON arquivo externo fornecido pelo usuário. Por padrão, esse arquivo está na raiz do caminho de classe do usuário (por exemplo, no diretório resources) chamado xray-agent.json. Você pode configurar um local personalizado para o arquivo de configuração definindo a propriedade do sistema com.amazonaws.xray.configFile como o caminho absoluto do sistema de arquivos do arquivo de configuração.

Um exemplo de arquivo de configuração é mostrado a seguir.

{         "serviceName": "XRayInstrumentedService",     "contextMissingStrategy": "LOG_ERROR",     "daemonAddress": "127.0.0.1:2000",     "tracingEnabled": true,     "samplingStrategy": "CENTRAL",         "traceIdInjectionPrefix": "prefix",         "samplingRulesManifest": "/path/to/manifest",         "awsServiceHandlerManifest": "/path/to/manifest",         "awsSdkVersion": 2,         "maxStackTraceLength": 50,         "streamingThreshold": 100,         "traceIdInjection": true,         "pluginsEnabled": true,         "collectSqlQueries": false }

Especificação de configuração

A tabela a seguir descreve valores válidos para cada propriedade. Os nomes das propriedades diferenciam maiúsculas de minúsculas, mas as chaves não. Para propriedades que podem ser substituídas por variáveis de ambiente e propriedades do sistema, a ordem de prioridade é sempre variável de ambiente, depois propriedade do sistema e, em seguida, arquivo de configuração. Para obter informações sobre propriedades que você pode substituir, consulteVariáveis de ambiente. Todos os campos são opcionais.

Nome da propriedade Tipo Valores válidos Descrição Variável de ambiente Propriedades do sistema Padrão

serviceName

String

Qualquer string

O nome do serviço instrumentado, conforme ele aparecerá no console do X-Ray.

AWS_XRAY_TRACING_NAME

com.amazonaws.xray.strategy. tracingName

XRayInstrumentedService

contextMissingStrategy

String

LOG_ERROR, IGNORE_ERROR

A ação executada pelo agente quando ele tenta usar o contexto do segmento do X-Ray e não há nenhum presente.

AWS_XRAY_CONTEXT_MISSING

com.amazonaws.xray.strategy. contextMissingStrategy

LOG_ERROR

daemonAddress

String

Endereço IP e porta formatados ou lista TCP de UDP endereços

O endereço que o agente usa para se comunicar com o daemon do X-Ray.

AWS_XRAY_DAEMON_ADDRESS

com.amazonaws.xray.emitter. daemonAddress

127.0.0. 1:2000

tracingEnabled

Booleano

True, False

Permite a instrumentação pelo agente do X-Ray.

AWS_XRAY_TRACING_ENABLED

com.amazonaws.xray. tracingEnabled

TRUE

samplingStrategy

String

CENTRAL, LOCAL, NONE, ALL

A estratégia de amostragem usada pelo agente. ALLcaptura todas as solicitações, não NONE captura nenhuma solicitação. Consulte as regras de amostragem.

N/D

N/D

CENTRAL

traceIdInjectionPrefixo

String

Qualquer string

Inclui o prefixo fornecido antes do rastreamento injetado IDs nos registros.

N/D

N/D

None (empty string)

samplingRulesManifest

String

Um caminho de arquivo absoluto

O caminho para um arquivo de regras de amostragem personalizado a ser usado como fonte de regras de amostragem para a estratégia de amostragem local ou as regras de fallback para a estratégia central.

N/D

N/D

DefaultSamplingRules.json

awsServiceHandlermanifesto

String

Um caminho de arquivo absoluto

O caminho para uma lista de permissões de parâmetros personalizados, que captura informações adicionais dos AWS SDK clientes.

N/D

N/D

DefaultOperationParameterWhitelist.json

awsSdkVersion

Inteiro

1, 2

Versão do AWS SDKpara Java que você está usando. Ignorado se awsServiceHandlerManifest também não estiver definido.

N/D

N/D

2

maxStackTraceComprimento

Inteiro

Números inteiros não negativos

O máximo de linhas de um rastreamento de pilha a serem registradas em um rastreamento.

N/D

N/D

50

streamingThreshold

Inteiro

Números inteiros não negativos

Depois que pelo menos tantos subsegmentos são fechados, eles são transmitidos para o daemon out-of-band para evitar que os pedaços sejam muito grandes.

N/D

N/D

100

traceIdInjection

Booleano

True, False

Permite a injeção de ID de rastreamento do X-Ray nos logs se as dependências e a configuração descritas na configuração de registro em log também forem adicionadas. Caso contrário, não faz nada.

N/D

N/D

TRUE

pluginsEnabled

Booleano

True, False

Ativa plug-ins que registram metadados sobre os AWS ambientes em que você está operando. Consulte Plug-ins.

N/D

N/D

TRUE

collectSqlQueries

Booleano

True, False

Registra cadeias de caracteres de SQL consulta em SQL subsegmentos com base no melhor esforço.

N/D

N/D

FALSE

contextPropagation

Booleano

True, False

Se verdadeiro, propaga automaticamente o contexto do X-Ray entre os segmentos. Caso contrário, usa Thread Local para armazenar contexto, e a propagação manual entre threads é necessária.

N/D

N/D

TRUE

Configuração de registro em log

O nível de log do agente X-Ray pode ser configurado da mesma forma que o X-Ray SDK para Java. Consulte Registro em log para obter mais informações sobre como configurar o registro em log com o X-Ray SDK for Java.

Instrumentação manual

Se você quiser realizar instrumentação manual além da instrumentação automática do agente, adicione o X-Ray SDK como uma dependência ao seu projeto. Observe que os filtros SDK de servlet personalizados mencionados em Rastreando solicitações de entrada não são compatíveis com o agente X-Ray.

nota

Você deve usar a versão mais recente do X-Ray SDK para realizar a instrumentação manual e, ao mesmo tempo, usar o agente.

Se você estiver trabalhando em um projeto Maven, adicione as dependências a seguir ao arquivo pom.xml.

<dependencies>   <dependency>     <groupId>com.amazonaws</groupId>     <artifactId>aws-xray-recorder-sdk-core</artifactId>     <version>2.11.0</version>   </dependency>   </dependencies>

Se você estiver trabalhando em um projeto Gradle, adicione as dependências a seguir ao arquivo build.gradle.

implementation 'com.amazonaws:aws-xray-recorder-sdk-core:2.11.0'

Você pode adicionar subsegmentos personalizados, além de anotações, metadados e usuário IDs enquanto usa o agente, assim como faria com o normal. SDK Como o agente propaga automaticamente o contexto entre os threads, nenhuma solução alternativa para propagar o contexto deve ser necessária ao trabalhar com aplicações de vários threads.

Solução de problemas

Como o agente oferece instrumentação totalmente automática, pode ser difícil identificar a causa raiz quando você está enfrentando problemas. Se o agente do X-Ray não estiver funcionando conforme o esperado, analise os problemas e soluções a seguir. O agente X-Ray e SDK use o Jakarta Commons Logging ()JCL. Para ver a saída do registro, certifique-se de que uma ponte conectada JCL ao seu back-end de registro esteja no caminho de classe, como no exemplo a seguir: ou. log4j-jcl jcl-over-slf4j

Problema: Eu habilitei o agente do Java na aplicação, mas não vejo nada no console X-Ray

O daemon do X-Ray está sendo executado na mesma máquina?

Caso contrário, consulte a documentação do daemon do X-Ray para configurá-lo.

Nos logs da aplicação, você vê uma mensagem como “Inicializando o gravador do agente do X-Ray”?

Se você adicionou corretamente o agente ao seu aplicativo, essa mensagem será registrada no INFO nível quando o aplicativo for iniciado, antes de começar a receber solicitações. Se essa mensagem não estiver ali, isso significa que o agente do Java não está sendo executado com seu processo Java. Confirme se você seguiu todas as etapas de configuração corretamente, sem erros de digitação.

Nos registros do seu aplicativo, você vê várias mensagens de erro dizendo algo como “Suprimindo a exceção ausente do AWS X-Ray contexto”?

Esses erros ocorrem porque o agente está tentando instrumentar solicitações posteriores, como AWS SDK solicitações ou SQL consultas, mas não conseguiu criar automaticamente um segmento. Se você observar muitos desses erros, o agente pode não ser a melhor ferramenta para seu caso de uso e talvez você queira considerar a instrumentação manual com o SDK X-Ray. Como alternativa, você pode ativar os registros de SDK depuração do X-Ray para ver o rastreamento da pilha de onde as exceções sem contexto estão ocorrendo. Você pode agrupar essas partes do código com segmentos personalizados, o que deve resolver esses erros. Para ver um exemplo de empacotamento de solicitações subsequentes com segmentos personalizados, consulte o código de exemplo em Instrumentar código de inicialização.

Problema: Alguns dos segmentos que eu espero não aparecem no console do X-Ray

Sua aplicação usa vários threads?

Se alguns segmentos que você espera que sejam criados não estiverem aparecendo no console, os threads em segundo plano na aplicação podem ser a causa. Se seu aplicativo executa tarefas usando threads em segundo plano que são “disparar e esquecer”, como fazer uma chamada única para uma função Lambda com AWS SDK o. ou pesquisar HTTP algum endpoint periodicamente, isso pode confundir o agente enquanto ele propaga o contexto entre os encadeamentos. Para verificar se esse é o seu problema, habilite os registros de SDK depuração do X-Ray e verifique se há mensagens como: Não está emitindo um segmento chamado < NAME >, pois ele gera subsegmentos em andamento. Para contornar isso, você pode tentar unir os threads em segundo plano antes que o servidor retorne para garantir que todo o trabalho realizado neles seja registrado. Ou você pode definir a configuração contextPropagation do agente como false para desabilitar a propagação de contexto em threads em segundo plano. Se você fizer isso, precisará instrumentar manualmente esses threads com segmentos personalizados ou ignorar as exceções de contexto ausente que eles produzem.

Você configurou regras de amostragem?

Se segmentos aparentemente aleatórios ou inesperados estiverem aparecendo no console do X-Ray, ou os segmentos que você espera que estejam no console não estiverem aparecendo, você pode estar enfrentando um problema de amostragem. O agente do X-Ray aplica amostragem centralizada a todos os segmentos que ele cria, usando as regras do console do X-Ray. A regra de amostragem padrão é 1 segmento por segundo, mais 5% dos segmentos posteriores. Isso significa que os segmentos criados rapidamente com o agente podem não ser amostrados. Para resolver isso, você deve criar regras de amostragem personalizadas no console do X-Ray que tirem amostras adequadas dos segmentos desejados. Para obter mais informações, consulte Amostragem.