You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Node.js实现Bot Framework V4 App Insights自定义指标、事件及查询展示?

Microsoft Bot Framework V4 with App Insights: Custom Metrics/Events in Node.js & Dashboard Visualization

Hey there! Let's break down how to integrate App Insights with your Node.js Bot Framework V4 bot, implement custom telemetry, and visualize that data in dashboards.


Bot Framework V4 & App Insights Integration Basics

First, you'll need an Azure App Insights resource (create one if you haven't already) and its Instrumentation Key. For Node.js, we'll use the official applicationinsights package along with Bot Framework's telemetry interfaces to seamlessly track bot activities.

Start by installing the required packages:

npm install applicationinsights botbuilder-core

Implementing Custom Metrics & Events in Node.js

1. Initialize the App Insights Client

First, set up the telemetry client in your bot's entry file:

const appInsights = require('applicationinsights');
const { BotTelemetryClient } = require('botbuilder-core');

// Initialize App Insights with your instrumentation key
appInsights.setup('<YOUR_INSTRUMENTATION_KEY>')
  .setAutoCollectConsole(true) // Optional: collect console logs
  .start();

const appInsightsClient = appInsights.defaultClient;

2. Track Custom Events

Custom events are great for tracking user actions (like intent triggers, form submissions, or support requests). Here's how to track an event when a user initiates a password reset:

// In your bot's message handler or dialog step
async function onTurn(context) {
  if (context.activity.type === ActivityTypes.Message) {
    const userInput = context.activity.text.toLowerCase();
    
    if (userInput.includes('reset password')) {
      // Track custom event with context properties
      appInsightsClient.trackEvent({
        name: 'PasswordResetInitiated',
        properties: {
          userId: context.activity.from.id,
          channel: context.activity.channelId,
          userLocale: context.activity.locale
        },
        measurements: {
          responseTimeMs: Date.now() - context.activity.timestamp.getTime()
        }
      });
      
      // Send your bot's response
      await context.sendActivity('I can help you reset your password. Let\'s start...');
    }
  }
}

3. Track Custom Metrics

Metrics are numeric values you want to aggregate (like failed login attempts, average dialog completion time). Example tracking failed login attempts:

// When a login attempt fails
function trackFailedLogin(userId) {
  appInsightsClient.trackMetric({
    name: 'FailedLoginAttempts',
    value: 1, // Increment by 1 each failure
    properties: { userId }
  });
}

4. Bot Framework-Specific Telemetry Integration

For better alignment with Bot Framework's lifecycle, wrap the App Insights client in a BotTelemetryClient implementation. This lets you attach telemetry to dialogs and activities:

class AppInsightsBotTelemetry extends BotTelemetryClient {
  constructor(client) {
    super();
    this.client = client;
  }

  trackEvent(event) {
    this.client.trackEvent(event);
  }

  trackMetric(metric) {
    this.client.trackMetric(metric);
  }

  // Implement other required methods (trackTrace, trackDependency, etc.) as needed
}

// Initialize the bot telemetry client
const botTelemetry = new AppInsightsBotTelemetry(appInsightsClient);

// Use in a dialog
const loginDialog = new WaterfallDialog('loginDialog', [
  async (step) => {
    botTelemetry.trackEvent({ name: 'LoginDialogStarted', properties: { userId: step.context.activity.from.id } });
    return await step.prompt('usernamePrompt', 'Enter your username:');
  },
  // ... other dialog steps
]);

Querying Custom Variables & Displaying in Dashboards

Once your telemetry is flowing to App Insights, you can use Log Analytics to query the data and pin visualizations to Azure dashboards.

Querying Custom Events

Custom events are stored in the customEvents table. Use Kusto Query Language (KQL) to filter and aggregate data:

// Count password reset requests by channel over the last 7 days
customEvents
| where name == "PasswordResetInitiated"
| where timestamp >= ago(7d)
| summarize TotalRequests = count() by tostring(customDimensions.channel)
| render columnchart

Querying Custom Metrics

Custom metrics live in the customMetrics table. Example query for failed login trends:

// Failed login attempts per hour over the last 24 hours
customMetrics
| where name == "FailedLoginAttempts"
| where timestamp >= ago(24h)
| summarize TotalFailures = sum(value) by bin(timestamp, 1h)
| render timechart

Pinning to Dashboards

  1. Run your KQL query in Log Analytics (found under your App Insights resource's "Logs" section).
  2. Click the Pin to dashboard button at the top of the results pane.
  3. Select an existing dashboard or create a new one.
  4. Customize the visualization (title, chart type, size) directly in the dashboard for better readability.

Pro Tips

  • Avoid sensitive data: Never include PII (like passwords, emails) in custom properties.
  • Consistent naming: Use clear, consistent names for events/metrics to make querying easier.
  • Test telemetry flow: Use the "Live Metrics" tab in App Insights to verify data is being captured in real-time.

内容的提问来源于stack exchange,提问作者Deepak Vyas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 23:47:50