Servizi di elaborazione dati

I servizi di dati di Google Cloud descritti in questa pagina includono quelli che elaborano i dati forniti e generano i risultati di questa elaborazione, in risposta a una richiesta o in modo continuo. Anziché utilizzare la disponibilità e la latenza come SLI principali per questi servizi, le scelte più appropriate sono le seguenti:

  • Accuratezza, una misura del numero di errori di elaborazione della pipeline.
  • Aggiornamento, una misura della velocità di elaborazione dei dati.

Per ulteriori informazioni sulle pipeline di dati dal punto di vista dell'SRE, consulta Pipeline di elaborazione dei dati nel Workbook Site Reliability Engineering.

Per esprimere un SLI di correttezza basato su richiesta, utilizza la struttura TimeSeriesRatio per impostare un rapporto tra gli elementi che hanno riscontrato problemi di elaborazione e tutti gli elementi elaborati. Puoi decidere come filtrare la metrica utilizzando le relative etichette disponibili per ottenere la determinazione preferita di totali "problema" e "validi".

Un SLI di aggiornamento basato su richiesta viene espresso utilizzando una struttura DistributionCut.

Dataflow

Dataflow è un servizio completamente gestito di analisi dei flussi di dati che riduce al minimo la latenza, i tempi di elaborazione e i costi. Puoi utilizzare Dataflow per elaborare i dati come stream o in batch utilizzando l'SDK Apache Beam.

Per ulteriori informazioni, consulta quanto segue:

SLI di correttezza

Dataflow scrive i dati delle metriche in Cloud Monitoring utilizzando il tipo di risorsa monitorata dataflow_job e il tipo di metrica job/element_count, che conteggia il numero di elementi aggiunti alla raccolta fino a quel momento. La somma dell'etichetta della risorsa job_name ti fornisce il numero di elementi da elaborare dal job.

Separatamente, puoi utilizzare il tipo di metrica logging.googleapis.com/log_entry_count con il tipo di risorsa monitorata dataflow_job per conteggiare il numero di errori registrati da un determinato job utilizzando l'etichetta della metrica severity.

Puoi utilizzare queste metriche per esprimere un SLI di correttezza basato su richiesta come una frazione di errori e di tutti gli elementi elaborati utilizzando una struttura TimeSeriesRatio, come mostrato nell'esempio seguente:

"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\"",
    }
  }
}

SLI di aggiornamento

Dataflow scrive anche i dati delle metriche in Cloud Monitoring utilizzando il tipo di risorsa monitorata dataflow_job e il tipo di metrica job/per_stage_system_lag, che misura la durata massima attuale per la quale un elemento di dati è in attesa di elaborazione o è in fase di elaborazione.

Puoi esprimere un SLI di aggiornamento utilizzando questa metrica con una struttura DistributionCut.

Il seguente esempio di SLO prevede che l'elemento di dati più antico venga elaborato in meno di 100 secondi il 99% delle volte in un periodo di un'ora:

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

Puoi anche esprimere un SLI di aggiornamento utilizzando una struttura WindowsBasedSli.

L'esempio di SLO seguente prevede che il 99% delle finestre di cinque minuti in un periodo di un giorno scorrevole non registri elementi elaborati in più di 100 secondi:

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

Tieni presente che, affinché una finestra sia considerata "buona", la metrica non può superare la soglia specificata in range in nessun momento durante la finestra di valutazione.

Dataproc

Dataproc fornisce un cluster creato appositamente e completamente gestito che può scalare automaticamente per supportare qualsiasi job di elaborazione di dati o analisi Hadoop o Spark.

Per ulteriori informazioni, consulta quanto segue:

SLI di correttezza

Dataproc scrive i dati delle metriche in Cloud Monitoring utilizzando il tipo di risorsa monitorata cloud_dataproc_cluster e i seguenti tipi di metriche:

Puoi utilizzare queste metriche per esprimere un SLI di correttezza basato su richiesta come rapporto, TimeSeriesRatio, tra i job non riusciti e tutti i job inviati, come mostrato nell'esempio seguente:

"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\"",
    }
  }
}

SLI di aggiornamento

Dataproc scrive anche i dati delle metriche in Cloud Monitoring utilizzando il tipo di risorsa monitorata cloud_dataproc_cluster e i seguenti tipi di metriche:

  • cluster/job/duration, che misura il tempo di permanenza dei job negli stati di elaborazione. Puoi filtrare i dati dell'etichetta della metrica state per identificare il tempo trascorso in stati specifici. Ad esempio, puoi creare un SLI che misura il tempo di permanenza dei job nello stato PENDING per impostare un tempo di attesa massimo consentito prima dell'inizio dell'elaborazione del job.
  • cluster/job/completion_time, che misura il tempo di permanenza dei job nella metrica cluster/job/completion_time. Utilizza questa metrica quando il completamento del job è una metrica ben compresa o quando il volume di dati elaborati dai job in un cluster non varia, il che influisce sul tempo di elaborazione.

Puoi esprimere un SLI di aggiornamento utilizzando queste metriche con una struttura DistributionCut, come mostrato nei seguenti esempi.

L'esempio seguente di SLO utilizza cluster/job/duration e si aspetta che il 99% dei job in "my_cluster" sia nello stato PENDING per meno di 100 secondi in un periodo di 24 ore:

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

L'esempio seguente di SLO utilizza cluster/job/completion_time e prevede che il 99% dei job in "my_cluster" venga completato in meno di 100 secondi in un periodo di 24 ore:

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