Observabilidad de servicios - Mirror Strategy
Los servicios del proyecto estarán reportando su estado mediante dos vías: reporte de logs y reporte de métricas.
Reporte de logs
Estados reportados en los logs
Para el monitoreo de logs el Equipo de Observabilidad indicó que se toman en cuenta los siguientes niveles:
CRITICAL: Problemas críticos que impiden el funcionamiento de la aplicación.
ERROR: Errores en la aplicación que deben recibir atención inmediata.
WARN: eventos que requieren atención pero no generan alertas.
INFO: Información sobre eventos sin acciones específicas.
Los logs generados serian enviados en un formato JSON con la siguiente estructura:
{
"severity": "info",
"timestamp": "1585961710",
"environment": "prd",
"host": "AWWEB02",
"service_id": "your-awesome-api",
"request_id": "69f3a771-120a-4e0b-a432-b5ae781b8a95",
"client_id": "b265aca6-60f8-4b59-bb68-f011bcc6993d",
"x_forwarded_for": "201.103.53.49",
"operation": "received_request",
"message": {
"headers": {
"Connection": "Keep-Alive",
"Content-Type:": "text/json; charset=utf-8"
},
"mode": "cors",
"credentials": {},
"method": "POST",
"referrer": "201.103.53.49",
"url": "https://api.myblog.com/v1/posts",
"body": {
"title": "How to ride a bike",
"content": "Its easy, just pedal.",
"category": "sports"
}
}
}
Los campos reportados son los siguientes:
severity: Nivel de gravedad del registro: debug | info | warning | error | critical.
timestamp: Marca de tiempo UNIX que representa el momento en que se registró el log.
environment: Entorno en el que se registra el log: dev | stg | prd.
host: Dirección IP o nombre del servidor (o contenedor) donde se registra el log.
service_id: Identificador único del servicio, por ejemplo ffss-account-aggregation-service.
request_id: UUID generado por API Gateway o Lambda Context que representa de manera única la solicitud.
client_id: Id del cliente que originó la solicitud.
x_forwarded_for: Lista de direcciones IP por las que ha pasado la solicitud. En una API pública, generalmente solo contiene la dirección IP del usuario que originó la solicitud.
operation: Operación realizada, por ejemplo: received_request (solicitud recibida), sent_response (respuesta enviada), sent_request (solicitud enviada), received_response (respuesta recibida), event (evento), exception (excepción).
message: Detalles del contenido que dan propósito al log.
metadata: [opcional] Si es necesario para tu aplicación, puedes incluir un objeto con metadatos sobre el log.
Tipos de logs reportados por los servicios
Servicio | Nivel | Tipo | Descripción |
---|---|---|---|
Todos | INFO | Información general | Registro de inicio del servicio |
Todos | INFO | Trazabilidad de llamados | Registro de llamados a servicios |
Todos | ERROR | Errores de validación | Registros de errores o problemas de validación de datos. |
Todos | ERROR | Comunicación entre servicios | Registro de fallas en la comunicación entre servicios. |
Servicios de Mirror | ERROR | Excepciones o errores | Registro de excepciones y errores encontrados durante operaciones de base de datos. |
Servicios de Mirror | ERROR | Comunicación con base de datos | Registro de fallas en la comunicación entre servicios. |
Servicios de Mirror | WARN | Inconsistencia en Mirror | Si el feature flag se encuentra desactivado y durante una lectura el valor que arroje el proveedor difiere del valor almacenado |
Balance Mirror | WARN | Inconsistencia en saldo | Si después de una escritura el saldo proyectado difiere del saldo almacenado |
Servicios de gateway | ERROR | Comunicación con proveedores | Registro de fallas en comunicación con el proveedor |
Reporte de métricas
Métricas de uso de servicios
Servicio | Tipo de Métrica | Variable | Objetivo |
---|---|---|---|
Servicios de Agregación | Tiempo de respuesta | tiempo | Medir el tiempo de respuesta del servicio para identificar posibles problemas de rendimiento. |
Servicios de Agregación | Tasa de solicitudes | contador | Contar la cantidad de solicitudes recibidas en un período de tiempo para monitorear la carga del servicio. |
Servicios de Mirror | Duración de consultas a bases de datos | tiempo | Medir el tiempo que toman las consultas a bases de datos para identificar posibles cuellos de botella. |
Servicios de Mirror | Sincronizaciones de bases de datos | contador | Contar la cantidad de veces que se sincroniza el la base de datos con el proveedor |
Servicios de gateway | Tiempo de respuesta a servicios externos | tiempo | Medir el tiempo de respuesta al interactuar con servicios externos para identificar cuellos de botella. |
Servicios de gateway | Tasa de errores en adaptadores | contador | Contar la cantidad de errores o problemas al interactuar con adaptadores externos para monitorear la estabilidad. |
Servicios de gateway | Latencia en solicitudes externas | tiempo | Medir la latencia en las solicitudes externas para identificar posibles problemas de rendimiento. |
Métricas del negocio
Estas métricas no son generadas mediante los servicios aunque si determinan su capacidad y proyección.
Métrica | Descripción |
---|---|
Clientes activos | Determina el número de clientes que usan el servicio |
Tasa de crecimiento de clientes | Permite proyectar el futuro aprovisionamiento de servicios |
Número de llamados a los servicios por cliente activo | Permite identificar el costo del servicio (En el caso de Fiserv para menos de 30 llamados por cliente activo no tiene costo adicional) |
Número de transacciones | Permite proyectar el futuro consumo de servicios |