Zarządzanie funkcjami języka Python
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 FeatureT
parametru 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 false
wartość . 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ą FeatureManager
metody .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 true
wartość , oznacza to, że funkcja powinna być włączona.
Poniższy fragment kodu przedstawia sposób dodawania dostosowanego filtru MyCustomFilter
funkcji .
feature_manager = FeatureManager(feature_flags, feature_filters=[MyCustomFilter()])
Filtry funkcji są rejestrowane przez podanie ich do właściwości feature_filters
podczas tworzenia FeatureManager
elementu . 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":
- Indywidualni użytkownicy Jeff i Alicia otrzymują dostęp do wersji beta
- Inny użytkownik, Mark, prosi o wyrażenie zgody i jest uwzględniony.
- Dwadzieścia procent grupy znanej jako "Ring1" użytkowników jest uwzględnionych w wersji beta.
- Liczba użytkowników "Ring1" uwzględnionych w wersji beta wzrosła do 100 procent.
- Pięć procent bazy użytkowników jest uwzględnionych w wersji beta.
- 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 FeatureManager
metody "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
, group
i 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 Ring1
lub 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_override
wariantu . 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 true
wartość . 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 FeatureManager
wywoł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.