次の方法で共有


Python アプリケーションで機能フラグのテレメトリを有効にする

このチュートリアルでは、Python アプリケーションでテレメトリを使用して、機能フラグの評価とカスタム イベントを追跡します。 テレメトリを使用すると、機能管理戦略に関する情報に基づいた意思決定を行うことができます。 「機能フラグのテレメトリの有効化の概要」で作成した、テレメトリが有効な機能フラグを利用します。 先に進む前に、テレメトリを有効にして、構成ストアに Greeting という名前の機能フラグを作成してください。 このチュートリアルは、 Python アプリケーションでバリアント機能フラグを使用するためのチュートリアルに基づいています。

[前提条件]

Python アプリケーションにテレメトリを追加する

  1. pip を使用して必要なパッケージをインストールします。

    pip install azure-appconfiguration-provider
    pip install featuremanagement["AzureMonitor"]
    pip install azure-monitor-opentelemetry
    
  2. app.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"))
    
  3. また、app.py の中で App Configuration から機能フラグを機能管理の中に読み込みます。 FeatureManager では、 publish_telemetry コールバック関数を使用して Azure Monitor にテレメトリを発行します。

    from featuremanagement.azuremonitor import publish_telemetry
    
    feature_manager = FeatureManager(config, on_feature_evaluated=publish_telemetry)
    
  4. 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"})
    
  5. 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>
    

アプリをビルドして実行する

  1. 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. アプリケーションを実行します。 「バリアント機能フラグを使用する」の手順 2 を参照してください

  3. 10 人の異なるユーザーを作成し、アプリケーションにログインします。 各ユーザーと一緒にログインすると、一部のユーザーに対して異なるメッセージバリアントが表示されます。 メッセージを受け取っていない時間のうち最大 50%。 25%の割合で「Hello!」というメッセージを受け取り、25%の割合で「これがあなたの一日を良いものにしますように!」というメッセージを受け取ります。

  4. 一部のユーザーが [いいね ] ボタンを選択してテレメトリ イベントをトリガーします。

  5. 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)
    
    

    4 行の結果テーブルを示す Application Insights のスクリーンショット。All、Simple、Long、None、それぞれのユーザー数とパーセンテージ。

    引用ページが読み込まれるたびに 1 の "FeatureEvaluation" が表示され、いいねボタンがクリックされるたびに 1 の "いいね!" イベントが表示されます。 "FeatureEvaluation" イベントには、評価された機能フラグの名前を持つ FeatureName というカスタム プロパティがあります。 どちらのイベントにも、引用を気に入ったユーザーの名前を持つ TargetingId というカスタムプロパティがあります。

その他のリソース