Servizi di elaborazione dei dati

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

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

Per ulteriori informazioni sulle pipeline di dati dal punto di vista SRE, consulta Data Processing Pipelines nel Site Reliability Engineering Workbook.

Esprimi uno SLI di correttezza basato sulla richiesta utilizzando la struttura TimeSeriesRatio per configurare una relazione tra gli elementi con problemi di elaborazione e tutti gli elementi elaborati. Sei tu a decidere come filtrare la metrica utilizzando le etichette disponibili per arrivare alla determinazione del "problema" e dei totali "validi" che preferisci.

Esprimi uno SLI di aggiornamento basato sulle richieste utilizzando una struttura DistributionCut.

Dataflow

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

Per ulteriori informazioni, consulta quanto segue:

SLI di correzione

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 finora. La somma dell'etichetta della risorsa job_name fornisce il numero di elementi che devono essere elaborati dal job.

Puoi utilizzare separatamente 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 uno SLI di correttezza basato sulla 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

Inoltre, Dataflow scrive 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 dell'elaborazione di un dato elemento o in attesa di elaborazione.

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

Lo SLO di esempio seguente prevede che l'elemento di dati meno recente venga elaborato in meno di 100 secondi per il 99% del tempo in un periodo continuativo 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 uno SLI di aggiornamento utilizzando una struttura WindowsBasedSli.

Lo SLO di esempio seguente prevede che nel 99% delle finestre di cinque minuti in un periodo in sequenza di un giorno non vengano elaborati (zero) elementi 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 venga considerata "buona", la metrica non può superare la soglia specificata in range in qualsiasi momento della finestra di valutazione.

Dataproc

Dataproc fornisce un cluster completamente gestito e creato appositamente, in grado di scalare automaticamente per supportare qualsiasi job di elaborazione di dati o analisi di Hadoop o Spark.

Per ulteriori informazioni, consulta quanto segue:

SLI di correzione

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 uno SLI di correttezza basato sulla richiesta come rapporto, TimeSeriesRatio, tra 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 i dati delle metriche anche in Cloud Monitoring utilizzando il tipo di risorsa monitorata cloud_dataproc_cluster e i seguenti tipi di metriche:

  • cluster/job/duration, che misura per quanto tempo i job rimangono nello stato di elaborazione. Puoi filtrare i dati sull'etichetta della metrica state per identificare il tempo trascorso in stati specifici. Ad esempio, puoi creare uno SLI che misura per quanto tempo i job si trovano nello stato PENDING, per impostare un tempo di attesa massimo consentito prima che inizi l'elaborazione del job.
  • cluster/job/completion_time, che misura la durata della permanenza dei lavori nella metrica cluster/job/completion_time. Da utilizzare quando il completamento dei job è una metrica ben comprensibile o quando il volume dei dati elaborati dai job in un cluster non varia, il che influirebbe sul tempo di elaborazione.

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

Lo SLO dell'esempio seguente utilizza cluster/job/duration e prevede che il 99% dei job in "my_cluster" sia in stato PENDING per meno di 100 secondi in un periodo continuativo 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"
}

Lo SLO dell'esempio seguente 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 continuativo 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"
}