Services de traitement des données

Les services de données Google Cloud décrits sur cette page incluent ceux qui traitent les données fournies et produisent les résultats de ce traitement, soit en réponse à une requête, soit en continu. Plutôt que d'utiliser la disponibilité et la latence comme SLI principal pour ces services, vous avez le choix entre les options suivantes:

  • L'exactitude est une mesure du nombre d'erreurs de traitement engendrées par le pipeline.
  • La fréquence d'actualisation, qui mesure la rapidité avec laquelle les données sont traitées.

Pour plus d'informations sur les pipelines de données du point de vue de l'ingénierie SRE, consultez la section Pipelines de traitement des données du manuel sur l'ingénierie en fiabilité des sites.

Vous pouvez exprimer un SLI d'exactitude basé sur des requêtes à l'aide de la structure TimeSeriesRatio pour configurer un ratio des éléments qui présentent des problèmes de traitement par rapport à tous les éléments traités. Vous décidez de la manière de filtrer la métrique à l'aide de ses libellés disponibles afin d'obtenir votre détermination souhaitée du total de problèmes et des éléments "valides".

Vous pouvez exprimer un SLI d'actualisation basé sur des requêtes à l'aide d'une structure DistributionCut.

Dataflow

Dataflow est un service entièrement géré d'analyse de flux qui permet de réduire la latence, la durée de traitement et les coûts. Vous pouvez utiliser Dataflow pour traiter des données sous forme de flux ou par lot à l'aide du SDK Apache Beam.

Pour en savoir plus, consultez les ressources suivantes:

SLI d'exactitude

Dataflow écrit des données de métriques dans Cloud Monitoring à l'aide du type de ressource surveillée dataflow_job et du type de métrique job/element_count, qui compte le nombre d'éléments ajoutés à la pcollection pour le moment. Lorsque vous additionnez l'étiquette de ressource job_name, vous obtenez le nombre d'éléments à traiter par la tâche.

Vous pouvez également utiliser le type de métrique logging.googleapis.com/log_entry_count avec le type de ressource surveillée dataflow_job pour compter le nombre d'erreurs enregistrées par une tâche donnée, à l'aide du libellé de métrique severity.

Vous pouvez utiliser ces métriques pour exprimer un SLI d'exactitude basé sur des requêtes en tant que fraction d'erreurs et de tous les éléments traités à l'aide d'une structure TimeSeriesRatio, comme indiqué dans l'exemple suivant :

"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 d'actualisation

Dataflow écrit également les données de métriques dans Cloud Monitoring à l'aide du type de ressource surveillée dataflow_job et du type de métrique job/per_stage_system_lag, qui mesure la durée maximale actuelle de traitement ou d'attente de traitement d'un élément de données.

Vous pouvez exprimer un SLI d'actualisation à l'aide de cette métrique à l'aide d'une structure DistributionCut.

L'exemple de SLO suivant s'attend à ce que l'élément de données le plus ancien soit traité en moins de 100 secondes 99% du temps sur une période glissante d'une heure:

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

Vous pouvez également exprimer un SLI d'actualisation à l'aide d'une structure WindowsBasedSli.

L'exemple de SLO suivant s'attend à ce que 99% des fenêtres de cinq minutes sur une période glissante d'un jour ne comportent pas (zéro) d'éléments traités en plus de 100 secondes :

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

Notez que pour qu'une fenêtre soit considérée comme "bonne", la métrique ne peut pas dépasser le seuil spécifié dans range à tout moment au cours de la période d'évaluation.

Dataproc

Dataproc fournit un cluster entièrement géré et conçu pour une utilisation spécifique qui peut évoluer automatiquement pour prendre en charge toutes les données Hadoop ou Spark, ou les tâches de traitement d'analyse.

Pour en savoir plus, consultez les ressources suivantes:

SLI d'exactitude

Dataproc écrit des données de métriques dans Cloud Monitoring à l'aide du type de ressource surveillée cloud_dataproc_cluster et des types de métriques suivants:

Vous pouvez utiliser ces métriques pour exprimer un SLI d'exactitude basé sur des requêtes en tant que ratio, TimeSeriesRatio, de tâches ayant échoué sur toutes les tâches envoyées, comme illustré dans l'exemple suivant:

"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 d'actualisation

Dataproc écrit également les données de métriques dans Cloud Monitoring à l'aide du type de ressource surveillée cloud_dataproc_cluster et des types de métriques suivants:

  • cluster/job/duration, qui mesure la durée des états de traitement des tâches. Vous pouvez filtrer les données du libellé de métrique state pour identifier le temps passé dans des états spécifiques. Par exemple, vous pouvez créer un SLI qui mesure la durée des tâches dans l'état PENDING afin de définir un délai d'attente maximal autorisé avant le début du traitement de la tâche.
  • cluster/job/completion_time, qui mesure la durée de la tâche pendant la métrique cluster/job/completion_time. Utilisez cette option lorsque l'achèvement de la tâche est une métrique bien comprise ou que le volume de données traitées par tâche dans un cluster ne varie pas, ce qui peut affecter le temps de traitement.

Vous pouvez exprimer un SLI d'actualisation à l'aide de ces métriques à l'aide d'une structure DistributionCut, comme illustré dans les exemples suivants.

L'exemple de SLO suivant utilise cluster/job/duration et prévoit que 99% des tâches de "my_cluster" sont à l'état PENDING pendant moins de 100 secondes sur une période glissante de 24 heures:

{
  "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'exemple de SLO suivant utilise cluster/job/completion_time et s'attend à ce que 99% des tâches de "my_cluster" soient terminées en moins de 100 secondes sur une période de 24 heures glissantes:

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