Udostępnij za pośrednictwem


Zarządzanie funkcjami języka Python

Zarządzanie funkcjami

Zarządzanie funkcjami

Biblioteka zarządzania funkcjami języka Python umożliwia opracowywanie i uwidacznianie funkcji aplikacji na podstawie flag funkcji. Po utworzeniu nowej funkcji wiele aplikacji ma specjalne wymagania, takie jak włączenie funkcji i określenie warunków. Ta biblioteka umożliwia zdefiniowanie tych relacji, a także integruje się z typowymi wzorcami kodu języka Python, aby uwidocznić te funkcje.

Flagi funkcji umożliwiają aplikacjom języka Python dynamiczne włączanie lub wyłączanie funkcji. Deweloperzy mogą używać flag funkcji w prostych przypadkach użycia, takich jak instrukcje warunkowe.

Poniżej przedstawiono niektóre korzyści wynikające z używania biblioteki zarządzania funkcjami języka Python:

  • Wspólna konwencja zarządzania funkcjami

  • Niska bariera wejścia

    • Obsługuje konfigurację flagi funkcji JSON
  • Zarządzanie okresem istnienia flagi funkcji

    • Wartości konfiguracji mogą ulec zmianie w czasie rzeczywistym; flagi funkcji mogą być spójne w całym żądaniu
  • Scenariusze proste i złożone

    • Przełączanie/wyłączanie funkcji za pomocą deklaratywnego pliku konfiguracji
    • Dynamiczne ocenianie stanu funkcji na podstawie wywołania do serwera

    Biblioteka zarządzania funkcjami języka Python jest oprogramowaniem open source. Aby uzyskać więcej informacji, odwiedź repozytorium GitHub.

Flagi funkcji

Flagi funkcji składają się z dwóch części, nazwy i listy filtrów funkcji, które są używane do włączania funkcji.

Filtry funkcji

Filtry funkcji definiują scenariusz włączania funkcji. Gdy funkcja jest oceniana pod kątem tego, czy jest włączona, czy wyłączona, jej lista filtrów funkcji jest przechodzina do momentu, aż jeden z filtrów zdecyduje, że funkcja powinna zostać włączona. W tym momencie funkcja jest uznawana za włączoną i przechodzi przez filtry funkcji. Jeśli żaden filtr funkcji nie wskazuje, że funkcja powinna być włączona, jest uważana za wyłączoną.

Na przykład można zaprojektować filtr funkcji przeglądarki Microsoft Edge. Ten filtr funkcji aktywuje wszystkie dołączone do niego funkcje, o ile żądanie HTTP pochodzi z przeglądarki Microsoft Edge.

Konfiguracja flagi funkcji

Słownik języka Python służy do definiowania flag funkcji. Słownik składa się z nazw funkcji jako kluczy i obiektów flag funkcji jako wartości. Obiekt flagi funkcji jest słownikiem zawierającym conditions klucz, który sam zawiera client_filters klucz. Klucz client_filters jest listą filtrów funkcji, które są używane do określenia, czy funkcja powinna być włączona.

Deklaracja flagi funkcji

Biblioteka zarządzania funkcjami obsługuje kod json jako źródło flagi funkcji. Poniżej przedstawiono przykład formatu używanego do konfigurowania flag funkcji w pliku 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"
                            }
                        }
                    ]
                }
            }
        ]
    }
}

Sekcja feature_management dokumentu JSON jest używana przez konwencję do ładowania ustawień flag funkcji. Sekcja feature_flags to lista flag funkcji załadowanych do biblioteki. W powyższej sekcji przedstawiono trzy różne funkcje. Funkcje definiują filtry funkcji przy użyciu client_filters właściwości w obiekcie conditions. W filtrach funkcji dla FeatureTparametru widzimy enabled , że nie ma zdefiniowanych filtrów, co powoduje, że FeatureT zawsze zwracany true jest element . FeatureU jest taka sama jak FeatureT w przypadku, gdy enabled funkcja zawsze false zwraca falsewartość . FeatureV określa filtr funkcji o nazwie Microsoft.TimeWindow. FeatureV to przykład konfigurowalnego filtru funkcji. W przykładzie widać, że filtr ma parameters właściwość . Właściwość parameters służy do konfigurowania filtru. W takim przypadku konfigurowane są czasy rozpoczęcia i zakończenia dla funkcji, która ma być aktywna.

Szczegółowy schemat feature_management sekcji można znaleźć tutaj.

Zaawansowane: użycie dwukropka ":" jest zabronione w nazwach flag funkcji.

Deklaracja wł./wył.

Poniższy fragment kodu przedstawia alternatywny sposób definiowania funkcji, która może służyć do włączania/wyłączania funkcji.

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

Requirement_type

Właściwość requirement_type flagi funkcji służy do określania, czy filtry powinny być używane Any , czy All logika podczas oceniania stanu funkcji. Jeśli requirement_type nie zostanie określony, wartość domyślna to Any.

  • Any oznacza, że tylko jeden filtr musi mieć wartość true, aby funkcja została włączona.
  • All oznacza, że każdy filtr musi mieć wartość true, aby funkcja została włączona.

A requirement_type zmiany All przechodzenia. Po pierwsze, jeśli nie ma filtrów, funkcja jest wyłączona. Następnie filtry funkcji są przechodzine do momentu, aż jeden z filtrów zdecyduje, że funkcja powinna zostać wyłączona. Jeśli żaden filtr nie wskazuje, że funkcja powinna być wyłączona, jest uważana za włączoną.

{
    "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"
                            }
                        }
                    ]
                }
            },
        ]
    }
}

W powyższym przykładzie określa wartość requirement_type All, co oznacza, FeatureW że wszystkie jego filtry muszą mieć wartość true, aby funkcja została włączona. W takim przypadku funkcja jest włączona dla 50% użytkowników w określonym przedziale czasu.

Zużycie

Podstawową formą zarządzania funkcjami jest sprawdzenie, czy flaga funkcji jest włączona, a następnie wykonuje akcje na podstawie wyniku. Sprawdzanie stanu flagi funkcji odbywa się za pomocą FeatureManagermetody .s is_enabled .

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

Podana feature_flags wartość FeatureManager może być słownikiem AzureAppConfigurationProvider flag funkcji lub .

Implementowanie filtru funkcji

Tworzenie filtru funkcji umożliwia włączanie funkcji na podstawie zdefiniowanych kryteriów. Aby zaimplementować filtr funkcji, FeatureFilter należy zaimplementować interfejs. FeatureFilter ma jedną metodę o nazwie evaluate. Gdy funkcja określa, że można ją włączyć dla filtru funkcji, wywoływana evaluate jest metoda . Jeśli evaluate funkcja zwraca truewartość , oznacza to, że funkcja powinna być włączona.

Poniższy fragment kodu przedstawia sposób dodawania dostosowanego filtru MyCustomFilterfunkcji .

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

Filtry funkcji są rejestrowane przez podanie ich do właściwości feature_filters podczas tworzenia FeatureManagerelementu . Jeśli niestandardowy filtr funkcji wymaga dowolnego kontekstu, można je przekazać podczas wywoływania is_enabled przy użyciu polecenia kwargs.

Filtruj atrybut aliasu

Gdy filtr funkcji jest zarejestrowany dla flagi funkcji, nazwa filtru jest używana jako alias domyślnie.

Identyfikator filtru funkcji można zastąpić przy użyciu elementu @FeatureFilter.alias("MyFilter"). Filtr funkcji można dekorować za pomocą tego atrybutu, aby zadeklarować nazwę, która powinna być używana w konfiguracji do odwołowania się do tego filtru funkcji w ramach flagi funkcji.

Brakujące filtry funkcji

Jeśli funkcja jest skonfigurowana do włączenia dla określonego filtru funkcji i ten filtr funkcji nie jest zarejestrowany, ValueError podczas oceny funkcji jest zgłaszany wyjątek.

Filtry funkcji wbudowanych

Istnieją dwa filtry funkcji, które są dostarczane z pakietem FeatureManagement : TimeWindowFilter, i TargetingFilter.

Każdy z wbudowanych filtrów funkcji ma własne parametry. Oto lista filtrów funkcji wraz z przykładami.

Microsoft.TimeWindow

Ten filtr zapewnia możliwość włączenia funkcji na podstawie przedziału czasu. End Jeśli tylko zostanie określona, funkcja jest rozważana do tego czasu. Start Jeśli tylko zostanie określona, funkcja jest uwzględniana we wszystkich punktach po tym czasie.

"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

Ten filtr zapewnia możliwość włączenia funkcji dla odbiorców docelowych. Szczegółowe wyjaśnienie określania wartości docelowej zostało wyjaśnione w poniższej sekcji określania wartości docelowej . Parametry filtru obejmują obiekt opisujący Audience użytkowników, grupy, wykluczonych użytkowników/grup oraz domyślny procent bazy użytkowników, który powinien mieć dostęp do funkcji. Każdy obiekt grupy wymieniony w Groups sekcji musi również określić, jaki procent członków grupy powinien mieć dostęp. Jeśli użytkownik jest określony w Exclusion sekcji , bezpośrednio lub jeśli użytkownik znajduje się w wykluczonej grupie, funkcja jest wyłączona. W przeciwnym razie, jeśli użytkownik jest określony bezpośrednio w Users sekcji lub jeśli użytkownik znajduje się w uwzględnionych procentach dowolnego wdrożenia grupy, lub jeśli użytkownik mieści się w domyślnym procentu wdrożenia, ten użytkownik będzie miał włączoną funkcję.

"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"
                    ]
                }
            }
        }
    }
]

Określanie celu

Określanie wartości docelowej to strategia zarządzania funkcjami, która umożliwia deweloperom stopniowe wdrażanie nowych funkcji w bazie użytkowników. Strategia jest oparta na koncepcji określania celu grupy użytkowników znanej jako docelowa grupa odbiorców. Grupa odbiorców składa się z określonych użytkowników, grup, wykluczonych użytkowników/grup oraz wyznaczonego procentu całej bazy użytkowników. Grupy, które są uwzględnione w grupie odbiorców, można podzielić dalej na wartości procentowe ich całkowitej liczby członków.

W poniższych krokach przedstawiono przykład progresywnego wdrożenia nowej funkcji "Beta":

  1. Indywidualni użytkownicy Jeff i Alicia otrzymują dostęp do wersji beta
  2. Inny użytkownik, Mark, prosi o wyrażenie zgody i jest uwzględniony.
  3. Dwadzieścia procent grupy znanej jako "Ring1" użytkowników jest uwzględnionych w wersji beta.
  4. Liczba użytkowników "Ring1" uwzględnionych w wersji beta wzrosła do 100 procent.
  5. Pięć procent bazy użytkowników jest uwzględnionych w wersji beta.
  6. Procent wdrożenia jest wyprzedzony do 100 procent, a funkcja jest całkowicie wdrażana.

Ta strategia wdrażania funkcji jest wbudowana w bibliotekę za pomocą dołączonego filtru funkcji Microsoft.Targeting .

Określanie wartości docelowej dla użytkownika

Użytkownik może być określony bezpośrednio w wywołaniu is_enabled lub TargetingContxt może służyć do określania użytkownika i opcjonalnej grupy.

# 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"]))

Wykluczanie elementów docelowych

Podczas definiowania odbiorców użytkownicy i grupy mogą zostać wykluczeni z odbiorców. Wykluczenia są przydatne, gdy funkcja jest wdrażana w grupie użytkowników, ale kilka użytkowników lub grup musi zostać wykluczonych z wdrożenia. Wykluczenie jest definiowane przez dodanie listy użytkowników i grup do Exclusion właściwości odbiorców.

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

W powyższym przykładzie funkcja jest włączona dla użytkowników o nazwach Jeff i Alicia. Jest ona również włączona dla użytkowników w grupie o nazwie Ring0. Jeśli jednak użytkownik ma nazwę Mark, funkcja jest wyłączona, niezależnie od tego, czy znajdują się w grupie Ring0 , czy nie. Wykluczenia mają priorytet nad resztą filtru określania wartości docelowej.

Warianty

Po dodaniu nowych funkcji do aplikacji może dojść do czasu, gdy funkcja ma wiele różnych proponowanych opcji projektowania. Typowym rozwiązaniem do podejmowania decyzji o projekcie jest jakaś forma testowania A/B. Testowanie A/B polega na udostępnieniu innej wersji funkcji różnym segmentom bazy użytkowników i wybraniu wersji na podstawie interakcji użytkownika. W tej bibliotece ta funkcja jest włączona przez reprezentowanie różnych konfiguracji funkcji z wariantami.

Warianty umożliwiają flagę funkcji stać się bardziej niż prostą flagą włączania/wyłączania. Wariant reprezentuje wartość flagi funkcji, która może być ciągiem, liczbą, wartością logiczną, a nawet obiektem konfiguracji. Flaga funkcji, która deklaruje warianty, powinna określać, w jakich okolicznościach należy używać każdego wariantu, co zostało szczegółowo omówione w sekcji Przydzielanie wariantów .

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

Pobieranie wariantów

Dla każdej funkcji można pobrać wariant przy użyciu FeatureManagermetody "s 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

Zwrócony wariant jest zależny od aktualnie ocenianego użytkownika, a informacje te są uzyskiwane z wystąpienia klasy TargetingContext.

Deklaracja flagi funkcji wariantu

W porównaniu z flagami funkcji normalnych flagi funkcji wariantu mają jeszcze dwie właściwości: variants i allocation. Właściwość variants jest tablicą zawierającą warianty zdefiniowane dla tej funkcji. Właściwość allocation definiuje sposób przydzielania tych wariantów dla funkcji. Podobnie jak deklarowanie flag funkcji normalnych, można skonfigurować flagi funkcji wariantu w pliku JSON. Oto przykład flagi funkcji wariantu.

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

Definiowanie wariantów

Każdy wariant ma dwie właściwości: nazwę i konfigurację. Nazwa jest używana do odwoływania się do określonego wariantu, a konfiguracja jest wartością tego wariantu. Konfigurację można ustawić przy użyciu configuration_value właściwości . configuration_value jest konfiguracją śródliniową, która może być ciągiem, liczbą, wartością logiczną lub obiektem konfiguracji. Jeśli configuration_value nie zostanie określony, zwrócona właściwość wariantu Configuration to None.

Lista wszystkich możliwych wariantów jest zdefiniowana dla każdej funkcji w variants ramach właściwości .

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

Przydzielanie wariantów

Proces przydzielania wariantów funkcji zależy od allocation właściwości funkcji.

"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"
    } 
]

Ustawienie allocation funkcji ma następujące właściwości:

Właściwości opis
default_when_disabled Określa, który wariant ma być używany, gdy jest wymagany wariant, gdy funkcja jest uznawana za wyłączoną.
default_when_enabled Określa, który wariant ma być używany, gdy jest wymagany wariant, gdy funkcja jest uznawana za włączoną i żaden inny wariant nie został przypisany do użytkownika.
user Określa wariant i listę użytkowników, do których należy przypisać ten wariant.
group Określa wariant i listę grup. Wariant jest przypisywany, jeśli użytkownik znajduje się w co najmniej jednej grupie.
percentile Określa wariant i zakres procentowy, do którego ma zostać przypisana wartość procentowa obliczona przez użytkownika.
seed Wartość, na podstawie której są obliczane percentile wartości procentowe. Obliczanie procentowe dla określonego użytkownika będzie takie samo we wszystkich funkcjach, jeśli jest używana ta sama seed wartość. Jeśli nie seed zostanie określony, zostanie utworzony domyślny inicjator na podstawie nazwy funkcji.

Jeśli funkcja nie jest włączona, menedżer funkcji przypisuje wariant oznaczony jako default_when_disabled do bieżącego użytkownika, który jest Small w tym przypadku.

Jeśli funkcja jest włączona, menedżer funkcji sprawdza user, groupi percentile alokacje w tym celu w celu przypisania wariantu. W tym konkretnym przykładzie, jeśli oceniany użytkownik ma nazwę Marsha, w grupie o nazwie Ring1lub użytkownik może spaść między 0 a 10. percentylem, określony wariant zostanie przypisany do użytkownika. W takim przypadku wszyscy przypisani użytkownicy zwróciliby Big wariant. Jeśli żadna z tych alokacji nie jest zgodna default_when_enabled , użytkownik ma przypisany wariant , czyli Small.

Logika alokacji jest podobna do filtru funkcji Microsoft.Targeting, ale istnieją pewne parametry, które znajdują się w określaniu wartości docelowej, które nie znajdują się w alokacji i na odwrót. Wyniki określania wartości docelowej i alokacji nie są powiązane.

Zastępowanie stanu włączonego z wariantem

Można użyć wariantów, aby zastąpić włączony stan flagi funkcji. Zastępowanie daje wariantom możliwość rozszerzenia oceny flagi funkcji. Podczas wywoływania is_enabled flagi z wariantami menedżer funkcji sprawdzi, czy wariant przypisany do bieżącego użytkownika jest skonfigurowany do zastąpienia wyniku. Zastępowanie odbywa się przy użyciu opcjonalnej właściwości status_overridewariantu . Domyślnie ta właściwość jest ustawiona na None, co oznacza, że wariant nie ma wpływu na to, czy flaga jest uznawana za włączoną, czy wyłączoną. Ustawienie status_override zezwala na Enabled włączenie wariantu, po wybraniu, przesłonięcia flagi. Ustawienie status_override na Disabled wartość zapewnia przeciwną funkcjonalność, dlatego wyłączenie flagi po wybraniu wariantu. Nie można zastąpić funkcji ze stanem enabled false .

Jeśli używasz flagi funkcji z wariantami binarnymi, właściwość może być przydatna status_override . Umożliwia to kontynuowanie korzystania z interfejsów API, takich jak is_enabled w aplikacji, a jednocześnie korzystanie z nowych funkcji, które są dostarczane z wariantami, takimi jak alokacja percentylu i inicjowanie.

{
    "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"
        }
    ]
}

W powyższym przykładzie funkcja jest zawsze włączona. Jeśli bieżący użytkownik znajduje się w obliczonym zakresie percentylu od 10 do 20, On zwracany jest wariant. Off W przeciwnym razie zwracany jest wariant i ponieważ status_override jest równy Disabled, funkcja zostanie teraz uznana za wyłączoną.

Telemetria

Po wdrożeniu zmiany flagi funkcji często ważne jest analizowanie jej wpływu na aplikację. Oto na przykład kilka pytań, które mogą wystąpić:

  • Czy moje flagi są włączone/wyłączone zgodnie z oczekiwaniami?
  • Czy docelowi użytkownicy uzyskują dostęp do określonej funkcji zgodnie z oczekiwaniami?
  • Który wariant jest widoczny dla określonego użytkownika?

Odpowiedzi na te typy pytań można uzyskać za pośrednictwem emisji i analizy zdarzeń oceny flag funkcji. Ta biblioteka opcjonalnie umożliwia AzureMonitor tworzenie danych telemetrycznych śledzenia podczas oceny flagi funkcji za pośrednictwem programu OpenTelemetry.

Włączanie telemetrii

Domyślnie flagi funkcji nie mają emitowanych danych telemetrycznych. Aby opublikować dane telemetryczne dla danej flagi funkcji, flaga MUSI zadeklarować , że jest włączona dla emisji telemetrii.

W przypadku flag funkcji zdefiniowanych w formacie json włączenie odbywa się przy użyciu telemetry właściwości .

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

Powyższy fragment kodu definiuje flagę funkcji o nazwie MyFeatureFlag , która jest włączona dla telemetrii. Właściwość telemetry obiektu jest ustawiona enabled na truewartość . Wartość enabled właściwości musi być true publikowania danych telemetrycznych dla flagi.

Sekcja telemetry flagi funkcji ma następujące właściwości:

Właściwości opis
enabled Określa, czy dane telemetryczne mają być publikowane dla flagi funkcji.
metadata Kolekcja par klucz-wartość, modelowana jako słownik, która może służyć do dołączania niestandardowych metadanych dotyczących flagi funkcji do zdarzeń oceny.

Ponadto podczas tworzenia FeatureManagerwywołania zwrotnego należy zarejestrować w celu obsługi zdarzeń telemetrii. To wywołanie zwrotne jest wywoływane za każdym razem, gdy flaga funkcji jest oceniana, a dane telemetryczne są włączone dla tej flagi.

feature_manager = FeatureManager(feature_flags, on_feature_evaluated=publish_telemetry)

Telemetria usługi Application Insights

Biblioteka zarządzania funkcjami udostępnia wbudowanego wydawcę telemetrii, który wysyła dane oceny flag funkcji do usługi Application Insights. Aby włączyć usługę Application Insights, bibliotekę zarządzania funkcjami można zainstalować za pomocą usługi Azure Monitor za pośrednictwem usługi pip install FeatureManagement[AzureMonitor]. To polecenie instaluje azure-monitor-events-extension pakiet, który służy do stylu telemetrii w usłudze Application Insights przy użyciu biblioteki OpenTelemetry.

Uwaga

Pakiet azure-monitor-events-extension dodaje tylko dane telemetryczne do potoku Otwórz telemetrię. Rejestrowanie usługi Application Insights jest nadal wymagane.

from azure.monitor.opentelemetry import configure_azure_monitor

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

Publikowanie niestandardowych danych telemetrycznych

Ponieważ wywołanie zwrotne telemetrii jest funkcją, można ją dostosować do publikowania danych telemetrycznych w dowolnym żądanym miejscu docelowym. Na przykład dane telemetryczne mogą być publikowane w usłudze rejestrowania, bazie danych lub niestandardowej usłudze telemetrii.

Po ocenie flagi funkcji i włączeniu telemetrii menedżer funkcji wywołuje wywołanie zwrotne telemetrii z parametrem EvaluationEvent . EvaluationEvent zawiera następujące właściwości:

Tag opis
feature Użyto flagi funkcji.
user Identyfikator użytkownika używany do określania wartości docelowej.
enabled Czy flaga funkcji jest oceniana jako włączona.
Variant Przypisany wariant.
VariantAssignmentReason Przyczyna przypisania wariantu.

Następne kroki

Aby dowiedzieć się, jak używać flag funkcji w aplikacjach, przejdź do następujących przewodników Szybki start.

Aby dowiedzieć się, jak używać filtrów funkcji, przejdź do następujących samouczków.