Compartilhar via


Habilitar telemetria para feature flags em um aplicativo Node.js

Neste tutorial, você usará a telemetria em seu aplicativo Node.js 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. Use o sinalizador de recurso com a telemetria habilitada criada na visão geral para habilitar a telemetria para sinalizadores de recursos. Antes de continuar, certifique-se de criar um sinalizador de recurso chamado Saudação em seu repositório de configuração com telemetria habilitada. Este tutorial baseia-se no tutorial para usar sinalizadores de recursos variantes em um aplicativo Node.js.

Pré-requisitos

Adicionar telemetria ao aplicativo Node.js

  1. Instale os seguintes pacotes.

    npm install @microsoft/feature-management-applicationinsights-node
    
  2. Abra server.js e adicione o código a seguir no início para se conectar ao Application Insights para publicar a telemetria.

    const appInsightsConnectionString = process.env.APPLICATIONINSIGHTS_CONNECTION_STRING;
    const applicationInsights = require("applicationinsights");
    applicationInsights.setup(appInsightsConnectionString).start();
    
    const express = require("express");
    const server = express();
    // existing code ...
    
  3. Adicione a seguinte importação.

    const { createTelemetryPublisher, trackEvent } = require("@microsoft/feature-management-applicationinsights-node");
    
  4. Crie e registre o editor de telemetria ao inicializar o FeatureManager.

    // existing code ...
    const featureFlagProvider = new ConfigurationMapFeatureFlagProvider(appConfig);
    const publishTelemetry = createTelemetryPublisher(applicationInsights.defaultClient);
    featureManager = new FeatureManager(featureFlagProvider, {
        onFeatureEvaluated: publishTelemetry
    });
    // existing code ...
    

    O retorno de chamada publishTelemetry enviará dados de telemetria sempre que um sinalizador de recurso for avaliado.

  5. Acompanhe eventos personalizados para interações do usuário. Modifique o /api/like endpoint para enviar dados de telemetria para o Application Insights sempre que um usuário curtir conteúdo. Isso ajuda você a analisar quais variantes de recursos têm melhor desempenho.

    server.post("/api/like", (req, res) => {
        const { UserId } = req.body;
        if (UserId === undefined) {
            return res.status(400).send({ error: "UserId is required" });
        }
        trackEvent(applicationInsights.defaultClient, UserId, { name: "Liked" });
        res.status(200).send();
    });
    

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 4 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, clique no botão Curtir para disparar o evento de telemetria.

    Captura de tela do aplicativo com o botão Curtir clicado.

  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:

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

    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" para cada vez que a página de aspas foi carregada e um evento "Curtido" para cada vez que o botão curtir foi 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.

    Para obter mais informações sobre o evento "FeatureEvaluation", acesse a Referência de telemetria do sinalizador de recurso

Recursos adicionais

Próximas etapas

Para obter a visão geral completa dos recursos da biblioteca de gerenciamento de funcionalidades JavaScript, consulte a documentação a seguir.