Resolución de problemas de la instrumentación automática en .NET
Pasos generales
Si encuentras algún problema con OpenTelemetry .NET Automatic Instrumentation, hay varios pasos que pueden ayudarte a entenderlo.
Habilitar el registro detallado
Los registros de depuración detallados pueden ayudarte a solucionar problemas de instrumentación y puedes adjuntarlos a las incidencias de este proyecto para facilitar la investigación.
Para obtener los registros detallados de OpenTelemetry .NET Automatic
Instrumentation, establece la variable de entorno
OTEL_LOG_LEVEL en debug antes de que se
inicie el proceso instrumentado.
De forma predeterminada, la librería escribe los archivos de registro en
ubicaciones predefinidas. Si es necesario,
cambia la ubicación predeterminada actualizando la variable de entorno
OTEL_DOTNET_AUTO_LOG_DIRECTORY.
Después de obtener los registros, elimina la variable de entorno
OTEL_LOG_LEVEL o cambia su valor a un nivel menos detallado para evitar una
sobrecarga innecesaria.
Habilitar el seguimiento del host
El seguimiento del host puede utilizarse para recopilar la información necesaria para investigar problemas relacionados con diversos casos, como ensamblados que no se encuentran. Establece las siguientes variables de entorno:
COREHOST_TRACE=1
COREHOST_TRACEFILE=corehost_verbose_tracing.log
A continuación, reinicia la aplicación para recopilar los registros.
Problemas comunes
No se genera telemetría
No se genera telemetría. No hay registros en la ubicación de los registros internos de OpenTelemetry .NET Automatic Instrumentation.
Puede ocurrir que .NET Profiler no pueda conectarse y, por tanto, no se emitan registros.
La razón más común es que la aplicación instrumentada no tiene permisos para cargar los ensamblados de OpenTelemetry .NET Automatic Instrumentation.
No se pudo instalar el paquete ‘OpenTelemetry.AutoInstrumentation.Runtime.Native’
Al añadir los paquetes NuGet al proyecto, aparece un mensaje de error similar a este:
Could not install package 'OpenTelemetry.AutoInstrumentation.Runtime.Native 1.6.0'. You are trying to install this package into a project that targets '.NETFramework,Version=v4.7.2', but the package does not contain any assembly references or content files that are compatible with that framework. For more information, contact the package author.
Los paquetes NuGet no admiten proyectos csproj de estilo antiguo. Implementa
la instrumentación automática en la máquina en lugar de utilizar paquetes NuGet
o migra el proyecto al estilo SDK csproj.
Problemas de rendimiento
Si se produce un uso elevado de CPU, asegúrate de no haber habilitado la instrumentación automática de forma global mediante el establecimiento de las variables de entorno en el ámbito del sistema o del usuario.
Si el uso del ámbito del sistema o del usuario es intencionado, utiliza las
variables de entorno
OTEL_DOTNET_AUTO_EXCLUDE_PROCESSES para
excluir aplicaciones de la instrumentación automática.
La herramienta CLI dotnet se bloquea
Al ejecutar una aplicación, por ejemplo con dotnet run, aparecen mensajes de
error similares al siguiente:
PS C:\Users\Administrator\Desktop\OTelConsole-NET6.0> dotnet run My.Simple.Console
Unhandled exception. System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation.
---> System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation.
---> System.TypeInitializationException: The type initializer for 'OpenTelemetry.AutoInstrumentation.Loader.Startup' threw an exception.
---> System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation.
---> System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.Extensions.Configuration.Abstractions, Version=7.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'. The system cannot find the file specified.
Con la versión v0.6.0-beta.1 e inferiores, se producían problemas al
instrumentar la herramienta CLI dotnet.
Por lo tanto, si utilizas una de estas versiones, te recomendamos ejecutar
dotnet build antes de instrumentar la sesión de terminal o llamarlo en una
sesión de terminal independiente.
Consulta #1744 para obtener más información.
Conflictos de versiones de ensamblados
Mensaje de error similar al siguiente:
Unhandled exception. System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.Extensions.DependencyInjection.Abstractions, Version=7.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'. The system cannot find the file specified.
File name: 'Microsoft.Extensions.DependencyInjection.Abstractions, Version=7.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'
at Microsoft.AspNetCore.Builder.WebApplicationBuilder..ctor(WebApplicationOptions options, Action`1 configureDefaults)
at Microsoft.AspNetCore.Builder.WebApplication.CreateBuilder(String[] args)
at Program.<Main>$(String[] args) in /Blog.Core/Blog.Core.Api/Program.cs:line 26
Los paquetes NuGet de OpenTelemetry .NET y sus dependencias se implementan con OpenTelemetry .NET Automatic Instrumentation.
Para gestionar los conflictos entre versiones de dependencias, actualiza las referencias del proyecto de la aplicación instrumentada para que utilicen las mismas versiones que OpenTelemetry .NET Automatic Instrumentation.
Una forma sencilla de asegurarte de que no se produzcan estos conflictos es
añadir el paquete OpenTelemetry.AutoInstrumentation a la aplicación. Para
obtener instrucciones sobre cómo añadirlo a la aplicación, consulta
Uso de los paquetes NuGet de OpenTelemetry.AutoInstrumentation.
Como alternativa, añade únicamente los paquetes en conflicto al proyecto. Las siguientes dependencias son utilizadas por OpenTelemetry .NET Automatic Instrumentation:
Busca sus versiones en las siguientes ubicaciones:
- Directory.Packages.props
- src/Directory.Packages.props
- src/OpenTelemetry.AutoInstrumentation.AdditionalDeps/Directory.Packages.props
De forma predeterminada, las referencias a ensamblados de las aplicaciones de
.NET Framework se redirigen durante el tiempo de ejecución a las versiones
utilizadas por la instrumentación automática. Este comportamiento se puede
controlar mediante la configuración
OTEL_DOTNET_AUTO_NETFX_REDIRECT_ENABLED.
Si la aplicación ya incluye redirecciones de versiones de ensamblado utilizados por la instrumentación automática, esta redirección automática puede fallar; consulta #2833. Comprueba si alguna redirección de ensamblado existente impide la redirección a las versiones enumeradas en netfx_assembly_redirection.h.
Para que funcione la redirección automática anterior, hay dos situaciones
específicas que requieren que los ensamblados utilizados para instrumentar
aplicaciones de .NET Framework —los que se encuentran en la carpeta netfx del
directorio de instalación— también se instalen en la Global Assembly Cache
(GAC):
- Instrumentación mediante técnicas de monkey patching de ensamblados cargados como independientes del dominio.
- Redirección de ensamblados para aplicaciones firmadas con nombre seguro
(strong-named) si la aplicación también incluye versiones diferentes de
algunos ensamblados que se distribuyen en la carpeta
netfx.
Si tienes problemas en una de las situaciones anteriores, vuelve a ejecutar el
comando Install-OpenTelemetryCore desde el módulo de instalación de PowerShell
para asegurarte de que las instalaciones necesarias en la GAC estén
actualizadas.
Para obtener más información sobre el uso de la GAC por parte de la instrumentación automática, consulta el comentario de pjanotti.
Consulta #2269 y #2296 para obtener más información.
No se encontró un ensamblado en AdditionalDeps
Síntomas
Aparece un mensaje de error similar al siguiente:
An assembly specified in the application dependencies manifest (OpenTelemetry.AutoInstrumentation.AdditionalDeps.deps.json) was not found
Esto podría estar relacionado con los siguientes problemas:
Otros problemas
Si encuentras un problema que no aparece en esta página, consulta los Pasos generales para recopilar información de diagnóstico adicional. Esto puede ayudar a facilitar su resolución.
Comentarios
¿Fue útil esta página?
Thank you. Your feedback is appreciated!
Please let us know how we can improve this page. Your feedback is appreciated!