Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
.NET proporciona funcionalidades de muestreo de registros que permiten controlar el volumen de registros que emite la aplicación sin perder información importante. Están disponibles las siguientes estrategias de muestreo:
- Muestreo basado en trazo: muestra de registros basada en la decisión de muestreo del trazo actual.
- Muestreo probabilístico aleatorio: registros de ejemplo basados en reglas de probabilidad configuradas.
- Muestreo personalizado: implemente su propia estrategia de muestreo personalizada. Para obtener más información, consulte Implementación de muestreo personalizado.
Nota:
Solo se puede usar un sampler a la vez. Si usted registra varios muestreadores, se usará el último.
El muestreo de registros amplía las funcionalidades de filtrado al proporcionar un control más específico sobre qué registros emite la aplicación. En lugar de simplemente habilitar o deshabilitar registros, puede configurar el muestreo para emitir solo una fracción de ellos.
Por ejemplo, mientras que el filtrado suele usar probabilidades como 0
(no emitir registros) o 1
(emitir todos los registros), el muestreo le permite elegir cualquier valor entre , como 0.1
emitir 10% de registros o 0.25
emitir 25%.
Comienza
Para empezar, instale el 📦 paquete NuGet Microsoft.Extensions.Telemetry :
dotnet add package Microsoft.Extensions.Telemetry
Para obtener más información, consulte dotnet add package o Administración de dependencias de paquetes en aplicaciones .NET.
Configuración del muestreo basado en seguimiento
El muestreo basado en seguimiento garantiza que los registros se muestren de forma coherente con el sistema subyacente Activity. Esto resulta útil cuando desea mantener la correlación entre seguimientos y registros. Puede habilitar el muestreo de seguimiento (como se describe en la guía) y, a continuación, configurar el muestreo de registros basado en seguimiento en consecuencia:
builder.Logging.AddTraceBasedSampler();
Cuando se habilita el muestreo basado en seguimiento, los registros solo se generarán si se muestrea el componente subyacente Activity. La decisión de muestreo procede del valor actual Recorded .
Configuración del muestreo probabilístico aleatorio
El muestreo probabilístico aleatorio permite muestrear registros en función de las reglas de probabilidad configuradas. Puede definir reglas específicas de:
- Categoría del registro
- Nivel de registro
- Id. del evento
Hay varias maneras de configurar el muestreo probabilístico aleatorio con sus reglas:
Configuración basada en archivos
Cree una sección de configuración en el appsettings.json, por ejemplo:
{
"Logging": {
"LogLevel": {
"Default": "Debug"
}
},
"RandomProbabilisticSampler": {
"Rules": [
{
"CategoryName": "Microsoft.AspNetCore.*",
"Probability": 0.25,
"LogLevel": "Information"
},
{
"CategoryName": "System.*",
"Probability": 0.1
},
{
"EventId": 1001,
"Probability": 0.05
}
]
}
}
La configuración anterior:
- Muestra ejemplos de 10% registros de categorías que comienzan con
System.
de todos los niveles. - Muestras 25% de registros de categorías que comienzan con
Microsoft.AspNetCore.
de los LogLevel.Information. - Ejemplos 5% de registros con el identificador de evento 1001 de todas las categorías y niveles.
- Muestras 100% de todos los demás registros.
Importante
El Probability valor representa la probabilidad con valores de 0 a 1. Por ejemplo, 0,25 significa que se muestrearán 25% de registros. 0 significa que no se muestreará ningún registro y 1 significa que se muestrearán todos los registros. Esos casos con 0 y 1 se pueden usar para deshabilitar o habilitar eficazmente todos los registros para una regla específica. La probabilidad no puede ser menor que 0 o mayor que 1 y, si se produce en la aplicación, se produce una excepción.
Para registrar el sampler con la configuración, tenga en cuenta el código siguiente:
builder.Logging.AddRandomProbabilisticSampler(builder.Configuration);
Cambio de reglas de muestreo en una aplicación en ejecución
El muestreo probabilístico aleatorio admite actualizaciones de configuración en tiempo de ejecución a través de la IOptionsMonitor<TOptions> interfaz . Si usa un proveedor de configuración que admite recargas(como el proveedor de configuración de archivos), puede actualizar las reglas de muestreo en tiempo de ejecución sin reiniciar la aplicación.
Por ejemplo, puede iniciar la aplicación con el siguiente appsettings.json, que actúa eficazmente como un no-op:
{
"Logging": {
"RandomProbabilisticSampler": {
"Rules": [
{
"Probability": 1
}
]
}
}
}
Mientras se ejecuta la aplicación, puede actualizar el appsettings.json con la siguiente configuración:
{
"Logging": {
"RandomProbabilisticSampler": {
"Rules": [
{
"Probability": 0.01,
"LogLevel": "Information"
}
]
}
}
}
Las nuevas reglas se aplicarán automáticamente; por ejemplo, con la configuración anterior, se tomarán muestras de 1% de logs con el LogLevel.Information.
Cómo se aplican las reglas de muestreo
El algoritmo es muy similar al filtrado de registros, pero hay algunas diferencias.
La evaluación de reglas de muestreo de registros se realiza en cada registro de registro; sin embargo, existen optimizaciones de rendimiento, como el almacenamiento en caché. El siguiente algoritmo se usa para cada registro de logs de una categoría determinada.
- Seleccione reglas
LogLevel
iguales o superiores al nivel de registro del registrador. - Seleccione reglas
EventId
no definidas o definidas e iguales al ID del evento de registro. - Seleccione reglas con prefijo de categoría coincidente más largo. Si no se encuentra ninguna coincidencia, se seleccionan todas las reglas que no especifican una categoría.
- Si se seleccionan varias reglas, se toma la última.
- Si no se selecciona ninguna regla, el muestreo no se aplica; por ejemplo, el registro se emite como de costumbre.
Configuración de código insertado
builder.Logging.AddRandomProbabilisticSampler(options =>
{
options.Rules.Add(
new RandomProbabilisticSamplerFilterRule(
probability: 0.05d,
eventId : 1001));
});
La configuración anterior:
- Ejemplos 5% de registros con el identificador de evento 1001 de todas las categorías y niveles.
- Muestras 100% de todos los demás registros.
Configuración de probabilidad simple
En escenarios básicos, puede configurar un único valor de probabilidad que se aplique a todos los registros en o por debajo de un nivel especificado:
builder.Logging.AddRandomProbabilisticSampler(0.01, LogLevel.Information);
builder.Logging.AddRandomProbabilisticSampler(0.1, LogLevel.Warning);
El código anterior registra el muestreador que tomará muestras de 10% de Warning registros y 1% de Information registros (y de categorías inferiores). Si la configuración no tenía la regla para Information, habría muestreado 10% de Warning registros y todos los niveles siguientes, incluido Information.
Implementación de muestreo personalizado
Puede crear una estrategia de muestreo personalizada derivando de la LoggingSampler clase abstracta y reemplazando sus miembros abstractos. Esto le permite adaptar el comportamiento de muestreo a sus requisitos específicos. Por ejemplo, un sampler personalizado podría:
- Tome decisiones de muestreo en función de la presencia y el valor de pares clave-valor específicos en el estado del registro.
- Aplique lógica de limitación de velocidad, como emitir registros solo si el número de registros dentro de un intervalo de tiempo predefinido permanece por debajo de un umbral determinado.
Para implementar un sampler personalizado, siga estos pasos:
- Cree una clase que herede de LoggingSampler.
- Invalide el método para definir la LoggingSampler.ShouldSample lógica de muestreo personalizada.
- Registre su sampler personalizado en el pipeline de registro mediante el método de extensión AddSampler.
Para cada registro que no se filtra, el método LoggingSampler.ShouldSample se llama exactamente una vez. Su valor devuelto determina si se debe emitir el registro de registro.
Consideraciones sobre el rendimiento
El muestreo de registros está diseñado para reducir los costos de almacenamiento, con un equilibrio de un uso de CPU ligeramente mayor. Si la aplicación genera un gran volumen de registros que son costosos de almacenar, el muestreo puede ayudar a reducir ese volumen. Cuando se configura correctamente, el muestreo puede reducir los costos de almacenamiento sin perder información crítica para diagnosticar incidentes.
Para obtener el muestreo integrado, consulte Pruebas comparativas.
Guía de nivel de registro sobre cuándo usar el muestreo
Nivel de registro | Recomendación |
---|---|
Trace | No aplique el muestreo, ya que normalmente deshabilita estos registros en producción |
Debug | No aplique el muestreo, ya que normalmente deshabilita estos registros en producción |
Information | Aplicar muestreo |
Warning | Considere la posibilidad de aplicar el muestreo |
Error | No aplicar muestreo |
Critical | No aplicar muestreo |
procedimientos recomendados
- Comience con tasas de muestreo más altas y ajustelas hacia abajo según sea necesario.
- Use reglas basadas en categorías para dirigirse a componentes específicos.
- Si usa el seguimiento distribuido, considere implementar el muestreo basado en rastreo.
- Supervise la eficacia de las reglas de muestreo colectivamente.
- Busque el equilibrio adecuado para la aplicación: una frecuencia de muestreo demasiado baja puede reducir la observabilidad, mientras que una tasa demasiado alta puede aumentar los costos.