Application Insights Diagnostics Preview
By Dan Taylor Principal Program Manager, Python Developer Tools
4 min read
These features are now Generally Available, and so the content of this post is outdated. Check out our Profiler documentation and Application Map documentation for the latest information.
At our recent Connect() event, we were excited to announce the general availability of Application Insights, with a large set of features being available for general use. In this post I’d like to share with you a preview of two new diagnostics features that are coming soon to Application Insights:
- Improvements to the Application Map that allows you to see health status of multiple components, pin-point issues, and easily find exceptions.
- The new Application Insights Profiler, which allows you to see detailed example traces of slow requests and drill into detailed analysis of code to see where you are spending the most time.
You can get a quick tour of these features by watching our Connect() video:
Multi-component Application Map with Error Pane
We want the Application Map to help you understand the overall health of your service, identify problems spots, and get rich information about that help you to triage and root cause issues. In Application Insight we refer to a component as an Azure compute resource that is sending data to Application Insights, with each component using a different instrumentation key for the telemetry it sends. The map previously only showed information about one component at a time even if the service was made up of multiple components, and it took a lot of clicks to get from the map to detailed exception information. To improve this experience, we have made the following improvements available under preview:
- You can now see multiple components on the same Application Map
- You can now click on a component to bring up an error pane which summarizes the top errors, and can click on the errors to jump right to detailed exception information
If you have multiple components being monitored by Application Insights, you can see all of these components on the same map and the calls between them. We’ve done work in both the .NET and the Node.js SDKs to detect calls between components, and as a result we can show both a Node.js web application and a .NET Web API backend on the same map. In the picture below, teamstandup-web is a Node.js web component, and teamstandup-api is a .NET REST API component:
The map reflects the incoming and outgoing calls for the currently selected component. Above we can see the web browser calling into the teamstandup-web component. The map also shows an error pane on the right-hand side, summarizing the errors that occurred in that component grouped by operation name (i.e. the URL) and the function in which the error occurred.
If we click on the teamstandup-api component we can see outgoing database calls made from the .NET API, and that there are 23 exceptions being thrown in the POST checkins method:
Clicking on the ArgumentNullException takes us to a redesigned exception details blade, making it easy to see the exception name and message. From here we can take quick actions like searching for logs related to the exception, create a new work item, or searching the web:
That was a quick tour of how we’ve made it easy for you to spot issues and drill into top errors in your service. To try out these features and give us feedback, be sure to check out Application Insights Application Map Preview for instructions on updating your Application Insights SDK (required for the multi-component map) and enabling these features in the portal.
Application Insights Profiler
When running in production there can be a number of unexpected causes of slow requests. In many cases if you have some requests which are fast most of the time but can occasionally experience slowdowns.
The new Application Insights Profiler runs with low overhead and will periodically enable profiling on your production service and collect detailed examples of performance traces for your application when something interesting happens. This means you’ll have examples of interesting issues with detailed profiles (code-level breakdown of request execution time) for a range of issues and you’ll have the details you need to pinpoint where time is spent. We believe the profiler will be useful for several scenarios, from identifying and triaging your slowest requests (even in the 95th percentile long-tail), to pinpointing what specifically is slowing down a request using a prerecorded example.
To access the results from the Profiler, you can click on the Examples column in the Performance blade to see examples for a given operation:
We have added the 95th percentile column to this table, allowing you to compare the typical vs. long tail performance of each request. Clicking on examples brings you to a new page which gives you a list of requests at various response percentiles, by default we select the slowest one:
For each request, we show you a call tree of the functions called during that request and the elapsed time spent in each function. The chart on the right-hand side provides an over-time visualization of the code:
If you have a service running in Azure App Service and want to find out how to improve its performance, be sure to check out How to enable Application Insights Profiler for enabling the profiler on your account and sending us feedback.
We’re excited to make early previews of these new diagnostics features that help you to better diagnose and fix issues in your production applications.
Let us know what you think by sending feedback from the Azure portal, or leaving comments here on this post!