Servicios de procesamiento de datos

Los Google Cloud servicios de datos que se describen en esta página incluyen aquellos que procesan los datos proporcionados y generan los resultados de ese procesamiento, ya sea en respuesta a una solicitud o de forma continua. En lugar de usar la disponibilidad y la latencia como SLIs principales de estos servicios, es más adecuado usar los siguientes:

  • Corrección: medida de la cantidad de errores de procesamiento que se producen en la canalización.
  • Actualización: una métrica que indica la velocidad con la que se procesan los datos.

Para obtener más información sobre los flujos de procesamiento de datos desde la perspectiva de SRE, consulta Flujos de procesamiento de datos en el libro de trabajo de Site Reliability Engineering.

Para expresar un SLI de corrección basado en solicitudes, usa la estructura TimeSeriesRatio para configurar una proporción de elementos que han tenido problemas de procesamiento con respecto a todos los elementos procesados. Tú decides cómo filtrar la métrica usando las etiquetas disponibles para llegar a la determinación que prefieras de los totales de "problemas" y "válidos".

Para expresar un indicador de nivel de servicio de actualización basado en solicitudes, usa una estructura DistributionCut.

Dataflow

Dataflow es un servicio totalmente gestionado de analíticas en tiempo real que minimiza la latencia, el tiempo de procesamiento y los costes. Puedes usar Dataflow para procesar datos como un flujo o por lotes con el SDK de Apache Beam.

Para obtener más información, consulta lo siguiente:

Indicadores de nivel de servicio de corrección

Dataflow escribe datos de métricas en Cloud Monitoring mediante el tipo de recurso monitorizado dataflow_job y el tipo de métrica job/element_count, que cuenta el número de elementos añadidos a la PCollection hasta el momento. Si sumas la etiqueta de recurso job_name , obtendrás el número de elementos que debe procesar la tarea.

Por otra parte, puede usar el tipo de métrica logging.googleapis.com/log_entry_count con el tipo de recurso supervisado dataflow_job para contar el número de errores registrados por un trabajo concreto mediante la etiqueta de métrica severity.

Puedes usar estas métricas para expresar un SLI de corrección basado en solicitudes como una fracción de errores y todos los elementos procesados mediante una estructura TimeSeriesRatio, como se muestra en el siguiente ejemplo:

"serviceLevelIndicator": {
  "requestBased": {
    "goodTotalRatio": {
      "totalServiceFilter":
        "metric.type=\"dataflow.googleapis.com/job/element_count\"
         resource.type=\"dataflow_job\"
         resource.label.\"job_name\"=\"my_job\"",
      "badServiceFilter":
        "metric.type=\"logging.googleapis.com/log_entry_count\"
         resource.type=\"dataflow_job\"
         resource.label.\"job_name\"=\"my_job\"
         metric.label.\"severity\"=\"error\"",
    }
  }
}

Indicadores de nivel de servicio de actualización

Dataflow también escribe datos de métricas en Cloud Monitoring con el tipo de recurso monitorizado dataflow_job y el tipo de métrica job/per_stage_system_lag, que mide la duración máxima actual durante la cual un elemento de datos se ha procesado o ha esperado a procesarse.

Puedes expresar un SLI de actualización con esta métrica mediante una estructura DistributionCut.

El siguiente ejemplo de SLO espera que el elemento de datos más antiguo se procese en menos de 100 segundos el 99% del tiempo durante un periodo de una hora:

{
  "serviceLevelIndicator": {
    "requestBased": {
      "distributionCut": {
        "distributionFilter":
          "metric.type=\"dataflow.googleapis.com/job/per_stage_system_lag\"
           resource.type=\"dataflow_job\"
           resource.label.\"job_name\"=\"my_job\"",
        "range": {
          "min": 0,
          "max": 100
        }
      }
    }
  },
  "goal": 0.99,
  "rollingPeriod": "3600s",
  "displayName": "99% data elements processed under 100 s"
}

También puedes expresar un SLI de actualización mediante una estructura WindowsBasedSli.

El siguiente ejemplo de SLO espera que el 99% de las ventanas de cinco minutos durante un periodo de un día no tengan ningún elemento procesado en más de 100 segundos:

{
  "displayName": "Dataflow - windowed freshness",
  "serviceLevelIndicator": {
    "windowsBased": {
      "windowPeriod": "300s",
      "metricMeanInRange": {
        "timeSeries":
          "metric.type=\"dataflow.googleapis.com/job/per_stage_system_lag\"
           resource.type=\"dataflow_job\"
           resource.label.\"job_name\"=\"my_job\"",
        "range": {
          "min": "0",
          "max": "100"
        }
      }
    }
  },
  "goal": 0.99,
  "rollingPeriod": "86400s"
}

Ten en cuenta que, para que una ventana se considere "buena", la métrica no puede superar el umbral especificado en range en ningún momento durante la ventana de evaluación.

Dataproc

Dataproc proporciona un clúster totalmente gestionado y diseñado para fines específicos que puede escalarse automáticamente para adaptarse a cualquier tarea de procesamiento de datos o analíticas de Hadoop o Spark.

Para obtener más información, consulta lo siguiente:

Indicadores de nivel de servicio de corrección

Dataproc escribe datos de métricas en Cloud Monitoring mediante el tipo de recurso monitorizado cloud_dataproc_cluster y los siguientes tipos de métricas:

Puedes usar estas métricas para expresar un SLI de corrección basado en solicitudes como una proporción, TimeSeriesRatio, de las tareas fallidas con respecto a todas las tareas enviadas, como se muestra en el siguiente ejemplo:

"serviceLevelIndicator": {
  "requestBased": {
    "goodTotalRatio": {
      "totalServiceFilter":
        "metric.type=\"dataproc.googleapis.com/cluster/job/submitted_count\"
         resource.type=\"cloud_dataproc_cluster\"
         resource.label.\"cluster_name\"=\"my_cluster\"",
      "badServiceFilter":
        "metric.type=\"dataproc.googleapis.com/cluster/job/failed_count\"
         resource.type=\"cloud_dataproc_cluster\"
         resource.label.\"cluster_name\"=\"my_cluster\"",
    }
  }
}

Indicadores de nivel de servicio de actualización

Dataproc también escribe datos de métricas en Cloud Monitoring con el tipo de recurso monitorizado cloud_dataproc_cluster y los siguientes tipos de métricas:

  • cluster/job/duration, que mide el tiempo que permanecen los trabajos en estados de procesamiento. Puede filtrar los datos por la etiqueta de métrica state para identificar el tiempo que se ha dedicado a estados específicos. Por ejemplo, puedes crear un SLI que mida cuánto tiempo permanecen los trabajos en el estado PENDING para definir un tiempo de espera máximo permitido antes de que el trabajo empiece a procesarse.
  • cluster/job/completion_time, que mide el tiempo que permanecen los trabajos en la métrica cluster/job/completion_time. Úsala cuando la finalización de las tareas sea una métrica bien definida o cuando el volumen de datos procesados por las tareas de un clúster no varíe, lo que afectaría al tiempo de procesamiento.

Puede expresar un SLI de actualización mediante estas métricas con una estructura DistributionCut, como se muestra en los siguientes ejemplos.

El siguiente ejemplo de SLO usa cluster/job/duration y espera que el 99% de los trabajos de "my_cluster" estén en el estado PENDING durante menos de 100 segundos en un periodo continuo de 24 horas:

{
  "serviceLevelIndicator": {
    "requestBased": {
      "distributionCut": {
        "distributionFilter":
          "metric.type=\"dataproc.googleapis.com/cluster/job/duration\"
           resource.type=\"cloud_dataproc_cluster\"
           resource.label.\"cluster_name\"=\"my_cluster\"
           metric.label.\"state\"=\"PENDING\"",
        "range": {
          "min": 0,
          "max": 100
        }
      }
    }
  },
  "goal": 0.99,
  "rollingPeriod": "86400s",
  "displayName": "Dataproc pending jobs"
}

El siguiente SLO de ejemplo usa cluster/job/completion_time y espera que el 99% de los trabajos de "my_cluster" se completen en menos de 100 segundos en un periodo de 24 horas continuas:

{
  "serviceLevelIndicator": {
    "requestBased": {
      "distributionCut": {
        "distributionFilter":
          "metric.type=\"dataproc.googleapis.com/cluster/job/completion_time\"
           resource.type=\"cloud_dataproc_cluster\"
           resource.label.\"cluster_name\"=\"my_cluster\"",
        "range": {
          "min": 0,
          "max": 100
        }
      }
    }
  },
  "goal": 0.99,
  "rollingPeriod": "86400s",
  "displayName": "Dataproc completed jobs"
}