Usa métricas basadas en registros

En esta página, se cubren los conceptos básicos de la emisión de registros para crear SLI de latencia y disponibilidad. También se proporcionan ejemplos de implementación de cómo definir SLO mediante métricas basadas en registros.

El uso de elementos de datos en las entradas de registro para crear indicadores de nivel de servicio es una manera fácil de aprovechar las cargas útiles de registro existentes. De lo contrario, es posible agregar registro a un servicio existente, que puede ser más fácil que crear instrumentación de métricas.

Registros y métricas

Los registros recopilan registros llamados entradas de registro que describen eventos específicos que ocurren en los sistemas informáticos. Los servicios son de código escrito por los servicios de plataforma en los que se ejecuta el código (por ejemplo, Dataflow) y la infraestructura de la que depende la plataforma (por ejemplo, instancias de Compute Engine).

Debido a que los registros en sistemas modernos descienden (y, a veces, siguen) archivos de texto escritos en el disco, una entrada de registro es analógica a una línea en un archivo de registro y se puede considerar la unidad de registro cuántica.

Una entrada de registro consta de dos elementos, como mínimo:

  • Una marca de tiempo que indica cuándo se produjo el evento o cuándo se transfirió al sistema de registro
  • La carga útil de texto, ya sea como datos de texto no estructurados o datos estructurados, por lo general, en JSON.

Los registros también pueden contener metadatos asociados, en especial cuando se transfieren a Cloud Logging. Esos metadatos pueden incluir el recurso que escribe el registro, el nombre del registro y una gravedad para cada entrada.

Registros

Los registros se utilizan con dos propósitos principales:

  • Los registros de eventos describen eventos específicos que ocurren dentro del sistema. Puedes usar los registros de eventos para enviar mensajes que informen a los usuarios que todo funciona bien (“tarea exitosa”) o para proporcionar información cuando falla una falla (“solicitud recibida del servidor”).
  • Los registros de transacciones describen los detalles de cada transacción procesada por un sistema o componente. Por ejemplo, un balanceador de cargas registra cada solicitud que recibe, si la solicitud se completa de forma correcta o no, y registra información adicional como la URL solicitada, el código de respuesta HTTP y, posiblemente, información como qué backend se usó para entregar la solicitud.

Métricas

A diferencia de los registros, las métricas, por lo general, no describen eventos específicos. Con frecuencia, se usan las métricas para representar el estado o el estado de un sistema a lo largo del tiempo. Una métrica consiste en una serie 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 datos, conocidos como una 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 el recurso. Para obtener más información sobre el modelo de métricas de Monitoring, consulta 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 mediante la extracción de información de entradas de registro y la transformación a datos de series temporales. Cloud Logging proporciona mecanismos para crear dos tipos de métricas a partir de entradas de registro:

  • Métricas de contadores, que cuentan la cantidad de entradas de registro que coinciden con un filtro en particular. Puedes usar una métrica de contador para determinar, por ejemplo, la cantidad de solicitudes o errores registrados en el registro.

  • Métricas de distribución, que usan expresiones regulares para analizar la carga útil en cada entrada de registro a fin de extraer valores numéricos como una distribución.

Para obtener más información sobre las métricas basadas en registros en Cloud Logging, consulta Usa métricas basadas en registros.

Usa métricas basadas en registros como SLI

Las métricas basadas en registros te permiten extraer datos de los registros de una forma que puedes usar para compilar SLI en Monitoring:

  • Puedes usar métricas de contador basadas en registros para expresar un SLI 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.

Ejemplos de entradas de registro

La aplicación de Stack Doctor es un ejemplo de un servicio instrumentado para emitir mensajes de registro que contienen información sobre todas las solicitudes, los errores y la latencia realizados 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 para cada tipo de evento incluye un valor message diferente. Las entradas de registro para diferentes tipos de eventos se ven de la siguiente manera:

  • En cada solicitud:

    {
     "insertId": "..........iTRVT5MOK2VOsVe31bzrTD",
     "jsonPayload": {
       "pid": 81846,
       "time": "Mon Aug 31 2020 20:30:49 GMT-0700 (Pacific Daylight Time)",
       "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 solicitudes exitosas, sucede lo siguiente:

    {
     "insertId": "..........qTRVT5MOK2VOsVe31bzrTD",
     "jsonPayload": {
       "name": "sli-log",
       "v": 0,
       "pid": 81846,
       "level": 30,
       "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 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": "",
       "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 solicitudes con errores:

    {
     "insertId": "..........DTRVT5MOK2VOsVe31bzrTD",
     "jsonPayload": {
       "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"
    }
    

En función de estas entradas, puedes crear métricas basadas en registros que cuenten todas las solicitudes, errores de recuento y seguimiento de la latencia de la solicitud. Luego, puedes usar las métricas basadas en registros para crear SLI de disponibilidad y latencia.

Crear métricas basadas en registros para SLI

Antes de poder crear SLI en métricas basadas en registros, debes crear las métricas basadas en registros.

  • Para los SLI de disponibilidad en los recuentos de solicitudes y errores, usa métricas de contador basadas en registros.
  • Para los SLI de latencia, usa métricas de distribución basadas en registros.

Después de crear tus métricas basadas en registros, puedes encontrarlas en Monitoring si las buscas en el Explorador de métricas. En Monitoring, las métricas basadas en registros tienen el prefijo logging.googleapis.com/user.

Métricas para los SLI de disponibilidad

Debes expresar un SLI de disponibilidad basado en solicitudes en la API de Cloud Monitoring mediante la estructura de TimeSeriesRatio para configurar una proporción de solicitudes “buenas” o “malas” a las solicitudes en total. Esta proporción se usa en el campo goodTotalRatio de una estructura RequestBasedSli.

Debes crear métricas de contador basadas en registros que se puedan usar para construir esta proporción. Debes crear al menos dos de los siguientes elementos:

  1. Una métrica que contabiliza el total de eventos. Usa esta métrica en la totalServiceFilter de la proporción.

    Para el ejemplo "stack-doctor", puedes crear una métrica basada en registros que cuente las entradas de registro en las que aparece la string de mensaje "request requested".

  2. En una métrica que cuenta los eventos “malos”, usa esta métrica en la badServiceFilter de la proporción.

    Para el ejemplo "stack-doctor", puedes crear una métrica basada en registros que cuenta las entradas de registro en las que aparece la string de mensajes "¡Error!".

  3. En una métrica que cuenta los eventos “buenos”, usa esta métrica en el goodServiceFilter de la proporción.

    Para el ejemplo "stack-doctor", puedes crear una métrica basada en registros que cuenta las entradas de registro en las que aparece la string de mensajes "¡Es un éxito!".

El SLI descrito para este ejemplo se basa en una métrica de solicitudes totales llamadas log_based_total_requests y una métrica para errores llamados log_based_errors.

Puedes crear métricas basadas en registros con Google Cloud Console, la API de Cloud Logging o la herramienta de línea de comandos de gcloud. Para crear métricas de contador basadas en registros mediante Cloud Console, puedes usar el siguiente procedimiento:

  1. En Cloud Console, selecciona Logging y, a continuación, selecciona Métricas basadas en registros.

    Ir a Métricas basadas en registros

    La página de métricas basadas en registros muestra una tabla de métricas definidas por el usuario y una tabla de métricas definidas por el sistema.

  2. Haz clic en Crear métrica, ubicado sobre la tabla de métricas definidas por el usuario.

  3. En el panel Tipo de métrica, selecciona Contador.

  4. En el panel Detalles, ingresa un nombre para la métrica nueva. Para el ejemplo “stack-doctor”, ingresa log_based_total_requests o log_based_errors.

    Puedes omitir los otros campos en este ejemplo.

  5. En el panel Selección de filtro, crea una consulta que recupere solo las entradas de registro que deseas contar en tu métrica.

    Para el ejemplo de "stack-doctor", la consulta para 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 para logs_based_errors cambia la string del mensaje:

    resource.type="global"
    logName="projects/stack-doctor/logs/bunyan_log"
    jsonPayload.message="failure!"
    
  6. Haga clic en Obtener vista previa de los registros para verificar su filtro y ajustarlo si es necesario.

  7. Ignora el panel Etiquetas de este ejemplo.

  8. Haz clic en Crear métrica para finalizar el procedimiento.

Para obtener más información sobre la creación de métricas de contadores basadas en registros, consulta Crea una métrica de contador.

Métricas para los SLI de latencia

Expresas un SLI de latencia basado en solicitudes en la API de Cloud Monitoring mediante una estructura DistributionCut, que se usa en el campo distributionCut de un RequestBasedSli. Debes crear una métrica de distribución basada en registros para crear un SLI de latencia. 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 con Google Cloud Console, la API de Cloud Logging o la herramienta de línea de comandos de gcloud. Para crear métricas de distribución basadas en registros mediante Cloud Console, puedes usar el siguiente procedimiento:

  1. En Cloud Console, selecciona Logging y, a continuación, selecciona Métricas basadas en registros.

    Ir a Métricas basadas en registros

    La página de métricas basadas en registros muestra una tabla de métricas definidas por el usuario y una tabla de métricas definidas por el sistema.

  2. Haz clic en Crear métrica, ubicado sobre la tabla de métricas definidas por el usuario.

  3. En el panel Tipo de métrica, selecciona Distribución.

  4. En el panel Detalles, ingresa un nombre para la métrica nueva. Para el ejemplo "stack-doctor", ingresa log_based_latency.

    Puedes omitir los otros campos en este ejemplo.

  5. En el panel Selección de filtro, crea una consulta que recupere solo las entradas de registro que deseas contar en tu métrica.

    Para el ejemplo de "stack-doctor", la consulta para log_based_latency podría incluir lo siguiente:

    resource.type="global"
    logName="projects/stack-doctor/logs/bunyan_log"
    jsonPayload.message="slept for"
    

    Especifica los siguientes campos para la consulta de filtro:

    • Nombre del campo: json.message
    • Expresión regular: \s(\d*)\s

      La string de mensaje para solicitudes completadas tiene el formato "slept h" n ms". La expresión regular extrae el valor de latencia n de la string.

  6. Ignora el panel Etiquetas de este ejemplo.

  7. Haz 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 Crea métricas de distribución.

SLI de disponibilidad

En Cloud Monitoring, expresas un SLI de disponibilidad basado en solicitudes con 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 SLO espera que la proporción de “buenas” a solicitudes totales sea al menos del 98% en un período continuo 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"
}

SLI de latencia

En Cloud Monitoring, expresas un SLI de latencia basado en solicitudes con 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 estén por debajo de 500 ms en un período de 24 horas progresivas:

{
  "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