Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Autoinstrumentation, also referred to as runtime monitoring, is the easiest way to enable Application Insights for Azure App Service without requiring any code changes or advanced configurations. Based on your specific scenario, evaluate whether you require more advanced monitoring through manual instrumentation.
Note
On March 31, 2025, support for instrumentation key ingestion will end. Instrumentation key ingestion will continue to work, but we'll no longer provide updates or support for the feature. Transition to connection strings to take advantage of new capabilities.
Enable Application Insights
Important
If both autoinstrumentation monitoring and manual SDK-based instrumentation are detected, only the manual instrumentation settings are honored. This arrangement prevents duplicate data from being sent. To learn more, see Troubleshooting.
Note
- Only .NET Core Long Term Support (LTS) releases are supported.
- Trim self-contained deployments is not supported. Use manual instrumentation instead.
Autoinstrumentation in the Azure portal
Select Application Insights in the left-hand navigation menu of your app service, then select Enable.
Create a new resource or select an existing Application Insights resource for this application.
Note
When you select OK to create a new resource, you're prompted to Apply monitoring settings. Selecting Continue links your new Application Insights resource to your app service. Your app service then restarts.
After you specify which resource to use, you can choose how you want Application Insights to collect data per platform for your application. ASP.NET Core collection options are Recommended or Disabled.
Manually upgrade the monitoring extension/agent
Upgrade from versions 2.8.9 and up
Upgrading from version 2.8.9 happens automatically, without any extra actions. The new monitoring bits are delivered in the background to the target app service, and are picked up on application restart.
To check which version of the extension you're running, go to https://yoursitename.scm.azurewebsites.net/ApplicationInsights
.
Upgrade from versions 1.0.0 - 2.6.5
Starting with version 2.8.9, the preinstalled site extension is used. If you're using an earlier version, you can update via one of two ways:
Upgrade by enabling via the Azure portal: Even if you have the Application Insights extension for App Service installed, the UI shows only the Enable button. Behind the scenes, the old private site extension is removed.
-
- Set the application settings to enable the preinstalled site extension
ApplicationInsightsAgent
. For more information, see Enable through PowerShell. - Manually remove the private site extension named Application Insights extension for Azure App Service.
- Set the application settings to enable the preinstalled site extension
If the upgrade is done from a version before 2.5.1, check that the ApplicationInsights
DLLs are removed from the application bin folder. For more information, see Troubleshooting.
Configure the monitoring extension/agent
We currently don't offer options to configure the monitoring extension for ASP.NET Core.
Enable client-side monitoring
Client-side monitoring is enabled by default for ASP.NET Core apps with Recommended collection, regardless of whether the app setting APPINSIGHTS_JAVASCRIPT_ENABLED
is present.
If you want to disable client-side monitoring:
Select Settings > Configuration.
Under Application settings, create a New application setting with the following information:
- Name:
APPINSIGHTS_JAVASCRIPT_ENABLED
- Value:
false
- Name:
Save the settings. Restart your app.
Automate monitoring
In order to enable telemetry collection with Application Insights, only the following Application settings need to be set:
Application settings definitions
App setting name | Definition | Value |
---|---|---|
ApplicationInsightsAgent_EXTENSION_VERSION | Main extension, which controls runtime monitoring. | ~2 for Windows or ~3 for Linux |
XDT_MicrosoftApplicationInsights_Mode | In default mode, only essential features are enabled to ensure optimal performance. | disabled or recommended . |
XDT_MicrosoftApplicationInsights_PreemptSdk | For ASP.NET Core apps only. Enables Interop (interoperation) with the Application Insights SDK. Loads the extension side by side with the SDK and uses it to send telemetry. (Disables the Application Insights SDK.) | 1 |
App Service application settings with Azure Resource Manager
Application settings for Azure App Service can be managed and configured with Azure Resource Manager templates. You can use this method when you deploy new App Service resources with Resource Manager automation or modify the settings of existing resources.
The basic structure of the application settings JSON for an App Service resource:
"resources": [
{
"name": "appsettings",
"type": "config",
"apiVersion": "2015-08-01",
"dependsOn": [
"[resourceId('Microsoft.Web/sites', variables('webSiteName'))]"
],
"tags": {
"displayName": "Application Insights Settings"
},
"properties": {
"key1": "value1",
"key2": "value2"
}
}
]
Automate the creation of an Application Insights resource and link to your newly created App Service resource
To create a Resource Manager template with the default Application Insights settings, begin the process as if you were going to create a new web app with Application Insights enabled.
In the Azure portal, create a new Web App resource with your desired information. Enable Application Insights on the Monitor + secure tab.
Go to Review + create, then select Download a template for automation. This option generates the latest Resource Manager template with all required settings configured.
Note
The following example template is for a .NET 8 (LTS) application running on Windows. It uses the placeholders my-monitored-web-app
for the name of the application and aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e
for the subscription ID.
We don't recommend copying and using it directly. Instead, generate your own template based on the instructions above.
Expand to view example template
{
"$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"subscriptionId": {
"type": "string"
},
"resourceGroupName": {
"type": "string"
},
"name": {
"type": "string"
},
"location": {
"type": "string"
},
"hostingPlanName": {
"type": "string"
},
"serverFarmResourceGroup": {
"type": "string"
},
"alwaysOn": {
"type": "bool"
},
"ftpsState": {
"type": "string"
},
"autoGeneratedDomainNameLabelScope": {
"type": "string"
},
"sku": {
"type": "string"
},
"skuCode": {
"type": "string"
},
"workerSize": {
"type": "string"
},
"workerSizeId": {
"type": "string"
},
"numberOfWorkers": {
"type": "string"
},
"currentStack": {
"type": "string"
},
"phpVersion": {
"type": "string"
},
"netFrameworkVersion": {
"type": "string"
}
},
"variables": {},
"resources": [
{
"apiVersion": "2022-03-01",
"name": "[parameters('name')]",
"type": "Microsoft.Web/sites",
"location": "[parameters('location')]",
"tags": null,
"dependsOn": [
"microsoft.insights/components/my-monitored-web-app",
"[concat('Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]"
],
"properties": {
"name": "[parameters('name')]",
"siteConfig": {
"appSettings": [
{
"name": "APPLICATIONINSIGHTS_CONNECTION_STRING",
"value": "[reference('microsoft.insights/components/my-monitored-web-app', '2015-05-01').ConnectionString]"
},
{
"name": "ApplicationInsightsAgent_EXTENSION_VERSION",
"value": "~2"
},
{
"name": "XDT_MicrosoftApplicationInsights_Mode",
"value": "default"
}
],
"metadata": [
{
"name": "CURRENT_STACK",
"value": "[parameters('currentStack')]"
}
],
"phpVersion": "[parameters('phpVersion')]",
"netFrameworkVersion": "[parameters('netFrameworkVersion')]",
"alwaysOn": "[parameters('alwaysOn')]",
"ftpsState": "[parameters('ftpsState')]"
},
"serverFarmId": "[concat('/subscriptions/', parameters('subscriptionId'),'/resourcegroups/', parameters('serverFarmResourceGroup'), '/providers/Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]",
"clientAffinityEnabled": true,
"virtualNetworkSubnetId": null,
"httpsOnly": true,
"publicNetworkAccess": "Enabled",
"autoGeneratedDomainNameLabelScope": "[parameters('autoGeneratedDomainNameLabelScope')]"
},
"resources": [
{
"type": "Microsoft.Web/sites/basicPublishingCredentialsPolicies",
"apiVersion": "2022-09-01",
"name": "[concat(parameters('name'), '/scm')]",
"properties": {
"allow": true
},
"dependsOn": [
"[resourceId('Microsoft.Web/Sites', parameters('name'))]"
]
},
{
"type": "Microsoft.Web/sites/basicPublishingCredentialsPolicies",
"apiVersion": "2022-09-01",
"name": "[concat(parameters('name'), '/ftp')]",
"properties": {
"allow": true
},
"dependsOn": [
"[resourceId('Microsoft.Web/Sites', parameters('name'))]"
]
}
]
},
{
"apiVersion": "2018-11-01",
"name": "[parameters('hostingPlanName')]",
"type": "Microsoft.Web/serverfarms",
"location": "[parameters('location')]",
"kind": "",
"tags": null,
"dependsOn": [],
"properties": {
"name": "[parameters('hostingPlanName')]",
"workerSize": "[parameters('workerSize')]",
"workerSizeId": "[parameters('workerSizeId')]",
"numberOfWorkers": "[parameters('numberOfWorkers')]",
"zoneRedundant": false
},
"sku": {
"Tier": "[parameters('sku')]",
"Name": "[parameters('skuCode')]"
}
},
{
"apiVersion": "2020-02-02-preview",
"name": "my-monitored-web-app",
"type": "microsoft.insights/components",
"location": "centralus",
"tags": null,
"dependsOn": [
"newWorkspaceTemplate"
],
"properties": {
"ApplicationId": "[parameters('name')]",
"Request_Source": "IbizaWebAppExtensionCreate",
"Flow_Type": "Redfield",
"Application_Type": "web",
"WorkspaceResourceId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/DefaultResourceGroup-CUS/providers/Microsoft.OperationalInsights/workspaces/DefaultWorkspace-aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e-CUS"
}
},
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2021-04-01",
"name": "newWorkspaceTemplate",
"resourceGroup": "DefaultResourceGroup-CUS",
"subscriptionId": "[parameters('subscriptionId')]",
"properties": {
"mode": "Incremental",
"template": {
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"variables": {},
"resources": [
{
"apiVersion": "2020-08-01",
"name": "DefaultWorkspace-aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e-CUS",
"type": "Microsoft.OperationalInsights/workspaces",
"location": "centralus",
"properties": {}
}
]
}
}
}
]
}
Enable through PowerShell
To enable the application monitoring through PowerShell, only the underlying application settings must be changed. The following sample enables application monitoring for a website called my-monitored-web-app
in the resource group my-resource-group
. It configures data to be sent to the InstrumentationKey=012345678-abcd-ef01-2345-6789abcd
connection string.
Note
We recommend that you use the Azure Az PowerShell module to interact with Azure. To get started, see Install Azure PowerShell. To learn how to migrate to the Az PowerShell module, see Migrate Azure PowerShell from AzureRM to Az.
Note
For Windows, set ApplicationInsightsAgent_EXTENSION_VERSION to ~2
.
For Linux, set ApplicationInsightsAgent_EXTENSION_VERSION to ~3
.
$app = Get-AzWebApp -ResourceGroupName "my-resource-group" -Name "my-monitored-web-app" -ErrorAction Stop
$newAppSettings = @{} # Case-insensitive hash map
$app.SiteConfig.AppSettings | %{$newAppSettings[$_.Name] = $_.Value} # Preserve non-Application-Insights application settings.
$newAppSettings["APPLICATIONINSIGHTS_CONNECTION_STRING"] = "InstrumentationKey=aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e"; # Set the Application Insights connection string
$newAppSettings["ApplicationInsightsAgent_EXTENSION_VERSION"] = "~3"; # Enable the ApplicationInsightsAgent.
$app = Set-AzWebApp -AppSettings $newAppSettings -ResourceGroupName $app.ResourceGroup -Name $app.Name -ErrorAction Stop
Frequently asked questions
This section provides answers to common questions.
What does Application Insights modify in my project?
The details depend on the type of project. The following list is an example for a web application.
Adds files to your project:
- ApplicationInsights.config
- ai.js
Installs NuGet packages:
- Application Insights API: The core API
- Application Insights API for Web Applications: Used to send telemetry from the server
- Application Insights API for JavaScript Applications: Used to send telemetry from the client
Includes assemblies in packages:
- Microsoft.ApplicationInsights
- Microsoft.ApplicationInsights.Platform
Inserts items into:
- Web.config
- packages.config
Inserts snippets into the client and server code to initialize them with the Application Insights resource ID. For example, in an MVC app, code is inserted into the main page Views/Shared/_Layout.cshtml. For new projects only, you add Application Insights to an existing project manually.
What's the difference between standard metrics from Application Insights vs. Azure App Service metrics?
Application Insights collects telemetry for the requests that made it to the application. If the failure occurs in WebApps/WebServer, and the request didn't reach the user application, Application Insights doesn't have any telemetry about it.
The duration for serverresponsetime
calculated by Application Insights doesn't necessarily match the server response time observed by Web Apps. This behavior is because Application Insights only counts the duration when the request actually reaches the user application. If the request is stuck or queued in WebServer, the waiting time is included in the Web Apps metrics but not in Application Insights metrics.
Troubleshooting
Test connectivity between your application host and the ingestion service
Application Insights SDKs and agents send telemetry to get ingested as REST calls to our ingestion endpoints. You can test connectivity from your web server or application host machine to the ingestion service endpoints by using raw REST clients from PowerShell or curl commands. See Troubleshoot missing application telemetry in Azure Monitor Application Insights.
Note
When you create a web app with the ASP.NET Core
runtimes in App Service, it deploys a single static HTML page as a starter website. We do not recommend that you troubleshoot an issue with the default template. Deploy an application before you troubleshoot an issue.
Missing telemetry
Windows
Check that the
ApplicationInsightsAgent_EXTENSION_VERSION
app setting is set to a value of~2
.Browse to
https://yoursitename.scm.azurewebsites.net/ApplicationInsights
.Confirm that Application Insights Extension Status is
Pre-Installed Site Extension, version 2.8.x.xxxx, is running.
If it isn't running, follow the instructions in the section Enable Application Insights monitoring.
Confirm that the status source exists and looks like
Status source D:\home\LogFiles\ApplicationInsights\status\status_RD0003FF0317B6_4248_1.json
.If a similar value isn't present, it means the application isn't currently running or isn't supported. To ensure that the application is running, try manually visiting the application URL/application endpoints, which allows the runtime information to become available.
Confirm that IKeyExists is
True
. If it'sFalse
, addAPPINSIGHTS_INSTRUMENTATIONKEY
andAPPLICATIONINSIGHTS_CONNECTION_STRING
with your ikey GUID to your application settings.If your application refers to any Application Insights packages, enabling the App Service integration might not take effect, and the data might not appear in Application Insights. An example would be if you previously instrumented, or attempted to instrument, your app with the ASP.NET Core SDK. To fix the issue, in the Azure portal, turn on Interop with Application Insights SDK.
Important
This functionality is in preview.
The data is sent using a codeless approach, even if the Application Insights SDK was originally used or attempted to be used.
Important
If the application used the Application Insights SDK to send any telemetry, the telemetry will be disabled. In other words, custom telemetry (for example, any
Track*()
methods) and custom settings (such as sampling) will be disabled.
Linux
Check that the
ApplicationInsightsAgent_EXTENSION_VERSION
app setting is set to a value of~3
.Browse to
https://your site name.scm.azurewebsites.net/ApplicationInsights
.Within this site, confirm:
- The status source exists and looks like
Status source /var/log/applicationinsights/status_abcde1234567_89_0.json
. - The value
Auto-Instrumentation enabled successfully
is displayed. If a similar value isn't present, it means the application isn't running or isn't supported. To ensure that the application is running, try manually visiting the application URL/application endpoints, which allows the runtime information to become available. - IKeyExists is
True
. If it'sFalse
, addAPPINSIGHTS_INSTRUMENTATIONKEY
andAPPLICATIONINSIGHTS_CONNECTION_STRING
with your ikey GUID to your application settings.
- The status source exists and looks like
Default website deployed with web apps doesn't support automatic client-side monitoring
When you create a web app with the ASP.NET Core runtimes in App Service, it deploys a single static HTML page as a starter website. The static webpage also loads an ASP.NET-managed web part in IIS. This behavior allows for testing codeless server-side monitoring but doesn't support automatic client-side monitoring.
If you want to test out codeless server and client-side monitoring for ASP.NET Core in an App Service web app, we recommend following the official guides for creating an ASP.NET Core web app. Afterwards, use the instructions in the current article to enable monitoring.
PHP and WordPress aren't supported
PHP and WordPress sites aren't supported. There's currently no officially supported SDK/agent for server-side monitoring of these workloads. To track client-side transactions on a PHP or WordPress site, add the client-side JavaScript to your webpages using the JavaScript SDK.
The following table provides an explanation of what these values mean, their underlying causes, and recommended fixes.
Problem value | Explanation | Fix |
---|---|---|
AppAlreadyInstrumented:true |
This value indicates that the extension detected some aspect of the SDK already present in the application and backs off. A reference to Microsoft.ApplicationInsights.AspNetCore or Microsoft.ApplicationInsights can cause this value. |
Remove the references. Some of these references are added by default from certain Visual Studio templates. Older versions of Visual Studio reference Microsoft.ApplicationInsights . |
AppAlreadyInstrumented:true |
The presence of Microsoft.ApplicationsInsights DLL in the app folder from a previous deployment can also cause this value. |
Clean the app folder to ensure that these DLLs are removed. Check both your local app's bin directory and the wwwroot directory on the App Service. (To check the wwwroot directory of your App Service web app, select Advanced Tools (Kudu) > Debug console > CMD > home\site\wwwroot). |
IKeyExists:false |
This value indicates that the instrumentation key isn't present in the app setting APPINSIGHTS_INSTRUMENTATIONKEY . Possible causes include accidentally removing the values or forgetting to set the values in automation script. |
Make sure the setting is present in the App Service application settings. |