Datenverarbeitungsdienste

Die auf dieser Seite beschriebenen Google Cloud-Datendienste umfassen solche, die bereitgestellte Daten verarbeiten und die Ergebnisse dieser Verarbeitung ausgeben, als Reaktion auf eine Anfrage oder kontinuierlich. Statt Verfügbarkeit und Latenz als primäre SLIs für diese Dienste zu verwenden sollten Sie folgende Optionen bedenken:

  • Richtigkeit: Ein Maß für die Anzahl der Verarbeitungsfehler, die bei der Pipeline auftreten.
  • Aktualität: Ein Messwert, der angibt, wie schnell Daten verarbeitet werden.

Weitere Informationen zu Datenpipelines aus der SRE-Perspektive finden Sie im Handbuch: Site Reliability Engineering unter Datenverarbeitungspipelines.

Um anfragebasierte Richtigkeits-SLIs zu erstellen nutzen Sie die Struktur TimeSeriesRatio, um das Verhältnis der Elemente, bei denen Verarbeitungsprobleme auftraten, zu den insgesamt verarbeiteten Elementen zu bestimmen. Sie entscheiden, wie Sie den Messwert filtern. Hierzu verwenden Sie die verfügbaren Labels, um "problematische" und "gültige" Elemente so zu bestimmen, wie Sie es wünschen.

Zur Erstellung von anfragebasierten Aktualitäts-SLIs nutzen Sie eine DistributionCut-Struktur.

Dataflow

Dataflow ist ein vollständig verwalteter Streaming-Analysedienst, der die Latenz, Verarbeitungszeit und Kosten minimiert. Sie können Dataflow verwenden, um Daten mit dem Apache Beam SDK als Stream oder in Batches zu verarbeiten.

Weitere Informationen finden Sie hier:

Richtigkeits-SLIs

Dataflow schreibt Messwertdaten mit dem überwachten Ressourcentyp dataflow_job und dem Messwert job/element_count in Cloud Monitoring. Dieser erfasst die Anzahl der Elemente, die bisher zur pcollection hinzugefügt wurden. Die Summe für das Ressourcenlabel job_name gibt die Anzahl der Elemente an, die vom Job verarbeitet werden sollen.

Außerdem können Sie den Messwerttyp logging.googleapis.com/log_entry_count mit dem überwachten Ressourcentyp dataflow_job verwenden, um die Anzahl der von einem bestimmten Job protokollierten Fehler zu erfassen. Dazu nutzen Sie das Messwertlabel severity.

Sie können diese Messwerte verwenden, um anfragebasierte Richtigkeits-SLIs als Verhältnis von Fehlern zu den insgesamt verarbeiteten Elementen zu definieren. Dazu nutzen die eine TimeSeriesRatio-Struktur, wie in folgendem Beispiel gezeigt:

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

Aktualitäts-SLIs

Dataflow schreibt außerdem Messwertdaten mit dem überwachten Ressourcentyp dataflow_job und dem Messwerttyp job/per_stage_system_lag, mit dem die aktuelle maximale Dauer gemessen wird, über die hinweg ein Datenelement verarbeitet wurde oder auf die Verarbeitung wartete, in Cloud Monitoring.

Um Aktualitäts-SLIs mit diesem Messwert zu erstellen nutzen Sie eine DistributionCut-Struktur.

Im folgenden SLO-Beispiel wird erwartet, dass das älteste Datenelement 99 % der Zeit über einen rollierenden Zeitraum von einer Stunde in weniger als 100 Sekunden verarbeitet wird:

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

Sie können Aktualitäts-SLIs auch mit einer WindowsBasedSli-Struktur ausdrücken.

Das folgende SLO-Beispiel geht davon aus, dass in 99 % der 5-Minuten-Fenster über einen rollierenden Zeitraum von mindestens einem Tag keine Elemente (null) mit einer Verarbeitungsdauer über 100 Sekunden auftreten:

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

Damit ein Fenster als "Gut" angesehen wird, darf der Messwert während des Bewertungsfensters den in range angegebenen Schwellenwert zu keiner Zeit erreichen.

Dataproc

Dataproc bietet einen vollständig verwalteten, speziell erstellten Cluster, der automatisch skalieren kann, um beliebige Hadoop- oder Spark-Datenverarbeitungs- oder Analyseverarbeitungsjobs zu unterstützen.

Weitere Informationen finden Sie hier:

Richtigkeits-SLIs

Dataproc schreibt Messwertdaten mit dem überwachten Ressourcentyp cloud_dataproc_cluster und folgenden Messwerttypen in Cloud Monitoring:

Sie können diese Messwerte verwenden, um einen anfragebasierten Richtigkeits-SLI als Verhältnis, TimeSeriesRatio, von fehlgeschlagenen Jobs zu insgesamt übermittelten Jobs auszudrücken. Beispiel:

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

Aktualitäts-SLIs

Dataproc schreibt auch Messwertdaten mit dem überwachten Ressourcentyp cloud_dataproc_cluster und folgenden Messwerttypen in Cloud Monitoring:

  • cluster/job/duration: Misst, wie lange Jobs im Verarbeitungsstatus verbleiben. Sie können Daten nach dem Messwertlabel state filtern, um die in bestimmten Zuständen verbrachte Zeit zu ermitteln. Beispiel: Sie können SLIs erstellen, die messen, wie lange Jobs den Status PENDING haben, um eine maximal zulässige Wartezeit vor der Verarbeitung des Jobs festzulegen.
  • cluster/job/completion_time misst, wie lange Jobs im Messwert cluster/job/completion_time bleiben. Verwenden Sie diese Option, wenn der Jobabschluss eine gut verstandene Messgröße ist oder die Datenmenge, die von Jobs in einem Cluster verarbeitet wird, nicht variiert (dies würde sich auf die Verarbeitungszeit auswirken).

Sie können Aktualitäts-SLIs mit diesen Messwerten mit einer DistributionCut-Struktur erstellen, wie in folgenden Beispielen gezeigt.

Das folgende SLO-Beispiel verwendet cluster/job/duration und erwartet, dass 99 % der Jobs in "my_cluster" über einen rollierenden Zeitraum von 24 Stunden unter 100 Sekunden den Status PENDING haben:

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

Das folgende SLO-Beispiel verwendet cluster/job/completion_time und erwartet, dass 99 % der Jobs in "my_cluster" in einem Zeitraum von 24 Stunden in weniger als 100 Sekunden abgeschlossen werden:

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