Gestion des fonctionnalités Python
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 » :
- Les utilisateurs individuels Jeff et Alicia ont accès à la version Bêta
- Un autre utilisateur, Mark, demande à participer et est inclus.
- Vingt pour cent d’un groupe appelé utilisateurs « Ring1 » sont inclus dans la version Bêta.
- Le nombre d’utilisateurs « Ring1 » inclus dans la version bêta est passé à 100 %.
- Cinq pour cent de la base d’utilisateurs sont inclus dans la version Bêta.
- 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 TargetingContext
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.