このチュートリアルでは、Python アプリケーションでテレメトリを使用して、機能フラグの評価とカスタム イベントを追跡します。 テレメトリを使用すると、機能管理戦略に関する情報に基づいた意思決定を行うことができます。 「機能フラグのテレメトリの有効化の概要」で作成した、テレメトリが有効な機能フラグを利用します。 先に進む前に、テレメトリを有効にして、構成ストアに Greeting という名前の機能フラグを作成してください。 このチュートリアルは、 Python アプリケーションでバリアント機能フラグを使用するためのチュートリアルに基づいています。
[前提条件]
- 「機能フラグのテレメトリを有効にする」において、テレメトリが有効にされたバリアント機能フラグ。
- Python アプリケーションでバリアント機能フラグを使用するアプリケーション。
Python アプリケーションにテレメトリを追加する
pip を使用して必要なパッケージをインストールします。
pip install azure-appconfiguration-provider pip install featuremanagement["AzureMonitor"] pip install azure-monitor-opentelemetryapp.pyを開き、テレメトリを発行するために Application Insights に接続するようにコードを構成します。import os from azure.monitor.opentelemetry import configure_azure_monitor # Configure Azure Monitor configure_azure_monitor(connection_string=os.getenv("APPLICATIONINSIGHTS_CONNECTION_STRING"))また、
app.pyの中で App Configuration から機能フラグを機能管理の中に読み込みます。FeatureManagerでは、publish_telemetryコールバック関数を使用して Azure Monitor にテレメトリを発行します。from featuremanagement.azuremonitor import publish_telemetry feature_manager = FeatureManager(config, on_feature_evaluated=publish_telemetry)routes.pyを開き、アプリケーション内の独自のイベントを追跡するようにコードを更新します。track_eventが呼び出されると、指定されたユーザーと共にカスタム イベントが Azure Monitor に発行されます。from featuremanagement import track_event @bp.route("/heart", methods=["POST"]) def heart(): if current_user.is_authenticated: user = current_user.username # Track the appropriate event based on the action track_event("Liked", user) return jsonify({"status": "success"})index.html開き、同様のボタンを実装するようにコードを更新します。 like ボタンをクリックすると、/heartエンドポイントに POST 要求が送信されます。<script> function heartClicked(button) { var icon = button.querySelector('i'); // Toggle the heart icon appearance icon.classList.toggle('far'); icon.classList.toggle('fas'); // Only send a request to the dedicated heart endpoint when it's a like action if (icon.classList.contains('fas')) { fetch('/heart', { method: 'POST', headers: { 'Content-Type': 'application/json', } }); } } </script>
アプリをビルドして実行する
Application Insights リソースに接続するには、接続文字列が必要です。
APPLICATIONINSIGHTS_CONNECTION_STRING環境変数を Application Insights リソースの接続文字列に設定します。setx APPLICATIONINSIGHTS_CONNECTION_STRING "applicationinsights-connection-string"PowerShell を使用する場合は、次のコマンドを実行します。
$Env:APPLICATIONINSIGHTS_CONNECTION_STRING = "applicationinsights-connection-string"macOS または Linux を使用する場合は、次のコマンドを実行します。
export APPLICATIONINSIGHTS_CONNECTION_STRING='applicationinsights-connection-string'アプリケーションを実行します。 「バリアント機能フラグを使用する」の手順 2 を参照してください。
10 人の異なるユーザーを作成し、アプリケーションにログインします。 各ユーザーと一緒にログインすると、一部のユーザーに対して異なるメッセージバリアントが表示されます。 メッセージを受け取っていない時間のうち最大 50%。 25%の割合で「Hello!」というメッセージを受け取り、25%の割合で「これがあなたの一日を良いものにしますように!」というメッセージを受け取ります。
一部のユーザーが [いいね ] ボタンを選択してテレメトリ イベントをトリガーします。
Azure portal で Application Insights リソースを開き、[監視] の下の [ログ] を選択します。 クエリ ウィンドウで、次のクエリを実行してテレメトリ イベントを表示します。
// Step 1: Get distinct users and their Variant from FeatureEvaluation let evaluated_users = customEvents | where name == "FeatureEvaluation" | extend TargetingId = tostring(customDimensions.TargetingId), Variant = tostring(customDimensions.Variant) | summarize Variant = any(Variant) by TargetingId; // Step 2: Get distinct users who emitted a "Like" let liked_users = customEvents | where name == "Liked" | extend TargetingId = tostring(customDimensions.TargetingId) | summarize by TargetingId; // Step 3: Join them to get only the evaluated users who also liked let hearted_users = evaluated_users | join kind=inner (liked_users) on TargetingId | summarize HeartedUsers = dcount(TargetingId) by Variant; // Step 4: Total evaluated users per variant let total_users = evaluated_users | summarize TotalUsers = dcount(TargetingId) by Variant; // Step 5: Combine results let combined_data = total_users | join kind=leftouter (hearted_users) on Variant | extend HeartedUsers = coalesce(HeartedUsers, 0) | extend PercentageHearted = strcat(round(HeartedUsers * 100.0 / TotalUsers, 1), "%") | project Variant, TotalUsers, HeartedUsers, PercentageHearted; // Step 6: Add total row let total_sum = combined_data | summarize TotalUsers = sum(TotalUsers), HeartedUsers = sum(HeartedUsers) | extend Variant = "All", PercentageHearted = strcat(round(HeartedUsers * 100.0 / TotalUsers, 1), "%") | project Variant, TotalUsers, HeartedUsers, PercentageHearted; // Step 7: Output combined_data | union (total_sum)
引用ページが読み込まれるたびに 1 の "FeatureEvaluation" が表示され、いいねボタンがクリックされるたびに 1 の "いいね!" イベントが表示されます。 "FeatureEvaluation" イベントには、評価された機能フラグの名前を持つ
FeatureNameというカスタム プロパティがあります。 どちらのイベントにも、引用を気に入ったユーザーの名前を持つTargetingIdというカスタムプロパティがあります。