### Add Manual Setup Package
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/skills/applicationinsights-setup/references/console-setup.md
Install the Microsoft.ApplicationInsights NuGet package for manual telemetry configuration in console applications without the Generic Host.
```bash
dotnet add package Microsoft.ApplicationInsights --version 3.*
```
--------------------------------
### Install Application Insights Skill for GitHub Copilot
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/AGENTS.md
Copies the Application Insights setup skill to the .github/skills directory for GitHub Copilot to discover.
```bash
cp -r skills/applicationinsights-setup .github/skills/applicationinsights-setup
```
--------------------------------
### Install Application Insights Skill for Cursor
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/AGENTS.md
Copies the Application Insights setup skill to the .cursor/skills directory for Cursor to discover.
```bash
cp -r skills/applicationinsights-setup .cursor/skills/applicationinsights-setup
```
--------------------------------
### Install Application Insights Skill for Codex
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/AGENTS.md
Copies the Application Insights setup skill to the .agents/skills directory for Codex to discover.
```bash
cp -r skills/applicationinsights-setup .agents/skills/applicationinsights-setup
```
--------------------------------
### Install Application Insights Skill for Claude Code (Copy)
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/AGENTS.md
Copies the Application Insights setup skill to the .claude/skills directory for Claude Code to discover.
```bash
cp -r skills/applicationinsights-setup .claude/skills/applicationinsights-setup
```
--------------------------------
### SDK Version Examples
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/docs/versions_and_names.md
Provides concrete examples of valid SDK version strings, demonstrating the use of prefixes, SDK names, and semantic versions.
```text
r_dotnet:2.0.0-12345
dotnet:2.0.0-beta.1
```
--------------------------------
### Quick Install for Claude Code
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/Readme.md
Use this command to quickly install the Application Insights setup skill for Claude Code. After installation, you can ask your agent to add Application Insights to your app.
```bash
cp -r skills/applicationinsights-setup/ ~/.claude/skills/
```
--------------------------------
### ApplicationInsights.config: 2.x Configuration Example
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/WEB/Readme.md
Example of the ApplicationInsights.config file structure for version 2.x, including TelemetryInitializers and TelemetryModules.
```xml
...
```
--------------------------------
### Add SQL Client Instrumentation Package
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/skills/applicationinsights-setup/references/sql-client.md
Install the SQL client instrumentation package using the .NET CLI.
```bash
dotnet add package OpenTelemetry.Instrumentation.SqlClient
```
--------------------------------
### Install Application Insights Skill for Claude Code (Add Directory)
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/AGENTS.md
Adds the Application Insights setup skill directory to Claude's configuration without copying.
```bash
claude --add-dir /path/to/ApplicationInsights-dotnet/skills/applicationinsights-setup
```
--------------------------------
### Install Application Insights Web Package (.NET CLI)
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/WEB/Readme.md
Install the Microsoft.ApplicationInsights.Web NuGet package using the .NET CLI.
```bash
dotnet add package Microsoft.ApplicationInsights.Web
```
--------------------------------
### Minimal Application Insights Setup in Program.cs
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/skills/applicationinsights-setup/references/aspnetcore-greenfield.md
Configure Application Insights telemetry with minimal setup in the Program.cs file for a new ASP.NET Core application.
```csharp
using Microsoft.Extensions.DependencyInjection;
var builder = WebApplication.CreateBuilder(args);
// Add Application Insights telemetry
builder.Services.AddApplicationInsightsTelemetry();
builder.Services.AddControllers();
var app = builder.Build();
app.MapControllers();
app.Run();
```
--------------------------------
### Setup SQL Client Instrumentation in Non-DI Usage
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/skills/applicationinsights-setup/references/sql-client.md
For console applications or libraries not using Dependency Injection, configure SQL client instrumentation directly with TelemetryConfiguration. This example sets the connection string, adds SQL client instrumentation, and customizes options.
```csharp
using OpenTelemetry.Instrumentation.SqlClient;
var config = TelemetryConfiguration.CreateDefault();
config.ConnectionString = "InstrumentationKey=...;IngestionEndpoint=...";
config.ConfigureOpenTelemetryBuilder(otel =>
{
otel.WithTracing(t => t.AddSqlClientInstrumentation());
otel.Services.Configure(options =>
{
options.SetDbStatementForText = true;
options.RecordException = true;
});
});
```
--------------------------------
### Add Entity Framework Core Instrumentation Package
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/skills/applicationinsights-setup/references/entity-framework.md
Install the OpenTelemetry.Instrumentation.EntityFrameworkCore NuGet package using the .NET CLI.
```bash
dotnet add package OpenTelemetry.Instrumentation.EntityFrameworkCore
```
--------------------------------
### ApplicationInsights.config: 3.x Configuration Example
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/WEB/Readme.md
Example of the ApplicationInsights.config file structure for version 3.x, showing the use of ConnectionString and noting that TelemetryInitializers and TelemetryModules are no longer supported.
```xml
InstrumentationKey=...;IngestionEndpoint=https://...
```
--------------------------------
### Add HTTP Client Instrumentation Package
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/skills/applicationinsights-setup/references/http-instrumentation.md
Install the OpenTelemetry HTTP client instrumentation package using the .NET CLI.
```bash
dotnet add package OpenTelemetry.Instrumentation.Http
```
--------------------------------
### Create a Basic Activity
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/skills/applicationinsights-setup/references/custom-activities.md
Start a new activity using the ActivitySource. Ensure you use a 'using' statement to automatically dispose of the activity when it goes out of scope.
```csharp
using var activity = MyAppTracing.Source.StartActivity("ProcessOrder");
// ... do work ...
```
--------------------------------
### ILogger Setup in Application Insights 3.x
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/skills/applicationinsights-setup/references/ilogger-migration.md
Demonstrates the simplified logging setup in Application Insights 3.x, where logging is automatic. It also shows how to apply log level filtering using standard ILoggingBuilder.
```csharp
// No logging setup needed — it's automatic.
// ILogger output flows to Application Insights via OpenTelemetry.
// To filter log levels, use standard ILoggingBuilder:
builder.Logging.AddFilter("", LogLevel.Warning);
```
--------------------------------
### Basic Redis Instrumentation Setup with DI
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/skills/applicationinsights-setup/references/redis-cache.md
Register IConnectionMultiplexer and add Redis instrumentation to the OpenTelemetry tracer provider in a DI-enabled application.
```csharp
using OpenTelemetry.Instrumentation.StackExchangeRedis;
// Register IConnectionMultiplexer in DI
builder.Services.AddSingleton(
ConnectionMultiplexer.Connect("localhost:6379")));
// Add Redis instrumentation
builder.Services.ConfigureOpenTelemetryTracerProvider(tracing =>
tracing.AddRedisInstrumentation());
```
--------------------------------
### Add OTLP Exporter Package
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/skills/applicationinsights-setup/references/otlp-exporter.md
Install the OTLP exporter package using the .NET CLI.
```bash
dotnet add package OpenTelemetry.Exporter.OpenTelemetryProtocol
```
--------------------------------
### Before: ITelemetryInitializer in v2.x
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/skills/applicationinsights-setup/references/initializer-migration.md
Example of implementing ITelemetryInitializer in v2.x to enrich telemetry with global properties and cloud role name. Registration is done via dependency injection.
```csharp
using Microsoft.ApplicationInsights.Channel;
using Microsoft.ApplicationInsights.Extensibility;
public class MyInitializer : ITelemetryInitializer
{
public void Initialize(ITelemetry telemetry)
{
telemetry.Context.GlobalProperties["environment"] = "production";
telemetry.Context.Cloud.RoleName = "MyService";
}
}
// Registration:
services.AddSingleton();
```
--------------------------------
### After: BaseProcessor for Trace Enrichment in v3.x
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/skills/applicationinsights-setup/references/initializer-migration.md
Example of migrating to BaseProcessor in v3.x for trace enrichment. It demonstrates setting tags for environment and cloud role name using OpenTelemetry resource configuration.
```csharp
using System.Diagnostics;
using OpenTelemetry;
public class MyEnrichmentProcessor : BaseProcessor
{
public override void OnStart(Activity data)
{
data.SetTag("deployment.environment", "production");
}
}
// Registration:
builder.Services.ConfigureOpenTelemetryTracerProvider(tracing =>
tracing.AddProcessor());
```
--------------------------------
### Configure Application Insights 2.x
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/skills/applicationinsights-setup/references/code-migration.md
Example of configuring Application Insights 2.x using `InstrumentationKey` and `EnableAdaptiveSampling`.
```csharp
builder.Services.AddApplicationInsightsTelemetry(options =>
{
options.InstrumentationKey = "your-ikey"; // Removed
options.EnableAdaptiveSampling = false; // Removed
options.DeveloperMode = true; // Removed
});
```
--------------------------------
### Configure Application Insights 3.x
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/skills/applicationinsights-setup/references/code-migration.md
Example of configuring Application Insights 3.x using `ConnectionString` and `SamplingRatio`.
```csharp
builder.Services.AddApplicationInsightsTelemetry(options =>
{
options.ConnectionString = "InstrumentationKey=...;IngestionEndpoint=...";
options.SamplingRatio = 1.0f; // No sampling (collect everything)
// DeveloperMode — no replacement, remove the line
});
```
--------------------------------
### Add Application Insights Package
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/skills/applicationinsights-setup/references/aspnetcore-greenfield.md
Install the Application Insights ASP.NET Core package using the .NET CLI.
```bash
dotnet add package Microsoft.ApplicationInsights.AspNetCore
```
--------------------------------
### Create Default Telemetry Configuration
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/BASE/README.md
Create a default TelemetryConfiguration and set the connection string. This is the starting point for SDK configuration.
```csharp
var configuration = TelemetryConfiguration.CreateDefault();
configuration.ConnectionString = "InstrumentationKey=...;IngestionEndpoint=...";
```
--------------------------------
### Start and Stop ETW Trace Session with Logman
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/troubleshooting/ETW/Readme.md
Use Logman to start an ETW trace session named 'ai-channel' using a provider list file and then stop the session.
```bash
logman -start ai-channel -pf providers.txt -ets -bs 1024 -nb 100 256
logman -stop ai-channel -ets
```
--------------------------------
### ILogger Setup in Application Insights 2.x
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/skills/applicationinsights-setup/references/ilogger-migration.md
Shows the manual logger provider registration and configuration methods used in Application Insights 2.x. This setup is no longer required in version 3.x.
```csharp
// Manual logger provider registration (no longer needed)
builder.Logging.AddApplicationInsights();
// Or via configuration
builder.Logging.AddFilter("", LogLevel.Information);
```
--------------------------------
### Add Redis Instrumentation Package
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/skills/applicationinsights-setup/references/redis-cache.md
Install the OpenTelemetry StackExchangeRedis instrumentation package using the .NET CLI.
```bash
dotnet add package OpenTelemetry.Instrumentation.StackExchangeRedis
```
--------------------------------
### Application Insights Setup with Configuration Options
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/skills/applicationinsights-setup/references/aspnetcore-greenfield.md
Configure Application Insights telemetry with custom options, such as connection string and sampling rate, in Program.cs.
```csharp
using Microsoft.Extensions.DependencyInjection;
using Microsoft.ApplicationInsights.AspNetCore.Extensions;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddApplicationInsightsTelemetry(options =>
{
options.ConnectionString = builder.Configuration["ApplicationInsights:ConnectionString"];
// Rate-limited sampling (default is 5 traces/sec)
options.TracesPerSecond = 10.0;
});
builder.Services.AddControllers();
var app = builder.Build();
app.MapControllers();
app.Run();
```
--------------------------------
### BaseProcessor for Log Enrichment in v3.x
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/skills/applicationinsights-setup/references/initializer-migration.md
Example of implementing BaseProcessor in v3.x to enrich log records with custom attributes, such as deployment environment.
```csharp
public class LogEnrichmentProcessor : BaseProcessor
{
public override void OnEnd(LogRecord data)
{
// Example: add a custom attribute to all log records
var attributes = new List>(data.Attributes ?? [])
{
new("deployment.environment", "production")
};
data.Attributes = attributes;
}
}
```
--------------------------------
### Create Provider List for Logman
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/troubleshooting/ETW/Readme.md
Create a text file listing the GUIDs of Application Insights ETW providers to be collected by Logman.
```text
{4c4280fb-382a-56be-9a13-fab0d03395f6}
{74af9f20-af6a-5582-9382-f21f674fb271}
{a62adddb-6b4b-519d-7ba1-f983d81623e0}
```
--------------------------------
### Customize SQL Client Instrumentation
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/NETCORE/Readme.md
Enable SQL client instrumentation to record exceptions. Ensure the OpenTelemetry.Instrumentation.SqlClient package is installed.
```csharp
// Install: dotnet add package --prerelease OpenTelemetry.Instrumentation.SqlClient
using OpenTelemetry.Instrumentation.SqlClient;
builder.Services.AddApplicationInsightsTelemetry();
builder.Services.ConfigureOpenTelemetryTracerProvider((sp, builder) =>
{
builder.AddSqlClientInstrumentation(options =>
{
options.RecordException = true;
});
});
```
--------------------------------
### After: BaseProcessor with IHttpContextAccessor in v3.x
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/skills/applicationinsights-setup/references/initializer-migration.md
Example of migrating to BaseProcessor in v3.x to access HttpContext via IHttpContextAccessor for enriching telemetry with user ID and tenant ID.
```csharp
public sealed class UserTelemetryEnrichment : BaseProcessor
{
private readonly IHttpContextAccessor _httpContextAccessor;
public UserTelemetryEnrichment(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
public override void OnEnd(Activity data)
{
var httpContext = _httpContextAccessor.HttpContext;
if (httpContext is null)
{
return;
}
var userName = httpContext.User?.Identity?.Name;
if (!string.IsNullOrEmpty(userName))
{
data.SetTag("enduser.id", userName);
}
if (httpContext.Request.Headers.TryGetValue("X-Tenant-Id", out var tenantId))
{
data.SetTag("tenant.id", tenantId.ToString());
}
}
}
// Registration:
builder.Services.AddHttpContextAccessor();
builder.Services.ConfigureOpenTelemetryTracerProvider(tracing =>
tracing.AddProcessor());
```
--------------------------------
### Configure Application Insights with Generic Host
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/skills/applicationinsights-setup/references/console-setup.md
Configure Application Insights telemetry within the Generic Host setup in Program.cs using `AddApplicationInsightsTelemetryWorkerService`.
```csharp
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
var builder = Host.CreateApplicationBuilder(args);
builder.Services.AddApplicationInsightsTelemetryWorkerService();
builder.Services.AddHostedService();
var host = builder.Build();
await host.RunAsync();
```
--------------------------------
### Install Application Insights NuGet Package (.NET CLI)
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/BASE/README.md
Use this command with the .NET CLI to add the Microsoft.ApplicationInsights NuGet package to your project.
```bash
dotnet add package Microsoft.ApplicationInsights
```
--------------------------------
### Application Insights 3.x Configuration Example
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/BreakingChanges.md
This XML configuration file demonstrates the structure and available elements for configuring Application Insights in version 3.x. It replaces the older InstrumentationKey with ConnectionString and introduces new settings.
```xml
InstrumentationKey=your-key;IngestionEndpoint=https://...
false
1.0.0
1.0
5
C:\Logs
false
true
false
true
true
true
true
```
--------------------------------
### Enrich Log Records
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/skills/applicationinsights-setup/references/custom-processors.md
Implement a custom processor for log records to enrich them with additional attributes. This example adds a `deployment.environment` attribute to all log records processed.
```csharp
using OpenTelemetry;
using OpenTelemetry.Logs;
public class LogEnrichmentProcessor : BaseProcessor
{
public override void OnEnd(LogRecord data)
{
var attributes = new List>(data.Attributes ?? [])
{
new("deployment.environment", "production")
};
data.Attributes = attributes;
}
}
```
--------------------------------
### Configure SQL Client Options in ASP.NET Core
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/skills/applicationinsights-setup/references/sql-client.md
Customize SQL client instrumentation options using the DI options pattern in ASP.NET Core, Worker Service, or Web Application Insights projects. This example enables including SQL text and recording exceptions.
```csharp
using OpenTelemetry.Instrumentation.SqlClient;
builder.Services.Configure(options =>
{
options.SetDbStatementForText = true; // Include SQL text
options.RecordException = true; // Record exception details on spans
});
```
--------------------------------
### Customize ASP.NET Core Request Filtering
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/NETCORE/Readme.md
Configure ASP.NET Core instrumentation to filter telemetry based on HTTP methods. This example only collects telemetry for GET requests.
```csharp
using OpenTelemetry.Instrumentation.AspNetCore;
builder.Services.AddApplicationInsightsTelemetry();
builder.Services.Configure(options =>
{
options.RecordException = true;
options.Filter = (httpContext) =>
{
// Only collect telemetry about HTTP GET requests
return HttpMethods.IsGet(httpContext.Request.Method);
};
});
```
--------------------------------
### Configure HTTP Client Options
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/skills/applicationinsights-setup/references/http-instrumentation.md
Customize HttpClientTraceInstrumentationOptions to control telemetry collection for outgoing HTTP requests. This example filters for GET requests and enriches spans with a custom header.
```csharp
using OpenTelemetry.Instrumentation.Http;
using System.Net.Http;
builder.Services.Configure(options =>
{
options.RecordException = true;
options.FilterHttpRequestMessage = (httpRequestMessage) =>
{
// Only collect telemetry about HTTP GET requests
return httpRequestMessage.Method == HttpMethod.Get;
};
options.EnrichWithHttpRequestMessage = (activity, httpRequestMessage) =>
{
if (httpRequestMessage.Headers.TryGetValues("x-request-id", out var values))
{
activity.SetTag("http.request.header.x-request-id", values.FirstOrDefault());
}
};
});
```
--------------------------------
### Customize HTTP Client Request Filtering
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/NETCORE/Readme.md
Configure HTTP client instrumentation to filter telemetry based on HTTP request methods. This example only collects telemetry for GET requests.
```csharp
using OpenTelemetry.Instrumentation.Http;
builder.Services.AddApplicationInsightsTelemetry();
builder.Services.Configure(options =>
{
options.RecordException = true;
options.FilterHttpRequestMessage = (httpRequestMessage) =>
{
// Only collect telemetry about HTTP GET requests
return HttpMethods.IsGet(httpRequestMessage.Method.Method);
};
});
```
--------------------------------
### Install Application Insights NuGet Package (Package Manager Console)
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/BASE/README.md
Use this command in the Package Manager Console to install the Microsoft.ApplicationInsights NuGet package.
```powershell
Install-Package Microsoft.ApplicationInsights
```
--------------------------------
### SDK Version String Format
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/docs/versions_and_names.md
Illustrates the structure of the SDK version string, including optional prefix, SDK name, and semantic version.
```text
[PREFIX_]SDKNAME:SEMVER
```
--------------------------------
### DI Scenario After (3.x)
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/skills/applicationinsights-setup/references/aad-authentication-migration.md
In 3.x, the preferred DI approach is to set the credential directly in the AddApplicationInsightsTelemetry options.
```csharp
using Microsoft.Extensions.DependencyInjection;
using Microsoft.ApplicationInsights.AspNetCore.Extensions;
using Azure.Identity;
builder.Services.AddApplicationInsightsTelemetry(options =>
{
options.ConnectionString = "InstrumentationKey=...;IngestionEndpoint=...";
options.Credential = new DefaultAzureCredential();
});
```
--------------------------------
### Install Application Insights NuGet Package
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/skills/applicationinsights-setup/references/aspnet-classic-greenfield.md
Use this command in the Package Manager Console to install the necessary Application Insights NuGet package for ASP.NET Classic projects.
```powershell
Install-Package Microsoft.ApplicationInsights.Web
```
--------------------------------
### Provide Dummy Connection String for Testing
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/BreakingChanges.md
In 3.x, a connection string is required. For test scenarios, a dummy string can be provided to avoid exceptions.
```csharp
InstrumentationKey=00000000-0000-0000-0000-000000000000
```
--------------------------------
### Initialize TelemetryClient in Global.asax.cs
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/WEB/Readme.md
This C# code demonstrates the recommended pattern for initializing a single TelemetryClient instance at application startup and reusing it throughout the application's lifetime. It ensures proper configuration loading and sets global properties.
```csharp
using Microsoft.ApplicationInsights;
using Microsoft.ApplicationInsights.Extensibility;
public class MvcApplication : System.Web.HttpApplication
{
public static TelemetryClient TelemetryClient { get; private set; }
protected void Application_Start()
{
// CreateDefault() loads configuration from ApplicationInsights.config
var configuration = TelemetryConfiguration.CreateDefault();
// Create TelemetryClient once at application startup
TelemetryClient = new TelemetryClient(configuration);
// Optionally set properties that apply to all telemetry
TelemetryClient.Context.GlobalProperties["Environment"] = "Production";
// Your other startup code
AreaRegistration.RegisterAllAreas();
RouteConfig.RegisterRoutes(RouteTable.Routes);
}
protected void Application_End()
{
// Flush telemetry before application shutdown
TelemetryClient.Flush();
System.Threading.Tasks.Task.Delay(1000).Wait();
}
}
```
--------------------------------
### Configure Application Insights with Host.CreateApplicationBuilder
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/skills/applicationinsights-setup/references/workerservice-greenfield.md
Integrate Application Insights telemetry into a Worker Service using the modern `Host.CreateApplicationBuilder` pattern in `Program.cs`.
```csharp
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
var builder = Host.CreateApplicationBuilder(args);
builder.Services.AddApplicationInsightsTelemetryWorkerService();
builder.Services.AddHostedService();
var host = builder.Build();
await host.RunAsync();
```
--------------------------------
### Configure Resource with Service Info
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/skills/applicationinsights-setup/references/opentelemetry-pipeline.md
Configure the OpenTelemetry tracer provider to set resource attributes, including service name, version, and instance ID, using Dependency Injection.
```csharp
builder.Services.ConfigureOpenTelemetryTracerProvider(tracing =>
tracing.ConfigureResource(r => r
.AddService(
serviceName: "MyService",
serviceVersion: "1.0.0",
serviceInstanceId: Environment.MachineName)));
```
--------------------------------
### Create TelemetryClient using TelemetryConfiguration
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/MigrationGuidance.md
Instantiate a TelemetryClient by passing a configured TelemetryConfiguration object. Removed constructors are no longer supported.
```csharp
var config = TelemetryConfiguration.CreateDefault();
config.ConnectionString = "InstrumentationKey=00000000-0000-0000-0000-000000000000;IngestionEndpoint=https://...";
var client = new TelemetryClient(config);
```
--------------------------------
### Install Application Insights Worker Service NuGet Package
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/NETCORE/WorkerService.md
Use the .NET CLI to add the Microsoft.ApplicationInsights.WorkerService NuGet package to your project.
```dotnetcli
dotnet add package Microsoft.ApplicationInsights.WorkerService
```
--------------------------------
### 2.x Custom Telemetry Processor (HealthCheckFilter)
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/skills/applicationinsights-setup/references/processor-migration.md
Example of a custom ITelemetryProcessor in Application Insights 2.x used to filter out health check requests.
```csharp
using Microsoft.ApplicationInsights.Channel;
using Microsoft.ApplicationInsights.Extensibility;
public class HealthCheckFilter : ITelemetryProcessor
{
private readonly ITelemetryProcessor _next;
public HealthCheckFilter(ITelemetryProcessor next)
{
_next = next;
}
public void Process(ITelemetry item)
{
if (item is RequestTelemetry request && request.Url.AbsolutePath == "/health")
{
return; // Drop health check requests
}
_next.Process(item);
}
}
// Registration:
services.AddApplicationInsightsTelemetryProcessor();
```
--------------------------------
### Configure HTTP Client Options via DI
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/skills/applicationinsights-setup/references/opentelemetry-pipeline.md
Configure HTTP Client tracing instrumentation options when using Dependency Injection. Enables recording exceptions for HTTP requests.
```csharp
builder.Services.Configure(options =>
{
options.RecordException = true;
});
```
--------------------------------
### Non-DI Redis Instrumentation Setup
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/skills/applicationinsights-setup/references/redis-cache.md
Manually configure Redis instrumentation for applications not using Dependency Injection, by passing the IConnectionMultiplexer explicitly.
```csharp
var connection = ConnectionMultiplexer.Connect("localhost:6379");
var config = TelemetryConfiguration.CreateDefault();
config.ConnectionString = "InstrumentationKey=...;IngestionEndpoint=...";
config.ConfigureOpenTelemetryBuilder(otel =>
otel.WithTracing(t => t.AddRedisInstrumentation(connection)));
```
--------------------------------
### Configure Telemetry Sampling and Storage
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/BASE/README.md
Configure TelemetryConfiguration with sampling ratios or traces per second, and specify settings for offline storage. Choose either SamplingRatio or TracesPerSecond, not both.
```csharp
var configuration = TelemetryConfiguration.CreateDefault();
configuration.ConnectionString = "InstrumentationKey=...;IngestionEndpoint=...";
// Sampling: Choose ONE of these approaches
configuration.SamplingRatio = 0.5f; // Keep 50% of telemetry
// configuration.TracesPerSecond = 5.0; // OR: Keep max 5 traces/second
// Offline storage
configuration.StorageDirectory = @"C:\AppData\MyApp\Telemetry";
configuration.DisableOfflineStorage = false;
// Features
configuration.EnableLiveMetrics = true;
configuration.EnableTraceBasedLogsSampler = true;
```
--------------------------------
### Add Console Exporter
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/NETCORE/Readme.md
Add an additional exporter, such as the console exporter, to send data to multiple services. Ensure the OpenTelemetry.Exporter.Console package is installed.
```csharp
// Install: dotnet add package OpenTelemetry.Exporter.Console
builder.Services.AddApplicationInsightsTelemetry();
builder.Services.ConfigureOpenTelemetryTracerProvider((sp, builder) =>
{
builder.AddConsoleExporter();
});
```
--------------------------------
### Add gRPC Client Instrumentation
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/NETCORE/Readme.md
Add additional instrumentation for gRPC client calls by installing the OpenTelemetry.Instrumentation.GrpcNetClient package and configuring the Tracer Provider.
```csharp
// Install: dotnet add package OpenTelemetry.Instrumentation.GrpcNetClient
builder.Services.AddApplicationInsightsTelemetry();
builder.Services.ConfigureOpenTelemetryTracerProvider((sp, builder) =>
{
builder.AddGrpcClientInstrumentation();
});
```
--------------------------------
### Configure ASP.NET Core Server Options via DI
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/skills/applicationinsights-setup/references/opentelemetry-pipeline.md
Configure ASP.NET Core server tracing instrumentation options when using Dependency Injection. Enables recording exceptions for incoming requests.
```csharp
builder.Services.Configure(options =>
{
options.RecordException = true;
});
```
--------------------------------
### 3.x Custom Log Enrichment Processor
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/skills/applicationinsights-setup/references/processor-migration.md
Example of a custom BaseProcessor in Application Insights 3.x for enriching log records with custom attributes.
```csharp
public class LogEnrichmentProcessor : BaseProcessor
{
public override void OnEnd(LogRecord data)
{
var attributes = new List>(data.Attributes ?? [])
{
new("deployment.environment", "production")
};
data.Attributes = attributes;
}
}
// Registration (DI):
builder.Services.ConfigureOpenTelemetryLoggerProvider(logging =>
logging.AddProcessor());
// Registration (Non-DI):
config.ConfigureOpenTelemetryBuilder(otel =>
otel.WithLogging(l => l.AddProcessor()));
```
--------------------------------
### Configure Azure AD Authentication in Global.asax.cs
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/WEB/Src/Web/README.md
Set up Azure Active Directory authentication in your web application's Global.asax.cs file. This requires the `Azure.Identity` NuGet package.
```csharp
using Microsoft.ApplicationInsights.Extensibility;
using Azure.Identity;
public class Global : HttpApplication
{
void Application_Start(object sender, EventArgs e)
{
var telemetryConfig = TelemetryConfiguration.CreateDefault();
telemetryConfig.ConnectionString = "InstrumentationKey=YOUR_IKEY;IngestionEndpoint=https://ingestion-endpoint.applicationinsights.azure.com/";
telemetryConfig.SetAzureTokenCredential(new DefaultAzureCredential());
}
}
```
--------------------------------
### Configure Sampling via Environment Variables (3.x)
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/skills/applicationinsights-setup/references/sampling-migration.md
Set Application Insights sampling using environment variables. Use `OTEL_TRACES_SAMPLER` and `OTEL_TRACES_SAMPLER_ARG` for rate-limited or fixed-percentage sampling.
```bash
# Rate-limited:
OTEL_TRACES_SAMPLER=microsoft.rate_limited
OTEL_TRACES_SAMPLER_ARG=10
```
```bash
# Fixed percentage:
OTEL_TRACES_SAMPLER=microsoft.fixed_percentage
OTEL_TRACES_SAMPLER_ARG=0.5
```
--------------------------------
### Create Default TelemetryConfiguration
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/MigrationGuidance.md
Use TelemetryConfiguration.CreateDefault() for creating a telemetry configuration in v3.x. This is the recommended approach.
```csharp
TelemetryConfiguration.CreateDefault()
```
--------------------------------
### 3.x Non-DI Registration for TelemetryConfiguration
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/skills/applicationinsights-setup/references/processor-migration.md
Example of registering a custom processor using TelemetryConfiguration directly for console or classic ASP.NET applications in Application Insights 3.x.
```csharp
var config = TelemetryConfiguration.CreateDefault();
config.ConnectionString = "InstrumentationKey=...;IngestionEndpoint=...";
config.ConfigureOpenTelemetryBuilder(otel =>
otel.WithTracing(t => t.AddProcessor()));
```
--------------------------------
### Enable Application Insights with Configuration
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/NETCORE/Readme.md
Integrate Application Insights by passing the IConfiguration to AddApplicationInsightsTelemetry(), with the connection string defined in appsettings.json.
```csharp
var builder = WebApplication.CreateBuilder(args);
// Add Application Insights telemetry from configuration
builder.Services.AddApplicationInsightsTelemetry(builder.Configuration);
// Add other services for your application
builder.Services.AddMvc();
var app = builder.Build();
```
--------------------------------
### Configure OpenTelemetry Integration
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/BASE/README.md
Extend the SDK using OpenTelemetry's builder pattern to add custom ActivitySources or processors. Avoid setting an OpenTelemetry Sampler directly via builder.SetSampler().
```csharp
configuration.ConfigureOpenTelemetryBuilder(builder =>
{
// Add custom ActivitySources (explained below)
builder.WithTracing(tracing => tracing.AddSource("MyApp.*"));
// Add processors
builder.WithTracing(tracing => tracing.AddProcessor());
});
```
--------------------------------
### Enable ETW Provider
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/troubleshooting/ETW/Readme.md
This code snippet demonstrates how to enable an ETW provider by its name using the TraceEventSession class. This is useful for looking up provider GUIDs at runtime.
```csharp
var session = new TraceEventSession("test");
session.EnableProvider(providerName: "Microsoft-ApplicationInsights-Core");
```
--------------------------------
### Configure OpenTelemetry Resource in DI
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/MigrationGuidance.md
Configure the OpenTelemetry Resource via the OpenTelemetry builder in Dependency Injection scenarios. This is necessary because the SDK builds the OpenTelemetry SDK before user code runs, preventing Context.Cloud setters from influencing the Resource in time.
```csharp
builder.Services.ConfigureOpenTelemetryTracerProvider((sp, tracerBuilder) =>
{
tracerBuilder.ConfigureResource(r => r
.AddService(
serviceName: "MyRoleName", // Maps to Cloud.RoleName
serviceInstanceId: Environment.MachineName, // Maps to Cloud.RoleInstance
serviceVersion: "1.0.0") // Maps to Component.Version
);
});
builder.Services.ConfigureOpenTelemetryLoggerProvider((sp, loggerBuilder) =>
{
loggerBuilder.ConfigureResource(r => r
.AddService(
serviceName: "MyRoleName", // Maps to Cloud.RoleName
serviceInstanceId: Environment.MachineName, // Maps to Cloud.RoleInstance
serviceVersion: "1.0.0") // Maps to Component.Version
);
});
```
--------------------------------
### Registering TelemetryConfiguration and TelemetryClient
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/BASE/README.md
Register TelemetryConfiguration and TelemetryClient as singletons within the service collection. Ensure your connection string is correctly configured.
```csharp
using Microsoft.ApplicationInsights;
using Microsoft.ApplicationInsights.Extensibility;
using Microsoft.Extensions.DependencyInjection;
var services = new ServiceCollection();
// Register TelemetryConfiguration
services.AddSingleton(sp =>
{
var config = TelemetryConfiguration.CreateDefault();
config.ConnectionString = "InstrumentationKey=...;IngestionEndpoint=...";
return config;
});
// Register TelemetryClient
services.AddSingleton(sp =>
{
var config = sp.GetRequiredService();
return new TelemetryClient(config);
});
// Inject into your services
public class OrderService
{
private readonly TelemetryClient _telemetryClient;
public OrderService(TelemetryClient telemetryClient)
{
_telemetryClient = telemetryClient;
}
public void ProcessOrder(string orderId)
{
_telemetryClient.TrackEvent("OrderProcessed", new Dictionary
{
{ "OrderId", orderId }
});
}
}
```
--------------------------------
### 3.x Custom Telemetry Processor (HealthCheckFilterProcessor)
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/skills/applicationinsights-setup/references/processor-migration.md
Example of a custom BaseProcessor in Application Insights 3.x for filtering health check requests by dropping them using the Recorded flag.
```csharp
using System.Diagnostics;
using OpenTelemetry;
public class HealthCheckFilterProcessor : BaseProcessor
{
private static readonly HashSet SuppressedPaths = new(StringComparer.OrdinalIgnoreCase)
{
"/health", "/ready", "/healthz", "/liveness"
};
public override void OnEnd(Activity data)
{
var path = data.GetTagItem("url.path")?.ToString()
?? data.GetTagItem("http.route")?.ToString();
if (path != null && SuppressedPaths.Contains(path))
{
data.ActivityTraceFlags &= ~ActivityTraceFlags.Recorded;
}
}
}
// Registration:
builder.Services.ConfigureOpenTelemetryTracerProvider(tracing =>
tracing.AddProcessor());
```
--------------------------------
### Custom Log Processor for Enrichment
Source: https://github.com/microsoft/applicationinsights-dotnet/blob/main/docs/concepts.md
Implement a custom Log Processor to enrich log-based telemetry, such as exceptions, traces, and custom events. This example adds an 'app.environment' attribute.
```csharp
using OpenTelemetry;
using OpenTelemetry.Logs;
public class CustomLogProcessor : BaseProcessor
{
public override void OnEnd(LogRecord logRecord)
{
var attributes = new List>
{
new("app.environment", "Production"),
};
if (logRecord.Attributes != null)
{
attributes.AddRange(logRecord.Attributes);
}
logRecord.Attributes = attributes;
}
}
```