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 Azure Monitor.
Comprobación del archivo de registro de autodiagnóstico
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 comprobar si hay sugerencias sobre cualquier problema que pueda estar experimentando.
Si Application Insights no genera un archivo de registro, compruebe que la aplicación Java tiene el permiso Escribir en el directorio que contiene el archivo applicationinsights-agent-3.2.11.jar .
Si Application Insights sigue sin generar un archivo de registro, compruebe el registro de la stdout
aplicación Java para ver si hay errores. Application Insights Java 3.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 en 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 Application Insights de Azure Monitor.
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 para la configuración de Application Insights.
Use la versión 3.4.6 de Application Insights java 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 entrada siguiente?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 Application Insights Java, 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 esto.
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 | Action |
---|---|
No se encuentra el archivo de archivo java (JAR) del agente. | Asegúrese de especificar una ruta 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 de Java de Tomcat tardan varios minutos en iniciarse
Si ha habilitado Application Insights para supervisar la aplicación de Tomcat, puede haber un retraso de varios minutos en el tiempo necesario para 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 escaneados. 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 los 2.x SDK. También impide que la telemetría duplicada suprima cualquier recopilación automática que sea la 2.x SDK sí. 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 3.0 de disponibilidad general (GA).
Entre estos cambios se incluyen los siguientes:
El nombre del archivo de configuración cambió de ApplicationInsights.json a applicationinsights.json.
El nodo
instrumentationSettings
ya no está presente. Todo el contenido deinstrumentationSettings
se ha movido al nivel raíz.Los nodos de configuración como , , y
heartbeat
se mueven fuerapreview
del nivelinstrumentation
raíz.jmxMetrics
sampling
Algunos registros no se recopilan automáticamente
El registro solo se captura si cumple los siguientes criterios:
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) desde el 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 Azure Portal en la exceptions
tabla en lugar de la traces
tabla.
Para ver los mensajes de registro en las traces
tablas y exceptions
, ejecute la siguiente consulta registros (Kusto):
union traces, (exceptions | extend message = outerMessage)
| project timestamp, message, itemType
Para obtener más información, consulte la configuración de registro recopilada 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) al usar 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 debe 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, es probable que use 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 la entidad de certificación. Sin embargo, puede haber algunas excepciones. Por ejemplo, un certificado raíz diferente podría firmar el certificado del 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 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 comando siguiente:
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, falta el certificado SSL descargado en el almacén de claves de Java predeterminado.
Importe el certificado SSL en el almacén de claves de Java predeterminado mediante el comando siguiente:
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 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 entidad de certificación, el certificado intermedio y el certificado SSL hoja).
Seleccione el botón Exportar .
En el cuadro de diálogo Guardar como , vaya al directorio al 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 No antes en ese nodo y, a continuación, examine la fecha y hora que se muestra en el cuadro Valor de campo. Esta marca de tiempo indica cuándo el nuevo certificado es válido. Del mismo modo, seleccione No después en el nodo Validez para aprender 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. El motivo 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 la anterior 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 la excepción) más cercano al almacenamiento del recurso de Application Insights.
Conjuntos de cifrado faltantes
Si el agente de Java de Application Insights detecta que no tiene ninguno de los conjuntos de cifrado admitidos por 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 un servidor intercambie 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 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 ninguna 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 que se instrumentó. A partir de la versión 3.2.5, Application Insights Java registra un mensaje de advertencia si faltan conjuntos de cifrado podría estar causando errores de conexión a 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 Java para obtener la lista de conjuntos de cifrado admitidos en 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 activas 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.
Adición de los conjuntos de cifrado que faltan
Si usa Java 9 o una versión posterior, compruebe que la 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 del archivo de configuración java.security de esa distribución de Java difieren de las distribuciones estándar de Java.
Tiempo de inicio lento en Application Insights
Java 8
Java 8 tiene un problema conocido relacionado con la comprobación de firma de archivo JAR de los agentes de Java. Este problema puede aumentar el tiempo de inicio en Application Insights. Para corregir 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.
Java superior a la versión 8
Para corregir este problema con el agente de Java de Application Insights, pruebe uno de los métodos siguientes:
- Use una configuración de Azure con más potencia de CPU.
- Deshabilite algunas instrumentaciones descritas en Suprimir telemetría autocollectada específica.
- Pruebe esta 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 un comentario.
También puede probar las soluciones de supervisión para Java nativo también aplicables a una aplicación basada en JVM:
- Con Spring Boot, la distribución de Microsoft del inicio de OpenTelemetry.
- Con Quarkus, el exportador de Quarkus Opentelemetry para Microsoft Azure.
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.