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 l'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, 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

Le scaling basé sur les métriques Cloud Monitoring est limité par les limites applicables à tous les autoscalers, ainsi que par les limites suivantes :

  • Vous ne pouvez pas effectuer l'autoscaling en fonction des métriques basées sur les journaux Cloud Monitoring.
  • Vous ne pouvez pas utiliser de libellés de métadonnées de ressources pour filtrer les métriques de l'autoscaling. Vous ne pouvez utiliser que les libellés définis sur les types de métriques et de ressources surveillées.

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.

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

  1. Dans Google 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 dans la liste pour ouvrir la page de présentation du groupe d'instances.

  3. Sur la page de présentation du groupe d'instances, cliquez sur Modifier.

  4. Si aucune configuration d'autoscaling n'existe, cliquez sur Configurer l'autoscaling sous Autoscaling.

  5. Sous Mode autoscaling, sélectionnez Activé : ajouter et supprimer des instances au groupe pour activer l'autoscaling.

  6. Dans la section Métriques d'autoscaling, cliquez sur une métrique existante pour la modifier ou cliquez sur Ajouter une métrique pour en créer une.

  7. Définissez le champ Type de métrique sur Métrique Cloud Monitoring.

  8. 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.

  9. Dans la section Identifiant de la métrique, saisissez le nom de la métrique au format suivant : example.googleapis.com/path/to/metric.

  10. Dans la section Additional filter expression (Expression de filtre supplémentaire), procédez comme suit :

    • Pour un MIG zonal, vous pouvez éventuellement saisir un filtre pour utiliser des valeurs individuelles de métriques comportant plusieurs flux ou étiquettes. Pour en savoir plus, consultez la section Filtrer les métriques par instance.
    • Pour un MIG régional, laissez cette section vide.
  11. Dans la section Cible d'utilisation, spécifiez la valeur cible.

  12. Dans la section Type de cible d'utilisation, vérifiez que le type de cible correspond au type de mesure de la métrique.

  13. Enregistrez vos modifications lorsque vous êtes prêt.

gcloud

Par exemple, dans Google Cloud CLI, 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 utiliser l'option --cool-down-period pour indiquer à l'autoscaler le temps nécessaire à l'initialisation de votre application. La spécification d'un intervalle précis entre chaque période d'autoscaling permet d'améliorer les décisions de l'autoscaler. Par exemple, lors d'un scaling horizontal, l'autoscaler ignore les données des VM qui sont toujours en cours d'initialisation, car il est possible que ces VM ne représentent pas encore une utilisation normale de l'application. 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 gcloud CLI, consultez la documentation de référence de gcloud.

API

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 utiliser le champ coolDownPeriodSec pour indiquer à l'autoscaler le temps nécessaire à l'initialisation de votre application. La spécification d'un intervalle précis entre chaque période d'autoscaling permet d'améliorer les décisions de l'autoscaler. Par exemple, lors d'un scaling horizontal, l'autoscaler ignore les données des VM qui sont toujours en cours d'initialisation, car il est possible que ces VM ne représentent pas encore une utilisation normale de l'application. Par défaut, l'intervalle entre chaque période d'autoscaling 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 Cloud Monitoring par instance, 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 étiquettes.

Exigences relatives 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 devez encapsuler la valeur d'un filtre entre guillemets doubles, par exemple : metric.labels.state = "used".
  • 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.labels.*. 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, Google Cloud CLI ou l'API Compute Engine pour ajouter des filtres de métriques pour l'autoscaling d'un MIG.

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, 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 pour ouvrir la page de présentation du groupe d'instances.

  3. Sur la page de présentation du groupe d'instances, cliquez sur Modifier.

  4. Si aucune configuration d'autoscaling n'existe, cliquez sur Configurer l'autoscaling sous Autoscaling.

  5. Sous Mode autoscaling, sélectionnez Activé : ajouter et supprimer des instances au groupe pour activer l'autoscaling.

  6. Dans la section Métriques d'autoscaling, cliquez sur une métrique existante pour la modifier ou cliquez sur Ajouter une métrique pour en créer une.

  7. Dans la section Type de métrique, sélectionnez Métrique Cloud Monitoring.

  8. 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.

  9. Dans la section Identifiant de la métrique, saisissez le nom de la métrique. Exemple : compute.googleapis.com/instance/network/received_bytes_count.

  10. Dans la section Expression de filtre supplémentaire, saisissez un filtre. Exemple : 'metric.labels.loadbalanced = true'.

  11. 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.labels.loadbalanced = true'. Incluez les indicateurs de cible d'utilisation et de type de cible individuellement.

gcloud 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=10 \
    --stackdriver-metric-utilization-target-type=delta-per-second \
    --stackdriver-metric-filter='metric.labels.loadbalanced = true' \
    --max-num-replicas 20 \
    --cool-down-period 90 \
    --zone us-central1-f

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 gcloud CLI.

API

Pour ajouter des filtres de métriques pour un MIG zonal, utilisez la ressource autoscalers ou, pour un MIG régional, utilisez la ressource regionAutoscalers.

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.labels.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.labels.loadbalanced = true",
    "utilizationTarget": 10,
    "utilizationTargetType": "DELTA_PER_SECOND"
   }
  ]
 }
}

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 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 relatives 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. 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 devez encapsuler la valeur d'un filtre entre guillemets doubles, par exemple : metric.labels.state = "used".
  • 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, Google Cloud CLI ou l'API Compute Engine pour configurer l'autoscaling avec des métriques par groupe.

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 pour ouvrir la page de présentation du groupe d'instances.

  3. Sur la page de présentation du groupe d'instances, cliquez sur Modifier.

  4. Si aucune configuration d'autoscaling n'existe, cliquez sur Configurer l'autoscaling sous Autoscaling.

  5. Sous Mode autoscaling, sélectionnez Activé : ajouter et supprimer des instances au groupe pour activer l'autoscaling.

  6. Dans la section Métriques d'autoscaling, cliquez sur une métrique existante pour la modifier ou cliquez sur Ajouter une métrique pour en créer une.

  7. Définissez le champ Type de métrique sur Métrique Cloud Monitoring.

  8. Dans la section Champ d'application de l'exportation de la métrique, sélectionnez Série temporelle unique par groupe.

  9. 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.

  10. Spécifiez le type de ressource surveillée.

  11. Fournissez une expression de filtre supplémentaire si vous souhaitez utiliser des valeurs individuelles de métriques comportant plusieurs flux ou étiquettes. Le filtre doit répondre aux exigences de filtrage de l'autoscaler.

  12. Dans la section Règle de scaling, sélectionnez une attribution d'une seule instance 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.
  13. Enregistrez vos modifications lorsque vous êtes prêt.

gcloud

La création d'un autoscaler basé sur les métriques par groupe est semblable à celle d'un autoscaler basé sur les métriques par instance, sauf que vous spécifiez des options différentes. Dans la commande, spécifiez l'option --update-stackdriver-metric pour fournir l'URL de la métrique de surveillance. Vous devez également spécifier comment vous souhaitez 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'option --stackdriver-metric-filter.

La commande suivante crée un autoscaler basé sur une métrique par groupe à l'aide de l'option --stackdriver-metric-single-instance-assignment.

gcloud compute instance-groups managed set-autoscaling GROUP_NAME \
    --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 \
    [--zone=ZONE | --region=REGION]

Remplacez l'élément suivant :

  • GROUP_NAME : nom du MIG auquel vous souhaitez ajouter un autoscaler.
  • MAX_INSTANCES : nombre maximal de VM que le MIG peut contenir.
  • MIN_INSTANCES : nombre minimal de VM que le MIG peut contenir.
  • 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. 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.
  • ZONE : pour les MIG zonaux, zone où se trouve le MIG.
  • REGION : pour les MIG régionaux, région où se trouve 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 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.

La commande suivante crée un autoscaler basé sur une métrique par groupe à l'aide de l'option --stackdriver-metric-utilization-target.

gcloud compute instance-groups managed set-autoscaling GROUP_NAME \
    --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 \
    [--zone=ZONE | --region=REGION]

Remplacez l'élément suivant :

  • GROUP_NAME : nom du MIG auquel vous souhaitez ajouter un autoscaler.
  • MAX_INSTANCES : nombre maximal de VM que le MIG peut contenir.
  • MIN_INSTANCES : nombre minimal de VM que le MIG peut contenir.
  • 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.
  • ZONE : pour les MIG zonaux, zone où se trouve le MIG.
  • REGION : pour les MIG régionaux, région où se trouve le MIG.

Pour afficher la liste des commandes et des options d'autoscaler Google Cloud CLI disponibles avec l'autoscaling par groupe, consultez la documentation de référence de Google Cloud CLI.

API

Pour configurer l'autoscaling à l'aide de métriques de surveillance par groupe pour un MIG zonal, utilisez la commande autoscalers ou, pour un MIG régional, utilisez la ressource regionAutoscalers.

Indiquez comment vous souhaitez 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 :

Le paramètre singleInstanceAssignment indique le volume de tâches que chaque VM doit gérer.

Par exemple, effectuez l'appel suivant afin de créer un autoscaler qui met à l'échelle un MIG zonal en fonction de l'attribution d'instances d'une métrique par groupe.

POST https://compute.googleapis.com/compute/v1/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
    }
  ],
 }
}

Remplacez l'élément suivant :

  • PROJECT_ID : ID de votre projet
  • ZONE : zone où se trouve le MIG.
  • GROUP_NAME : nom du MIG auquel vous souhaitez ajouter un autoscaler.
  • MAX_INSTANCES : nombre maximal de VM que le MIG peut contenir.
  • MIN_INSTANCES : nombre minimal de VM que le MIG peut contenir.
  • 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.

Par exemple, effectuez l'appel suivant afin de créer un autoscaler qui met à l'échelle un MIG zonal en fonction de l'objectif d'utilisation d'une métrique par groupe.

POST https://compute.googleapis.com/compute/v1/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 l'élément suivant :

  • PROJECT_ID : ID de votre projet
  • ZONE : zone où se trouve le MIG.
  • GROUP_NAME : nom du MIG auquel vous souhaitez ajouter un autoscaler.
  • MAX_INSTANCES : nombre maximal de VM que le MIG peut contenir.
  • MIN_INSTANCES : nombre minimal de VM que le MIG peut contenir.
  • 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 zonal nommé our-instance-group qui 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 à 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 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.labels.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 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.labels.group_name = our-instance-group" \
    --stackdriver-metric-utilization-target=100 \
    --stackdriver-metric-utilization-target-type=delta-per-second

Étapes suivantes