次の方法で共有


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. ユーザー操作のカスタム イベントを追跡します。 ユーザーがコンテンツを気に入ったときにテレメトリ データを Application Insights に送信するように、 /api/like エンドポイントを変更します。 これにより、どの機能バリアントのパフォーマンスが向上するかを分析できます。

    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%。 "Hello!" というメッセージを受け取った場合の 25 % および "I hope this makes your day!" を受け取った場合の 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)
    

    4 行の結果テーブルを示す Application Insights のスクリーンショット。All、Simple、Long、None、それぞれのユーザー数とパーセンテージ。

    見積もりページが読み込まれるたびに "FeatureEvaluation" イベントが 1 つ表示され、いいねボタンがクリックされるたびに "Liked" イベントが 1 つ表示されます。 "FeatureEvaluation" イベントには、評価された機能フラグの名前を持つ FeatureName というカスタム プロパティがあります。 どちらのイベントにも、引用を気に入ったユーザーの名前を持つ TargetingId というカスタムプロパティがあります。

    "FeatureEvaluation" イベントの詳細については、機能フラグテレメトリ リファレンスを参照してください

その他のリソース

次のステップ

JavaScript 機能管理ライブラリの完全な機能ランダウンについては、次のドキュメントを参照してください。