Nota
L'accés a aquesta pàgina requereix autorització. Podeu provar d'iniciar la sessió o de canviar els directoris.
L'accés a aquesta pàgina requereix autorització. Podeu provar de canviar els directoris.
.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 seguimiento: registros de ejemplo basados en la decisión de muestreo del seguimiento 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 se registran 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 muestrean de forma coherente con la base 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 emitirán si se muestrea el 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:
- Se toma una muestra del 10% de los registros de categorías que comienzan con
System.en todos los niveles. - Muestra el 25% de los registros de categorías que comienzan con
Microsoft.AspNetCore.del LogLevel.Information. - Muestra un 5% de los registros con el identificador de evento 1001 de todas las categorías y niveles.
- Muestra el 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 muestreador con la configuración, considere el siguiente código:
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, el 1% de los registros con LogLevel.Information se muestrean.
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 algoritmo siguiente se usa para cada entrada de registro para una determinada categoría:
- Seleccione reglas
LogLeveliguales o superiores al nivel de registro del registrador. - Seleccione reglas 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 de logs se emite como normalmente.
Configuración de código insertado
builder.Logging.AddRandomProbabilisticSampler(options =>
{
options.Rules.Add(
new RandomProbabilisticSamplerFilterRule(
probability: 0.05d,
eventId : 1001));
});
La configuración anterior:
- Muestra un 5% de los registros con el identificador de evento 1001 de todas las categorías y niveles.
- Muestra el 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 sampler que muestrea 10% de Warning registros y 1% de Information registros (y a continuación). Si la configuración no tenía la regla para Information, habría muestreado el 10% de los registros de Warning y todos los niveles inferiores, 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.
- Anule el método LoggingSampler.ShouldSample para definir su lógica de muestreo personalizada.
- Registre su sampler personalizado en la canalización de registros mediante el método de extensión AddSampler.
Para cada registro de logs que no ha sido filtrado, el método LoggingSampler.ShouldSample se llama exactamente una vez. Su valor devuelto determina si se debe emitir el registro de eventos.
Consideraciones sobre el rendimiento
El muestreo de registros está diseñado para reducir los costos de almacenamiento, a cambio 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 | Asegúrate de 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 está utilizando el seguimiento distribuido, considere implementar el muestreo basado en trazas.
- 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.