共用方式為


在 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 應用程式組態載入您的功能旗標,並將其載入功能管理。 FeatureManager 會使用回調函 publish_telemetry 式將遙測發佈至 Azure 監視器。

    from featuremanagement.azuremonitor import publish_telemetry
    
    feature_manager = FeatureManager(config, on_feature_evaluated=publish_telemetry)
    
  4. 開啟 routes.py 並更新程式代碼,以追蹤應用程式中自己的事件。 當叫用 track_event 時,系統會使用所提供的使用者向 Azure 監視器發佈自訂事件。

    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 按鈕。 按兩下時,like 按鈕會將POST要求傳送至 /heart 端點。

    <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 需要連接字串才能連線到 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% 的機率您會收到「您好!」這則訊息,另外有 25% 的機率您會收到「希望這能讓你今天心情愉快!」這則訊息。

  4. 有些使用者選取 [Like] 按鈕以觸發遙測事件。

  5. 在 Azure 入口網站中開啟 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)
    
    

    Application Insights 的螢幕快照,其中顯示具有四個數據列的結果數據表;All、Simple、Long 和 None 及其各自的用戶計數和百分比。

    您會看到每次載入引用頁面時產生一個「FeatureEvaluation」事件,以及每次點擊「按讚」按鈕時產生一個「已按讚」事件。 “FeatureEvaluation” 事件具有稱為 FeatureName 的自定義屬性,其名稱為已評估的功能旗標。 這兩個事件都有一個名為 TargetingId 的自定義屬性,這個屬性是由喜歡這句話的用戶的名稱來命名的。

其他資源