你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

为 Node.js 应用程序中的功能标志启用遥测

在本教程中,你将在 Node.js 应用程序中使用遥测来跟踪功能标志评估和自定义事件。 遥测允许你对功能管理策略做出明智的决策。 利用在为功能标志启用遥测概述中创建的、已启用遥测的功能标志。 在继续作之前,请确保在配置存储中创建一个名为 Greeting 的功能标志,并启用遥测。 该教程基于之前有关 在 Node.js 应用程序中使用变体功能标志 的教程进行扩展。

先决条件

将遥测添加到 Node.js 应用程序

  1. 安装以下包。

    npm install @microsoft/feature-management-applicationinsights-node
    
  2. 打开 server.js 并添加以下代码,以连接到 Application Insights 以发布遥测数据。

    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 需要连接字符串才能连接到 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 门户中打开 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 的屏幕截图,其中显示了包含四行的结果表;All、Simple、Long 和 None 及其各自的用户计数和百分比。

    每次加载引文页面时,你都会看到一个“FeatureEvaluation”事件,每次单击点赞按钮时,你都会看到一个“Liked”事件。 “FeatureEvaluation”事件具有一个名为FeatureName 的自定义属性,其中FeatureName 是被评估的功能标志的名称。 这两个事件都有一个自定义 TargetingId 属性,其中包含喜欢引号的用户的名称。

    有关“FeatureEvaluation”事件的详细信息,请转到功能标志遥测参考

其他资源

后续步骤

有关 JavaScript 功能管理库完整功能概述,请参阅以下文档。