← Volver a Middleware

GrafanaLoggingMiddleware

Middleware especializado para logging estructurado en Grafana Loki con métricas optimizadas

📊 Resumen del Middleware

254
Líneas de Código
3
Tipos de Eventos
Loki
Optimizado para
JSON
Formato Logs

El GrafanaLoggingMiddleware es un componente especializado del sistema RestMaster diseñado específicamente para logging estructurado optimizado para Grafana Loki. Este middleware captura información detallada de las peticiones HTTP y las envía con etiquetas y metadatos optimizados para consultas eficientes en Grafana.

🎯 Funcionalidades Principales

  • Logging estructurado: Captura completa de información de peticiones
  • Optimización para Loki: Etiquetas y metadatos optimizados para consultas
  • Métricas de rendimiento: Medición precisa de duración de peticiones
  • Identificadores únicos: RequestId, TraceId y CorrelationId
  • Categorización automática: Clasificación de códigos de estado y duración
  • Contexto de usuario: Información de autenticación y claims
  • Headers importantes: Captura de headers relevantes
  • Logging dual: Console + Grafana Loki

🔧 Dependencias y Servicios

Servicios Inyectados por Constructor:

  • RequestDelegate next - Pipeline de middleware
  • ILogger<GrafanaLoggingMiddleware> - Logging de eventos

📊 Dependencias de Serilog

  • Serilog: Framework de logging estructurado
  • LogContext: Contexto de logging con propiedades
  • LogEventLevel: Niveles de logging estructurados
  • JsonSerializer: Serialización JSON de datos

📋 Flujo de Procesamiento

🎯 Pipeline de Logging

  1. Inicio de petición: Genera RequestId único y captura tiempo
  2. Configuración de contexto: Establece LogContext con identificadores
  3. Log de inicio: Registra información de petición entrante
  4. Ejecución del pipeline: Continúa con el resto de middlewares
  5. Medición de duración: Calcula tiempo total de procesamiento
  6. Log de finalización: Registra resultado y métricas
  7. Manejo de errores: Captura excepciones y las re-lanza
  8. Log de error: Registra errores con contexto completo

⚠️ Características de Logging

  • No bloqueante: No interfiere con el flujo principal
  • Re-lanzamiento de excepciones: Permite que ErrorHandlingMiddleware las maneje
  • Contexto preservado: Mantiene información entre eventos
  • Optimización de memoria: Uso eficiente de recursos

📊 Tipos de Eventos de Logging

🚀 RequestStart

Inicio de petición HTTP
  • Método y ruta
  • RequestId único
  • Información de usuario
  • IP remota y local
  • Headers importantes

✅ RequestEnd

Finalización exitosa de petición
  • Código de estado HTTP
  • Duración de procesamiento
  • Tamaño de respuesta
  • Tipo de contenido
  • Métricas de rendimiento

❌ RequestError

Error durante el procesamiento
  • Tipo de excepción
  • Mensaje de error
  • Stack trace
  • Duración hasta el error
  • Contexto de la petición

🏷️ Etiquetas y Metadatos para Grafana

🎯 Etiquetas Optimizadas para Loki

  • method: GET, POST, PUT, DELETE, etc.
  • path: Primer segmento del path para agrupación
  • status_code: 200, 400, 500, etc.
  • status_category: success, client_error, server_error
  • duration_category: fast, normal, slow, very_slow
  • user_type: anonymous, authenticated
  • exception_type: Tipo de excepción (solo en errores)

📊 Categorización Automática

  • Códigos de estado:
    • 200-299: success
    • 300-399: redirect
    • 400-499: client_error
    • 500+: server_error
  • Duración:
    • < 100ms: fast
    • 100-500ms: normal
    • 500-1000ms: slow
    • > 1000ms: very_slow

📈 Datos Estructurados Capturados

🎯 Información de Petición

  • Identificadores: RequestId, TraceId, CorrelationId
  • Método y ruta: HTTP method y path completo
  • Query string: Parámetros de consulta
  • User Agent: Información del cliente
  • IP y puerto: Dirección remota y local
  • Usuario: Información de autenticación
  • Claims: Claims del JWT token
  • Headers: Headers importantes filtrados

📊 Información de Respuesta

  • Código de estado: HTTP status code
  • Duración: Tiempo total de procesamiento
  • Tamaño de contenido: ContentLength
  • Tipo de contenido: ContentType
  • Éxito: Indicador de éxito/fallo
  • Timestamp: Marca de tiempo UTC
  • Entorno: ASPNETCORE_ENVIRONMENT

🔍 Características Técnicas

🎯 Características del Middleware

  • Async/Await: Operaciones asíncronas completas
  • Stopwatch: Medición precisa de duración
  • LogContext: Contexto de logging estructurado
  • JSON Serialization: Datos estructurados para Loki
  • Exception Handling: Captura y re-lanzamiento de excepciones
  • Performance Monitoring: Métricas detalladas de rendimiento
  • User Context: Información de autenticación
  • Header Filtering: Captura de headers relevantes

⚠️ Consideraciones de Privacidad

  • Filtra headers sensibles automáticamente
  • No captura cuerpos de petición/respuesta
  • Maneja información de usuario de forma segura
  • No expone tokens de autenticación completos
  • Logging de claims limitado a información relevante
  • IPs registradas para auditoría de seguridad

📝 Patrones de Diseño Utilizados

  • Middleware Pattern: Procesamiento en pipeline
  • Observer Pattern: Observación de eventos HTTP
  • Context Pattern: LogContext para información compartida
  • Strategy Pattern: Diferentes estrategias de logging
  • Template Method: Estructura común de logging
  • Decorator Pattern: Enriquecimiento de información

📈 Estadísticas de Rendimiento

O(1)
Complejidad Captura
Stopwatch
Precisión Temporal
JSON
Formato Datos
Loki
Optimizado para

Optimizaciones Implementadas:

🔗 Integración con Grafana Loki

🎯 Configuración para Loki

  • Etiquetas optimizadas: Diseñadas para consultas eficientes
  • Datos estructurados: JSON serializado para parsing
  • Timestamps UTC: Consistencia temporal
  • Categorización automática: Facilita filtrado y agrupación
  • Identificadores únicos: Para correlación de eventos

📊 Consultas de Ejemplo para Grafana

  • Errores por endpoint: {status_category="server_error"}
  • Peticiones lentas: {duration_category="slow"}
  • Usuarios autenticados: {user_type="authenticated"}
  • Método específico: {method="POST"}
  • Path específico: {path="api"}
  • Excepciones: {exception_type!=""}

🔗 Integración con Otros Componentes

🎯 Middleware Relacionados

  • ErrorHandlingMiddleware: Complementa el logging de errores
  • DayOpenValidationMiddleware: Logging de validaciones de día
  • JwtLoggingMiddleware: Información de autenticación
  • SpanishCultureMiddleware: Configuración cultural

📋 Orden de Ejecución Recomendado

  1. SpanishCultureMiddleware: Configuración de cultura
  2. GrafanaLoggingMiddleware: Logging de inicio (primero)
  3. JwtLoggingMiddleware: Logging de autenticación
  4. DayOpenValidationMiddleware: Validación de día abierto
  5. ErrorHandlingMiddleware: Manejo de errores (último)

📋 Casos de Uso

🎯 Escenarios de Logging

  • Monitoreo de rendimiento: Identificación de endpoints lentos
  • Análisis de errores: Patrones de errores por endpoint
  • Auditoría de seguridad: Seguimiento de accesos y autenticación
  • Análisis de uso: Métodos y rutas más utilizadas
  • Correlación de eventos: Seguimiento de peticiones específicas
  • Alertas proactivas: Detección de patrones anómalos
  • Reportes de negocio: Métricas de uso de la API

🔍 Ejemplos de Análisis

  • Performance: "Endpoint /api/articulos/getall tiene duración promedio de 500ms"
  • Errores: "50% de errores 500 ocurren en /api/invoice/add"
  • Usuarios: "Usuario admin realiza 80% de operaciones POST"
  • Geografía: "Mayor tráfico desde IP 192.168.1.100"
  • Temporal: "Pico de actividad entre 12:00-14:00"