Compartilhar via


Habilitar a telemetria para sinalizadores de recursos em um aplicativo Python

Neste tutorial, você usará a telemetria em seu aplicativo Python para acompanhar avaliações de sinalizador de recursos e eventos personalizados. A telemetria permite que você tome decisões informadas sobre sua estratégia de gerenciamento de recursos. Você usa o sinalizador de recurso com telemetria habilitada criado em Habilitar telemetria para sinalizadores de recurso. Antes de continuar, certifique-se de criar um sinalizador de recurso chamado Saudação em seu repositório de configuração com telemetria habilitada. Esse tutorial é baseado em usar sinalizadores de recurso de variante.

Pré-requisitos

Adicionar telemetria ao seu aplicativo Python

  1. Instale os pacotes necessários usando pip:

    pip install azure-appconfiguration-provider
    pip install featuremanagement["AzureMonitor"]
    pip install azure-monitor-opentelemetry
    
  2. Abra app.py e configure seu código para se conectar ao Application Insights para publicar a 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. Também em app.py, carregue sinalizadores de recursos da Configuração de Aplicativos e os integre ao gerenciamento de recursos. FeatureManager usa a função de retorno de chamada publish_telemetry para publicar telemetria no Azure Monitor.

    from featuremanagement.azuremonitor import publish_telemetry
    
    feature_manager = FeatureManager(config, on_feature_evaluated=publish_telemetry)
    
  4. Abra routes.py e atualize seu código para acompanhar seus próprios eventos em seu aplicativo. Quando track_event é chamado, um evento personalizado é publicado no Azure Monitor com o usuário fornecido.

    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. Abra index.html e atualize o código para implementar o botão curtir. O botão Curtir envia uma solicitação POST para o endpoint /heart quando clicado.

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

Compilar e executar o aplicativo

  1. O Application Insights exige uma cadeia de conexão para se conectar ao seu recurso do Application Insights. Defina a variável de ambiente APPLICATIONINSIGHTS_CONNECTION_STRING para a cadeia de conexão do recurso do Application Insights.

    setx APPLICATIONINSIGHTS_CONNECTION_STRING "applicationinsights-connection-string"
    

    Se você usar o PowerShell, execute o seguinte comando:

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

    Se você usa macOS ou Linux, execute o comando a seguir:

    export APPLICATIONINSIGHTS_CONNECTION_STRING='applicationinsights-connection-string'
    
  2. Execute o aplicativo, consulte a etapa 2 de Usar sinalizadores de recursos variantes .

  3. Crie 10 usuários diferentes e faça logon no aplicativo. Ao fazer logon com cada usuário, você obtém uma variante de mensagem diferente para alguns deles. Em cerca de 50% dos casos, nenhuma mensagem é exibida. Em 25% dos casos, a mensagem exibida é "Olá!", e nos outros 25%, "Espero que isso melhore o seu dia!".

  4. Com alguns usuários, selecione o botão Curtir para disparar o evento de telemetria.

  5. Abra o recurso do Application Insights no portal do Azure e selecione Logs em Monitoramento. Na janela de consulta, execute a seguinte consulta para ver os eventos de 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)
    

    Captura de tela do Application Insights mostrando a tabela de resultados com quatro linhas; Tudo, Simples, Longo e Nenhum com suas respectivas contagens e porcentagens de usuário.

    Você verá um evento "FeatureEvaluation" cada vez que a página de citações for carregada, e um evento "Liked" cada vez que o botão curtir for clicado. O evento "FeatureEvaluation" tem uma propriedade personalizada chamada FeatureName com o nome do sinalizador de recurso que foi avaliado. Ambos os eventos têm uma propriedade personalizada chamada TargetingId com o nome do usuário que gostou da citação.

Recursos adicionais