Application Insights Setup
Overview
Application Insights is the Application Performance Management (APM) component of Azure Monitor. It provides real-time telemetry for your live applications โ tracking requests, dependencies, exceptions, traces, and custom events.
Connection Strings vs Instrumentation Keys
The connection string is the modern, recommended way to connect your app to Application Insights. It replaces the legacy instrumentation key approach and supports regional endpoints.
InstrumentationKey=<guid>;IngestionEndpoint=https://eastus-0.in.applicationinsights.azure.com/;LiveEndpoint=https://eastus.livediagnostics.monitor.azure.com/
โ ๏ธ Instrumentation keys are deprecated. Always use connection strings for new projects.
SDK Configuration (.NET)
Install the NuGet Package
dotnet add package Microsoft.ApplicationInsights.AspNetCore
Configure in Program.cs
var builder = WebApplication.CreateBuilder(args);
// Add Application Insights telemetry
builder.Services.AddApplicationInsightsTelemetry(options =>
{
options.ConnectionString = builder.Configuration["ApplicationInsights:ConnectionString"];
});
var app = builder.Build();
appsettings.json
{
"ApplicationInsights": {
"ConnectionString": "InstrumentationKey=xxx;IngestionEndpoint=https://eastus-0.in.applicationinsights.azure.com/"
}
}
Auto-Instrumentation (Codeless)
For Azure App Service, you can enable Application Insights without code changes:
- Navigate to your App Service in the Azure Portal
- Go to Settings โ Application Insights
- Click Turn on Application Insights
- Select your Application Insights resource
- Choose the appropriate SDK version
Auto-instrumentation automatically collects:
- HTTP requests and response times
- Dependency calls (SQL, HTTP, Azure Storage)
- Exceptions and stack traces
- Performance counters
Node.js / JavaScript SDK
npm install applicationinsights
const appInsights = require("applicationinsights");
appInsights.setup(process.env.APPLICATIONINSIGHTS_CONNECTION_STRING)
.setAutoCollectRequests(true)
.setAutoCollectPerformance(true)
.setAutoCollectExceptions(true)
.setAutoCollectDependencies(true)
.setAutoCollectConsole(true, true)
.start();
๐ก Place this at the very top of your entry file, before any other imports.
Azure Functions Integration
For .NET Isolated Worker:
var host = new HostBuilder()
.ConfigureFunctionsWorkerDefaults()
.ConfigureServices(services =>
{
services.AddApplicationInsightsTelemetryWorkerService();
services.ConfigureFunctionsApplicationInsights();
})
.Build();
Set the connection string in local.settings.json:
{
"Values": {
"APPLICATIONINSIGHTS_CONNECTION_STRING": "InstrumentationKey=..."
}
}
Sampling Configuration
Sampling reduces telemetry volume and cost without losing statistical accuracy:
builder.Services.AddApplicationInsightsTelemetry(options =>
{
options.ConnectionString = connectionString;
options.EnableAdaptiveSampling = true;
});
// Or configure sampling explicitly
builder.Services.Configure<TelemetryConfiguration>(telemetryConfig =>
{
var processorChainBuilder = telemetryConfig.DefaultTelemetrySink.TelemetryProcessorChainBuilder;
processorChainBuilder.UseAdaptiveSampling(maxTelemetryItemsPerSecond: 5);
processorChainBuilder.Build();
});
Best Practices
- Use connection strings โ Never hardcode them; use Key Vault or app settings
- Enable adaptive sampling โ Prevents cost overruns in high-traffic apps
- Set cloud role name โ Distinguishes services in Application Map
// CloudRoleNameInitializer is a custom class you must create
public class CloudRoleNameInitializer : ITelemetryInitializer
{
private readonly string _roleName;
public CloudRoleNameInitializer(string roleName) => _roleName = roleName;
public void Initialize(ITelemetry telemetry) => telemetry.Context.Cloud.RoleName = _roleName;
}
// Register in DI
services.AddApplicationInsightsTelemetry();
services.AddSingleton<ITelemetryInitializer>(new CloudRoleNameInitializer("OrderService"));
- Filter sensitive data โ Use telemetry initializers to redact PII
- Use Managed Identity โ For workspace-based Application Insights, authenticate with DefaultAzureCredential
- Monitor ingestion latency โ Typical delay is 2-5 minutes; don't expect real-time for log queries
Verifying Setup
After deployment, verify telemetry is flowing:
- Open Application Insights in the portal
- Check Live Metrics for real-time data
- Run a test request and confirm it appears in Transaction Search
- Check Failures blade for any SDK initialization errors
Key Takeaways
- Application Insights is the APM layer of Azure Monitor
- Connection strings are the modern authentication method
- Auto-instrumentation works for App Service without code changes
- SDK gives you full control over what telemetry is collected
- Sampling is essential for cost management in production