Partager via


Gestion des fonctionnalités Python

Gestion des fonctionnalités

Gestion des fonctionnalités

La bibliothèque de gestion des fonctionnalités Python permet de développer et d’exposer des fonctionnalités d’application basées sur des indicateurs de fonctionnalité. Une fois qu’une nouvelle fonctionnalité est développée, de nombreuses applications ont des exigences particulières, par exemple quand la fonctionnalité doit être activée et dans quelles conditions. Cette bibliothèque fournit un moyen de définir ces relations et s’intègre également aux modèles de code Python courants pour rendre l’exposition de ces fonctionnalités possible.

Les indicateurs de fonctionnalité permettent aux applications Python d’activer ou de désactiver dynamiquement des fonctionnalités. Les développeurs peuvent utiliser des indicateurs de fonctionnalité dans des cas d’utilisation simples tels que des instructions conditionnelles.

Voici quelques-uns des avantages liés à l’utilisation de la bibliothèque de gestion des fonctionnalités Python :

  • Une convention commune pour la gestion des fonctionnalités

  • Prise en main rapide

    • Prend en charge la configuration d’indicateurs de fonctionnalité JSON
  • Gestion de la durée de vie des indicateurs de fonctionnalité

    • Les valeurs de configuration peuvent changer en temps réel ; les indicateurs de fonctionnalité peuvent être cohérents dans l’ensemble de la requête
  • Scénarios simples à complexes couverts

    • Activation/désactivation des fonctionnalités via le fichier de configuration déclaratif
    • Évaluation dynamique de l’état de la fonctionnalité en fonction de l’appel au serveur

    La bibliothèque de gestion des fonctionnalités Python est open source. Pour plus d’informations, visitez le dépôt GitHub.

Indicateurs de fonctionnalités

Les indicateurs de fonctionnalité sont composés de deux parties : un nom et une liste de filtres de fonctionnalités utilisés pour activer la fonctionnalité.

Filtres de fonctionnalités

Les filtres de fonctionnalités définissent un scénario pour lequel une fonctionnalité doit être activée. Lorsque l’activation ou la désactivation d’une fonctionnalité est évaluée, sa liste de filtres de fonctionnalités est parcourue jusqu’à ce qu’un des filtres décide que la fonctionnalité doit être activée. À ce stade, la fonctionnalité est considérée comme activée et le parcours des filtres de fonctionnalités s’arrête. Si aucun filtre de fonctionnalités n’indique que la fonctionnalité doit être activée, elle est considérée comme désactivée.

Par exemple, un filtre de fonctionnalités de navigateur Microsoft Edge peut être conçu. Ce filtre de fonctionnalité active toutes les fonctionnalités auxquelles il est attaché, à condition qu’une requête HTTP provienne de Microsoft Edge.

Configuration de l’indicateur de fonctionnalité

Un dictionnaire Python est utilisé pour définir des indicateurs de fonctionnalité. Le dictionnaire est composé de noms de fonctionnalités (clés) et d’objets d’indicateur de fonctionnalité (valeurs). L’objet d’indicateur de fonctionnalité est un dictionnaire qui contient une clé conditions, qui elle-même contient la clé client_filters. La clé client_filters est une liste de filtres de fonctionnalités utilisés pour déterminer si la fonctionnalité doit être activée.

Déclaration d’indicateur de fonctionnalité

La bibliothèque de gestion des fonctionnalités prend en charge JSON comme source d’indicateurs de fonctionnalité. Vous trouverez ci-dessous un exemple du format utilisé pour configurer des indicateurs de fonctionnalité dans un fichier JSON.

{
    "feature_management": {
        "feature_flags": [
            {
                "id": "FeatureT",
                "enabled": "true"
            },
            {
                "id": "FeatureU",
                "enabled": "false"
            },
            {
                "id": "FeatureV",
                "enabled": "true",
                "conditions": {
                    "client_filters": [
                        {
                            "name": "Microsoft.TimeWindow",
                            "parameters": {
                                "Start": "Wed, 01 May 2019 13:59:59 GMT",
                                "End": "Mon, 01 Jul 2019 00:00:00 GMT"
                            }
                        }
                    ]
                }
            }
        ]
    }
}

La section feature_management du document JSON est utilisée par convention pour charger les paramètres des indicateurs de fonctionnalité. La section feature_flags est une liste des indicateurs de fonctionnalité chargés dans la bibliothèque. Dans la section ci-dessus, nous voyons trois fonctionnalités différentes. Les fonctionnalités définissent leurs filtres de fonctionnalités à l’aide de la propriété client_filters, à l’intérieur de conditions. Dans les filtres de fonctionnalités pour FeatureT, nous voyons que enabled est activé sans aucun filtre défini, ce qui fait que FeatureT retourne toujours true. FeatureU est identique à FeatureT, mais avec enabled défini sur false, ce qui fait que la fonctionnalité retourne toujours false. FeatureV spécifie un filtre de fonctionnalités nommé Microsoft.TimeWindow. FeatureV est un exemple de filtre de fonctionnalité configurable. Nous pouvons voir dans l’exemple que le filtre a une propriété parameters. La propriété parameters est utilisée pour configurer le filtre. Dans ce cas, les heures de début et de fin d’activation de la fonctionnalité sont configurées.

Le schéma détaillé de la section feature_management est disponible ici.

Avancé : l’utilisation du signe deux-points (:) est interdite dans les noms d’indicateurs de fonctionnalité.

Déclaration d’activation/désactivation

L’extrait de code suivant illustre une autre façon de définir une fonctionnalité qui peut être utilisée pour l’activation/désactivation des fonctionnalités.

{
    "feature_management": {
        "feature_flags": [
            {
                "id": "FeatureT",
                "enabled": "true"
            },
            {
                "id": "FeatureX",
                "enabled": "false"
            }
        ]
    }
}

Requirement_type

La propriété requirement_type d’un indicateur de fonctionnalité sert à déterminer si les filtres doivent utiliser la logique Any ou All lors de l’évaluation de l’état d’une fonctionnalité. Si requirement_type n’est pas spécifié, la valeur par défaut est Any.

  • Any signifie qu’un seul filtre doit être évalué sur true pour que la fonctionnalité soit activée.
  • All signifie que tous les filtres doivent être évalués sur true pour que la fonctionnalité soit activée.

Un requirement_type de All modifie le parcours. Tout d’abord, s’il n’existe aucun filtre, la fonctionnalité est désactivée. Ensuite, les filtres de fonctionnalités sont parcourus jusqu’à ce que l’un des filtres décide que la fonctionnalité doit être désactivée. Si aucun filtre n’indique que la fonctionnalité doit être désactivée, elle est considérée comme activée.

{
    "feature_management": {
        "feature_flags": [
            {
                "id": "FeatureW",
                "enabled": "true",
                "conditions": {
                    "requirement_type": "All",
                    "client_filters": [
                        {
                            "name": "Microsoft.TimeWindow",
                            "parameters": {
                                "Start": "Wed, 01 May 2019 13:59:59 GMT",
                                "End": "Mon, 01 Jul 2019 00:00:00 GMT"
                            }
                        },
                        {
                            "name": "Percentage",
                            "parameters": {
                                "Value": "50"
                            }
                        }
                    ]
                }
            },
        ]
    }
}

Dans l’exemple ci-dessus, FeatureW spécifie un requirement_type de All, ce qui signifie que tous ses filtres doivent être évalués sur true pour que la fonctionnalité soit activée. Dans ce cas, la fonctionnalité est activée pour 50 % des utilisateurs pendant la fenêtre de temps spécifiée.

Consommation

La forme de base de la gestion des fonctionnalités consiste à vérifier si un indicateur de fonctionnalité est activé, puis à effectuer des actions en fonction du résultat. Pour vérifier l’état d’un indicateur de fonctionnalité, utilisez la méthode is_enabled de FeatureManager.

…
feature_manager = FeatureManager(feature_flags)
…
if feature_manager.is_enabled("FeatureX"):
    # Do something

Le feature_flags fourni à FeatureManager peut être AzureAppConfigurationProvider ou un dictionnaire d’indicateurs de fonctionnalité.

Implémentation d’un filtre de fonctionnalité

La création d’un filtre de fonctionnalités permet d’activer des fonctionnalités en fonction des critères que vous définissez. Pour implémenter un filtre de fonctionnalités, l’interface FeatureFilter doit être implémentée. FeatureFilter a une méthode unique nommée evaluate. Lorsqu’une fonctionnalité spécifie qu’elle peut être activée pour un filtre de fonctionnalités, la méthode evaluate est appelée. Si evaluate retourne true, cela signifie que la fonctionnalité doit être activée.

L’extrait de code suivant montre comment ajouter un filtre de fonctionnalités personnalisé MyCustomFilter.

feature_manager = FeatureManager(feature_flags, feature_filters=[MyCustomFilter()])

Pour inscrire des filtres de fonctionnalités, vous devez les fournir à la propriété feature_filters lors de la création de FeatureManager. Si un filtre de fonctionnalité personnalisé a besoin d’un contexte, il peut être transmis lors de l’appel de is_enabled avec kwargs.

Attribut d’alias de filtre

Lorsqu’un filtre de fonctionnalité est inscrit pour un indicateur de fonctionnalité, le nom du filtre est utilisé comme alias par défaut.

Vous pouvez remplacer l’identificateur du filtre de fonctionnalité avec @FeatureFilter.alias("MyFilter"). Un filtre de fonctionnalités peut être décoré avec cet attribut pour déclarer le nom qui doit être utilisé dans la configuration pour référencer ce filtre de fonctionnalités dans un indicateur de fonctionnalité.

Filtres de fonctionnalités manquants

Si une fonctionnalité est configurée pour être activée pour un filtre de fonctionnalité spécifique et que ce filtre de fonctionnalité n’est pas inscrit, une exception ValueError est levée lorsque la fonctionnalité est évaluée.

Filtres de fonctionnalités intégrés

Deux filtres de fonctionnalités sont fournis avec le package FeatureManagement : TimeWindowFilter et TargetingFilter.

Chacun des filtres de fonctionnalités intégrés a ses propres paramètres. Voici la liste des filtres de fonctionnalités, ainsi que des exemples.

Microsoft.TimeWindow

Ce filtre permet d’activer une fonctionnalité en fonction d’une fenêtre de temps. Si uniquement End est spécifié, la fonctionnalité est considérée comme activée jusqu’à cette heure. Si uniquement Start est spécifié, la fonctionnalité est considérée comme activée à tous les points après cette heure.

"client_filters": [
    {
        "name": "Microsoft.TimeWindow",
        "parameters": {
            "Start": "Wed, 01 May 2019 13:59:59 GMT",
            "End": "Mon, 01 Jul 2019 00:00:00 GMT"
        }
    }
]     

Microsoft.Targeting

Ce filtre permet d’activer une fonctionnalité pour un public cible. Une explication détaillée du ciblage est expliquée dans la section sur le ciblage ci-dessous. Les paramètres de filtre incluent un objet Audience qui décrit les utilisateurs, les groupes, les utilisateurs et groupes exclus et un pourcentage par défaut de la base d’utilisateurs qui doit avoir accès à la fonctionnalité. Chaque objet de groupe répertorié dans la section Groups doit également spécifier le pourcentage des membres du groupe qui doivent avoir accès. Si un utilisateur est spécifié dans la section Exclusion, directement ou si l’utilisateur se trouve dans un groupe exclu, la fonctionnalité est désactivée. Sinon, si un utilisateur est spécifié directement dans la section Users, ou si l’utilisateur se trouve dans le pourcentage inclus de l’un des déploiements de groupe, ou si l’utilisateur tombe dans le pourcentage de déploiement par défaut, cette fonctionnalité est activée.

"client_filters": [
    {
        "name": "Microsoft.Targeting",
        "parameters": {
            "Audience": {
                "Users": [
                    "Jeff",
                    "Alicia"
                ],
                "Groups": [
                    {
                        "Name": "Ring0",
                        "RolloutPercentage": 100
                    },
                    {
                        "Name": "Ring1",
                        "RolloutPercentage": 50
                    }
                ],
                "DefaultRolloutPercentage": 20,
                "Exclusion": {
                    "Users": [
                        "Ross"
                    ],
                    "Groups": [
                        "Ring2"
                    ]
                }
            }
        }
    }
]

Ciblage

Le ciblage est une stratégie de gestion des fonctionnalités qui permet aux développeurs de déployer progressivement de nouvelles fonctionnalités sur leur base d’utilisateurs. La stratégie repose sur le concept de ciblage d’un ensemble d’utilisateurs appelé public cible. Un public est constitué d’utilisateurs, de groupes spécifiques, d’utilisateurs et de groupes exclus, et d’un pourcentage désigné de l’ensemble de la base d’utilisateurs. Les groupes inclus dans le public peuvent être divisés en pourcentages de leurs membres totaux.

Les étapes suivantes illustrent un exemple de déploiement progressif d’une nouvelle fonctionnalité « Bêta » :

  1. Les utilisateurs individuels Jeff et Alicia ont accès à la version Bêta
  2. Un autre utilisateur, Mark, demande à participer et est inclus.
  3. Vingt pour cent d’un groupe appelé utilisateurs « Ring1 » sont inclus dans la version Bêta.
  4. Le nombre d’utilisateurs « Ring1 » inclus dans la version bêta est passé à 100 %.
  5. Cinq pour cent de la base d’utilisateurs sont inclus dans la version Bêta.
  6. Le pourcentage de déploiement est passé à 100 % et la fonctionnalité est entièrement déployée.

Cette stratégie de déploiement d’une fonctionnalité est intégrée à la bibliothèque via le filtre de fonctionnalité Microsoft.Targeting inclus.

Ciblage d’un utilisateur

Vous pouvez spécifier directement un utilisateur dans l’appel is_enabled ou utiliser TargetingContxt pour spécifier l’utilisateur et le groupe facultatif.

# Directly specifying the user
result = is_enabled(feature_flags, "test_user")

# Using a TargetingContext
result = is_enabled(feature_flags, TargetingContext(user_id="test_user", groups=["Ring1"]))

Exclusion de ciblage

Lors de la définition d’une audience, vous pouvez exclure des utilisateurs et des groupes de l’audience. Les exclusions sont utiles pour déployer une fonctionnalité sur un groupe d’utilisateurs en excluant quelques utilisateurs ou groupes du déploiement. L’exclusion est définie en ajoutant une liste d’utilisateurs et de groupes à la propriété Exclusion du public.

"Audience": {
    "Users": [
        "Jeff",
        "Alicia"
    ],
    "Groups": [
        {
            "Name": "Ring0",
            "RolloutPercentage": 100
        }
    ],
    "DefaultRolloutPercentage": 0
    "Exclusion": {
        "Users": [
            "Mark"
        ]
    }
}

Dans l’exemple ci-dessus, la fonctionnalité est activée pour les utilisateurs nommés Jeff et Alicia. Elle est également activée pour les utilisateurs du groupe nommé Ring0. Toutefois, si l’utilisateur est nommé Mark, la fonctionnalité est désactivée, qu’il se trouve dans le groupe Ring0 ou non. Les exclusions sont prioritaires sur le reste du filtre de ciblage.

Variantes

Lorsque de nouvelles fonctionnalités sont ajoutées à une application, il peut arriver qu’une fonctionnalité ait différentes options de conception proposées. Une solution courante pour décider d’une conception est une forme de test A/B. Un test A/B implique de fournir une version différente de la fonctionnalité à différents segments de la base d’utilisateurs et de choisir une version en fonction de l’interaction utilisateur. Dans cette bibliothèque, cette fonctionnalité est activée en représentant différentes configurations d’une fonctionnalité avec des variantes.

Les variantes permettent à un indicateur de fonctionnalité de devenir plus qu’un simple indicateur activé/désactivé. Une variante représente une valeur d’un indicateur de fonctionnalité qui peut être une chaîne, un nombre, une valeur booléenne ou même un objet de configuration. Un indicateur de fonctionnalité qui déclare des variantes doit définir dans quelles circonstances chaque variante doit être utilisée, ce qui est abordé plus en détail dans la section Allocation de variantes.

class Variant:
    def __init__(self, name: str, configuration: Any):
        self._name = name
        self._configuration = configuration

    @property
    def name(self) -> str:
        """
        The name of the variant.
        :rtype: str
        """
        return self._name

    @property
    def configuration(self) -> Any:
        """
        The configuration of the variant.
        :rtype: Any
        """
        return self._configuration

Obtention de variantes

Pour chaque fonctionnalité, une variante peut être récupérée dans le FeatureManager à l’aide de sa méthode get_variant.

…
variant = print(feature_manager.get_variant("TestVariants", TargetingContext(user_id="Adam"))

variantConfiguration = variant.configuration;

// Do something with the resulting variant and its configuration

La variante retournée dépend de l’utilisateur en cours d’évaluation, et ces informations sont obtenues à partir d’une instance de TargetingContext.

Déclaration d’indicateur de fonctionnalité de variante

Comparés aux indicateurs de fonctionnalité normaux, les indicateurs de fonctionnalité de variante ont deux propriétés supplémentaires : variants et allocation. La propriété variants est un tableau qui contient les variantes définies pour cette fonctionnalité. La propriété allocation définit la façon dont ces variantes doivent être allouées pour la fonctionnalité. Au même titre que la déclaration d’indicateurs de fonctionnalité normaux, vous pouvez configurer des indicateurs de fonctionnalité de variante dans un fichier JSON. Voici un exemple d’indicateur de fonctionnalité de variante.

{
    "feature_management": {
        "feature_flags": [
            {
                "id": "MyVariantFeatureFlag",
                "enabled": true,
                "allocation": {
                    "default_when_enabled": "Small",
                    "group": [
                        {
                            "variant": "Big",
                            "groups": [
                                "Ring1"
                            ]
                        }
                    ]
                },
                "variants": [
                    { 
                        "name": "Big"
                    },  
                    { 
                        "name": "Small"
                    } 
                ]
            }
        ]
    }
}

Définition de variantes

Chaque variante a deux propriétés : un nom et une configuration. Le nom est utilisé pour faire référence à une variante spécifique, et la configuration est la valeur de cette variante. La configuration peut être définie à l’aide de la propriété configuration_value. configuration_value est une configuration inline qui peut être une chaîne, un nombre, une valeur booléenne ou un objet de configuration. Si vous ne spécifiez pas configuration_value, la propriété Configuration de la variante retournée est None.

Une liste de toutes les variantes possibles est définie pour chaque fonctionnalité sous la propriété variants.

{
    "feature_management": {
        "feature_flags": [
            {
                "id": "MyVariantFeatureFlag",
                "variants": [
                    { 
                        "name": "Big", 
                        "configuration_value": {
                            "Size": 500
                        }
                    },  
                    { 
                        "name": "Small", 
                        "configuration_value": {
                            "Size": 300
                        }
                    } 
                ]
            }
        ]
    }
}

Allocation de variantes

Le processus d’allocation des variantes d’une fonctionnalité est déterminé par la propriété allocation de la fonctionnalité.

"allocation": { 
    "default_when_enabled": "Small", 
    "default_when_disabled": "Small",  
    "user": [ 
        { 
            "variant": "Big", 
            "users": [ 
                "Marsha" 
            ] 
        } 
    ], 
    "group": [ 
        { 
            "variant": "Big", 
            "groups": [ 
                "Ring1" 
            ] 
        } 
    ],
    "percentile": [ 
        { 
            "variant": "Big", 
            "from": 0, 
            "to": 10 
        } 
    ], 
    "seed": "13973240" 
},
"variants": [
    { 
        "name": "Big", 
        "configuration_value": "500px"
    },  
    { 
        "name": "Small", 
        "configuration_value": "300px"
    } 
]

Le paramètre allocation d’une fonctionnalité a les propriétés suivantes :

Propriété Description
default_when_disabled Spécifie quelle variante doit être utilisée lorsqu’une variante est demandée alors que la fonctionnalité est considérée comme désactivée.
default_when_enabled Spécifie quelle variante doit être utilisée lorsqu’une variante est demandée alors que la fonctionnalité est considérée comme activée et qu’aucune autre variante n’a été affectée à l’utilisateur.
user Spécifie une variante et une liste d’utilisateurs auxquels cette variante doit être affectée.
group Spécifie une variante et une liste de groupes. La variante est affectée si l’utilisateur se trouve dans au moins un des groupes.
percentile Spécifie une variante et une plage de pourcentages dans laquelle le pourcentage calculé de l’utilisateur doit se trouver pour que cette variante soit affectée.
seed La valeur sur laquelle les calculs de pourcentage pour percentile sont basés. Le calcul du pourcentage pour un utilisateur spécifique sera le même pour toutes les fonctionnalités si la même valeur seed est utilisée. Si aucune seed n’est spécifiée, une valeur initiale par défaut est créée en fonction du nom de la fonctionnalité.

Si la fonctionnalité n’est pas activée, le gestionnaire de fonctionnalités affecte la variante marquée comme default_when_disabled à l’utilisateur actuel, qui est Small dans ce cas.

Si la fonctionnalité est activée, le gestionnaire de fonctionnalités vérifie les allocations user, group et percentile dans cet ordre pour affecter une variante. Pour cet exemple particulier, si l’utilisateur évalué est nommé Marsha, dans le groupe nommé Ring1, ou si l’utilisateur se trouve entre le 0 et le 10e centile, la variante spécifiée est affectée à l’utilisateur. Dans ce cas, tous les utilisateurs affectés retournent la variante Big. Si aucune de ces allocations ne correspond, l’utilisateur reçoit la variante default_when_enabled, à savoir Small.

La logique d’allocation est similaire au filtre de fonctionnalités Microsoft.Targeting, mais certains paramètres sont présents dans le ciblage qui ne sont pas dans l’allocation, et inversement. Les résultats du ciblage et de l’allocation ne sont pas liés.

Remplacement de l’état activé par une variante

Vous pouvez utiliser des variantes pour remplacer l’état activé d’un indicateur de fonctionnalité. Le remplacement permet aux variantes d’étendre l’évaluation d’un indicateur de fonctionnalité. Lorsque vous appelez is_enabled sur un indicateur avec des variantes, le gestionnaire de fonctionnalités vérifie si la variante affectée à l’utilisateur actuel est configurée pour remplacer le résultat. Le remplacement est effectué à l’aide de la propriété de variante status_override facultative. Par défaut, cette propriété est définie sur None, ce qui signifie que la variante n’affecte pas si l’indicateur est considéré comme activé ou désactivé. Définir status_override sur Enabled permet à la variante, lorsqu’elle est choisie, de modifier un indicateur sur activé. Définir status_override sur Disabled a le comportement opposé, c’est-à-dire que l’indicateur est désactivé lorsque la variante est choisie. Une fonctionnalité avec un état enabled de false ne peut pas être remplacée.

Si vous utilisez un indicateur de fonctionnalité avec des variantes binaires, la propriété status_override peut être utile. Elle vous permet de continuer à utiliser des API telles que is_enabled dans votre application, tout en bénéficiant des nouvelles fonctionnalités fournies avec des variantes, notamment l’allocation de centile et les valeurs initiales.

{
    "id": "MyVariantFeatureFlag",
    "enabled": true,
    "allocation": {
        "percentile": [
            {
                "variant": "On",
                "from": 10,
                "to": 20
            }
        ],
        "default_when_enabled":  "Off",
        "seed": "Enhanced-Feature-Group"
    },
    "variants": [
        {
            "name": "On"
        },
        {
            "name": "Off",
            "status_override": "Disabled"
        }
    ]
}

Dans l’exemple ci-dessus, la fonctionnalité est toujours activée. Si l’utilisateur actuel se trouve dans la plage de centile calculée de 10 à 20, la variante On est retournée. Sinon, la variante Off est retournée et, car status_override est égal à Disabled, et la fonctionnalité sera désormais considérée comme désactivée.

Télémétrie

Lorsqu’un changement d’indicateur de fonctionnalité est déployé, il est souvent important d’analyser son effet sur une application. Par exemple, voici quelques questions qui peuvent survenir :

  • Mes indicateurs sont-ils activés/désactivés comme prévu ?
  • Les utilisateurs ciblés ont-ils accès à une certaine fonctionnalité comme prévu ?
  • Quelle variante un utilisateur particulier voit-il ?

Il est possible de répondre à ces types de questions par le biais de l’émission et de l’analyse des événements d’évaluation des indicateurs de fonctionnalité. Cette bibliothèque permet éventuellement à AzureMonitor de produire une télémétrie de traçage pendant l’évaluation des indicateurs de fonctionnalité via OpenTelemetry.

Activation de la télémétrie

Par défaut, les indicateurs de fonctionnalité n’émettent pas de données de télémétrie. Pour publier la télémétrie pour un indicateur de fonctionnalité donné, l’indicateur DOIT déclarer qu’il est activé pour l’émission de la télémétrie.

Pour les indicateurs de fonctionnalité définis en JSON, l’activation se fait à l’aide de la propriété telemetry.

{
    "feature_management": {
        "feature_flags": [
            {
                "id": "MyFeatureFlag",
                "enabled": true,
                "telemetry": {
                    "enabled": true
                }
            }
        ]
    }
}

L’extrait de code ci-dessus définit un indicateur de fonctionnalité nommé MyFeatureFlag qui est activé pour la télémétrie. La propriété enabled de l’objet telemetry est définie sur true. La valeur de la propriété enabled doit être true pour publier des données de télémétrie pour l’indicateur.

La section telemetry d’un indicateur de fonctionnalité a les propriétés suivantes :

Propriété Description
enabled Spécifie si les données de télémétrie doivent être publiées pour l’indicateur de fonctionnalité.
metadata Une collection de paires clé-valeur, modélisées en tant que dictionnaire, qui peuvent être utilisées pour attacher des métadonnées personnalisées sur l’indicateur de fonctionnalité aux événements d’évaluation.

En outre, lors de la création de FeatureManager, un rappel doit être inscrit pour gérer les événements de télémétrie. Ce rappel est appelé chaque fois qu’un indicateur de fonctionnalité est évalué et que la télémétrie est activée pour cet indicateur.

feature_manager = FeatureManager(feature_flags, on_feature_evaluated=publish_telemetry)

Application Insights Telemetry

La bibliothèque de gestion des fonctionnalités fournit un éditeur de télémétrie intégré qui envoie les données d’évaluation des indicateurs de fonctionnalité à Application Insights. Pour activer Application Insights, vous pouvez installer la bibliothèque de gestion des fonctionnalités avec Azure Monitor via pip install FeatureManagement[AzureMonitor]. Cette commande installe le package azure-monitor-events-extension, qui est utilisé pour appliquer un style à la télémétrie dans Application Insights à l’aide d’OpenTelemetry.

Remarque

Le package azure-monitor-events-extension ajoute uniquement la télémétrie au pipeline Open Telemetry. L’inscription d’Application Insights est toujours requise.

from azure.monitor.opentelemetry import configure_azure_monitor

configure_azure_monitor(
        connection_string="InstrumentationKey=00000000-0000-0000-0000-000000000000"
    )

Publication de la télémétrie personnalisée

Le rappel de télémétrie étant une fonction, vous pouvez le personnaliser pour publier la télémétrie sur n’importe quelle destination. Par exemple, vous pouvez publier la télémétrie sur un service de journalisation, une base de données ou un service de télémétrie personnalisé.

Lorsqu’un indicateur de fonctionnalité est évalué et que la télémétrie est activée, le gestionnaire de fonctionnalités appelle le rappel de télémétrie avec un paramètre EvaluationEvent. EvaluationEvent contient les propriétés suivantes :

Balise Description
feature Indicateur de fonctionnalité utilisé.
user Identifiant utilisateur utilisé pour le ciblage.
enabled Si l’indicateur de fonctionnalité est évalué comme activé.
Variant La variante affectée.
VariantAssignmentReason La raison pour laquelle la variante est affectée.

Étapes suivantes

Pour découvrir comment utiliser des indicateurs de fonctionnalité dans vos applications, passez aux guides de démarrage rapide suivants.

Pour découvrir comment utiliser des filtres de fonctionnalités, passez aux tutoriels suivants.

Pour découvrir comment exécuter des expériences avec des indicateurs de fonctionnalité de variante, passez au tutoriel suivant.