Effectuer un scaling basé sur les métriques Stackdriver Monitoring

Vous pouvez configurer l'autoscaler pour procéder au scaling en fonction des types de métriques suivants :

  • Scaling à l'aide de métriques par instance, où la métrique sélectionnée fournit pour chaque instance du groupe d'instances géré 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 Stackdriver Monitoring ou des métriques Stackdriver Monitoring personnalisées que vous créez.

Avant de commencer

Métriques par instance

Les métriques par instance fournissent des données sur chacune des instances d'un groupe. Les métriques fournissent des données sur chaque instance du groupe d'instances géré, qui indiquent l'utilisation des ressources. Pour les métriques par instance, le groupe d'instances ne peut pas dépasser une taille de 1, car l'autoscaler nécessite des métriques sur au moins une instance en cours d'exécution pour fonctionner.

Si vous devez effectuer un scaling avec des métriques Stackdriver Monitoring qui ne sont pas spécifiques à des instances individuelles ou réduire parfois vos groupes d'instances à zéro instance, vous pouvez configurer vos instances pour qu'elles évoluent à l'aide de métriques par groupe.

Métriques standards par instance

Stackdriver Monitoring possède un ensemble de métriques standards que vous pouvez utiliser pour surveiller vos instances de machine virtuelle (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 le degré d'occupation d'une instance, et la valeur de la métrique augmente ou diminue proportionnellement au nombre d'instances de VM figurant 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 Stackdriver 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 section Utiliser des métriques personnalisées.
  • Configurez votre groupe d'instances géré pour exporter la métrique personnalisée à partir de toutes les instances qu'il contient.

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é à l'instance.
  • 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, c'est-à-dire que ses données peuvent être utilisées pour augmenter ou diminuer proportionnellement le nombre de machines virtuelles.
  • 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 instances du groupe d'instances géré.

Remarque : Vous pouvez obtenir l'ID numérique d'une instance en effectuant une demande de propriété d'ID du serveur de métadonnées à partir de l'instance. 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 les métriques Stackdriver Monitoring, vous devez fournir l'identifiant de métrique, le niveau d'utilisation cible souhaité et le type de cible d'utilisation. Chacune de ces propriétés est brièvement 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 groupes d'instances gérés d'une seule zone et les groupes d'instances gérés régionaux. Les groupes d'instances gérés régionaux ne sont pas compatibles avec le filtrage des métriques par instance.

Pour configurer l'autoscaling pour un groupe d'instances géré régional (plusieurs zones) :

  1. Accédez à la page Groupes d'instances.
  2. Si vous ne disposez pas de groupe d'instances, créez-en un. Sinon, cliquez sur le nom d'un groupe d'instances dans la liste pour ouvrir la page d'informations du groupe d'instances. Le groupe doit être de type régional.
  3. Sur la page d'informations du groupe d'instances, cliquez sur le bouton Modifier le groupe.
  4. Sous Autoscaling, sélectionnez Activé pour activer l'autoscaling.
  5. Dans la section Autoscaling basé sur, sélectionnez Métrique Stackdriver Monitoring.
  6. Dans la section Identifiant de la métrique, saisissez le nom de la métrique au format suivant : example.googleapis.com/path/to/metric.
  7. Dans la section Cible, spécifiez la valeur cible.
  8. Dans la section Type de cible, spécifiez le type de cible correspondant à la granularité de mesure de la métrique.
  9. Enregistrez vos modifications lorsque vous êtes prêt.

Pour configurer l'autoscaling pour un groupe d'instances géré d'une seule zone :

  1. Accédez à la page Groupes d'instances.
  2. Si vous ne disposez pas de groupe d'instances, créez-en un. Sinon, cliquez sur le nom d'un groupe d'instances pour ouvrir la page d'informations du groupe d'instances. Le groupe d'instances doit concerner 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 Activé 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 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

Vous pouvez éventuellement utiliser le paramètre --cool-down-period, qui indique à l'autoscaler le nombre de secondes à attendre après le démarrage d'une nouvelle machine virtuelle avant qu'il ne commence à collecter les informations d'utilisation. Ce paramètre tient compte de la durée nécessaire à l'initialisation de la machine virtuelle, 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 les groupes d'instances gérés de plusieurs zones, utilisez l'indicateur --region pour spécifier l'emplacement du groupe d'instances. Exemple :

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-central1

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

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 éventuellement utiliser le paramètre coolDownPeriodSec. Celui-ci indique à l'autoscaler le nombre de secondes à attendre après le démarrage d'une nouvelle instance avant qu'il ne commence à collecter les informations d'utilisation. Une fois l'intervalle entre chaque période d'autoscaling écoulé, l'autoscaler commence à collecter les informations d'utilisation de la nouvelle instance et détermine si le groupe nécessite des instances supplémentaires. Ce paramètre tient compte de la durée nécessaire à l'initialisation de l'instance, 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'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

Vous pouvez appliquer des filtres aux métriques Stackdriver Monitoring par instance, ce qui vous permet de procéder au scaling des groupes d'instances gérés d'une seule zone à l'aide de valeurs individuelles de métriques comportant plusieurs flux ou étiquettes.

Exigences relatives au filtrage des métriques par instance

Le filtrage d'autoscaler est compatible avec la syntaxe de filtre de Stackdriver Monitoring. 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 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 bêta de Compute Engine pour ajouter des filtres de métriques pour l'autoscaling d'un groupe d'instances géré à 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. Accédez à la page Groupes d'instances.
  2. Si vous ne disposez pas de groupe d'instances, créez-en un. Sinon, cliquez sur le nom d'un groupe d'instances pour ouvrir la page d'informations du groupe d'instances. Le groupe d'instances ne doit s'étendre que sur 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 Activé 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

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 indicateurs gcloud disponibles, consultez la documentation de référence sur l'outil (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/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": "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

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 instances en fonction du volume de travail disponible pour chaque instance. Indiquez une valeur pour ce paramètre qui représente le volume de travail à gérer pour chaque instance. Par exemple, spécifiez 2 pour attribuer deux unités de travail à chaque instance ou spécifiez 0.5 pour attribuer une demi-unité de travail à chaque instance. L'autoscaler ajoute suffisamment d'instances au groupe d'instances géré 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 instance, l'autoscaler crée 20 instances dans le groupe d'instances géré. Le scaling avec attribution d'instances permet au groupe d'instances de passer à 0 instances lorsque la valeur de la métrique tombe à 0, puis d'augmenter à nouveau le nombre d'instances lorsqu'elle dépasse 0. Le diagramme suivant montre la relation proportionnelle entre la valeur de la métrique et le nombre d'instances 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 supprimer des instances 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 instances 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 instances 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 instances. Le diagramme suivant montre comment l'autoscaler ajoute et supprime des instances en réponse à une valeur de métrique afin de maintenir une cible d'utilisation. L'autoscaler ajoute et supprime des instances pour maintenir une utilisation cible.

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

  • Attribution d'instance : ajustez la taille de vos groupes d'instances gérés 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 vos groupes d'instances gérés 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, vos groupes d'instances peuvent être réduits à 0 instance. Si votre métrique n'indique aucun travail à effectuer pour votre groupe d'instances, le groupe se réduira à 0 instance jusqu'à ce que la métrique détecte la disponibilité d'une nouvelle tâche. Contrairement à l'attribution d'instances par groupe, l'autoscaling par instance nécessite des métriques d'utilisation des ressources d'au moins une instance, 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 Stackdriver Monitoring par groupe, ce qui vous permet de procéder au scaling de groupes d'instances gérés à l'aide de valeurs individuelles de métriques comportant plusieurs flux ou étiquettes.

Exigences relatives au filtrage des métriques par groupe

Le filtrage d'autoscaler est compatible avec la syntaxe de filtre de Stackdriver Monitoring. 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 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 (version bêta) gcloud ou l'API Compute Engine (version bêta) pour configurer l'autoscaling avec des métriques par groupe pour un groupe d'instances géré à zone unique.

Console

  1. Accédez à la page Groupes d'instances.
  2. Si vous ne disposez pas de groupe d'instances, créez-en un. Sinon, cliquez sur le nom d'un groupe d'instances pour ouvrir la page d'informations du groupe d'instances. Le groupe d'instances doit se trouver 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 Activé 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 une cible d'utilisation.
  11. 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 du groupe d'instances géré. Par exemple, spécifiez 2 pour attribuer deux unités de travail à chaque instance. L'autoscaler maintient suffisamment d'instances 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 instance, l'autoscaler crée 5 instances dans le groupe d'instances géré.
  12. 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.
  13. Enregistrez vos modifications lorsque vous êtes prêt.

gcloud

Créez un autoscaler pour un groupe d'instances géré de la même manière que l'autoscaler par instance, mais spécifiez l'indicateur --update-stackdriver-metric. Vous pouvez préciser comment vous voulez que l'autoscaler provisionne les instances en incluant l'un des indicateurs suivants :

  • 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'indicateur --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]

où :

  • [GROUP_NAME] correspond au nom du groupe d'instances géré auquel vous souhaitez ajouter un autoscaler.
  • [ZONE] correspond à la zone où se trouve le groupe d'instances géré. Vous ne pouvez pas spécifier de région pour les autoscalers sur les métriques par groupe.
  • [MAX_INSTANCES] est le nombre maximal d'instances que l'autoscaler peut ajouter au groupe d'instances géré.
  • [MIN_INSTANCES] est le nombre minimal d'instances que l'autoscaler peut avoir dans le groupe d'instances géré.
  • [METRIC_URL] est une URL sans protocole d'une métrique Monitoring.
  • [METRIC_FILTER] est un filtre Stackdriver Monitoring dans lequel vous spécifiez un filtre de surveillance avec des valeurs TimeSeries et MonitoredResource appropriées. Le filtre doit répondre aux exigences de filtrage de l'autoscaler.
  • [INSTANCE_ASSIGNMENT] correspond au volume de travail à attribuer à chaque instance du groupe d'instances géré. Par exemple, spécifiez 2 pour attribuer deux unités de travail à chaque instance ou spécifiez 0.5 pour attribuer une demi-unité de travail à chaque instance. L'autoscaler ajoute suffisamment d'instances au groupe d'instances géré afin de garantir qu'elles peuvent 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 instance, l'autoscaler provisionne 20 instances dans le groupe d'instances géré.

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 d'instances 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 la cible et le type de cible avec l'indicateur --stackdriver-metric-utilization-target. Vous devez également spécifier un filtre pour la métrique à l'aide de l'indicateur --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-utilization-target=[TARGET_VALUE] \
   --stackdriver-metric-utilization-target-type=[TARGET_TYPE]

où :

  • [GROUP_NAME] correspond au nom du groupe d'instances géré auquel vous souhaitez ajouter un autoscaler.
  • [ZONE] correspond à la zone où se trouve le groupe d'instances géré. Vous ne pouvez pas spécifier de région pour les autoscalers sur les métriques par groupe.
  • [MAX_INSTANCES] est le nombre maximal d'instances que l'autoscaler peut ajouter au groupe d'instances géré.
  • [MIN_INSTANCES] est le nombre minimal d'instances que l'autoscaler peut avoir dans le groupe d'instances géré.
  • [METRIC_URL] est une URL sans protocole d'une métrique Monitoring.
  • [METRIC_FILTER] est un filtre Stackdriver Monitoring dans lequel vous spécifiez un filtre de surveillance avec des valeurs TimeSeries et MonitoredResource appropriées. 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] correspond à la valeur de la métrique que l'autoscaler tente de maintenir.
  • [TARGET_TYPE] correspond au 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.

Pour afficher la liste des commandes et des indicateurs disponibles pour l'outil de ligne de commande gcloud de l'autoscaler et qui sont compatibles avec l'autoscaling par groupe, consultez la documentation de référence sur l'outil de ligne de commande (version bêta).

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 groupe d'instances géré. 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 travail que chaque instance doit gérer.

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]",
      "singleInstanceAssignment": [INSTANCE_ASSIGNMENT]
    }
  ],
 }
}

où :

  • [PROJECT_ID] est l'ID de votre projet.
  • [ZONE] correspond à la zone où se trouve le groupe d'instances géré.
  • [GROUP_NAME] correspond au nom du groupe d'instances géré auquel vous souhaitez ajouter un autoscaler.
  • [MAX_INSTANCES] est le nombre maximal d'instances que l'autoscaler peut ajouter au groupe d'instances géré.
  • [MIN_INSTANCES] est le nombre minimal d'instances que l'autoscaler peut avoir dans le groupe d'instances géré.
  • [METRIC_URL] est une URL sans protocole d'une métrique Monitoring.
  • [METRIC_FILTER] est un filtre Stackdriver Monitoring dans lequel vous spécifiez un filtre de surveillance avec des valeurs TimeSeries et MonitoredResource appropriées. 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] correspond au volume de travail à attribuer à chaque instance du groupe d'instances géré. Par exemple, spécifiez 2 pour attribuer deux unités de travail à chaque instance ou spécifiez 0.5 pour attribuer une demi-unité de travail à chaque instance. L'autoscaler ajoute suffisamment d'instances au groupe d'instances géré afin de garantir qu'elles peuvent 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 instance, l'autoscaler provisionne 20 instances dans le groupe d'instances géré.

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 d'instances 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]
    }
  ],
 }
}

où :

  • [GROUP_NAME] correspond au nom du groupe d'instances géré auquel vous souhaitez ajouter un autoscaler.
  • [ZONE] correspond à la zone où se trouve le groupe d'instances géré.
  • [MAX_INSTANCES] est le nombre maximal d'instances que l'autoscaler peut ajouter au groupe d'instances géré.
  • [MIN_INSTANCES] est le nombre minimal d'instances que l'autoscaler peut avoir dans le groupe d'instances géré.
  • [METRIC_URL] est une URL sans protocole d'une métrique Monitoring.
  • [METRIC_FILTER] est un filtre Stackdriver Monitoring dans lequel vous spécifiez un filtre de surveillance avec des valeurs TimeSeries et MonitoredResource appropriées. 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] correspond à la valeur de la métrique que l'autoscaler tente de maintenir.
  • [TARGET_TYPE] correspond au 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 groupe d'instances géré d'une seule zone 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 à 0 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 est alors créée pour chaque message de la file d'attente (dans la limite du nombre maximal d'instances de notre groupe). Mais cela peut provoquer un provisionnement excessif. Dans le pire des cas, une instance 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 instance 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 instances. 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 instances qu'après une période de 10 minutes environ, vous calculez qu'il est efficace de créer une instance 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 l'instance. 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 à 0 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 groupe d'instances géré 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 Stackdriver Monitoring qui exporte une valeur que vous souhaitez conserver à un niveau donné. 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 une étiquette avec une clé nommée group_name et une valeur égale au nom du groupe d'instances, 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 instance spécifique.

Vous avez établi que lorsque la valeur de la métrique est supérieure à une valeur spécifique, vous devez ajouter d'autres instances au groupe pour gérer la charge, alors que si elle est inférieure à cette valeur, vous pouvez libérer des ressources. L'autoscaling ajoute ou supprime progressivement les instances à 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