Using Application Insights With Microsoft Bot Framework

Aug 21

Written by:
8/21/2016 10:23 AM  RssIcon

image

With Application Insights, you can Insert a few lines of code in your Bot to find out what your users are doing.

When you install Application Insights, you are installing a small instrumentation package in your application, then, you set up an Application Insights resource in the Microsoft Azure portal.

The instrumentation you install, monitors your app and sends telemetry data to the Microsoft Azure portal. The Microsoft Azure portal shows statistical charts and has powerful search tools to help you monitor your application and diagnose any problems.

image

To demonstrate this, we will start with the Bot created in the article: Introduction To Using Dialogs With The Microsoft Bot Framework.

image

This will require using Microsoft Azure. If you do not have a Microsoft Azure account, go to https://azure.microsoft.com and create an account and a subscription.

Enable Application Insights

image

Open the AiNumberGuesserBot project (that you can download from: Introduction To Using Dialogs With The Microsoft Bot Framework) and open in Visual Studio 2015.

In the Solution Explorer in Visual Studio, right-click on the Project (not the Solution), and select Add Application Insights Telemetry.

image

You will first be required to log into your Microsoft Azure Account.

After doing so, you will be presented with a form to create (by choosing the (New resource) option in the Send telemetry to dropdown) or connect to an exiting Application Insights resource (by selecting it in the Send telemetry to dropdown).

After selecting the configuration options, click the Add button to proceed.

image

Application Insights assemblies will be added to the project.

image

If you get an error, most likely you have components that need to be updated.

image

In the Solution Explorer in Visual Studio, right-click on the Project (not the Solution), and select Manage NuGet Packages.

image

Select Updates, select the components that the error message indicates need to be updated, and click the Update button.

image

When the Review Changes box shows, click the OK button.

Next, right-click on the Project and select Add Application Insights Telemetry again to re-start the process.

The Application Insights components should now install successfully.

Debug The Application

image

Before you try to debug, clear any MicrosoftAppId and MicrosoftAppPassword settings that there may be in the Web.config file and then save the file.

This is required so that you can easily debug locally.

Remember to replace any settings if you need to publish the application again.

image

Hit F5 to run the project.

image

The application will open in the web browser.

Note the web address, you will need it in the next step.

Using The Bot Emulator

image

Download, install, and run the Bot Framework Emulator (Windows) (also see: Mac and Linux support using command line emulator if you don’t have Windows).

When the emulator starts, connect to the Bot by setting the address to the the one indicted in the web browser (however, add /api/messages to the end).

image

In the Bot Emulator, enter Hello in the text box and click the send key (or press enter).

You will see the response in the Chat window and the JSON contents of the response in the JSON window.

image

You should see a window pop up that provides links to the telemetry data.

image

You can also access the data by clicking on the links in the ApplicationInsight.config section in the Solution Explorer of Visual Studio while he application is running.

image

Also, you can right-click on the Project and select Application Insights to show the menu that will provide all the options.

image

Selecting  Search Live Telemetry or Search Debug Session Telemetry will open a window in Visual Studio that will display telemetry data.

See: Learn more about Application Insights tools in Visual Studio for more information on using these windows.

image

For full Telemetry Readiness, ensure all the green dots are checked. if any aren’t click on them.

image

It will stop debugging to add components.

image

You will be able to click a button to add or configure the components.

image

The components will be added.

image

The result will be displayed.

Custom Telemetry

image

On of the most powerful features of Application Insights, is using it to track your own custom telemetry.

We will now demonstrate using it to track when a game is started, completed, what number a user needed to guess, and how many attempts they required.

In the AiNumberGuesserBot project, open the NumberGuesserDialog.cs file and add the following using statements:

 

using Microsoft.ApplicationInsights;
using System.Collections.Generic;

 

Next, add the following line to the class:

 

        // TelemetryClient is not Serializable but is in a class
        // marked [Serializable] so it must be marked as [NonSerialized]
        [NonSerialized()]
        private TelemetryClient telemetry = new TelemetryClient();

 

Finally add the following lines to the StartAsync method:

 

            // Set up some properties and metrics:
            // Properties - String values that you can use to filter 
            // your telemetry in the usage reports.
            // Metrics - Numeric values that can be presented graphically
            var properties = new Dictionary<string, string>
            { {"Method", "StartAsync"}};
            var metrics = new Dictionary<string, double>
            { {"NumberToGuess", this.intNumberToGuess}};
            // Send the event:
            telemetry.TrackEvent("GameStarted", properties, metrics);

 

This will track a game being started and the number the user needs to guess.

Also add the following code to track the game completed:

 

                    // Because telemetry client is not serialized we have to
                    // instantiate it each time we use it
                    telemetry = new TelemetryClient();
                    var properties = new Dictionary<string, string>
                    { {"Method", "MessageReceivedAsync"}};
                    var metrics = new Dictionary<string, double>
                    {
                        { "NumberToGuess", this.intNumberToGuess},
                        { "Attempts", this.intAttempts}
                    };
                    // Send the event:
                    telemetry.TrackEvent("GameCompleted", properties, metrics);

 

There are a number of API calls we can use to track custom events as the following table illustrates:

Application Insights API summary

From: https://azure.microsoft.com/en-us/documentation/articles/app-insights-api-custom-events-metrics/

Method Used for
TrackPageView Pages, screens, blades or forms
TrackEvent User actions and other events. Used to track user behavior or to monitor performance.
TrackMetric
Performance measurements such as queue lengths not related to specific events
TrackException Log exceptions for diagnosis. Trace where they occur in relation to other events and examine stack traces.
TrackRequest Log the frequency and duration of server requests for performance analysis.
TrackTrace Diagnostic log messages. You can also capture 3rd-party logs.
TrackDependency Log the duration and frequency of calls to external components on which your app depends.

You can attach properties and metrics to most of these telemetry calls.

image

Run the application and enter some sample data.

image

When you select the Application Insights menu in Visual Studio, and then select Explore Telemetry Trends

image

…you can then select Inspect your custom events.

image

Click the Analyze Telemetry button to process the latest data. You will see where the Properties and Metrics have been tracked.

Note: It will take a few minutes for your custom events to show.

You can double-click on a trend to drill into the data.

image

This will take you to the search screen where you can filter further and view the details of each individual event.

Application Insights Portal

image

You can access the Application Insights Portal on the Microsoft Azure site by selecting it from the menu in Visual Studio.

image

It is there that you can see and change your Pricing tier.

You can also obtain your Instrumentation Key.

Monitoring A Published Application

image

You can monitor your published Bot.

See the following article for instructions on publishing the Bot: Creating a Skype Bot Using The Microsoft Bot Framework.

After your Bot is published, on the https://dev.botframework.com/ site, select My bots.

image

Edit the Bot configuration.

image

Enter the Instrumentation Key (from the Microsoft Azure site), and click Save changes.

This will enable additional properties and metrics to track.

image

Return to the Application Insights resource on the Microsoft Azure site.

You can now monitor your published application and create custom charts using default tracking data and your custom properties and metrics.

Links – Application Insights

Application Insights - introduction

Application Insights API for custom events and metrics

Get started with Visual Studio Application Insights

Set up Application Insights for ASP.NET

Learn more about Application Insights tools in Visual Studio

Links - Bot Framework

Creating a Hello World! Bot Using The Microsoft Bot Framework

Introduction To Using Dialogs With The Microsoft Bot Framework

Creating a Skype Bot Using The Microsoft Bot Framework

Creating A Facebook Bot Using Microsoft Bot Framework

Microsoft Bot Framework

Download

You can download the code from the Download page

2 comment(s) so far...


Gravatar

Re: Using Application Insights With Microsoft Bot Framework

Hi Michael,
Great tutorial (as always). I am having an issue with adding the Application Insights Telemetry bit though. I receive the same error that you show in the screenshot above (/Portals/0/Blog/Files/1/11/Windows-Live-Writer-Using-Application-Insights-With-Microsof_10EC6-image_5a347bad-a46b-4cee-935d-7e8568e7c1f4.png. However, when I go to the NuGet Package Manger though it does not show that any of the listed components need to be updated though. Do you have an idea as to what the issue could be?

Johnathan

By Johnathan on   10/20/2016 8:25 AM
Gravatar

Re: Using Application Insights With Microsoft Bot Framework

@Johnathan - Can you open a thread in the Forums (on this site) and indicate what version of Microsoft.Bot.Builder do you have?

By Administrator on   10/20/2016 11:19 AM