En esta página se explican los conceptos básicos para emitir registros con el fin de crear SLIs de disponibilidad y latencia. También se proporcionan ejemplos de implementación de cómo definir SLOs mediante métricas basadas en registros.
Usar elementos de datos en las entradas de registro para crear indicadores de nivel de servicio es una forma de aprovechar las cargas útiles de registro. De lo contrario, puede que sea posible añadir registros a un servicio que ya tengas, lo que puede ser más fácil que crear una instrumentación de métricas.
Registros y métricas
Los registros recogen registros denominados entradas de registro que describen eventos específicos que tienen lugar en los sistemas informáticos. El código escribe los registros, así como los servicios de la plataforma en la que se ejecuta el código (por ejemplo, Dataflow) y la infraestructura de la que depende la plataforma (por ejemplo, las instancias de Compute Engine).
Como los registros de los sistemas modernos proceden de archivos de texto escritos en el disco (y, en ocasiones, siguen siendo archivos de texto), una entrada de registro es análoga a una línea de un archivo de registro y se puede considerar la unidad cuántica del registro.
Una entrada de registro consta como mínimo de dos elementos:
- Marca de tiempo que indica cuándo se produjo el evento o cuándo se ingirió en el sistema de registro
- La carga útil de texto, ya sea como datos de texto sin estructurar o como datos estructurados, normalmente en formato JSON.
Los registros también pueden incluir metadatos asociados, sobre todo cuando se ingieren en Cloud Logging. Estos metadatos pueden incluir el recurso que escribe el registro, el nombre del registro y la gravedad de cada entrada.
Registros
Los registros se usan con dos fines principales:
- Los registros de eventos describen eventos específicos que tienen lugar en el sistema. Puedes usar los registros de eventos para mostrar mensajes que aseguren a los usuarios que todo funciona correctamente ("tarea completada") o para proporcionar información cuando algo falla ("se ha recibido una excepción del servidor").
- Los registros de transacciones describen los detalles de cada transacción procesada por un sistema o un componente. Por ejemplo, un balanceador de carga registra todas las solicitudes que recibe, tanto si se completan correctamente como si no, y registra información adicional, como la URL solicitada, el código de respuesta HTTP y, posiblemente, información como el backend que se ha usado para atender la solicitud.
Métricas
A diferencia de los registros, las métricas no suelen describir eventos específicos. Lo más habitual es que las métricas se usen para representar el estado o el buen funcionamiento de un sistema a lo largo del tiempo. Una métrica se compone de una serie de puntos de datos que miden algo sobre tu sistema. Cada punto de datos incluye una marca de tiempo y un valor numérico.
Las métricas también pueden tener metadatos asociados. La serie de puntos de datos, denominada serie temporal, puede incluir información como el nombre de la métrica, una descripción y, a menudo, etiquetas que especifican qué recurso escribe los datos. Para obtener información sobre el modelo de métricas de Monitoring, consulta el artículo Métricas, series temporales y recursos.
Métricas basadas en registros
Las métricas basadas en registros son métricas creadas a partir de entradas de registro. Para ello, se extrae información de las entradas de registro y se transforma en datos de serie temporal. Cloud Logging ofrece mecanismos para crear dos tipos de métricas a partir de entradas de registro:
Las métricas de contador, que cuentan el número de entradas de registro que coinciden con un filtro concreto. Puede usar una métrica de contador para determinar, por ejemplo, el número de solicitudes o errores registrados en el registro.
Métricas de distribución: usan expresiones regulares para analizar la carga útil de cada entrada de registro y extraer valores numéricos como distribución.
Para obtener más información sobre las métricas basadas en registros en Cloud Logging, consulta el artículo Usar métricas basadas en registros.
Usar métricas basadas en registros como indicadores de nivel de servicio
Las métricas basadas en registros te permiten extraer datos de los registros en un formato que puedes usar para crear SLIs en Monitoring:
Puede usar métricas de contador basadas en registros para expresar un indicador de nivel de servicio de disponibilidad basado en solicitudes.
Puedes usar una métrica de distribución basada en registros para expresar un SLI de latencia basado en solicitudes.
Entradas de registro de ejemplo
La aplicación Stack Doctor es un ejemplo de un servicio instrumentado
para emitir mensajes de registro que contienen información sobre todas las solicitudes, errores
y latencias realizadas al servicio. El código del servicio está disponible en el repositorio de GitHub stack-doctor
.
El servicio genera entradas de registro de Cloud Logging en el registro projects/stack-doctor/logs/bunyan_log
. La entrada de registro de cada tipo de evento incluye un valor message
diferente. Las entradas de registro de los distintos tipos de eventos tienen el siguiente aspecto:
En cada solicitud:
{ "insertId": "..........iTRVT5MOK2VOsVe31bzrTD", "jsonPayload": { "pid": 81846, "time": "Mon Aug 31 2020 20:30:49 GMT-0700 (Pacific Daylight Time)", "hostname": "<hostname>", "level": 30, "message": "request made", "v": 0, "name": "sli-log" }, "resource": { "type": "global", "labels": { "project_id": "stack-doctor" } }, "timestamp": "2020-09-01T03:30:49.263999938Z", "severity": "INFO", "logName": "projects/stack-doctor/logs/bunyan_log", "receiveTimestamp": "2020-09-01T03:30:50.003471183Z" }
En las solicitudes correctas:
{ "insertId": "..........qTRVT5MOK2VOsVe31bzrTD", "jsonPayload": { "name": "sli-log", "v": 0, "pid": 81846, "level": 30, "hostname": "<hostname>", "time": "Mon Aug 31 2020 20:30:49 GMT-0700 (Pacific Daylight Time)", "message": "success!" }, "resource": { "type": "global", "labels": { "project_id": "stack-doctor" } }, "timestamp": "2020-09-01T03:30:49.874000072Z", "severity": "INFO", "logName": "projects/stack-doctor/logs/bunyan_log", "receiveTimestamp": "2020-09-01T03:30:50.201547371Z" }
En las solicitudes completadas:
{ "insertId": "..........mTRVT5MOK2VOsVe31bzrTD", "jsonPayload": { "time": "Mon Aug 31 2020 20:30:49 GMT-0700 (Pacific Daylight Time)", "level": 30, "name": "sli-log", "message": "slept for 606 ms", "hostname": "<hostname>", "pid": 81846, "v": 0 }, "resource": { "type": "global", "labels": { "project_id": "stack-doctor" } }, "timestamp": "2020-09-01T03:30:49.874000072Z", "severity": "INFO", "logName": "projects/stack-doctor/logs/bunyan_log", "receiveTimestamp": "2020-09-01T03:30:50.201547371Z" }
En caso de error:
{ "insertId": "..........DTRVT5MOK2VOsVe31bzrTD", "jsonPayload": { "hostname": "<hostname>", "level": 50, "pid": 81846, "message": "failure!", "name": "sli-log", "time": "Mon Aug 31 2020 20:30:44 GMT-0700 (Pacific Daylight Time)", "v": 0 }, "resource": { "type": "global", "labels": { "project_id": "stack-doctor" } }, "timestamp": "2020-09-01T03:30:44.414999961Z", "severity": "ERROR", "logName": "projects/stack-doctor/logs/bunyan_log", "receiveTimestamp": "2020-09-01T03:30:46.182157077Z" }
A partir de estas entradas, puede crear métricas basadas en registros que cuenten todas las solicitudes, los errores y la latencia de las solicitudes. Después, puedes usar las métricas basadas en registros para crear SLIs de disponibilidad y latencia.
Crear métricas basadas en registros para los indicadores de nivel de servicio.
Antes de crear indicadores de nivel de servicio basados en métricas basadas en registros, debes crear las métricas basadas en registros.
- Para los SLIs de disponibilidad basados en recuentos de solicitudes y errores, utilice métricas de contador basadas en registros.
- En el caso de los SLIs de latencia, usa métricas de distribución basadas en registros.
Una vez que haya creado las métricas basadas en registros, podrá encontrarlas en Monitoring buscándolas en el explorador de métricas. En Monitoring, las métricas basadas en registros
tienen el prefijo logging.googleapis.com/user
.
Métricas de los SLIs de disponibilidad
En la API de Cloud Monitoring, puedes expresar un SLI de disponibilidad basado en solicitudes mediante la estructura TimeSeriesRatio
para configurar una proporción de solicitudes "buenas" o "malas" con respecto al total de solicitudes. Esta proporción se usa en el campo goodTotalRatio
de una estructura RequestBasedSli
.
Debe crear métricas de contador basadas en registros que se puedan usar para crear esta proporción. Debes crear al menos dos de los siguientes elementos:
Métrica que cuenta el total de eventos. Úsala en el denominador de la proporción.
totalServiceFilter
En el ejemplo de "stack-doctor", puede crear una métrica basada en registros que cuente las entradas de registro en las que aparezca la cadena de mensaje "request made".
Métrica que cuenta los eventos "incorrectos". Úsala en el
badServiceFilter
de la relación.En el ejemplo de "stack-doctor", puede crear una métrica basada en registros que cuente las entradas de registro en las que aparezca la cadena de mensaje "failure!".
Métrica que cuenta los eventos "buenos". Úsala en las ratios.
goodServiceFilter
En el ejemplo de "stack-doctor", puedes crear una métrica basada en registros que cuente las entradas de registro en las que aparezca la cadena de mensaje "success!".
El SLI descrito en este ejemplo se basa en una métrica de solicitudes totales llamada log_based_total_requests
y en una métrica de errores llamada log_based_errors
.
Puedes crear métricas basadas en registros mediante la Google Cloud consola, la API de Cloud Logging o la CLI de Google Cloud. Para crear métricas de contador basadas en registros con la consola Google Cloud , puedes seguir este procedimiento:
-
En la Google Cloud consola, ve a la página Métricas basadas en registros:
Ve a Métricas basadas en registros.
Si usas la barra de búsqueda para encontrar esta página, selecciona el resultado cuya sección sea Registro.
En la página de métricas basadas en registros se muestran dos tablas: una con las métricas definidas por el usuario y otra con las métricas definidas por el sistema.
Haz clic en Crear métrica, situado encima de la tabla de métricas definidas por el usuario.
En el panel Tipo de métrica, selecciona Contador.
En el panel Detalles, asigne un nombre a la nueva métrica. En el ejemplo de "stack-doctor", introduce
log_based_total_requests
olog_based_errors
.En este ejemplo, puedes ignorar los demás campos.
En el panel Selección de filtros, cree una consulta que recupere solo las entradas de registro que quiera incluir en su métrica.
En el ejemplo de "stack-doctor", la consulta de
log_based_total_requests
podría incluir lo siguiente:resource.type="global" logName="projects/stack-doctor/logs/bunyan_log" jsonPayload.message="request made"
La consulta de
logs_based_errors
cambia la cadena del mensaje:resource.type="global" logName="projects/stack-doctor/logs/bunyan_log" jsonPayload.message="failure!"
Haz clic en Vista previa de registros para comprobar el filtro y ajústalo si es necesario.
En este ejemplo, ignora el panel Etiquetas.
Haga clic en Crear métrica para finalizar el procedimiento.
Para obtener más información sobre cómo crear métricas de contador basadas en registros, consulta el artículo Crear una métrica de contador.
Métricas de los SLIs de latencia
Para expresar un SLI de latencia basado en solicitudes en la API Cloud Monitoring, se usa una estructura DistributionCut
, que se utiliza en el campo distributionCut
de una estructura RequestBasedSli
.
Para crear un SLI de latencia, debes crear una métrica de distribución basada en registros.
En este ejemplo, se crea una métrica de distribución basada en registros llamada log_based_latency.
.
Puedes crear métricas basadas en registros mediante la Google Cloud consola, la API de Cloud Logging o la CLI de Google Cloud. Para crear métricas de distribución basadas en registros con la consola Google Cloud , puedes seguir este procedimiento:
-
En la Google Cloud consola, ve a la página Métricas basadas en registros:
Ve a Métricas basadas en registros.
Si usas la barra de búsqueda para encontrar esta página, selecciona el resultado cuya sección sea Registro.
En la página de métricas basadas en registros se muestran dos tablas: una con las métricas definidas por el usuario y otra con las métricas definidas por el sistema.
Haz clic en Crear métrica, situado encima de la tabla de métricas definidas por el usuario.
En el panel Tipo de métrica, selecciona Distribución.
En el panel Detalles, asigne un nombre a la nueva métrica. En el ejemplo "stack-doctor", introduce
log_based_latency
.En este ejemplo, puedes ignorar los demás campos.
En el panel Selección de filtros, cree una consulta que recupere solo las entradas de registro que quiera incluir en su métrica.
En el ejemplo de "stack-doctor", la consulta de
log_based_latency
podría incluir lo siguiente:resource.type="global" logName="projects/stack-doctor/logs/bunyan_log" jsonPayload.message="slept for"
Especifique los siguientes campos de la consulta de filtro:
- Nombre del campo:
json.message
Expresión regular:
\s(\d*)\s
La cadena de mensaje de las solicitudes completadas tiene el formato "slept for n ms". La expresión regular extrae el valor de latencia n de la cadena.
- Nombre del campo:
En este ejemplo, ignora el panel Etiquetas.
Haga clic en Crear métrica para finalizar el procedimiento.
Para obtener más información sobre cómo crear métricas de distribución basadas en registros, consulta el artículo Crear métricas de distribución.
Indicadores de nivel de servicio de disponibilidad
En Cloud Monitoring, se expresa una SLI de disponibilidad basada en solicitudes mediante una estructura TimeSeriesRatio
. En el siguiente ejemplo se muestra un SLO que usa las métricas log_based_total_requests
y log_based_errors
en la proporción. Este objetivo de nivel de servicio espera que la proporción de solicitudes correctas con respecto al total sea de al menos el 98% en un periodo de 24 horas.
{
"serviceLevelIndicator": {
"requestBased": {
"goodTotalRatio": {
"totalServiceFilter":
"metric.type=\"logging.googleapis.com/user/log_based_total_requests\"
resource.type=\"global\"",
"badServiceFilter":
"metric.type=\"logging.googleapis.com/user/log_based_errors\"
resource.type=\"global\""
}
}
},
"goal": 0.98,
"rollingPeriod": "86400s",
"displayName": "Log-Based Availability"
}
Indicadores de nivel de servicio de latencia
En Cloud Monitoring, se expresa un SLI de latencia basado en solicitudes mediante una estructura DistributionCut
. En el siguiente ejemplo se muestra un SLO que usa la métrica log_based_latency
y espera que el 98% de las solicitudes se completen en menos de 500 ms durante un periodo de 24 horas continuas:
{
"serviceLevelIndicator": {
"requestBased": {
"distributionCut": {
"distributionFilter":
"metric.type=\"logging.googleapis.com/user/log_based_latency\"
resource.type=\"global\"",
"range": {
"min": 0,
"max": 500
}
}
}
},
"goal": 0.98,
"rollingPeriod": "86400s",
"displayName": "98% requests under 500 ms"
}
Recursos adicionales
- ¿Puedo configurar alertas en Stackdriver a partir de los registros? | de Yuri Grinshteyn
- Configurar notificaciones de métricas basadas en registros | Cloud Logging
- Extraer valor de los registros con métricas basadas en registros