Guía de solución de problemas: Azure Monitor Application Insights para Java
En este artículo se proporciona información de solución de problemas para resolver problemas comunes que pueden producirse al instrumentar una aplicación Java mediante el agente de Java para Application Insights. Application Insights es una característica del servicio de plataforma de Azure Monitor.
Comprobación del archivo de registro de autodiagnóstica
De forma predeterminada, Application Insights Java 3. x genera un archivo de registro denominado applicationinsights.log en el mismo directorio que contiene el archivo applicationinsights-agent-3.2.11.jar .
Este archivo de registro es el primer lugar para buscar sugerencias sobre cualquier problema que pueda estar experimentando.
Si Application Insights no genera un archivo de registro, compruebe que la aplicación Java tenga el permiso de escritura en el directorio que contiene el archivo applicationinsights-agent-3.2.11.jar .
Si Application Insights sigue sin generar un archivo de registro, compruebe si hay errores en el registro de la stdout
aplicación Java. Java 3 de Application Insights. x debe registrar cualquier error que impida que se registre en su ubicación habitual en el stdout
registro.
Solución de problemas de conectividad
Los SDK y agentes de Application Insights envían telemetría para que se ingieren como llamadas REST a nuestros puntos de conexión de ingesta. Para probar la conectividad desde el servidor web o el equipo host de la aplicación a los puntos de conexión del servicio de ingesta, use clientes REST sin procesar de PowerShell o ejecute comandos curl. Consulte Solución de problemas de telemetría de aplicaciones que faltan en Azure Monitor Application Insights.
Si el agente de Java de Application Insights provoca el problema de conectividad, tenga en cuenta las siguientes opciones:
Compruebe el cadena de conexión de la configuración de Application Insights.
Use la versión 3.4.6 de Java de Application Insights o una versión posterior para comprobar que el almacén de claves de Java contiene un certificado necesario. Para ello, habilite la característica de autodiagnóstico en el
TRACE
nivel . En los registros de Application Insights, ¿ve la siguiente entrada?TRACE c.m.applicationinsights.agent: certificado raíz de Application Insights en el almacén de claves de Java: false
Si ve esta entrada, consulte Importación de certificados SSL para importar un certificado raíz en el almacén de claves de Java.
Si usa la
-Djsse.enableSNIExtension=false
opción , intente ejecutar el agente sin esa opción. En la versión 3.4.5 de Java de Application Insights, si especifica-Djsse.enableSNIExtension=false
, aparece la siguiente entrada de error en los registros:WARN c.m.applicationinsights.agent: se detecta la propiedad del sistema -Djsse.enableSNIExtension=false. Si tiene problemas de conexión con Application Insights, quite esta opción.
Si ninguna de las opciones anteriores es útil, puede usar herramientas de solución de problemas.
No se puede iniciar la máquina virtual Java (JVM)
Si la máquina virtual Java (JVM) no se inicia, podría devolver un mensaje "Error al abrir el archivo ZIP o falta el manifiesto JAR". Para solucionar este problema, consulte la tabla siguiente.
Problema | Acción |
---|---|
No se encuentra el archivo de archivo java (JAR) del agente. | Asegúrese de especificar una ruta de acceso JAR de agente válida en el -javaagent argumento JVM. |
Es posible que el archivo JAR del agente se haya dañado durante la transferencia de archivos. | Intente volver a descargar el archivo JAR del agente. |
Las aplicaciones Java de Tomcat tardan varios minutos en iniciarse
Si habilitó Application Insights para supervisar la aplicación Tomcat, puede haber un retraso de varios minutos en el tiempo que se tarda en iniciar la aplicación. Este retraso se debe a que Tomcat intenta examinar los archivos JAR de Application Insights durante el inicio de la aplicación. Para acelerar la hora de inicio de la aplicación, puede excluir los archivos JAR de Application Insights de la lista de archivos examinados. No es necesario examinar estos archivos JAR.
Actualice desde Application Insights Java 2. SDK de x
Si ya usa Application Insights Java 2. x SDK en la aplicación, puede seguir usándolo. Application Insights Java 3. el agente x detecta, captura y correlaciona cualquier telemetría personalizada que envíe a través de 2. x SDK. También evita la telemetría duplicada mediante la supresión de cualquier recopilación automática que el 2. x SDK sí lo hace. Para obtener más información, consulte Actualización desde Java 2.x SDK.
Actualización desde la versión preliminar de Java 3.0 de Application Insights
Si va a actualizar desde el agente de Java 3.0 Preview, revise detenidamente todas las opciones de configuración . La estructura JSON se cambia en la versión de disponibilidad general (GA) 3.0.
Estos cambios incluyen:
El nombre del archivo de configuración ha cambiado de ApplicationInsights.json a applicationinsights.json.
El
instrumentationSettings
nodo ya no está presente. Todo el contenido deinstrumentationSettings
se mueve al nivel raíz.Los nodos de configuración como
sampling
,jmxMetrics
,instrumentation
yheartbeat
se mueven fuera delpreview
nivel raíz.
Algunos registros no se recopilan automáticamente
El registro solo se captura si cumple los criterios siguientes:
Cumple el nivel configurado para el marco de registro.
Cumple el nivel configurado para Application Insights.
Por ejemplo, si el marco de registro está configurado para registrar WARN
(y versiones posteriores) del com.example
paquete y Application Insights está configurado para capturar INFO
(y versiones posteriores), Application Insights solo captura (y versiones posteriores WARN
) del com.example
paquete.
Para asegurarse de que una instrucción de registro determinada cumple el umbral configurado de los marcos de registro, compruebe que aparece en el registro de aplicación habitual (en el archivo o la consola).
Observe también que si se pasa un objeto de excepción al registrador, el mensaje de registro (y los detalles del objeto de excepción) aparece en el Azure Portal de la exceptions
tabla en lugar de en la traces
tabla.
Para ver los mensajes de registro en las traces
tablas y exceptions
, ejecute la siguiente consulta De registros (Kusto):
union traces, (exceptions | extend message = outerMessage)
| project timestamp, message, itemType
Para obtener más información, consulte la configuración de registro recopilado automáticamente.
Importación de certificados SSL
Esta sección le ayuda a solucionar problemas y posiblemente corregir las excepciones relacionadas con los certificados de capa de sockets seguros (SSL) cuando se usa el agente de Java.
Hay dos rutas de acceso diferentes para resolver este problema:
- Si usa un almacén de claves de Java predeterminado
- Si usa un almacén de claves de Java personalizado
Si no está seguro de qué ruta de acceso seguir, compruebe si tiene el argumento jvm, -Djavax.net.ssl.trustStore=...
.
Si no tiene este argumento JVM, es probable que use el almacén de claves de Java predeterminado.
Si tiene este argumento jvm, probablemente esté usando un almacén de claves personalizado y el argumento JVM le apunte al almacén de claves personalizado.
Si usa el almacén de claves de Java predeterminado
Normalmente, el almacén de claves de Java predeterminado ya tiene todos los certificados raíz de ca. Sin embargo, puede haber algunas excepciones. Por ejemplo, un certificado raíz diferente podría firmar el certificado de punto de conexión de ingesta. Se recomienda seguir estos pasos para resolver este problema:
Compruebe si el certificado SSL que se usó para firmar el punto de conexión de Application Insights ya está presente en el almacén de claves predeterminado. De forma predeterminada, los certificados de ca de confianza se almacenan en $JAVA_HOME/jre/lib/security/cacerts. Para enumerar certificados en un almacén de claves de Java, use el siguiente comando:
keytool -list -v -keystore <path-to-keystore-file>
Puede redirigir la salida a un archivo temporal para que sea fácil de buscar más adelante:
keytool -list -v -keystore $JAVA_HOME/jre/lib/security/cacerts > temp.txt
Después de tener la lista de certificados, siga los pasos para descargar el certificado SSL que se usó para firmar el punto de conexión de Application Insights.
Después de descargar el certificado, genere un hash SHA-1 en el certificado mediante el siguiente comando:
keytool -printcert -v -file "<downloaded-ssl-certificate>.cer"
Copie el valor SHA-1 y compruebe si este valor está presente en el archivo temp.txt que guardó anteriormente. Si no encuentra el valor SHA-1 en el archivo temporal, el certificado SSL descargado falta en el almacén de claves java predeterminado.
Importe el certificado SSL al almacén de claves de Java predeterminado mediante el siguiente comando:
keytool -import -file "<certificate-file>" -alias "<some-meaningful-name>" -keystore "<path-to-cacerts-file>"
En este ejemplo, el comando lee lo siguiente:
keytool -import -file "<downloaded-ssl-certificate-file>" -alias "<some-meaningful-name>" -keystore $JAVA_HOME/jre/lib/security/cacerts
Si usa un almacén de claves de Java personalizado
Si usa un almacén de claves de Java personalizado, es posible que tenga que importar los certificados SSL para los puntos de conexión de Application Insights en ese almacén de claves. Se recomiendan los dos pasos siguientes para resolver este problema:
Siga estos pasos para descargar el certificado SSL desde el punto de conexión de Application Insights.
Ejecute el siguiente comando para importar el certificado SSL al almacén de claves de Java personalizado:
keytool -importcert -alias <your-ssl-certificate> -file "<your-downloaded-ssl-certificate-name>.cer" -keystore "<your-keystore-name>" -storepass "<your-keystore-password>" -noprompt
Pasos para descargar el certificado SSL
Nota:
Las siguientes instrucciones de descarga de certificados SSL se validaron en los siguientes exploradores:
- Google Chrome
- Microsoft Edge
Abra la https://westeurope-5.in.applicationinsights.azure.com/api/ping dirección URL en un explorador web.
En la barra de direcciones del explorador, seleccione el icono Ver información del sitio (un símbolo de bloqueo situado junto a la dirección).
Seleccione Conexión segura.
Seleccione el icono Mostrar certificado .
En el cuadro de diálogo Visor de certificados, seleccione la pestaña Detalles .
En la lista Jerarquía de certificados, seleccione el certificado que desea descargar. (Se muestran el certificado raíz de ca, el certificado intermedio y el certificado SSL hoja).
Seleccione el botón Exportar .
En el cuadro de diálogo Guardar como , vaya al directorio en el que desea guardar el archivo de certificado (.crt) y, a continuación, seleccione Guardar.
Para salir del cuadro de diálogo Visor de certificados, seleccione el botón Cerrar (X).
Advertencia
Tendrá que repetir estos pasos para obtener el nuevo certificado antes de que expire el certificado actual. Puede encontrar la información de expiración en la pestaña Detalles del cuadro de diálogo Visor de certificados .
Después de seleccionar el certificado en la lista Jerarquía de certificados, busque el nodo Validez en la lista Campos de certificado . Seleccione Not Before (No antes ) en ese nodo y examine la fecha y hora que se muestran en el cuadro Valor de campo . Esta marca de tiempo indica cuándo se convierte en válido el nuevo certificado. Del mismo modo, seleccione Not After (No después ) en el nodo Validity (Validez ) para obtener información sobre cuándo expira el nuevo certificado.
Descripción de UnknownHostException
Si ve esta excepción después de actualizar a una versión del agente de Java posterior a la 3.2.0, es posible que pueda corregir la excepción actualizando la red para resolver el nuevo punto de conexión que se muestra en la excepción. La razón de la diferencia entre las versiones de Application Insights es que las versiones posteriores a la 3.2.0 apuntan al nuevo punto de conexión v2.1/track
de ingesta, en comparación con las anteriores v2/track
. El nuevo punto de conexión de ingesta le redirige automáticamente al punto de conexión de ingesta (nuevo punto de conexión que se muestra en excepción) más cercano al almacenamiento del recurso de Application Insights.
Faltan conjuntos de cifrado
Si el agente de Java de Application Insights detecta que no tiene ninguno de los conjuntos de cifrado compatibles con los puntos de conexión a los que se conecta, el agente le avisa y proporciona un vínculo a los conjuntos de cifrado que faltan.
Fondo en conjuntos de cifrado
Los conjuntos de cifrado entran en juego antes de que una aplicación cliente y el servidor intercambien información a través de una conexión SSL o seguridad de la capa de transporte (TLS). La aplicación cliente inicia un protocolo de enlace SSL. Parte de ese proceso implica notificar al servidor sobre qué conjuntos de cifrado admite. El servidor recibe esa información y compara los conjuntos de cifrado admitidos por la aplicación cliente con los algoritmos que admite. Si el servidor encuentra una coincidencia, notifica a la aplicación cliente y se establece una conexión segura. Si no encuentra una coincidencia, el servidor rechaza la conexión.
Cómo determinar los conjuntos de cifrado del lado cliente
En este caso, el cliente es la JVM en la que se ejecuta la aplicación instrumentada. A partir de la versión 3.2.5, Java de Application Insights registra un mensaje de advertencia si faltan conjuntos de cifrado que podrían estar causando errores de conexión en uno de los puntos de conexión de servicio.
Si usa una versión anterior de Application Insights Java, compile y ejecute el siguiente programa de Java para obtener la lista de conjuntos de cifrado admitidos en la 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]);
}
}
}
Los puntos de conexión de Application Insights admiten los siguientes conjuntos de cifrado:
- 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
Cómo determinar los conjuntos de cifrado del lado servidor
En este caso, el lado servidor es el punto de conexión de ingesta de Application Insights o el punto de conexión de métricas dinámicas de Application Insights. Puede usar una herramienta en línea como SSLLABS para determinar los conjuntos de cifrado esperados que se basan en la dirección URL del punto de conexión.
Cómo agregar los conjuntos de cifrado que faltan
Si usa Java 9 o una versión posterior, asegúrese de que jvm incluye el jdk.crypto.cryptoki
módulo en la carpeta jmods . Además, si va a compilar un entorno de ejecución de Java personalizado mediante jlink
, asegúrese de incluir el mismo módulo.
De lo contrario, estos conjuntos de cifrado ya deben formar parte de distribuciones modernas de Java 8+. Se recomienda comprobar el origen de la distribución de Java instalada para investigar por qué los proveedores de seguridad de ese archivo de configuración java.security de la distribución de Java difieren de las distribuciones estándar de Java.
Tiempo de inicio lento en Application Insights y Java 8
Java 8 tiene un problema conocido relacionado con la comprobación de la firma de archivo JAR de los agentes de Java. Este problema puede aumentar el tiempo de inicio en Application Insights. Para solucionar este problema, puede aplicar una de las siguientes opciones:
Si la aplicación se basa en Spring Boot, adjunte mediante programación el agente de Java de Application Insights a la JVM.
Use la versión 11 de Java o una versión posterior.
Como alternativa, puede probar la siguiente característica experimental: Mejora del tiempo de inicio para un número limitado de núcleos de CPU. Si experimenta algún problema al usar esta característica, envíenos sus comentarios.
Aviso de declinación de responsabilidades sobre la información de terceros
Los productos de otros fabricantes que se mencionan en este artículo han sido creados por compañías independientes de Microsoft. Microsoft no ofrece ninguna garantía, ya sea implícita o de otro tipo, sobre la confiabilidad o el rendimiento de dichos productos.
Ponte en contacto con nosotros para obtener ayuda
Si tiene preguntas o necesita ayuda, cree una solicitud de soporte o busque consejo en la comunidad de Azure. También puede enviar comentarios sobre el producto con los comentarios de la comunidad de Azure.