Guia de solução de problemas: Application Insights do Azure Monitor para Java
Este artigo fornece informações de solução de problemas para resolver problemas comuns que podem ocorrer quando você está instrumentando um aplicativo Java usando o agente Java para Application Insights. O Application Insights é um recurso do serviço de plataforma do Azure Monitor.
Verificar o arquivo de log de autodiagnóstico
Por padrão, o Application Insights Java 3.x produz um arquivo de log chamado applicationinsights.log no mesmo diretório que contém o arquivo applicationinsights-agent-3.2.11.jar .
Esse arquivo de log é o primeiro lugar para verificar se há dicas sobre quaisquer problemas que você possa estar enfrentando.
Se o Application Insights não gerar um arquivo de log, verifique se o aplicativo Java tem a permissão Gravar no diretório que contém o arquivo applicationinsights-agent-3.2.11.jar .
Se o Application Insights ainda não gerar um arquivo de log, verifique se há erros no stdout
log do aplicativo Java. Application Insights Java 3.x deve registrar quaisquer erros que o impeçam de registrar em seu local usual no stdout
log.
Solucionar problemas de conectividade
Os SDKs e agentes do Application Insights enviam telemetria para serem ingeridos como chamadas REST em nossos pontos de extremidade de ingestão. Para testar a conectividade do servidor Web ou do computador host do aplicativo com os pontos de extremidade do serviço de ingestão, use clientes REST brutos do PowerShell ou execute comandos curl. Confira Solucionar problemas de telemetria de aplicativo ausente no Application Insights do Azure Monitor.
Se o agente Java do Application Insights causar o problema de conectividade, considere as seguintes opções:
Verifique a cadeia de conexão para a configuração do Application Insights.
Use o Application Insights Java versão 3.4.6 ou uma versão posterior para verificar se o repositório de chaves Java contém um certificado necessário. Para fazer isso, habilite o recurso de autodiagnóstico no
TRACE
nível. Nos logs do Application Insights, você vê a seguinte entrada?TRACE c.m.applicationinsights.agent – Certificado raiz do Application Insights no repositório de chaves Java: false
Se você vir essa entrada, consulte Importar certificados SSL para importar um certificado raiz no armazenamento de chaves Java.
Se você usar a
-Djsse.enableSNIExtension=false
opção, tente executar o agente sem essa opção. No Application Insights Java versão 3.4.5, se você especificar-Djsse.enableSNIExtension=false
, a seguinte entrada de erro será exibida nos logs:WARN c.m.applicationinsights.agent - A propriedade do sistema -Djsse.enableSNIExtension=false é detectada. Se você tiver problemas de conexão com o Application Insights, remova-o.
Se nenhuma das opções anteriores for útil, você poderá usar ferramentas de solução de problemas.
Falha ao iniciar a máquina virtual Java (JVM)
Se a máquina virtual Java (JVM) não for iniciada, ela poderá retornar uma mensagem "Erro ao abrir o arquivo zip ou manifesto JAR ausente". Para solucionar esse problema, consulte a tabela a seguir.
Problema | Action |
---|---|
O arquivo Java (JAR) do agente não foi encontrado. | Certifique-se de especificar um caminho JAR do agente válido no argumento da -javaagent JVM. |
O arquivo JAR do agente pode ter sido corrompido durante a transferência de arquivos. | Tente baixar o arquivo JAR do agente novamente. |
Os aplicativos Tomcat Java levam vários minutos para iniciar
Se você habilitou o Application Insights para monitorar seu aplicativo Tomcat, pode haver um atraso de vários minutos no tempo necessário para iniciar o aplicativo. Esse atraso é causado porque o Tomcat tenta verificar os arquivos JAR do Application Insights durante a inicialização do aplicativo. Para acelerar a hora de início do aplicativo, você pode excluir os arquivos JAR do Application Insights da lista de arquivos verificados. Não é necessário verificar esses arquivos JAR.
Atualize do Application Insights Java 2.x SDK
Se você já estiver usando o Application Insights Java 2.x SDK em seu aplicativo, você pode continuar usando-o. O aplicativo Java 3.O X Agent detecta, captura e correlaciona qualquer telemetria personalizada que você envia por meio do 2.x SDK. Ele também evita a telemetria duplicada, suprimindo qualquer coleta automática que o 2.x SDK faz. Para obter mais informações, consulte Upgrade do Java 2.x SDK.
Atualizar do Application Insights Java 3.0 preview
Se você estiver atualizando do agente do Java 3.0 Preview, revise todas as opções de configuração com cuidado. A estrutura JSON é alterada na versão GA (disponibilidade geral) 3.0.
Essas alterações incluem:
O nome do arquivo de configuração mudou de ApplicationInsights.json para applicationinsights.json.
O nó
instrumentationSettings
não está mais presente. Todo o conteúdo eminstrumentationSettings
é movido para o nível raiz.Os nós de
preview
configuração, comosampling
,jmxMetrics
,instrumentation
, eheartbeat
são movidos para o nível raiz.
Alguns registros não são coletados automaticamente
O registro em log será capturado somente se atender aos seguintes critérios:
Ele atende ao nível configurado para a estrutura de log.
Ele atende ao nível configurado para o Application Insights.
Por exemplo, se a estrutura de log estiver configurada para registrar WARN
(e acima) do pacote e o com.example
Application Insights estiver configurado para capturar INFO
(e acima), o Application Insights capturará WARN
apenas (e acima) do com.example
pacote.
Para garantir que uma instrução de log específica atenda ao limite configurado das estruturas de log, verifique se ela aparece no log de aplicativo usual (no arquivo ou no console).
Observe também que, se um objeto de exceção for passado para o agente, a mensagem de log (e os detalhes do objeto de exceção) aparecerá no portal do Azure na exceptions
tabela em vez da traces
tabela.
Para ver as mensagens de log nas tabelas e exceptions
, traces
execute a seguinte consulta Logs (Kusto):
union traces, (exceptions | extend message = outerMessage)
| project timestamp, message, itemType
Para obter mais informações, consulte a configuração de log coletada automaticamente.
Importar certificados SSL
Esta seção ajuda você a solucionar problemas e possivelmente corrigir as exceções relacionadas aos certificados SSL (Secure Sockets Layer) ao usar o agente Java.
Existem dois caminhos diferentes para resolver esse problema:
- Se você estiver usando um armazenamento de chaves Java padrão
- Se você estiver usando um armazenamento de chaves Java personalizado
Se você não tiver certeza de qual caminho seguir, verifique se você tem o argumento da JVM, -Djavax.net.ssl.trustStore=...
.
Se você não tiver esse argumento JVM, provavelmente está usando o armazenamento de chaves Java padrão.
Se você tiver esse argumento JVM, provavelmente está usando um armazenamento de chaves personalizado e o argumento JVM aponta para seu armazenamento de chaves personalizado.
Se você estiver usando o armazenamento de chaves Java padrão
O armazenamento de chaves Java padrão normalmente já possui todos os certificados raiz da CA. No entanto, pode haver algumas exceções. Por exemplo, um certificado raiz diferente pode assinar o certificado do ponto de extremidade de ingestão. Recomendamos que você siga estas etapas para resolver esse problema:
Verifique se o certificado SSL que foi usado para assinar o ponto de extremidade do Application Insights já está presente no repositório de chaves padrão. Por padrão, os certificados de CA confiáveis são armazenados em $JAVA_HOME/jre/lib/security/cacerts. Para listar certificados em um armazenamento de chaves Java, use o seguinte comando:
keytool -list -v -keystore <path-to-keystore-file>
Você pode redirecionar a saída para um arquivo temporário para que seja fácil pesquisar mais tarde:
keytool -list -v -keystore $JAVA_HOME/jre/lib/security/cacerts > temp.txt
Depois de ter a lista de certificados, siga as etapas para baixar o certificado SSL que foi usado para assinar o ponto de extremidade do Application Insights.
Depois de baixar o certificado, gere um hash SHA-1 no certificado usando o seguinte comando:
keytool -printcert -v -file "<downloaded-ssl-certificate>.cer"
Copie o valor SHA-1 e verifique se esse valor está presente no arquivo temp.txt que você salvou anteriormente. Se você não conseguir encontrar o valor SHA-1 no arquivo temporário, o certificado SSL baixado estará ausente no armazenamento de chaves Java padrão.
Importe o certificado SSL para o armazenamento de chaves Java padrão usando o seguinte comando:
keytool -import -file "<certificate-file>" -alias "<some-meaningful-name>" -keystore "<path-to-cacerts-file>"
Neste exemplo, o comando é o seguinte:
keytool -import -file "<downloaded-ssl-certificate-file>" -alias "<some-meaningful-name>" -keystore $JAVA_HOME/jre/lib/security/cacerts
Se você estiver usando um armazenamento de chaves Java personalizado
Se você estiver usando um repositório de chaves Java personalizado, talvez seja necessário importar os certificados SSL para os pontos de extremidade do Application Insights para esse repositório de chaves. Recomendamos as duas etapas a seguir para resolver esse problema:
Siga estas etapas para baixar o certificado SSL do ponto de extremidade do Application Insights.
Execute o seguinte comando para importar o certificado SSL para o armazenamento de chaves Java customizado:
keytool -importcert -alias <your-ssl-certificate> -file "<your-downloaded-ssl-certificate-name>.cer" -keystore "<your-keystore-name>" -storepass "<your-keystore-password>" -noprompt
Etapas para baixar o certificado SSL
Observação
As seguintes instruções de download de certificado SSL foram validadas nos seguintes navegadores:
- Google Chrome
- Microsoft Edge
Abra o https://westeurope-5.in.applicationinsights.azure.com/api/ping endereço URL em um navegador da Web.
Na barra de endereços do navegador, selecione o ícone Exibir informações do site (um símbolo de cadeado ao lado do endereço).
Selecione A conexão é segura.
Selecione o ícone Mostrar certificado .
Na caixa de diálogo Visualizador de certificados , selecione a guia Detalhes .
Na lista Hierarquia de Certificados , selecione o certificado que você deseja baixar. (O certificado raiz da CA, o certificado intermediário e o certificado SSL leaf são mostrados.)
Selecione o botão Exportar .
Na caixa de diálogo Salvar como, navegue até o diretório no qual você deseja salvar o arquivo de certificado (.crt) e selecione Salvar.
Para sair da caixa de diálogo Visualizador de certificados , selecione o botão Fechar (X).
Aviso
Você precisará repetir essas etapas para obter o novo certificado antes que o certificado atual expire. Você pode encontrar as informações de expiração na guia Detalhes da caixa de diálogo Visualizador de certificados .
Depois de selecionar o certificado na lista Hierarquia de certificados , localize o nó Validade na lista Campos de certificado . Selecione Não Antes nesse nó e examine a data e a hora mostradas na caixa Valor do Campo. Esse carimbo de data/hora indica quando o novo certificado se torna válido. Da mesma forma, selecione Não depois no nó Validade para saber quando o novo certificado expira.
Entendendo o UnknownHostException
Se você vir essa exceção depois de atualizar para uma versão do agente Java posterior à 3.2.0, poderá corrigir a exceção atualizando sua rede para resolver o novo ponto de extremidade mostrado na exceção. O motivo da diferença entre as versões do Application Insights é que as versões posteriores à 3.2.0 apontam para o novo ponto de extremidade v2.1/track
de ingestão, em comparação com o v2/track
. O novo ponto de extremidade de ingestão redireciona você automaticamente para o ponto de extremidade de ingestão (novo ponto de extremidade mostrado na exceção) mais próximo do armazenamento do recurso do Application Insights.
Conjuntos de criptografia ausentes
Se o agente Java do Application Insights detectar que você não tem nenhum dos pacotes de criptografia compatíveis com os pontos de extremidade aos quais ele se conecta, o agente alertará você e fornecerá um link para os pacotes de criptografia ausentes.
Histórico sobre conjuntos de cifras
Os conjuntos de criptografia entram em ação antes que um aplicativo cliente e um servidor troquem informações por meio de uma conexão SSL ou TLS (Transport Layer Security). O aplicativo cliente inicia um handshake SSL. Parte desse processo envolve notificar o servidor sobre quais conjuntos de criptografia ele suporta. O servidor recebe essas informações e compara os conjuntos de criptografia suportados pelo aplicativo cliente com os algoritmos aos quais ele dá suporte. Se o servidor encontrar uma correspondência, ele notificará o aplicativo cliente e uma conexão segura será estabelecida. Se não encontrar uma correspondência, o servidor recusará a conexão.
Como determinar os conjuntos de criptografia do lado do cliente
Nesse caso, o cliente é a JVM na qual seu aplicativo instrumentado está sendo executado. A partir da versão 3.2.5, o Application Insights Java registra uma mensagem de aviso se os pacotes de criptografia ausentes puderem estar causando falhas de conexão com um dos pontos de extremidade de serviço.
Se você estiver usando uma versão anterior do Application Insights Java, compile e execute o seguinte programa Java para obter a lista de pacotes de criptografia com suporte em sua JVM:
import javax.net.ssl.SSLServerSocketFactory;
public class Ciphers {
public static void main(String[] args) {
SSLServerSocketFactory ssf = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
String[] defaultCiphers = ssf.getDefaultCipherSuites();
System.out.println("Default\tCipher");
for (int i = 0; i < defaultCiphers.length; ++i) {
System.out.print('*');
System.out.print('\t');
System.out.println(defaultCiphers[i]);
}
}
}
Os pontos de extremidade do Application Insights dão suporte aos seguintes pacotes de criptografia:
- TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
- TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
- TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
Como determinar conjuntos de criptografia do lado do servidor
Nesse caso, o lado do servidor é o ponto de extremidade de ingestão do Application Insights ou o ponto de extremidade de métricas ao vivo do Application Insights. Você pode usar uma ferramenta on-line, como SSLLABS , para determinar os conjuntos de criptografia esperados com base na URL do ponto de extremidade.
Como adicionar os conjuntos de criptografia ausentes
Se você estiver usando o Java 9 ou uma versão posterior, verifique se a JVM inclui o jdk.crypto.cryptoki
módulo na pasta jmods. Além disso, se você estiver criando um tempo de execução Java personalizado usando jlink
o , certifique-se de incluir o mesmo módulo.
Caso contrário, esses conjuntos de cifras já devem fazer parte das distribuições modernas do Java 8+. Recomendamos que você verifique a origem da distribuição Java instalada para investigar por que os provedores de segurança no arquivo de configuração java.security dessa distribuição Java diferem das distribuições Java padrão.
Tempo de inicialização lento no Application Insights
Java 8
O Java 8 tem um problema conhecido relacionado à verificação de assinatura do arquivo JAR de agentes Java. Esse problema pode aumentar o tempo de inicialização no Application Insights. Para corrigir esse problema, você pode aplicar uma das seguintes opções:
Se o aplicativo for baseado no Spring Boot, anexe programaticamente o agente Java do Application Insights à JVM.
Use o Java versão 11 ou posterior.
Java superior à versão 8
Para corrigir esse problema com o agente Java do Application Insights, tente um dos seguintes métodos:
- Use uma configuração do Azure com mais poder de CPU.
- Desabilite algumas instrumentações descritas em Suprimir telemetria autocollected específica.
- Experimente este recurso experimental: Melhoria do tempo de inicialização para um número limitado de núcleos de CPU. Se você tiver algum problema ao usar esse recurso, envie-nos um feedback.
Você também pode experimentar as soluções de monitoramento para Java nativo também aplicáveis a um aplicativo baseado em JVM:
- Com o Spring Boot, a distribuição da Microsoft do iniciador do OpenTelemetry.
- Com o Quarkus, o exportador do Quarkus Opentelemetry para Microsoft Azure.
Aviso de isenção de responsabilidade para informações de terceiros
Os produtos de terceiros mencionados neste artigo são produzidos por empresas independentes da Microsoft. A Microsoft não oferece nenhuma garantia, implícita ou não, do desempenho ou da confiabilidade desses produtos.
Entre em contato conosco para obter ajuda
Se você tiver dúvidas ou precisar de ajuda, crie uma solicitação de suporte ou peça ajuda à comunidade de suporte do Azure. Você também pode enviar comentários sobre o produto para a comunidade de comentários do Azure.