Condividi tramite


Abilitare la telemetria per i flag di funzionalità in un'applicazione Python

In questa esercitazione, verranno utilizzati i dati di telemetria nell'applicazione Python per tenere traccia delle valutazioni dei flag di funzionalità e degli eventi personalizzati. La telemetria consente di prendere decisioni informate sulla strategia di gestione delle funzionalità. Verrà utilizzato il flag di funzionalità con i dati di telemetria abilitati creato in Abilitare i dati di telemetria per i flag di funzionalità. Prima di procedere, assicurarsi di creare un flag di funzionalità denominato Messaggio di saluto nell'archivio di configurazione con i dati di telemetria abilitati. Questa esercitazione si basa sull'utilizzo dei flag di funzionalità varianti.

Prerequisiti

Aggiungere dati di telemetria all'applicazione Python

  1. Installare i pacchetti necessari usando pip:

    pip install azure-appconfiguration-provider
    pip install featuremanagement["AzureMonitor"]
    pip install azure-monitor-opentelemetry
    
  2. Aprire app.py e configurare il codice per connettersi ad Application Insights per pubblicare i dati di telemetria.

    import os
    from azure.monitor.opentelemetry import configure_azure_monitor
    
    # Configure Azure Monitor
    configure_azure_monitor(connection_string=os.getenv("APPLICATIONINSIGHTS_CONNECTION_STRING"))
    
  3. Inoltre, in app.py, caricare i flag di funzionalità da Configurazione app e inserirli nella gestione delle funzionalità. FeatureManager usa la publish_telemetry funzione di callback per pubblicare i dati di telemetria su Azure Monitor.

    from featuremanagement.azuremonitor import publish_telemetry
    
    feature_manager = FeatureManager(config, on_feature_evaluated=publish_telemetry)
    
  4. Aprire routes.py e aggiornare il codice per tenere traccia dei propri eventi nell'applicazione. Quando track_event viene chiamato, viene pubblicato un evento personalizzato in Monitoraggio di Azure con l'utente specificato.

    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. Aprire index.html e aggiornare il codice per implementare il pulsante like. Il pulsante like invia una richiesta POST all'endpoint /heart quando si fa clic su .

    <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>
    

Compilare ed eseguire l'app

  1. Application Insights richiede una stringa di connessione per connettersi alla risorsa di Application Insights. Impostare la APPLICATIONINSIGHTS_CONNECTION_STRING variabile di ambiente sulla stringa di connessione per la risorsa di Application Insights.

    setx APPLICATIONINSIGHTS_CONNECTION_STRING "applicationinsights-connection-string"
    

    Se si usa PowerShell, eseguire il comando seguente:

    $Env:APPLICATIONINSIGHTS_CONNECTION_STRING = "applicationinsights-connection-string"
    

    Se si usa macOS o Linux, eseguire il comando seguente:

    export APPLICATIONINSIGHTS_CONNECTION_STRING='applicationinsights-connection-string'
    
  2. Eseguire l'applicazione, vedere il passaggio 2 di Utilizzo dei flag di funzionalità varianti .

  3. Creare 10 utenti diversi e accedere all'applicazione. Quando si accede con ogni utente, viene visualizzata una variante del messaggio diversa per alcune di esse. Circa 50% dell'intervallo di tempo in cui non viene ricevuto alcun messaggio. 25% dell'intervallo di tempo in cui si riceve il messaggio "Salve!" e 25% dell’intervallo di tempo in cui si ottiene "Ti auguro una buona giornata!".

  4. Alcuni utenti devono selezionare il pulsante Like per attivare un evento di telemetria.

  5. Aprire la risorsa di Application Insights nel portale di Azure e selezionare Log in Monitoraggio. Nella finestra di query eseguire la query seguente per visualizzare gli eventi di telemetria:

    // Total users
    let total_users =
        customEvents
        | where name == "FeatureEvaluation"
        | summarize TotalUsers = count() by Variant = tostring(customDimensions.Variant);
    
    // Hearted users
    let hearted_users =
        customEvents
        | where name == "FeatureEvaluation"
        | extend TargetingId = tostring(customDimensions.TargetingId)
        | join kind=inner (
            customEvents
            | where name == "Liked"
            | extend TargetingId = tostring(customDimensions.TargetingId)
        ) on TargetingId
        | summarize HeartedUsers = count() by Variant = tostring(customDimensions.Variant);
    
    // Calculate the percentage of hearted users over total users
    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;
    
    // Calculate the sum of total users and hearted users of all variants
    let total_sum =
        combined_data
        | summarize Variant="All", TotalUsers = sum(TotalUsers), HeartedUsers = sum(HeartedUsers);
    
    // Display the combined data along with the sum of total users and hearted users
    combined_data
    | union (total_sum)
    

    Screenshot di Application Insights che mostra la tabella dei risultati con quattro righe; All, Simple, Long e None con i rispettivi conteggi utente e percentuali.

    Viene visualizzato un evento "FeatureEvaluation" per ogni volta che è stata caricata la pagina delle citazioni e un evento "Mi piace" per ogni volta che si è fatto clic sul pulsante mi piace. L'evento "FeatureEvaluation" ha una proprietà personalizzata denominata FeatureName con il nome del flag di funzionalità valutato. Entrambi gli eventi hanno una proprietà personalizzata denominata TargetingId con il nome dell'utente che ha apprezzato la citazione.

Risorse aggiuntive