Python-functiebeheer
Python-functiebeheerbibliotheek biedt een manier om toepassingsfunctionaliteit te ontwikkelen en beschikbaar te maken op basis van functievlagmen. Zodra een nieuwe functie is ontwikkeld, hebben veel toepassingen speciale vereisten, zoals wanneer de functie moet worden ingeschakeld en onder welke omstandigheden. Deze bibliotheek biedt een manier om deze relaties te definiëren en kan ook worden geïntegreerd in algemene Python-codepatronen om deze functies beschikbaar te maken.
Functievlagmen bieden een manier voor Python-toepassingen om functies dynamisch in of uit te schakelen. Ontwikkelaars kunnen functievlagmen gebruiken in eenvoudige gebruiksvoorbeelden, zoals voorwaardelijke instructies.
Hier volgen enkele voordelen van het gebruik van de Python-bibliotheek voor functiebeheer:
Een algemene conventie voor functiebeheer
Lage barrière om binnen te komen
- Ondersteunt het instellen van JSON-functievlag
Levensduurbeheer van functievlagken
- Configuratiewaarden kunnen in realtime veranderen; functievlagmen kunnen consistent zijn in de hele aanvraag
Eenvoudige tot complexe scenario's die worden behandeld
- Functies in-/uitschakelen via een declaratief configuratiebestand
- De status van de functie dynamisch evalueren op basis van aanroep naar server
De Python-bibliotheek voor functiebeheer is open source. Ga naar de GitHub-opslagplaats voor meer informatie.
Functievlaggen
Functievlagmen bestaan uit twee delen, een naam en een lijst met functiefilters die worden gebruikt om de functie in te schakelen.
Functiefilters
Functiefilters definiëren een scenario voor wanneer een functie moet worden ingeschakeld. Wanneer een functie wordt geëvalueerd of deze is ingeschakeld of uitgeschakeld, wordt de lijst met functiefilters doorkruist totdat een van de filters besluit dat de functie moet worden ingeschakeld. Op dit moment wordt de functie beschouwd als ingeschakeld en wordt doorkruising door de functiefilters gestopt. Als er geen functiefilter aangeeft dat de functie moet worden ingeschakeld, wordt deze als uitgeschakeld beschouwd.
Een microsoft Edge-browserfunctiefilter kan bijvoorbeeld worden ontworpen. Met dit functiefilter worden alle functies geactiveerd die eraan zijn gekoppeld, zolang een HTTP-aanvraag afkomstig is van Microsoft Edge.
Configuratie van functievlag
Er wordt een Python-woordenlijst gebruikt om functievlagmen te definiëren. De woordenlijst bestaat uit functienamen als sleutels en functievlagobjecten als waarden. Het object functievlag is een woordenlijst die een EnabledFor
sleutel bevat. De EnabledFor
sleutel is een lijst met functiefilters die worden gebruikt om te bepalen of de functie moet worden ingeschakeld.
Declaratie van functievlaggen
De bibliotheek voor functiebeheer ondersteunt json als een functievlagbron. Hieronder ziet u een voorbeeld van de indeling die wordt gebruikt voor het instellen van functievlagmen in een JSON-bestand.
{
"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"
}
}
]
}
}
]
}
}
De feature_management
sectie van het json-document wordt door de conventie gebruikt om instellingen voor functievlagken te laden. De feature_flags
sectie is een lijst met de functievlagmen die in de bibliotheek worden geladen. In de bovenstaande sectie zien we drie verschillende functies. Functies definiëren hun functiefilters met behulp van conditions
de client_filters
eigenschap, binnenin. In de functiefilters voor FeatureT
, zien enabled
we dat er geen filters zijn gedefinieerd, wat resulteert in FeatureT
altijd retourneren true
. FeatureU
is hetzelfde als FeatureT
maar met enabled
resulteert false
in het altijd retourneren false
van de functie. FeatureV
hiermee geeft u een functiefilter met de naam Microsoft.TimeWindow
. FeatureV
is een voorbeeld van een configureerbaar functiefilter. In het voorbeeld zien we dat het filter een parameters
eigenschap heeft. De parameters
eigenschap wordt gebruikt om het filter te configureren. In dit geval worden de begin- en eindtijden voor de functie geconfigureerd om actief te zijn.
Het gedetailleerde schema van de feature_management
sectie vindt u hier.
Geavanceerd: Het gebruik van dubbele punt ':' is verboden in functievlagnamen.
Declaratie aan/uit
In het volgende fragment ziet u een alternatieve manier om een functie te definiëren die kan worden gebruikt voor aan/uit-functies.
{
"feature_management": {
"feature_flags": [
{
"id": "FeatureT",
"enabled": "true"
},
{
"id": "FeatureX",
"enabled": "false"
}
]
}
}
Requirement_type
De requirement_type
eigenschap van een functievlag wordt gebruikt om te bepalen of de filters moeten worden gebruikt Any
of All
logica bij het evalueren van de status van een functie. Als requirement_type
dit niet is opgegeven, is Any
de standaardwaarde .
Any
betekent dat slechts één filter waar moet worden geëvalueerd om de functie in te schakelen.All
betekent dat elk filter waar moet evalueren om de functie in te schakelen.
Een requirement_type
van All
wijzigingen in de doorkruising. Als er geen filters zijn, is de functie eerst uitgeschakeld. Vervolgens worden de functiefilters doorkruist totdat een van de filters besluit dat de functie moet worden uitgeschakeld. Als er geen filter aangeeft dat de functie moet worden uitgeschakeld, wordt deze als ingeschakeld beschouwd.
{
"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"
}
}
]
}
},
]
}
}
In het bovenstaande voorbeeld geeft u een requirement_type
vanAll
, FeatureW
wat betekent dat alle filters waar moeten zijn om de functie in te schakelen. In dit geval is de functie ingeschakeld voor 50% van de gebruikers tijdens het opgegeven tijdvenster.
Verbruik
De basisvorm van functiebeheer is controleren of een functievlag is ingeschakeld en vervolgens acties uitvoert op basis van het resultaat. Het controleren van de status van een functievlag wordt uitgevoerd via FeatureManager
de is_enabled
methode.
…
feature_manager = FeatureManager(feature_flags)
…
if feature_manager.is_enabled("FeatureX"):
# Do something
De feature_flags
opgegeven functievlag FeatureManager
kan de AzureAppConfigurationProvider
of een woordenlijst met functievlagmen zijn.
Een functiefilter implementeren
Het maken van een functiefilter biedt een manier om functies in te schakelen op basis van criteria die u definieert. Als u een functiefilter wilt implementeren, moet de FeatureFilter
interface worden geïmplementeerd. FeatureFilter
heeft één methode met de naam evaluate
. Wanneer een functie aangeeft dat deze kan worden ingeschakeld voor een functiefilter, wordt de evaluate
methode aangeroepen. Als evaluate
de functie wordt geretourneerd true
, betekent dit dat de functie moet worden ingeschakeld.
Het volgende codefragment laat zien hoe u een aangepast functiefilter MyCriteriaFilter
toevoegt.
feature_manager = FeatureManager(feature_flags, feature_filters=[MyCustomFilter()])
Functiefilters worden geregistreerd door ze aan de eigenschap feature_filters
op te geven bij het maken FeatureManager
. Als een aangepast functiefilter context nodig heeft, kunnen deze worden doorgegeven bij het aanroepenis_enabled
.kwargs
Kenmerk filteralias
Wanneer een functiefilter is geregistreerd voor een functievlag, wordt de naam van het filter standaard gebruikt als alias.
De id voor het functiefilter kan worden overschreven met behulp van de @FeatureFilter.alias("MyFilter")
. Een functiefilter kan worden ingericht met dit kenmerk om de naam te declareren die moet worden gebruikt in de configuratie om te verwijzen naar dit functiefilter binnen een functievlag.
Ontbrekende functiefilters
Als een functie is geconfigureerd voor een specifiek functiefilter en dat functiefilter niet is geregistreerd, wordt er een ValueError
uitzondering gegenereerd wanneer de functie wordt geëvalueerd.
Ingebouwde functiefilters
Er zijn twee functiefilters die bij het FeatureManagement
pakket worden geleverd: TimeWindowFilter
, en TargetingFilter
.
Elk van de ingebouwde functiefilters heeft zijn eigen parameters. Hier volgt een lijst met functiefilters, samen met voorbeelden.
Microsoft.TimeWindow
Dit filter biedt de mogelijkheid om een functie in te schakelen op basis van een tijdvenster. Als alleen End
wordt opgegeven, wordt de functie tot die tijd overwogen. Als alleen Start
wordt opgegeven, wordt de functie op alle punten na die tijd overwogen.
"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
Dit filter biedt de mogelijkheid om een functie in te schakelen voor een doelgroep. Een uitgebreide uitleg van targeting wordt uitgelegd in de onderstaande sectie over targeting . De filterparameters bevatten een Audience
object dat gebruikers, groepen, uitgesloten gebruikers/groepen en een standaardpercentage van de gebruikersbasis beschrijft die toegang tot de functie moet hebben. Elk groepsobject dat in de Groups
sectie wordt vermeld, moet ook opgeven welk percentage van de leden van de groep toegang moet hebben. Als een gebruiker is opgegeven in de Exclusion
sectie, rechtstreeks of als de gebruiker zich in een uitgesloten groep bevindt, is de functie uitgeschakeld. Als een gebruiker in de Users
sectie rechtstreeks is opgegeven of als de gebruiker zich in het opgenomen percentage van een van de groeps-implementaties bevindt, of als de gebruiker in het standaard rolloutpercentage valt, heeft die gebruiker de functie ingeschakeld.
"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"
]
}
}
}
}
]
Targeten
Het doel is een strategie voor functiebeheer waarmee ontwikkelaars geleidelijk nieuwe functies kunnen implementeren in hun gebruikersbestand. De strategie is gebaseerd op het concept van het richten van een set gebruikers die bekend staan als de doelgroep. Een doelgroep bestaat uit specifieke gebruikers, groepen, uitgesloten gebruikers/groepen en een aangewezen percentage van het gehele gebruikersbestand. De groepen die in de doelgroep zijn opgenomen, kunnen verder worden onderverdeeld in percentages van hun totale leden.
In de volgende stappen ziet u een voorbeeld van een progressieve implementatie voor een nieuwe bètafunctie:
- Individuele gebruikers Jeff en Alicia krijgen toegang tot de bètaversie
- Een andere gebruiker, Mark, vraagt zich aan te kiezen en is inbegrepen.
- Twintig procent van een groep die bekend staat als Ring1-gebruikers, worden opgenomen in de bètaversie.
- Het aantal ring1-gebruikers dat in de bètaversie is opgenomen, wordt tot 100 procent opgestoten.
- Vijf procent van de gebruikersbasis is opgenomen in de bètaversie.
- Het implementatiepercentage wordt maximaal 100 procent opgestoten en de functie wordt volledig uitgerold.
Deze strategie voor het implementeren van een functie is ingebouwd in de bibliotheek via het opgenomen microsoft.targeting-functiefilter .
Een gebruiker instellen
Een gebruiker kan rechtstreeks in de is_enabled
oproep worden opgegeven of een TargetingContxt
kan worden gebruikt om de gebruiker en optionele groep op te geven.
# Directly specifying the user
feature_manager = FeatureManager(feature_flags, "test_user")
# Using a TargetingContext
feature_manager = FeatureManager(feature_flags, TargetingContext(user_id="test_user", groups=["Ring1"]))
Uitsluiting instellen
Bij het definiëren van een doelgroep kunnen gebruikers en groepen worden uitgesloten van de doelgroep. Uitsluitingen zijn handig wanneer een functie wordt geïmplementeerd voor een groep gebruikers, maar een paar gebruikers of groepen moeten worden uitgesloten van de implementatie. Uitsluiting wordt gedefinieerd door een lijst met gebruikers en groepen toe te voegen aan de Exclusion
eigenschap van de doelgroep.
"Audience": {
"Users": [
"Jeff",
"Alicia"
],
"Groups": [
{
"Name": "Ring0",
"RolloutPercentage": 100
}
],
"DefaultRolloutPercentage": 0
"Exclusion": {
"Users": [
"Mark"
]
}
}
In het bovenstaande voorbeeld is de functie ingeschakeld voor gebruikers met de naam Jeff
en Alicia
. Het is ook ingeschakeld voor gebruikers in de groep met de naam Ring0
. Als de gebruiker echter de naam Mark
heeft, is de functie uitgeschakeld, ongeacht of deze zich in de groep bevinden Ring0
of niet. Uitsluitingen hebben voorrang op de rest van het doelfilter.
Varianten
Wanneer er nieuwe functies aan een toepassing worden toegevoegd, kan het gebeuren dat een functie meerdere verschillende voorgestelde ontwerpopties heeft. Een algemene oplossing voor het bepalen van een ontwerp is een vorm van A/B-tests. A/B-testen omvat het verstrekken van een andere versie van de functie aan verschillende segmenten van de gebruikersbasis en het kiezen van een versie op basis van gebruikersinteractie. In deze bibliotheek is deze functionaliteit ingeschakeld door verschillende configuraties van een functie met varianten weer te geven.
Met varianten kan een functievlag meer worden dan een eenvoudige aan/uit-vlag. Een variant vertegenwoordigt een waarde van een functievlag die een tekenreeks, een getal, een Booleaanse waarde of zelfs een configuratieobject kan zijn. Een functievlag die varianten declareert, moet definiëren onder welke omstandigheden elke variant moet worden gebruikt, wat uitgebreider wordt behandeld in de sectie Varianten toewijzen .
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
Varianten verkrijgen
Voor elke functie kan een variant worden opgehaald met behulp van de FeatureManager
methode.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
De geretourneerde variant is afhankelijk van de gebruiker die momenteel wordt geëvalueerd en die informatie wordt verkregen van een exemplaar van TargetingContext
.
Declaratie van variantfunctievlag
In vergelijking met normale functievlagmen hebben variantfunctievlagmen nog twee eigenschappen: variants
en allocation
. De variants
eigenschap is een matrix die de varianten bevat die voor deze functie zijn gedefinieerd. De allocation
eigenschap definieert hoe deze varianten moeten worden toegewezen voor de functie. Net als bij het declareren van normale functievlagmen kunt u variantfunctievlagmen instellen in een JSON-bestand. Hier volgt een voorbeeld van een vlag voor een variantfunctie.
{
"feature_management": {
"feature_flags": [
{
"id": "MyVariantFeatureFlag",
"enabled": true,
"allocation": {
"default_when_enabled": "Small",
"group": [
{
"variant": "Big",
"groups": [
"Ring1"
]
}
]
},
"variants": [
{
"name": "Big"
},
{
"name": "Small"
}
]
}
]
}
}
Varianten definiëren
Elke variant heeft twee eigenschappen: een naam en een configuratie. De naam wordt gebruikt om te verwijzen naar een specifieke variant en de configuratie is de waarde van die variant. De configuratie kan worden ingesteld met behulp van configuration_value
de eigenschap. configuration_value
is een inlineconfiguratie die een tekenreeks, getal, Booleaanse waarde of configuratieobject kan zijn. Als configuration_value
dit niet is opgegeven, is None
de eigenschap van Configuration
de geretourneerde variant .
Er wordt een lijst met alle mogelijke varianten gedefinieerd voor elke functie onder de variants
eigenschap.
{
"feature_management": {
"feature_flags": [
{
"id": "MyVariantFeatureFlag",
"variants": [
{
"name": "Big",
"configuration_value": {
"Size": 500
}
},
{
"name": "Small",
"configuration_value": {
"Size": 300
}
}
]
}
]
}
}
Varianten toewijzen
Het proces voor het toewijzen van de varianten van een functie wordt bepaald door de allocation
eigenschap van de functie.
"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"
}
]
De allocation
instelling van een functie heeft de volgende eigenschappen:
Eigenschappen | Beschrijving |
---|---|
default_when_disabled |
Hiermee geeft u op welke variant moet worden gebruikt wanneer een variant wordt aangevraagd terwijl de functie wordt beschouwd als uitgeschakeld. |
default_when_enabled |
Hiermee geeft u op welke variant moet worden gebruikt wanneer een variant wordt aangevraagd terwijl de functie wordt beschouwd als ingeschakeld en er geen andere variant is toegewezen aan de gebruiker. |
user |
Hiermee geeft u een variant en een lijst met gebruikers aan wie die variant moet worden toegewezen. |
group |
Hiermee geeft u een variant en een lijst met groepen. De variant wordt toegewezen als de gebruiker zich in ten minste een van de groepen bevindt. |
percentile |
Hiermee geeft u een variant en een percentagebereik waarin het berekende percentage van de gebruiker moet passen om aan die variant te kunnen worden toegewezen. |
seed |
De waarde waarvoor percentageberekeningen percentile worden uitgevoerd, zijn gebaseerd op. De percentageberekening voor een specifieke gebruiker is hetzelfde voor alle functies als dezelfde seed waarde wordt gebruikt. Als er geen seed is opgegeven, wordt er een standaard-seed gemaakt op basis van de functienaam. |
Als de functie niet is ingeschakeld, wijst de functiebeheerder de variant toe die is gemarkeerd als default_when_disabled
de huidige gebruiker, wat in dit geval het geval is Small
.
Als de functie is ingeschakeld, controleert de functiebeheerder de user
en group
percentile
toewijzingen om een variant toe te wijzen. Als in dit specifieke voorbeeld de gebruiker die wordt geëvalueerd de naam Marsha
heeft, in de groep met de naam Ring1
of als de gebruiker tussen het 0 en 10e percentiel valt, wordt de opgegeven variant toegewezen aan de gebruiker. In dit geval retourneren alle toegewezen gebruikers de Big
variant. Als geen van deze toewijzingen overeenkomt, krijgt de gebruiker de default_when_enabled
variant toegewezen.Small
Toewijzingslogica is vergelijkbaar met het functiefilter Microsoft.Targeting , maar er zijn enkele parameters die aanwezig zijn in targeting die niet in toewijzing zijn en omgekeerd. De resultaten van targeting en toewijzing zijn niet gerelateerd.
Ingeschakelde status overschrijven met een variant
U kunt varianten gebruiken om de ingeschakelde status van een functievlag te overschrijven. Overschrijven biedt varianten de mogelijkheid om de evaluatie van een functievlag uit te breiden. Wanneer u een vlag met varianten aanroept is_enabled
, controleert de functiebeheerder of de variant die is toegewezen aan de huidige gebruiker is geconfigureerd om het resultaat te overschrijven. Het overschrijven wordt uitgevoerd met behulp van de optionele varianteigenschap status_override
. Deze eigenschap is standaard ingesteld op None
, wat betekent dat de variant niet van invloed is op het feit of de vlag wordt beschouwd als ingeschakeld of uitgeschakeld. Enabled
Als u deze instelling status_override
instelt, kan de variant, indien gekozen, een vlag overschrijven die moet worden ingeschakeld. Instelling status_override
om de tegenovergestelde functionaliteit te Disabled
bieden, waardoor de vlag wordt uitgeschakeld wanneer de variant wordt gekozen. Een functie met een enabled
status kan false
niet worden overschreven.
Als u een functievlag met binaire varianten gebruikt, kan de status_override
eigenschap handig zijn. Hiermee kunt u API's blijven gebruiken, zoals is_enabled
in uw toepassing, terwijl u profiteert van de nieuwe functies die worden geleverd met varianten, zoals percentieltoewijzing en seed.
{
"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"
}
]
}
In het bovenstaande voorbeeld is de functie altijd ingeschakeld. Als de huidige gebruiker zich in het berekende percentielbereik van 10 tot 20 bevindt, wordt de On
variant geretourneerd. Anders wordt de Off
variant geretourneerd en omdat status_override
deze gelijk is aan Disabled
, wordt de functie nu als uitgeschakeld beschouwd.
Telemetrie
Wanneer een wijziging van een functievlag wordt geïmplementeerd, is het vaak belangrijk om het effect ervan op een toepassing te analyseren. Hier volgen bijvoorbeeld enkele vragen die zich kunnen voordoen:
- Zijn mijn vlaggen ingeschakeld/uitgeschakeld zoals verwacht?
- Krijgen doelgebruikers toegang tot een bepaalde functie zoals verwacht?
- Welke variant ziet een bepaalde gebruiker?
Deze typen vragen kunnen worden beantwoord door middel van de emissie en analyse van evaluatie-gebeurtenissen van functievlagken. Met deze bibliotheek kunt AzureMonitor
u eventueel traceringstelemetrie produceren tijdens de evaluatie van functievlagken via OpenTelemetry
.
Telemetrie inschakelen
Standaard worden er geen telemetriegegevens verzonden voor functievlagmen. Als u telemetrie voor een bepaalde functievlag wilt publiceren, moet de vlag aangeven dat deze is ingeschakeld voor telemetrie-emissie.
Voor functievlagmen die zijn gedefinieerd in json, wordt het inschakelen uitgevoerd met behulp van de telemetry
eigenschap.
{
"feature_management": {
"feature_flags": [
{
"id": "MyFeatureFlag",
"enabled": true,
"telemetry": {
"enabled": true
}
}
]
}
}
Het bovenstaande codefragment definieert een functievlag met de naam MyFeatureFlag
die is ingeschakeld voor telemetrie. De eigenschap van enabled
het telemetry
object is ingesteld op true
. De waarde van de enabled
eigenschap moet zijn true
om telemetriegegevens voor de vlag te publiceren.
De telemetry
sectie van een functievlag heeft de volgende eigenschappen:
Eigenschappen | Beschrijving |
---|---|
enabled |
Hiermee geeft u op of telemetrie moet worden gepubliceerd voor de functievlag. |
metadata |
Een verzameling sleutel-waardeparen, gemodelleerd als een woordenlijst, die kan worden gebruikt om aangepaste metagegevens over de functievlag toe te voegen aan evaluatiegebeurtenissen. |
Daarnaast moet bij het maken FeatureManager
van een callback een callback worden geregistreerd voor het afhandelen van telemetrie-gebeurtenissen. Deze callback wordt aangeroepen wanneer een functievlag wordt geëvalueerd en telemetrie voor die vlag is ingeschakeld.
feature_manager = FeatureManager(feature_flags, on_feature_evaluated=publish_telemetry)
Application Insights-telemetrie
De bibliotheek voor functiebeheer biedt een ingebouwde telemetrie-uitgever waarmee evaluatiegegevens van functievlagken naar Application Insights worden verzonden. Als u Application Insights wilt inschakelen, kan de bibliotheek voor functiebeheer via Azure Monitor pip install FeatureManagement[AzureMonitor]
worden geïnstalleerd. Met deze opdracht wordt het azure-monitor-events-extension
pakket geïnstalleerd, dat wordt gebruikt om telemetrie naar Application Insights te stylen met behulp van OpenTelemetry.
Notitie
Het azure-monitor-events-extension
pakket voegt alleen de telemetrie toe aan de pijplijn Open Telemetry. Het registreren van Application Insights is nog steeds vereist.
from azure.monitor.opentelemetry import configure_azure_monitor
configure_azure_monitor(
connection_string="InstrumentationKey=00000000-0000-0000-0000-000000000000"
)
Aangepaste telemetriepublicatie
Omdat de callback van telemetrie een functie is, kan deze worden aangepast om telemetrie naar elke gewenste bestemming te publiceren. Telemetrie kan bijvoorbeeld worden gepubliceerd naar een logboekregistratieservice, een database of een aangepaste telemetrieservice.
Wanneer een functievlag wordt geëvalueerd en telemetrie is ingeschakeld, roept de functiebeheerder de callback van telemetrie aan met een EvaluationEvent
parameter. EvaluationEvent
bevat de volgende eigenschappen:
Code | Beschrijving |
---|---|
feature |
De functievlag die wordt gebruikt. |
user |
De gebruikers-id die wordt gebruikt voor targeting. |
enabled |
Of de functievlag wordt geëvalueerd als ingeschakeld. |
Variant |
De toegewezen variant. |
VariantAssignmentReason |
De reden waarom de variant wordt toegewezen. |
Volgende stappen
Als u wilt weten hoe u functievlagmen in uw toepassingen gebruikt, gaat u verder met de volgende quickstarts.
Als u wilt weten hoe u functiefilters gebruikt, gaat u verder met de volgende zelfstudies.
Ga verder met de volgende zelfstudie voor meer informatie over het uitvoeren van experimenten met variantfunctievlagmen.