Udostępnij przez


Włącz telemetrię dla flag funkcji w aplikacji Node.js

W tym samouczku użyjesz telemetrii w aplikacji Node.js do śledzenia oceny flag funkcji i zdarzeń niestandardowych. Telemetria umożliwia podejmowanie świadomych decyzji dotyczących strategii zarządzania funkcjami. Używasz flagi funkcji z włączoną telemetrią, która została utworzona w przeglądzie na potrzeby włączania telemetrii dla flag funkcji. Przed kontynuowaniem upewnij się, że utworzono flagę funkcji o nazwie Greeting w magazynie konfiguracji z włączoną telemetrią. Ten samouczek jest oparty na samouczku dotyczącym używania flag funkcji wariantów w aplikacji Node.js.

Wymagania wstępne

Dodawanie telemetrii do aplikacji Node.js

  1. Zainstaluj następujące pakiety.

    npm install @microsoft/feature-management-applicationinsights-node
    
  2. Otwórz server.js i dodaj następujący kod na początku, aby nawiązać połączenie z usługą Application Insights w celu opublikowania danych telemetrycznych.

    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. Dodaj następujący import.

    const { createTelemetryPublisher, trackEvent } = require("@microsoft/feature-management-applicationinsights-node");
    
  4. Podczas inicjowania elementu FeatureManager, utwórz i zarejestruj wydawcę telemetrii.

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

    Wywołanie zwrotne publishTelemetry będzie wysyłać dane telemetryczne za każdym razem, gdy flaga cechy jest ewaluowana.

  5. Śledzenie zdarzeń niestandardowych na potrzeby interakcji użytkownika. Zmodyfikuj punkt końcowy /api/like tak, aby wysyłał dane telemetryczne do usługi Application Insights za każdym razem, gdy użytkownik polubi zawartość. Ułatwia to analizowanie, które warianty funkcji działają lepiej.

    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();
    });
    

Uruchamianie aplikacji

  1. Usługa Application Insights wymaga parametrów połączenia w celu nawiązania połączenia z zasobem usługi Application Insights. Ustaw zmienną środowiskową APPLICATIONINSIGHTS_CONNECTION_STRING na ciąg połączenia dla zasobu usługi Application Insights.

    setx APPLICATIONINSIGHTS_CONNECTION_STRING "applicationinsights-connection-string"
    

    Jeśli używasz programu PowerShell, uruchom następujące polecenie:

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

    Jeśli używasz systemu macOS lub Linux, uruchom następujące polecenie:

    export APPLICATIONINSIGHTS_CONNECTION_STRING='applicationinsights-connection-string'
    
  2. Uruchom aplikację, zobacz krok 4 sekcji Use variant feature flags (Używanie flag funkcji wariantu).

  3. Utwórz 10 różnych użytkowników i zaloguj się do aplikacji. Podczas logowania się do każdego użytkownika otrzymujesz inny wariant komunikatu dla niektórych z nich. ~50% czasu nie dostajesz komunikatu. 25% czasu otrzymujesz komunikat "Cześć!" i 25% czasu otrzymujesz "Mam nadzieję, że twój dzień jest lepszy!"

  4. Niektórzy użytkownicy klikają przycisk Lubię to, aby wyzwolić zdarzenie telemetrii.

    Zrzut ekranu przedstawiający aplikację z klikniętym przyciskiem polubionym.

  5. Otwórz zasób usługi Application Insights w witrynie Azure Portal i wybierz pozycję Dzienniki w obszarze Monitorowanie. W oknie zapytania uruchom następujące zapytanie, aby wyświetlić zdarzenia telemetrii:

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

    Zrzut ekranu usługi Application Insights przedstawiający tabelę wyników z czterema wierszami; Wszystkie, Proste, Długie i Brak z odpowiednimi liczbami użytkowników i wartościami procentowymi.

    Zobaczysz jedno zdarzenie "FeatureEvaluation" za każdym razem, gdy strona z ofertą została załadowana, i jedno zdarzenie "Polubiono" za każdym razem, gdy kliknięto przycisk polubienia. Zdarzenie "FeatureEvaluation" ma właściwość niestandardową z nazwą FeatureName, odpowiadającą nazwie flagi funkcji, która została oceniona. Oba zdarzenia mają właściwość niestandardową o nazwie TargetingId, która zawiera nazwę użytkownika, który polubił cytat.

    Aby uzyskać więcej informacji na temat zdarzenia "FeatureEvaluation", przejdź do dokumentacji telemetrii flagi funkcji

Dodatkowe zasoby

Dalsze kroki

Aby zapoznać się z pełnym przeglądem funkcji biblioteki zarządzania funkcjami języka JavaScript, przeczytaj następujący dokument.