Guia de solução de problemas: Azure Monitor Application Insights para Java

Este artigo fornece informações de solução de problemas para resolve 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 auto-diagnóstico

Por padrã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 marcar para obter dicas sobre quaisquer problemas que você possa estar enfrentando.

Se o Application Insights não gerar um arquivo de log, marcar para garantir que seu aplicativo Java tenha a permissão Write para o 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, marcar o stdout log do aplicativo Java para obter erros. Java 3 do Application Insights. x deve registrar todos os erros que o impeçam de fazer logon em seu local habitual no stdout log.

Solucionar problemas de conectividade

SDKs e agentes do Application Insights enviam telemetria para serem ingeridas como chamadas REST em nossos pontos de extremidade de ingestão. Para testar a conectividade do servidor Web ou do computador host do aplicativo para os pontos de extremidade do serviço de ingestão, use clientes REST brutos do PowerShell ou execute comandos curl. Consulte Solucionar problemas de telemetria de aplicativo ausente no Azure Monitor Application Insights.

Se o agente Java do Application Insights causar o problema de conectividade, considere as seguintes opções:

  • Verifique o 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 armazenamento de chaves Java contém um certificado necessário. Para fazer isso, habilite o recurso de auto-diagnóstico no TRACE nível. Nos logs do Application Insights, você vê a entrada a seguir?

    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 repositório de chaves Java.

  • Se você usar a opção -Djsse.enableSNIExtension=false , 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 System -Djsse.enableSNIExtension=false é detectada. Se você tiver problemas de conexão com o Application Insights, remova isso.

  • Se nenhuma das opções anteriores for útil, você poderá usar ferramentas de solução de problemas.

A JVM (máquina virtual Java) não é iniciada

Se a JVM (máquina virtual Java) não for iniciada, ela poderá retornar uma mensagem "Arquivo zip de abertura de erro ou manifesto JAR ausente". Para solucionar esse problema, consulte a tabela a seguir.

Problema Ação
O arquivo JAR (arquivo Java) do agente não foi encontrado. Certifique-se de especificar um caminho JAR de agente válido no -javaagent argumento JVM.
O arquivo JAR do agente pode ter sido corrompido durante a transferência de arquivo. Tente baixar o arquivo JAR do agente novamente.

Os aplicativos Java tomcat levam vários minutos para começar

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 examinar 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. A verificação desses arquivos JAR não é necessária.

Atualize do Java 2 do Application Insights. x SDK

Se você já estiver usando o Java 2 do Application Insights. x SDK em seu aplicativo, você pode continuar usando-o. O Java 3 do Application Insights. x agent detecta, captura e correlaciona qualquer telemetria personalizada que você envia através do 2. x SDK. Ele também impede a telemetria duplicada suprimindo qualquer coleção automática que o 2. x SDK faz. Para obter mais informações, confira Atualizar do Java 2.x SDK.

Atualização da versão prévia do Application Insights Java 3.0

Se você estiver atualizando do agente do Java 3.0 Preview, examine todas as opções de configuração cuidadosamente. A estrutura JSON é alterada na versão ga (disponibilidade geral) 3.0.

Essas alterações incluem:

  • O nome do arquivo de configuração foi alterado de ApplicationInsights.json para applicationinsights.json.

  • O instrumentationSettings nó não está mais presente. Todo o conteúdo em instrumentationSettings é movido para o nível raiz.

  • Nós de configuração, como sampling, jmxMetrics, instrumentatione heartbeat são movidos para o preview nível raiz.

Alguns logs não são coletados automaticamente

O registro em log só será capturado 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 sua estrutura de log estiver configurada para fazer log WARN (e acima) do pacote e o com.example Application Insights estiver configurado para capturar INFO (e acima), o Application Insights só capturará WARN (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 em seu log de aplicativo habitual (no arquivo ou console).

Observe também que, se um objeto de exceção for passado para o logger, a mensagem de log (e detalhes do objeto de exceção) será exibida no portal do Azure na exceptions tabela em vez da traces tabela. Para ver as mensagens de log nas traces tabelas e exceptions nas tabelas, 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 coletado 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) quando você usa o agente Java.

Há dois caminhos diferentes para resolver esse problema:

  • Se você estiver usando um repositório de chaves Java padrão
  • Se você estiver usando um repositório de chaves Java personalizado

Se você não tiver certeza de qual caminho seguir, marcar para ver se você tem o argumento JVM, -Djavax.net.ssl.trustStore=.... Se você não tiver esse argumento JVM, provavelmente usará o repositório de chaves Java padrão. Se você tiver esse argumento JVM, provavelmente usará um armazenamento de chaves personalizado e o argumento JVM apontará você para seu repositório de chaves personalizado.

Se você estiver usando o armazenamento de chaves Java padrão

O repositório de chaves Java padrão normalmente já tem todos os certificados raiz de AC. No entanto, pode haver algumas exceções. Por exemplo, um certificado raiz diferente pode assinar o certificado de ponto de extremidade de ingestão. Recomendamos que você siga estas etapas para resolve este problema:

  1. Verifique se o certificado SSL 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 AC confiáveis são armazenados em $JAVA_HOME/jre/lib/security/cacerts. Para listar certificados em um repositório 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 posteriormente:

    keytool -list -v -keystore $JAVA_HOME/jre/lib/security/cacerts > temp.txt

  2. Depois de ter a lista de certificados, siga as etapas para baixar o certificado SSL 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 marcar se esse valor está presente no arquivo temp.txt salvo 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.

  3. 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 lê da seguinte maneira:

    keytool -import -file "<downloaded-ssl-certificate-file>" -alias "<some-meaningful-name>" -keystore $JAVA_HOME/jre/lib/security/cacerts

Se você estiver usando um repositório 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 nesse repositório de chaves. Recomendamos as duas etapas a seguir para resolve este problema:

  1. Siga estas etapas para baixar o certificado SSL no ponto de extremidade do Application Insights.

  2. Execute o seguinte comando para importar o certificado SSL para o armazenamento de chaves Java personalizado:

    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
  1. Abra o https://westeurope-5.in.applicationinsights.azure.com/api/ping endereço de URL em um navegador da Web.

  2. Na barra de endereços do navegador, selecione o ícone Exibir informações do site (um símbolo de bloqueio ao lado do endereço).

  3. Selecionar Conexão é seguro.

  4. Selecione o ícone Mostrar certificado .

  5. Na caixa de diálogo Visualizador de Certificados , selecione a guia Detalhes .

  6. Na lista Hierarquia de Certificados , selecione o certificado que você deseja baixar. (O certificado raiz da AC, o certificado intermediário e o certificado SSL de folha são mostrados.)

  7. Selecione o botão Exportar .

  8. Na caixa de diálogo Salvar como , navegue até o diretório para o qual você deseja salvar o arquivo certificado (.crt) e selecione Salvar.

  9. 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ó Validity na lista Campos de Certificado . Selecione Não Antes dentro desse nó e examine a data e a hora mostradas na caixa Valor de Campo . Esse carimbo de hora indica quando o novo certificado se torna válido. Da mesma forma, selecione Não Após dentro do nó Validity para saber quando o novo certificado expirar.

Entendendo UnknownHostException

Se você vir essa exceção depois de atualizar para uma versão do agente Java que seja superior a 3.2.0, poderá corrigir a exceção atualizando sua rede para resolve 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 que são posteriores a 3.2.0 apontam para o novo ponto v2.1/trackde extremidade de ingestão , em comparação com o mais antigo v2/track. O novo ponto de extremidade de ingestão redireciona automaticamente você para o ponto de extremidade de ingestão (novo ponto de extremidade mostrado em exceção) que é mais próximo do armazenamento do recurso do Application Insights.

Pacotes 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 alerta você e fornece um link para os pacotes de criptografia ausentes.

Plano de fundo em pacotes de criptografia

Os pacotes de criptografia entram em jogo antes que um aplicativo cliente e informações de troca de servidores por uma conexão TLS (Segurança de Camada de Transporte) ou SSL. O aplicativo cliente inicia um aperto de mão SSL. Parte desse processo envolve notificar o servidor sobre quais pacotes de criptografia ele dá suporte. O servidor recebe essas informações e compara os pacotes de cifras com suporte do aplicativo cliente com os algoritmos compatíveis. Se o servidor encontrar uma correspondência, ele notificará o aplicativo cliente e uma conexão segura será estabelecida. Se ele não encontrar uma correspondência, o servidor recusará a conexão.

Como determinar pacotes de criptografia do lado do cliente

Nesse caso, o cliente é o JVM no qual seu aplicativo instrumentado está em execução. A partir da versão 3.2.5, o Java do Application Insights registra uma mensagem de aviso se pacotes de criptografia ausentes podem estar causando falhas de conexão em um dos pontos de extremidade do serviço.

Se você estiver usando uma versão anterior do Java do Application Insights, compile e execute o seguinte programa Java para obter a lista de pacotes de criptografia com suporte em seu 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 pacotes 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 do Application Insights Live. Você pode usar uma ferramenta online, como o SSLLABS , para determinar os pacotes de criptografia esperados com base na URL do ponto de extremidade.

Como adicionar os pacotes de criptografia ausentes

Se você estiver usando o Java 9 ou uma versão posterior, marcar para garantir que o JVM inclua o jdk.crypto.cryptoki módulo na pasta jmods. Além disso, se você estiver criando um runtime java personalizado usando jlink, certifique-se de incluir o mesmo módulo.

Caso contrário, esses pacotes de criptografia já devem fazer parte das distribuições modernas do Java 8+. Recomendamos que você marcar a origem da distribuição Java instalada para investigar por que os provedores de segurança no arquivo de configuração java.security da distribuição Java diferem das distribuições Java padrão.

Tempo de inicialização lento no Application Insights e java 8

O Java 8 tem um problema conhecido relacionado à verificação de assinatura de 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:

Como alternativa, você pode experimentar o seguinte recurso experimental: aprimoramento do tempo de inicialização para um número limitado de núcleos de CPU. Se você tiver problemas ao usar esse recurso, envie-nos comentários.

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.