Scaling basé sur les métriques Cloud Monitoring

Ce document explique comment faire évoluer un groupe d'instances géré (Managed Instance Group, MIG) en fonction des métriques Monitoring.

Vous pouvez également faire évoluer un MIG en fonction de son utilisation du processeur ou de la capacité de diffusion d'un équilibreur de charge HTTP(S) externe.

Lorsque vous faites évoluer un MIG en fonction des métriques Monitoring, vous pouvez utiliser les types de métriques suivants :

  • Scaling à l'aide de métriques par instance, où la métrique sélectionnée fournit pour chaque instance de VM du MIG des données qui indiquent l'utilisation des ressources.
  • Scaling à l'aide de métriques par groupe (bêta), où le scaling du groupe est basé sur une métrique qui fournit une valeur liée à l'ensemble du groupe d'instances géré.

Ces métriques peuvent être des métriques standards fournies par le service Cloud Monitoring ou des métriques Cloud Monitoring personnalisées que vous créez.

Limites

  • Vous ne pouvez pas effectuer l'autoscaling en fonction des métriques basées sur les journaux Cloud Monitoring.

  • Les groupes d'instances gérés régionaux ne sont pas compatibles avec le filtrage des métriques par instance.

  • Les groupes d'instances gérés régionaux ne sont pas compatibles avec l'autoscaling utilisant des métriques par groupe.

Avant de commencer

Métriques par instance

Les métriques par instance fournissent des données séparées pour chaque VM d'un MIG et indiquent l'utilisation des ressources pour chaque instance. Lorsque vous utilisez les métriques par instance, le MIG ne peut pas compter moins d'une VM, car l'autoscaler nécessite des métriques sur au moins une VM en cours d'exécution pour fonctionner.

Si vous devez effectuer un scaling à l'aide de métriques Cloud Monitoring qui ne sont pas spécifiques à des VM individuelles, ou si vous avez parfois besoin de réduire votre MIG à zéro VM, vous pouvez le configurer en utilisant des métriques par groupe à la place.

Métriques standards par instance

Cloud Monitoring dispose d'un ensemble de métriques standards que vous pouvez utiliser pour surveiller vos VM. Cependant, toutes les métriques standards ne constituent pas une métrique valide utilisable par l'autoscaler.

Une métrique valide utilisable pour le scaling répond aux critères suivants :

  • La métrique standard doit contenir des données pour une ressource surveillée gce_instance. Vous pouvez utiliser l'appel d'API timeSeries.list pour vérifier si une métrique spécifique exporte des données pour cette ressource.

  • La métrique standard décrit la disponibilité d'une instance, et la valeur de la métrique augmente ou diminue proportionnellement au nombre de VM dans le groupe.

La métrique suivante n'est pas valide, car la valeur ne change pas en fonction de l'utilisation, et l'autoscaler ne peut pas l'utiliser pour procéder à un scaling proportionnel :

compute.googleapis.com/instance/cpu/reserved_cores

Après avoir sélectionné une métrique standard que vous souhaitez utiliser pour votre autoscaler, vous pouvez configurer l'autoscaling à l'aide de cette métrique.

Métriques personnalisées

Vous pouvez créer des métriques personnalisées à l'aide de Cloud Monitoring et écrire vos propres données de surveillance dans le service Monitoring. Cela vous permet d'accéder aux données Google Cloud standards et à vos données de surveillance personnalisées, avec une structure de données familière et une syntaxe de requête cohérente. Si vous disposez de métriques personnalisées, vous pouvez choisir de procéder au scaling en fonction des données de ces métriques.

Prérequis

Pour utiliser des métriques personnalisées, vous devez d'abord effectuer les opérations suivantes :

  • Créer une métrique personnalisée. Pour plus d'informations sur la création d'une métrique personnalisée, consultez la page Utiliser des métriques personnalisées.
  • Configurez votre MIG pour exporter la métrique personnalisée à partir de toutes les VM du groupe.

Sélectionner une métrique personnalisée valide

Toutes les métriques personnalisées ne peuvent pas être utilisées par l'autoscaler. Une métrique personnalisée valide possède toutes les propriétés suivantes :

  • La métrique doit être une métrique par instance. Elle doit exporter les données correspondant à chacune des instances Compute Engine séparément.
  • Les valeurs par instance exportées doivent être associées à une ressource surveillée gce_instance, qui contient les étiquettes suivantes :
    • zone avec le nom de la zone dans laquelle se trouve l'instance.
    • instance_id avec la valeur de l'ID numérique unique attribué à la VM.
  • La métrique doit exporter des données au moins toutes les 60 secondes. Si vous exportez des données plus souvent que toutes les 60 secondes, l'autoscaler peut répondre plus rapidement aux changements de charge. Si vous exportez vos données moins souvent, l'autoscaler ne pourra peut-être pas répondre assez rapidement aux changements de charge.
  • La métrique doit être une métrique d'utilisation valide, ce qui signifie que ses données peuvent être utilisées pour effectuer un scaling horizontal ou vertical proportionnel au nombre de VM.
  • La métrique doit exporter les valeurs des données int64 ou double.

Pour que l'autoscaler fonctionne avec votre métrique personnalisée, vous devez exporter les données de cette métrique personnalisée à partir de toutes les VM du MIG.

Remarque : Vous pouvez obtenir l'ID numérique d'une instance de VM en effectuant une demande de propriété d'ID du serveur de métadonnées à partir de la VM. Vous pouvez, par exemple, procéder en boucle :
curl http://metadata.google.internal/computeMetadata/v1/instance/id -H Metadata-Flavor:Google
Pour en savoir plus sur l'utilisation du serveur de métadonnées, consultez la section Stocker et récupérer les métadonnées d'instances.

Configurer l'autoscaling à l'aide de métriques de surveillance par instance

Le processus de configuration d'un autoscaler est le même pour une métrique standard et pour une métrique personnalisée. Pour créer un autoscaler utilisant des métriques Cloud Monitoring, vous devez fournir l'identifiant de métrique, le niveau d'utilisation cible et le type de cible d'utilisation souhaités. Chacune de ces propriétés est décrite ci-dessous :

  • Identifiant de métrique : nom de la métrique à utiliser. Si vous utilisez une métrique personnalisée, vous avez défini ce nom lors de sa création. L'identifiant apparaît au format suivant :

    custom.googleapis.com/path/to/metric
    

    Pour en savoir plus sur la création, la consultation et la lecture de métriques, consultez la section Utiliser des métriques personnalisées.

  • Niveau d'utilisation cible : niveau que l'autoscaler doit conserver. Il s'agit d'un nombre positif. Par exemple, 24.5 et 1100 sont des valeurs acceptables. Notez que ce niveau d'utilisation est différent de l'utilisation du processeur et de l'équilibrage de charge, qui doit être une valeur flottante comprise entre 0,0 et 1,0.

  • Type de cible : définit la façon dont l'autoscaler calcule les données collectées à partir des instances. Les types de cibles possibles sont les suivants :

    • GAUGE : l'autoscaler calcule la valeur moyenne des données collectées au cours des dernières minutes et la compare à sa valeur d'utilisation cible.
    • DELTA_PER_MINUTE : l'autoscaler calcule le taux moyen de croissance par minute et le compare à l'utilisation cible.
    • DELTA_PER_SECOND : l'autoscaler calcule le taux moyen de croissance par seconde et le compare à l'utilisation cible.

    Pour effectuer des comparaisons précises, si vous définissez l'utilisation cible en secondes, utilisez DELTA_PER_SECOND comme type de cible de l'autoscaler. De même, utilisez DELTA_PER_MINUTE si l'utilisation cible est exprimée en minutes.

Console

Les instructions de configuration d'autoscaling sont différentes entre les MIG à zone unique et les MIG régionaux. Les MIG régionaux ne sont pas compatibles avec le filtrage des métriques par instance.

Pour configurer l'autoscaling pour un MIG régional (plusieurs zones), procédez comme suit :

  1. Dans Cloud Console, accédez à la page Groupes d'instances.

    Accéder à la page Groupes d'instances

  2. Si vous ne disposez d'aucun groupe d'instances géré, créez-en un. Sinon, cliquez sur le nom d'un MIG régional dans la liste pour ouvrir la page des détails du groupe d'instances.
  3. Sur la page d'informations du groupe d'instances, cliquez sur le bouton Modifier le groupe.
  4. Sous Autoscaling, sélectionnez Autoscaling pour activer l'autoscaling.
  5. Dans la section Métriques d'autoscaling, sélectionnez Métrique Stackdriver Monitoring.
  6. Dans la section Champ d'application de l'exportation de la métrique, sélectionnez Série temporelle par instance pour configurer l'autoscaling à l'aide de métriques par groupe.
  7. Dans la section Métrique Stackdriver Monitoring, saisissez le nom de la métrique au format suivant : example.googleapis.com/path/to/metric.
  8. Dans la section Cible, spécifiez la valeur cible.
  9. Dans la section Type de cible, spécifiez le type de cible correspondant à la granularité de mesure de la métrique.
  10. Enregistrez vos modifications lorsque vous êtes prêt.

Pour configurer l'autoscaling pour un MIG à zone unique, procédez comme suit :

  1. Dans Cloud Console, accédez à la page Groupes d'instances.

    Accéder à la page Groupes d'instances

  2. Si vous ne disposez d'aucun groupe d'instances géré, créez-en un. Sinon, cliquez sur le nom d'un groupe d'instances pour ouvrir la page d'informations du groupe d'instances. Toutes les instances du groupe d'instances doivent être situées dans une seule zone.
  3. Sur la page d'informations du groupe d'instances, cliquez sur le bouton Modifier le groupe.
  4. Sous Autoscaling, sélectionnez Autoscaling pour activer l'autoscaling.
  5. Dans la section Métriques d'autoscaling, sélectionnez Métrique Stackdriver Monitoring.
  6. Dans la section Champ d'application de l'exportation de la métrique, sélectionnez Série temporelle par instance pour configurer l'autoscaling à l'aide de métriques par instance.
  7. Dans la section Identifiant de la métrique, saisissez le nom de la métrique au format suivant : example.googleapis.com/path/to/metric.
  8. Dans la section Expression de filtre supplémentaire, vous avez la possibilité de saisir un filtre (facultatif) pour utiliser des valeurs individuelles de métriques comportant plusieurs flux ou étiquettes. Pour en savoir plus, consultez la section Filtrer des métriques par instance.
  9. Dans la section Cible d’utilisation, spécifiez la valeur cible.
  10. Dans la section Type de cible d'utilisation, vérifiez que le type de cible correspond au type de mesure de la métrique.
  11. Enregistrez vos modifications lorsque vous êtes prêt.

gcloud

Par exemple, dans l'outil de ligne de commande gcloud, la commande suivante crée un autoscaler qui utilise le type de cible GAUGE. Outre le paramètre --custom-metric-utilization, le paramètre --max-num-replicas est également obligatoire lors de la création d'un autoscaler :

gcloud compute instance-groups managed set-autoscaling example-managed-instance-group \
    --custom-metric-utilization metric=example.googleapis.com/path/to/metric,utilization-target-type=GAUGE,utilization-target=10 \
    --max-num-replicas 20 \
    --cool-down-period 90 \
    --region us-west1

Vous pouvez également utiliser l'option --cool-down-period, qui indique à l'autoscaler combien de secondes il devra attendre après le démarrage d'une nouvelle VM avant de commencer à collecter ses informations d'utilisation. Ce paramètre tient compte de la durée nécessaire à l'initialisation de la VM, au cours de laquelle les données d'utilisation collectées ne présentent pas une fiabilité suffisante pour l'autoscaling. Par défaut, l'intervalle entre chaque période d'autoscaling est de 60 secondes.

Pour afficher la liste complète des commandes et des options disponibles pour l'outil gcloud, consultez la documentation de référence de gcloud.

API

Remarque : Même si l'autoscaling est une fonctionnalité des groupes d'instances gérés, il s'agit d'une ressource d'API distincte. Gardez cela à l'esprit lorsque vous créez des demandes d'API pour l'autoscaling.

Dans l'API, envoyez une requête POST à l'URL suivante, en remplaçant myproject par l'ID de votre projet et us-central1-f par la zone de votre choix :

POST https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f/autoscalers/

Le corps de votre requête doit contenir les champs name, target et autoscalingPolicy. Dans autoscalingPolicy, fournissez les propriétés maxNumReplicas et customMetricUtilizations.

Vous pouvez également utiliser le paramètre coolDownPeriodSec, qui indique à l'autoscaler combien de secondes il devra attendre après le démarrage d'une nouvelle VM avant de commencer à collecter les données d'utilisation. Une fois la période d'attente écoulée, l'autoscaler commence à collecter les informations d'utilisation de la nouvelle VM et détermine si le MIG nécessite des VM supplémentaires. Cela tient compte du temps nécessaire à l'initialisation de la VM, pendant lequel les données d'utilisation collectées ne sont pas fiables pour l'autoscaling. Par défaut, l'intervalle entre chaque période d'attente est de 60 secondes.

POST https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f/autoscalers

{
 "name": "example-autoscaler",
 "target": "zones/us-central1-f/instanceGroupManagers/example-managed-instance-group",
 "autoscalingPolicy": {
  "maxNumReplicas": 10,
  "coolDownPeriodSec": 90,
  "customMetricUtilizations": [
   {
    "metric": "example.googleapis.com/some/metric/name",
    "utilizationTarget": 10,
    "utilizationTargetType": "GAUGE"
   }
  ]
 }
}

Filtrer les métriques par instance (version bêta)

Vous pouvez appliquer des filtres aux métriques Cloud Monitoring par instance, ce qui vous permet de faire évoluer des groupes d'instances gérés à zone unique à l'aide de valeurs individuelles issues de métriques comportant plusieurs flux ou étiquettes.

Exigences applicables au filtrage des métriques par instance

Le filtrage de l'autoscaler est compatible avec la syntaxe du filtre Cloud Monitoring, à quelques limites près. Les filtres des métriques par instance doivent répondre aux exigences suivantes :

  • Vous ne pouvez utiliser que l'opérateur AND pour effectuer une jointure de sélecteurs.
  • Vous pouvez utiliser l'opérateur de comparaison d'égalité directe =, mais pas avec toutes les fonctions. Par exemple, vous ne pouvez pas utiliser la fonction startswith() avec l'opérateur de comparaison =.
  • Vous ne pouvez pas utiliser de caractères génériques.
  • Vous n'avez pas besoin de définir les sélecteurs resource.type ou resource.label.*. Les métriques par instance utilisent toujours toutes les ressources d'instances du groupe.
  • Pour de meilleurs résultats, créez un filtre suffisamment précis de sorte à afficher une seule série temporelle pour chaque instance. Si le filtre affiche plusieurs séries temporelles, elles sont cumulées.

Configurer les autoscalers pour filtrer les métriques

Utilisez Google Cloud Console, l'outil de ligne de commande gcloud (version bêta) ou l'API Compute Engine (version bêta) pour ajouter des filtres de métriques pour l'autoscaling d'un MIG à zone unique.

Console

Le processus de création d'un autoscaler filtrant une métrique par instance est semblable à celui de la création d'un autoscaler par instance normal, la différence étant que vous devez spécifier un filtre de métriques. Par exemple, la métrique compute.googleapis.com/instance/network/received_bytes_count inclut les étiquettes instance_name et loadbalanced. Pour effectuer un filtrage en fonction de la valeur booléenne loadbalanced :

  1. Dans Cloud Console, accédez à la page Groupes d'instances.

    Accéder à la page Groupes d'instances

  2. Si vous ne disposez d'aucun groupe d'instances géré, créez-en un. Sinon, cliquez sur le nom d'un MIG à zone unique dans la liste pour ouvrir la page des détails du groupe d'instances.
  3. Sur la page d'informations du groupe d'instances, cliquez sur le bouton Modifier le groupe.
  4. Sous Autoscaling, sélectionnez Autoscaling pour activer l'autoscaling.
  5. Dans la section Autoscaling basé sur, sélectionnez Métrique Stackdriver Monitoring.
  6. Dans la section Champ d'application de l'exportation de la métrique, sélectionnez Série temporelle par instance pour configurer l'autoscaling à l'aide de métriques par instance.
  7. Dans la section Identifiant de la métrique, saisissez le nom de la métrique. Par exemple, compute.googleapis.com/instance/network/received_bytes_count.
  8. Dans la section Expression de filtre supplémentaire, saisissez un filtre. Par exemple, 'metric.label.loadbalanced = true'.
  9. Enregistrez vos modifications lorsque vous êtes prêt.

gcloud

Le processus de création d'un autoscaler filtrant une métrique par instance est semblable à celui de la création d'un autoscaler par instance normal, la différence étant que vous devez spécifier un filtre de métriques et des indicateurs individuels pour la cible d'utilisation et le type de cible. Par exemple, la métrique compute.googleapis.com/instance/network/received_bytes_count inclut les étiquettes instance_name et loadbalanced. Pour effectuer un filtrage en fonction de la valeur booléenne loadbalanced, spécifiez l'indicateur de filtre --stackdriver-metric-filter avec la valeur 'metric.label.loadbalanced = true'. Incluez les indicateurs de cible d'utilisation et de type de cible individuellement.

gcloud beta compute instance-groups managed set-autoscaling example-managed-instance-group \
    --update-stackdriver-metric=compute.googleapis.com/instance/network/received_bytes_count \
    --stackdriver-metric-utilization-target-utilization-target=10 \
    --stackdriver-metric-utilization-target-type=DELTA_PER_SEC \
    --stackdriver-metric-filter='metric.label.loadbalanced = true' \
    --max-num-replicas 20 \
    --cool-down-period 90 \
    --region us-west1

Dans cet exemple, l'autoscaling est configuré pour n'utiliser que les données de trafic loadbalanced dans la cible d'utilisation.

Pour afficher la liste des commandes et des options gcloud disponibles, consultez la documentation de référence sur l'outil gcloud (version bêta).

API

Remarque : Même si l'autoscaling est une fonctionnalité des groupes d'instances gérés, il s'agit d'une ressource d'API distincte. Gardez cela à l'esprit lorsque vous créez des demandes d'API pour l'autoscaling.

Le processus de création d'un autoscaler filtrant une métrique par instance est semblable à celui de la création d'un autoscaler par instance normal, la différence étant que vous devez spécifier un filtre de métriques et des indicateurs individuels pour la cible d'utilisation et le type de cible. Par exemple, la métrique compute.googleapis.com/instance/network/received_bytes_count inclut les étiquettes instance_name et loadbalanced. Pour effectuer un filtrage en fonction de la valeur booléenne loadbalanced, spécifiez le paramètre filter avec la valeur "metric.label.loadbalanced = true".

Dans l'API, envoyez une requête POST à l'URL suivante, en remplaçant myproject par l'ID de votre projet et us-central1-f par la zone de votre choix. Le corps de la requête doit contenir les champs name, target et autoscalingPolicy. Dans autoscalingPolicy, fournissez les propriétés maxNumReplicas et customMetricUtilizations.

POST https://compute.googleapis.com/compute/beta/projects/myproject/zones/us-central1-f/autoscalers

{
 "name": "example-autoscaler",
 "target": "zones/us-central1-f/instanceGroupManagers/example-managed-instance-group",
 "autoscalingPolicy": {
  "maxNumReplicas": 10,
  "coolDownPeriodSec": 90,
  "customMetricUtilizations": [
   {
    "metric": "compute.googleapis.com/instance/network/received_bytes_count",
    "filter": "metric.label.loadbalanced = true",
    "utilizationTarget": 10,
    "utilizationTargetType": "DELTA_PER_SEC"
   }
  ]
 }
}

Dans cet exemple, l'autoscaling est configuré pour n'utiliser que les données de trafic loadbalanced dans la cible d'utilisation.

Métriques par groupe (version bêta)

Les métriques par groupe permettent l'autoscaling avec une métrique standard ou personnalisée qui n'exporte pas les données d'utilisation par instance. Au lieu de cela, le groupe évolue en fonction d'une valeur qui s'applique à l'ensemble du groupe et correspond au volume de travail disponible pour le groupe ou à son activité. Le groupe évolue en fonction de la fluctuation de la valeur de la métrique du groupe et de la configuration que vous définissez.

Lorsque vous configurez l'autoscaling sur des métriques par groupe, vous devez indiquer comment vous souhaitez que l'autoscaler provisionne les instances par rapport à la métrique :

  • Attribution d'instances : spécifiez une attribution d'instances pour indiquer que l'autoscaler doit ajouter ou supprimer des VM en fonction du volume de travail disponible pour chaque VM. Indiquez une valeur pour ce paramètre qui représente le volume de travail à gérer pour chaque VM. Par exemple, spécifiez 2 pour attribuer deux unités de travail à chaque VM ou spécifiez 0.5 pour attribuer une demi-unité de travail à chaque VM. L'autoscaler fait évoluer le MIG afin de s'assurer qu'il y a suffisamment de VM pour terminer le travail disponible, comme indiqué par la métrique. Si la valeur de la métrique est 10 et que vous avez attribué 0.5 unités de travail à chaque VM, l'autoscaler crée 20 VM dans le MIG. Le scaling avec attribution d'instances permet au groupe de passer à 0 VM lorsque la valeur de la métrique tombe à 0, puis d'augmenter à nouveau le nombre de VM lorsqu'elle dépasse 0. Le schéma suivant montre la relation proportionnelle entre la valeur de la métrique et le nombre de VM lors du scaling avec une règle d'attribution d'instances.La relation proportionnelle entre la valeur de la métrique et le nombre d'instances.
  • Cible d'utilisation : spécifiez une cible d'utilisation pour indiquer à l'autoscaler d'ajouter ou de supprimer des VM afin d'essayer de maintenir la métrique à une valeur spécifiée. Lorsque la métrique est supérieure à la cible spécifiée, l'autoscaler ajoute progressivement des VM jusqu'à ce que la métrique atteigne la valeur cible. Lorsque la métrique est inférieure à la valeur cible spécifiée, l'autoscaler supprime progressivement les VM jusqu'à ce que la métrique atteigne la valeur cible. Le scaling avec une cible d'utilisation ne peut pas réduire le groupe à 0 VM. Le schéma suivant montre comment l'autoscaler ajoute et supprime des VM en réponse à une valeur de métrique afin de maintenir une cible d'utilisation.Ajout et suppression de VM par l'autoscaler pour maintenir une utilisation cible.

Chaque option présente les cas d'utilisation suivants :

  • Attribution d'instances : adaptez la taille de votre MIG en fonction du nombre de messages non confirmés dans un abonnement Pub/Sub ou du taux de RPS total d'un point de terminaison du réseau.
  • Cible d'utilisation : adaptez la taille de votre MIG en fonction d'une cible d'utilisation pour une métrique personnalisée qui ne provient pas du processeur standard par instance ou des métriques d'utilisation de la mémoire. Par exemple, vous pouvez procéder au scaling du groupe en fonction d'une métrique de latence personnalisée.

Lorsque vous configurez l'autoscaling avec des métriques par groupe et que vous spécifiez une attribution d'instances, votre groupe d'instances géré peut être réduits à zéro VM. Si votre métrique n'indique aucun travail à effectuer pour votre groupe, le groupe sera réduit à zéro VM jusqu'à ce que la métrique détecte la disponibilité d'une nouvelle tâche. Contrairement au scaling basé sur les métriques par groupe, l'autoscaling par instance nécessite les métriques d'utilisation des ressources d'au moins une VM, de sorte que le groupe ne puisse pas atteindre une taille inférieure à 1.

Filtrer les métriques par groupe

Vous pouvez appliquer des filtres aux métriques Cloud Monitoring par groupe, ce qui vous permet de faire évoluer des groupes d'instances gérés à l'aide de valeurs individuelles issues de métriques comportant plusieurs flux ou libellés.

Exigences applicables au filtrage des métriques par groupe

Le filtrage de l'autoscaler est compatible avec la syntaxe du filtre Cloud Monitoring, à quelques limites près. Les filtres des métriques par groupe doivent répondre aux exigences suivantes :

  • Vous ne pouvez utiliser que l'opérateur AND pour effectuer une jointure de sélecteurs.
  • Vous ne pouvez pas utiliser l'opérateur de comparaison d'égalité directe = avec des fonctions pour chaque sélecteur.
  • Vous ne pouvez pas utiliser de caractères génériques.
  • Vous pouvez spécifier un sélecteur de type de métrique metric.type = "..." dans le filtre et inclure également le champ metric d'origine. Si vous le souhaitez, vous ne pouvez utiliser que le champ metric. La métrique doit répondre aux exigences suivantes :
    • La métrique doit être spécifiée à au moins un emplacement.
    • La métrique peut être spécifiée aux deux emplacements, mais doit être égale.
  • Vous devez spécifier une valeur resource.type, mais vous ne pouvez pas spécifier gce_instance si vous souhaitez effectuer un scaling à l'aide des métriques par groupe.
  • Pour de meilleurs résultats, le filtre doit être suffisamment précis pour afficher une seule série temporelle pour le groupe. Si le filtre affiche plusieurs séries temporelles, elles sont cumulées.

Configurer l'autoscaling à l'aide de métriques de surveillance par groupe

Utilisez Google Cloud Console, l'outil de ligne de commande gcloud (version bêta) ou l'API Compute Engine (version bêta) pour configurer l'autoscaling avec des métriques par groupe pour un MIG à zone unique.

Console

  1. Dans Cloud Console, accédez à la page Groupes d'instances.

    Accéder à la page Groupes d'instances

  2. Si vous ne disposez d'aucun groupe d'instances géré, créez-en un. Sinon, cliquez sur le nom d'un MIG à zone unique dans la liste pour ouvrir la page des détails du groupe d'instances.
  3. Sur la page d'informations du groupe d'instances, cliquez sur le bouton Modifier le groupe.
  4. Sous Autoscaling, sélectionnez Autoscaling pour activer l'autoscaling.
  5. Dans la section Autoscaling basé sur, sélectionnez Métrique Stackdriver Monitoring.
  6. Dans la section Champ d'application de l'exportation de la métrique, sélectionnez Série temporelle unique par groupe.
  7. Dans la section Identifiant de la métrique, spécifiez le nom de la métrique au format suivant : example.googleapis.com/path/to/metric.
  8. Spécifiez le type de ressource de la métrique.
  9. Fournissez une expression de filtre supplémentaire pour utiliser des valeurs individuelles de métriques comportant plusieurs flux ou étiquettes. Le filtre doit répondre aux exigences de filtrage de l'autoscaler.
  10. Dans la section Règle de mise à l'échelle, sélectionnez une attribution d'instances ou un objectif d'utilisation.
    • Si vous sélectionnez une règle d'attribution d'instances, indiquez une valeur d'attribution d'une seule instance représentant le volume de travail à attribuer à chaque instance de VM du MIG. Par exemple, spécifiez 2 pour attribuer deux unités de travail à chaque VM. L'autoscaler maintient suffisamment de VM pour terminer le travail disponible (comme indiqué par la métrique). Si la valeur de la métrique est 10 et que vous avez attribué 2 unités de travail à chaque VM, l'autoscaler crée 5 VM dans le MIG.
    • Si vous sélectionnez une règle de cible d'utilisation :
      • Indiquez une valeur cible d'utilisation qui représente la valeur de la métrique que l'autoscaler doit tenter de maintenir.
      • Sélectionnez le type de cible d'utilisation qui représente le type de valeur de la métrique.
  11. Enregistrez vos modifications lorsque vous êtes prêt.

gcloud

Créez un autoscaler pour un MIG de la même manière que l'autoscaler par instance, mais spécifiez l'option --update-stackdriver-metric. Vous pouvez préciser comment vous voulez que l'autoscaler provisionne les instances en incluant l'un des options suivantes :

  • Attribution d'instances : spécifiez l'indicateur --stackdriver-metric-single-instance-assignment.
  • Cible d'utilisation : spécifiez l'indicateur --stackdriver-metric-utilization-target.

Attribution d'instances :

Spécifiez une métrique à mesurer, puis l'indicateur --stackdriver-metric-single-instance-assignment pour indiquer le volume de travail que chaque instance doit gérer. Vous devez également spécifier un filtre pour la métrique à l'aide de l'option --stackdriver-metric-filter.

gcloud beta compute instance-groups managed set-autoscaling group-name \
    --zone=zone \
    --max-num-replicas=max-instances \
    --min-num-replicas=min-instances \
    --update-stackdriver-metric='metric-url' \
    --stackdriver-metric-filter='metric-filter' \
    --stackdriver-metric-single-instance-assignment=instance-assignment

Replace the following:

- group-name: The name of the MIG where you want
  to add an autoscaler.
- zone: The zone where the MIG is located. You
  cannot specify a region for autoscalers on per-group metrics.
- max-instances: The limit on the number of VMs that
  the autoscaler can add to the MIG.
- min-instances: The limit on the minimum number of
  VMs that the autoscaler can have in the MIG.
- metric-url: A protocol-free URL of a
  Monitoring metric.
- metric-filter: A
  [Cloud Monitoring filter](/monitoring/api/v3/filters) where you
  specify a [monitoring filter](/monitoring/api/v3/filters) with a relevant
  [`TimeSeries`](https://cloud.google.com/monitoring/api/ref_v3/rest/v3/TimeSeries)
  and a
  [`MonitoredResource`](https://cloud.google.com/monitoring/api/ref_v3/rest/v3/MonitoredResource).
  The filter must meet the
  [autoscaler filtering requirements](#per_group_filter_requirements).
- instance-assignment: The amount of work to
  assign to each VM instance in the MIG. For example, specify `2` to assign
  two units of work to each VM, or specify `0.5` to assign half a unit
  of work to each VM. The autoscaler scales the MIG to ensure that there are
  enough VMs to complete the available work, which is indicated by the
  metric. If the
  metric value is `10` and you've assigned `0.5` units of work to each
  VM, the autoscaler provisions `20` VMs in the MIG.

**Utilization target:**

In some situations, you might want to use utilization targets with
per-group metrics rather than specify a number of VMs relative
to the value of the metric that your autoscaler measures. You can
still point the autoscaler to a per-group metric, but the autoscaler
attempts to maintain the specified utilization target. Specify the target
and target type with the `--stackdriver-metric-utilization-target` flag.
You must also specify a filter for the metric using the
`--stackdriver-metric-filter` flag.

 
gcloud beta compute instance-groups managed set-autoscaling group-name \
       --zone=zone \
       --max-num-replicas=max-instances \
       --min-num-replicas=min-instances \
       --update-stackdriver-metric='metric-url' \
       --stackdriver-metric-filter='metric-filter' \
       --stackdriver-metric-utilization-target=target-value \
       --stackdriver-metric-utilization-target-type=target-type

Replace the following:

  • group-name: The name of the MIG where you want to add an autoscaler.
  • zone: The zone where the MIG is located. You cannot specify a region for autoscalers on per-group metrics.
  • max-instances: The limit on the number of VMs that the autoscaler can add to the MIG.
  • min-instances: The limit on the minimum number of VMs that the autoscaler can have in the MIG.
  • metric-url: A protocol-free URL of a Monitoring metric.
  • metric-filter: A Cloud Monitoring filter where you specify a monitoring filter with a relevant TimeSeries and a MonitoredResource. You must specify a resource.type value, but you cannot specify gce_instance if you want to scale using per-group metrics. The filter must meet the autoscaler filtering requirements.
  • target-value: The metric value that the autoscaler attempts to maintain.
  • target-type. The value type for the metric. You can set the autoscaler to monitor the metric as a GAUGE, by the delta-per-minute of the value, or by the delta-per-second of the value.

To see a list of available autoscaler gcloud command-line tool commands and flags that work with per-group autoscaling, see the gcloud command-line tool reference (beta).

API

Remarque : Même si l'autoscaling est une fonctionnalité des groupes d'instances gérés, les [autoscalers](/compute/docs/reference/beta/autoscalers) constituent une ressource d'API distincte. Gardez cela à l'esprit lorsque vous créez des demandes d'API pour l'autoscaling.

Créez un autoscaler pour un MIG. Vous pouvez préciser comment vous voulez que l'autoscaler provisionne les instances en incluant l'un des paramètres suivants :

  • Attribution d'instances : spécifiez le paramètre singleInstanceAssignment.
  • Cible d'utilisation : spécifiez le paramètre utilizationTarget.

Attribution d'instances :

Dans l'API, envoyez une demande POST pour créer un autoscaler. Dans le corps de la requête, incluez les paramètres normaux que vous utiliseriez pour créer un autoscaler par instance, mais spécifiez le paramètre single-instance-assignment. Le paramètre single-instance-assignment indique le volume de tâches que chaque VM doit gérer.

POST https://compute.googleapis.com/compute/beta/projects/<var>project-id</var>/zones/<var>zone</var>/autoscalers

{
 "name": "example-autoscaler",
 "target": "zones/<var>zone</var>/instanceGroupManagers/<var>group-name</var>",
 "autoscalingPolicy": {
  "maxNumReplicas": <var>max-instances</var>,
  "minNumReplicas": <var>min-instances</var>,
  "customMetricUtilizations": [
    {
      "metric": "<var>metric-url</var>",
      "filter": "<var>metric-filter</var>",
      "singleInstanceAssignment": <var>instance-assignment</var>
    }
  ],
 }
}

Remplacez les éléments suivants :

  • project-id : ID de votre projet.
  • group-name : nom du MIG auquel vous souhaitez ajouter un autoscaler.
  • zone : zone où se trouve le MIG. Vous ne pouvez pas spécifier de région pour les autoscalers sur les métriques par groupe.
  • max-instances : nombre maximal de VM que l'autoscaler peut ajouter au MIG.
  • min-instances : nombre minimal de VM que l'autoscaler peut avoir dans le MIG.
  • metric-url : URL sans protocole d'une métrique Monitoring.
  • metric-filter : filtre Cloud Monitoring dans lequel vous spécifiez un filtre de surveillance avec les valeurs TimeSeries et MonitoredResource pertinentes. Vous devez spécifier une valeur resource.type, mais vous ne pouvez pas spécifier gce_instance si vous souhaitez effectuer un scaling à l'aide des métriques par groupe. Le filtre doit répondre aux exigences de filtrage de l'autoscaler.
  • instance-assignment : volume de travail à attribuer à chaque instance de VM dans le MIG. Par exemple, spécifiez 2 pour attribuer deux unités de travail à chaque VM ou spécifiez 0.5 pour attribuer une demi-unité de travail à chaque VM. L'autoscaler fait évoluer le MIG afin de s'assurer qu'il y a suffisamment de VM pour terminer le travail disponible, comme indiqué par la métrique. Si la valeur de la métrique est 10 et que vous avez attribué 0.5 unités de travail à chaque VM, l'autoscaler crée 20 VM dans le MIG.

Cible d'utilisation :

Dans certains cas, il est préférable d'utiliser des cibles d'utilisation avec des métriques par groupe plutôt que de spécifier un nombre de VM par rapport à la valeur de la métrique mesurée par l'autoscaler. Vous pouvez toujours diriger l'autoscaler vers une métrique par groupe, mais celui-ci tente de conserver la cible d'utilisation spécifiée. Spécifiez ces cibles avec le paramètre utilizationTarget. Vous devez également spécifier un filtre pour la métrique à l'aide du paramètre filter.

POST https://compute.googleapis.com/compute/beta/projects/project-id/zones/zone/autoscalers

    {
     "name": "example-autoscaler",
     "target": "zones/zone/instanceGroupManagers/group-name",
     "autoscalingPolicy": {
      "maxNumReplicas": max-instances,
      "minNumReplicas": min-instances,
      "customMetricUtilizations": [
        {
          "metric": "metric-url",
          "filter": "metric-filter",
          "utilizationTarget": target-value,
          "utilizationTargetType": target-type
        }
      ],
     }
    }

Remplacez les éléments suivants :

  • project-id : ID de votre projet.
  • group-name : nom du MIG auquel vous souhaitez ajouter un autoscaler.
  • zone : zone où se trouve le MIG. Vous ne pouvez pas spécifier de région pour les autoscalers sur les métriques par groupe.
  • max-instances : nombre maximal de VM que l'autoscaler peut ajouter au MIG.
  • min-instances : nombre minimal de VM que l'autoscaler peut avoir dans le MIG.
  • metric-url : URL sans protocole d'une métrique Monitoring.
  • metric-filter : filtre Cloud Monitoring dans lequel vous spécifiez un filtre de surveillance avec les valeurs TimeSeries et MonitoredResource pertinentes. Vous devez spécifier une valeur resource.type, mais vous ne pouvez pas spécifier gce_instance si vous souhaitez effectuer un scaling à l'aide des métriques par groupe. Le filtre doit répondre aux exigences de filtrage de l'autoscaler.
  • target-value : valeur de la métrique que l'autoscaler tente de maintenir.
  • target-type : type de valeur de la métrique. Vous pouvez définir l'autoscaler pour surveiller la métrique en tant que GAUGE, par le DELTA_PER_MINUTE ou le DELTA_PER_SECOND de la valeur.

Exemple : utiliser l'attribution d'instances pour effectuer un scaling basé sur une file d'attente Pub/Sub

Prenons la configuration suivante :

  • Un sujet Pub/Sub actif reçoit des messages provenant de certaines sources.
  • Un abonnement Pub/Sub actif est associé au sujet dans une configuration d'extraction. L'abonnement est nommé our-subscription.
  • Un pool de nœuds de calcul extrait les messages de cet abonnement et les traite. Le pool est un MIG à zone unique nommé our-instance-group, qui se situe dans la zone us-central1-a. Le pool ne doit pas dépasser 100 nœuds de calcul et doit être réduit à zéro quand aucun message ne figure dans la file d'attente.
  • En moyenne, un nœud de calcul traite un message en une minute.

Pour déterminer la valeur d'attribution d'instances optimale, envisagez plusieurs méthodes :

  • Pour traiter tous les messages de la file d'attente aussi rapidement que possible, vous pouvez choisir 1 comme valeur d'attribution d'instances. Une instance de VM est alors créée pour chaque message de la file d'attente (dans la limite du nombre maximal de VM de notre groupe). Toutefois, cela peut provoquer un provisionnement excessif. Dans le pire des cas, une VM est créée pour traiter un seul message avant que l'autoscaler ne l'éteigne, ce qui consomme beaucoup plus de ressources que le travail réel.
    • Notez que si les nœuds de travail peuvent traiter plusieurs messages en même temps, il est alors judicieux d'augmenter la valeur par rapport au nombre de processus simultanés.
    • Notez aussi que, dans cet exemple, il n'est pas logique de définir la valeur en dessous de 1, car un message ne peut pas être traité par plusieurs nœuds de calcul.
  • Par ailleurs, si la latence de traitement est moins importante que l'utilisation des ressources et les frais généraux, vous pouvez calculer le nombre de messages que chaque VM doit traiter au cours de sa durée de vie pour être considérée comme efficacement utilisée. Prenez en compte le temps de démarrage et d'arrêt, et le fait que l'autoscaling ne supprime pas immédiatement les VM. Par exemple, en supposant que les temps de démarrage et d'arrêt correspondent à environ cinq minutes au total et que l'autoscaling ne supprime les VM qu'après une période de 10 minutes environ, vous calculez qu'il est efficace de créer une VM supplémentaire dans le groupe tant qu'elle peut traiter au moins 15 messages avant que l'autoscaler ne l'arrête. Il en résulte un coût de 25 % au maximum associé au temps total de création, de démarrage et d'arrêt de la VM. Dans ce cas, vous pouvez choisir 15 comme valeur d'attribution d'instance.
  • Un équilibre peut être trouvé entre ces deux méthodes, ce qui se traduit par un nombre compris entre 1 et 15, en fonction du facteur prioritaire, de la latence de traitement et de l'utilisation des ressources.

En examinant les statistiques Pub/Sub disponibles, nous trouvons une statistique qui représente la longueur de la file d'attente de l'abonnement : subscription/num_undelivered_messages.

Notez que cette métrique exporte le nombre total de messages dans la file d'attente, y compris les messages en cours de traitement, mais pas encore confirmés. Il n'est pas recommandé d'utiliser une métrique qui n'inclut pas les messages en cours de traitement, car une telle métrique peut être réduite à zéro lorsque le travail est en cours, ce qui incite l'autoscaling à réduire voire à interrompre le travail en cours.

Vous pouvez maintenant configurer l'autoscaling pour la file d'attente :

gcloud beta compute instance-groups managed set-autoscaling \
    our-instance-group \
    --zone=us-central1-a \
    --max-num-replicas=100 \
    --min-num-replicas=0 \
    --update-stackdriver-metric=pubsub.googleapis.com/subscription/num_undelivered_messages \
    --stackdriver-metric-filter="resource.type = pubsub_subscription AND resource.label.subscription_id = our-subscription" \
    --stackdriver-metric-single-instance-assignment=15

Exemple : utilisation d'une cible d'utilisation pour effectuer un scaling basé sur la latence moyenne

Il peut arriver que la métrique fournissant un signal pertinent ne représente pas le volume total de travail disponible ou une autre ressource applicable au groupe, comme dans l'exemple précédent, mais plutôt une moyenne, un centile ou une autre propriété statistique. Pour cet exemple, supposons que vous effectuez un scaling en fonction de la latence de traitement moyenne du groupe.

Prenons la configuration suivante :

  • Un MIG nommé our-instance-group est chargé d'exécuter une tâche particulière. Le groupe se trouve dans la zone us-central1-a.
  • Vous disposez d'une métrique personnalisée Cloud Monitoring qui exporte une valeur que vous souhaitez conserver à un niveau particulier. Pour cet exemple, supposons que la métrique représente la latence moyenne des requêtes de traitement attribuées au groupe.
    • La métrique personnalisée est nommée : custom.googleapis.com/example_average_latency.
    • La métrique personnalisée possède un libellé avec une clé nommée group_name et une valeur égale au nom du MIG, our-instance-group.
    • La métrique personnalisée exporte des données pour la ressource surveillée globale , c'est-à-dire qu'elle n'est associée à aucune VM spécifique.

Vous avez déterminé que lorsque la valeur de la métrique dépasse une valeur spécifique, vous devez ajouter d'autres VM au groupe pour gérer la charge, tandis que lorsqu'elle est inférieure à cette valeur, vous pouvez libérer des ressources. L'autoscaling ajoute ou supprime progressivement les VM à un taux proportionnel à la valeur de la métrique qui est supérieure ou inférieure à la cible. Pour cet exemple, supposons que la valeur cible calculée est 100.

Vous pouvez maintenant configurer l'autoscaling pour le groupe en utilisant une cible d'utilisation par groupe de 100, qui représente la valeur de la métrique que l'autoscaler doit tenter de maintenir :

gcloud beta compute instance-groups managed set-autoscaling \
    our-instance-group \
    --zone=us-central1-a \
    --max-num-replicas=100 \
    --min-num-replicas=0 \
    --update-stackdriver-metric=custom.googleapis.com/example_average_latency \
    --stackdriver-metric-filter "resource.type = global AND metric.label.group_name = our-instance-group" \
    --stackdriver-metric-utilization-target=100 \
    --stackdriver-metric-utilization-target-type=delta-per-second