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 d'autres métriques Stackdriver 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. 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 machine virtuelle figurant dans le groupe.

Dans l'exemple suivant, la métrique 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 Stackdriver Monitoring. Cela vous permet d'accéder aux données Cloud Platform 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 d'une métrique personnalisée, 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 avoir effectué les opérations suivantes :

  • Créer une métrique personnalisée. Pour en savoir plus sur la création d'une métrique personnalisée, consultez la documentation relative aux métriques personnalisées.
  • Configurer 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. Vous pouvez exporter des données plus souvent afin que l'autoscaler réponde 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 des valeurs de 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 Serveur de métadonnées.

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 d'utilisation cible que l'autoscaler doit maintenir pour cette métrique. 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 les 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.

    Si vous avez spécifié le niveau d'utilisation cible souhaité en secondes, vous devez utiliser DELTA_PER_SECOND. De même, utilisez DELTA_PER_MINUTE si vous avez exprimé le niveau d'utilisation cible souhaité en minutes, afin que l'autoscaler puisse effectuer des comparaisons précises.

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 au type 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 gcloud, la commande suivante crée un autoscaler utilisant le type de cible GAUGE. Avec le paramètre --custom-metric-utilization, le paramètre --max-num-replicas est également nécessaire pour 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 l'indicateur --cool-down-period, qui indique à l'autoscaler le nombre de secondes à attendre après le démarrage d'une nouvelle machine virtuelle avant que l'autoscaler 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 gcloud disponibles, 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 demande 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://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f/autoscalers/

Le corps de votre demande 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, qui indique à l'autoscaler le nombre de secondes à attendre après le démarrage d'une nouvelle instance avant que l'autoscaler 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'autoscaling est de 60 secondes.

POST https://www.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 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 du 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 que les résultats soient optimaux, le filtre doit être suffisamment précis pour afficher une seule série temporelle par instance. Si le filtre affiche plusieurs séries temporelles, elles sont cumulées.

Configurer les autoscalers pour filtrer les métriques

Utilisez la console Google Cloud Platform, l'outil de ligne de commande gcloud bêta ou l'API bêta de Compute Engine pour ajouter des filtres de métriques afin de procéder à l'autoscaling d'un groupe d'instances géré d'une seule zone.

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 comprend les étiquettes instance_name et loadbalanced. Pour effectuer un filtrage en fonction du booléen 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 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. 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 comprend les étiquettes instance_name et loadbalanced. Pour effectuer un filtrage en fonction du booléen 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 complète des commandes et des indicateurs gcloud disponibles, consultez la documentation de référence de la version bêta 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.

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 comprend les étiquettes instance_name et loadbalanced. Pour effectuer un filtrage en fonction du booléen loadbalanced, spécifiez l'indicateur de filtre filter avec la valeur "metric.label.loadbalanced = true".

Dans l'API, envoyez une demande 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 demande doit contenir les champs name, target et autoscalingPolicy. Dans autoscalingPolicy, fournissez les propriétés maxNumReplicas et customMetricUtilizations.

POST https://www.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 attendu 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é 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 instance 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. Graphique montrant 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 que l'autoscaler doit 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 instance. 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. Graphique montrant l'ajout et la suppression d'instances par l'autoscaler pour maintenir une utilisation cible

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

  • Attribution d'instances : adaptez la taille de vos groupes d'instances gérés en fonction du nombre de messages non confirmés dans un abonnement Google 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'un nouveau travail. 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 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 du 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 toutes les 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 le sélecteur resource.type, mais vous ne pouvez pas le définir sur gce_instance si vous souhaitez effectuer un scaling à l'aide de métriques par groupe.
  • Afin que les résultats soient optimaux, 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 la console Google Cloud Platform, l'outil de ligne de commande gcloud bêta ou l'API bêta de Compute Engine pour configurer l'autoscaling avec des métriques par groupe pour un groupe d'instances géré d'une seule zone.

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 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 unique par groupe.
  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. 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.
    • 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é.
    • 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 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 Google Cloud 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é 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 Google Cloud 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 de 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 de la valeur ou par le delta-per-second de la valeur.

Pour afficher la liste complète des commandes et des indicateurs gcloud de l'autoscaler disponibles qui sont compatibles avec l'autoscaling par groupe, consultez la documentation de référence de la version bêta de gcloud.

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 indique le volume de travail que chaque instance doit gérer.

POST https://www.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] correspond à votre ID de 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 Google Cloud 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 de 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é 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://www.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 Google Cloud 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 de 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 thème Google Cloud Pub/Sub actif reçoit des messages de certaines sources.
  • Un abonnement Google Cloud Pub/Sub actif est connecté au thème 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 appelé our-instance-group et se trouve 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 pouvaient traiter plusieurs messages en même temps, il serait 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 en raison du 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 métriques Pub/Sub disponibles, nous trouvons une métrique 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 est situé 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
Cette page vous a-t-elle été utile ? Évaluez-la :

Envoyer des commentaires concernant…

Documentation Compute Engine