다음을 통해 공유


Node.js 애플리케이션에서 기능 플래그에 대한 텔레메트리 활성화

이 자습서에서는 Node.js 애플리케이션에서 원격 분석을 사용하여 기능 플래그 평가 및 사용자 지정 이벤트를 추적합니다. 원격 분석을 사용하면 기능 관리 전략에 대해 정보에 입각한 결정을 내릴 수 있습니다. 기능 플래그에 대한 원격 분석 사용하도록 설정 개요에서 만들어진 원격 분석이 사용하도록 설정된 기능 플래그를 활용합니다. 계속하기 전에 원격 분석이 활성화된 구성 저장소에서 Greeting이라는 기능 플래그를 만들어야 합니다. 이 자습서는 Node.js 애플리케이션에서 변형 기능 플래그를 사용하기 위한 자습서를 기반으로 합니다.

필수 조건

Node.js 애플리케이션에 원격 분석 추가

  1. 다음 패키지를 설치합니다.

    npm install @microsoft/feature-management-applicationinsights-node
    
  2. Application Insights에 연결하여 원격 분석을 게시하기 위해 시작 부분에 다음 코드를 열고 server.js 추가합니다.

    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. 다음 가져오기를 추가합니다.

    const { createTelemetryPublisher, trackEvent } = require("@microsoft/feature-management-applicationinsights-node");
    
  4. FeatureManager를 초기화할 때 원격 분석 게시자를 만들고 등록합니다.

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

    콜백은 publishTelemetry 기능 플래그가 평가될 때마다 원격 분석 데이터를 보냅니다.

  5. 사용자 상호 작용에 대한 사용자 지정 이벤트를 추적합니다. /api/like 사용자가 콘텐츠를 좋아할 때마다 Application Insights에 원격 분석 데이터를 보내도록 엔드포인트를 수정합니다. 이렇게 하면 어떤 기능 변형이 더 잘 수행되는지 분석할 수 있습니다.

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

애플리케이션 실행

  1. 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. 애플리케이션을 실행하고 변형 기능 플래그 사용의 4단계를 참조하세요.

  3. 10명의 다른 사용자를 만들고 애플리케이션에 로그인합니다. 각 사용자로 로그인하면 일부 사용자에 대해 다른 메시지 변형이 표시됩니다. 약 50%의 경우는 메시지를 가져오지 못합니다. 25%의 경우 "안녕하세요!"라는 메시지를 가져오고, 25%의 경우 "하루를 즐겁게 해 주길 바랍니다."라는 메시지를 가져옵니다.

  4. 일부 사용자가 좋아요 단추를 클릭하여 원격 분석 이벤트를 트리거합니다.

    좋아요 단추를 클릭한 애플리케이션의 스크린샷.

  5. Azure Portal에서 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의 스크린샷이 4개의 행(모두, 단순, 긴, 없음)으로 구성된 결과 테이블을 보여 주며, 각 행에는 사용자 수와 백분율이 표시됩니다.

    견적 페이지가 로드될 때마다 하나의 "FeatureEvaluation" 이벤트가 표시되고, 좋아요 단추를 클릭할 때마다 하나의 "좋아요" 이벤트가 표시됩니다. "FeatureEvaluation" 이벤트에는 평가된 기능 플래그의 이름으로 호출 FeatureName 된 사용자 지정 속성이 있습니다. 두 이벤트 모두 따옴표를 좋아하는 사용자의 이름을 따서 TargetingId라는 사용자 지정 속성이 있습니다.

    "FeatureEvaluation" 이벤트에 대한 자세한 내용은 기능 플래그 원격 분석 참조로 이동하세요.

추가 리소스

다음 단계

JavaScript 기능 관리 라이브러리의 전체 기능 개요는 다음 문서를 참조하세요.