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
Aplicação de exemplo
A aplicação eb-java-scorekeep
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.
-
Execute o daemon do X-Ray no seu ambiente. Para ter mais informações, consulte AWS X-Ray daemon.
-
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
-
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
-
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 sistemacom.amazonaws.xray.strategy.tracingName
. Se nenhum nome for fornecido, será usado um nome padrão. -
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 |
|
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 |
|
awsSdkVersion |
Inteiro |
1, 2 |
Versão do AWS SDKpara Java que você está usando. Ignorado se |
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.