Delen via


Python-functiebeheer

Functiebeheer

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 conditionsde 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 falsevan 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 Anyde 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 FeatureManagerde 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 MyCriteriaFiltertoevoegt.

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:

  1. Individuele gebruikers Jeff en Alicia krijgen toegang tot de bètaversie
  2. Een andere gebruiker, Mark, vraagt zich aan te kiezen en is inbegrepen.
  3. Twintig procent van een groep die bekend staat als Ring1-gebruikers, worden opgenomen in de bètaversie.
  4. Het aantal ring1-gebruikers dat in de bètaversie is opgenomen, wordt tot 100 procent opgestoten.
  5. Vijf procent van de gebruikersbasis is opgenomen in de bètaversie.
  6. 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 Markheeft, 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 FeatureManagermethode.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 Nonede 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 useren grouppercentile toewijzingen om een variant toe te wijzen. Als in dit specifieke voorbeeld de gebruiker die wordt geëvalueerd de naam Marshaheeft, in de groep met de naam Ring1of 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 FeatureManagervan 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.