Azure.ResourceManager.ApplicationInsights (.NET)
Azure Resource Manager SDK for managing Application Insights resources for application performance monitoring.
Installation
bash
dotnet add package Azure.ResourceManager.ApplicationInsightsdotnet add package Azure.IdentityCurrent Version: v1.0.0 (GA)
API Version: 2022-06-15
Environment Variables
bash
AZURE_SUBSCRIPTION_ID=<your-subscription-id> # Required: Azure subscription IDAZURE_RESOURCE_GROUP=<your-resource-group> # Required: Azure resource group nameAZURE_APPINSIGHTS_NAME=<your-appinsights-component> # Required: Application Insights component nameAZURE_TOKEN_CREDENTIALS=prod # Required only if DefaultAzureCredential is used in productionAuthentication
csharp
using Azure.Identity;using Azure.ResourceManager;using Azure.ResourceManager.ApplicationInsights;
// Local dev: DefaultAzureCredential. Production: set AZURE_TOKEN_CREDENTIALS=prod or AZURE_TOKEN_CREDENTIALS=<specific_credential>var credential = new DefaultAzureCredential( DefaultAzureCredential.DefaultEnvironmentVariableName);// Or use a specific credential directly in production:// See https://learn.microsoft.com/dotnet/api/overview/azure/identity-readme?view=azure-dotnet#credential-classes// var credential = new ManagedIdentityCredential();ArmClient client = new ArmClient(credential);Resource Hierarchy
Subscription└── ResourceGroup └── ApplicationInsightsComponent # App Insights resource ├── ApplicationInsightsComponentApiKey # API keys for programmatic access ├── ComponentLinkedStorageAccount # Linked storage for data export └── (via component ID) ├── WebTest # Availability tests ├── Workbook # Workbooks for analysis ├── WorkbookTemplate # Workbook templates └── MyWorkbook # Private workbooksCore Workflows
1. Create Application Insights Component (Workspace-based)
csharp
using Azure.ResourceManager.ApplicationInsights;using Azure.ResourceManager.ApplicationInsights.Models;
ResourceGroupResource resourceGroup = await client .GetDefaultSubscriptionAsync() .Result .GetResourceGroupAsync("my-resource-group");
ApplicationInsightsComponentCollection components = resourceGroup.GetApplicationInsightsComponents();
// Workspace-based Application Insights (recommended)ApplicationInsightsComponentData data = new ApplicationInsightsComponentData( AzureLocation.EastUS, ApplicationInsightsApplicationType.Web){ Kind = "web", WorkspaceResourceId = new ResourceIdentifier( "/subscriptions/<sub-id>/resourceGroups/<rg>/providers/Microsoft.OperationalInsights/workspaces/<workspace-name>"), IngestionMode = IngestionMode.LogAnalytics, PublicNetworkAccessForIngestion = PublicNetworkAccessType.Enabled, PublicNetworkAccessForQuery = PublicNetworkAccessType.Enabled, RetentionInDays = 90, SamplingPercentage = 100, DisableIPMasking = false, ImmediatePurgeDataOn30Days = false, Tags = { { "environment", "production" }, { "application", "mywebapp" } }};
ArmOperation<ApplicationInsightsComponentResource> operation = await components .CreateOrUpdateAsync(WaitUntil.Completed, "my-appinsights", data);
ApplicationInsightsComponentResource component = operation.Value;
Console.WriteLine($"Component created: {component.Data.Name}");Console.WriteLine($"Instrumentation Key: {component.Data.InstrumentationKey}");Console.WriteLine($"Connection String: {component.Data.ConnectionString}");2. Get Connection String and Keys
csharp
ApplicationInsightsComponentResource component = await resourceGroup .GetApplicationInsightsComponentAsync("my-appinsights");
// Get connection string for SDK configurationstring connectionString = component.Data.ConnectionString;string instrumentationKey = component.Data.InstrumentationKey;string appId = component.Data.AppId;
Console.WriteLine($"Connection String: {connectionString}");Console.WriteLine($"Instrumentation Key: {instrumentationKey}");Console.WriteLine($"App ID: {appId}");3. Create API Key
csharp
ApplicationInsightsComponentResource component = await resourceGroup .GetApplicationInsightsComponentAsync("my-appinsights");
ApplicationInsightsComponentApiKeyCollection apiKeys = component.GetApplicationInsightsComponentApiKeys();
// API key for reading telemetryApplicationInsightsApiKeyContent keyContent = new ApplicationInsightsApiKeyContent{ Name = "ReadTelemetryKey", LinkedReadProperties = { $"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/microsoft.insights/components/{component.Data.Name}/api", $"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/microsoft.insights/components/{component.Data.Name}/agentconfig" }};
ApplicationInsightsComponentApiKeyResource apiKey = await apiKeys .CreateOrUpdateAsync(WaitUntil.Completed, keyContent);
Console.WriteLine($"API Key Name: {apiKey.Data.Name}");Console.WriteLine($"API Key: {apiKey.Data.ApiKey}"); // Only shown once!4. Create Web Test (Availability Test)
csharp
WebTestCollection webTests = resourceGroup.GetWebTests();
// URL Ping TestWebTestData urlPingTest = new WebTestData(AzureLocation.EastUS){ Kind = WebTestKind.Ping, SyntheticMonitorId = "webtest-ping-myapp", WebTestName = "Homepage Availability", Description = "Checks if homepage is available", IsEnabled = true, Frequency = 300, // 5 minutes Timeout = 120, // 2 minutes WebTestKind = WebTestKind.Ping, IsRetryEnabled = true, Locations = { new WebTestGeolocation { WebTestLocationId = "us-ca-sjc-azr" }, // West US new WebTestGeolocation { WebTestLocationId = "us-tx-sn1-azr" }, // South Central US new WebTestGeolocation { WebTestLocationId = "us-il-ch1-azr" }, // North Central US new WebTestGeolocation { WebTestLocationId = "emea-gb-db3-azr" }, // UK South new WebTestGeolocation { WebTestLocationId = "apac-sg-sin-azr" } // Southeast Asia }, Configuration = new WebTestConfiguration { WebTest = """ <WebTest Name="Homepage" Enabled="True" Timeout="120" xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010"> <Items> <Request Method="GET" Version="1.1" Url="https://myapp.example.com" ThinkTime="0" Timeout="120" ParseDependentRequests="False" FollowRedirects="True" RecordResult="True" Cache="False" ResponseTimeGoal="0" Encoding="utf-8" ExpectedHttpStatusCode="200" /> </Items> </WebTest> """ }, Tags = { { $"hidden-link:/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/microsoft.insights/components/my-appinsights", "Resource" } }};
ArmOperation<WebTestResource> operation = await webTests .CreateOrUpdateAsync(WaitUntil.Completed, "webtest-homepage", urlPingTest);
WebTestResource webTest = operation.Value;Console.WriteLine($"Web test created: {webTest.Data.Name}");5. Create Multi-Step Web Test
csharp
WebTestData multiStepTest = new WebTestData(AzureLocation.EastUS){ Kind = WebTestKind.MultiStep, SyntheticMonitorId = "webtest-multistep-login", WebTestName = "Login Flow Test", Description = "Tests login functionality", IsEnabled = true, Frequency = 900, // 15 minutes Timeout = 300, // 5 minutes WebTestKind = WebTestKind.MultiStep, IsRetryEnabled = true, Locations = { new WebTestGeolocation { WebTestLocationId = "us-ca-sjc-azr" } }, Configuration = new WebTestConfiguration { WebTest = """ <WebTest Name="LoginFlow" Enabled="True" Timeout="300" xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010"> <Items> <Request Method="GET" Version="1.1" Url="https://myapp.example.com/login" ThinkTime="0" Timeout="60" /> <Request Method="POST" Version="1.1" Url="https://myapp.example.com/api/auth" ThinkTime="0" Timeout="60"> <Headers> <Header Name="Content-Type" Value="application/json" /> </Headers> <Body>{"username":"testuser","password":"{{TestPassword}}"}</Body> </Request> </Items> </WebTest> """ }, Tags = { { $"hidden-link:/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/microsoft.insights/components/my-appinsights", "Resource" } }};
await webTests.CreateOrUpdateAsync(WaitUntil.Completed, "webtest-login-flow", multiStepTest);6. Create Workbook
csharp
WorkbookCollection workbooks = resourceGroup.GetWorkbooks();
WorkbookData workbookData = new WorkbookData(AzureLocation.EastUS){ DisplayName = "Application Performance Dashboard", Category = "workbook", Kind = WorkbookSharedTypeKind.Shared, SerializedData = """ { "version": "Notebook/1.0", "items": [ { "type": 1, "content": { "json": "# Application Performance\n\nThis workbook shows application performance metrics." }, "name": "header" }, { "type": 3, "content": { "version": "KqlItem/1.0", "query": "requests\n| summarize count() by bin(timestamp, 1h)\n| render timechart", "size": 0, "title": "Requests per Hour", "timeContext": { "durationMs": 86400000 }, "queryType": 0, "resourceType": "microsoft.insights/components" }, "name": "requestsChart" } ], "isLocked": false } """, SourceId = component.Id, Tags = { { "environment", "production" } }};
// Note: Workbook ID should be a new GUIDstring workbookId = Guid.NewGuid().ToString();
ArmOperation<WorkbookResource> operation = await workbooks .CreateOrUpdateAsync(WaitUntil.Completed, workbookId, workbookData);
WorkbookResource workbook = operation.Value;Console.WriteLine($"Workbook created: {workbook.Data.DisplayName}");7. Link Storage Account
csharp
ApplicationInsightsComponentResource component = await resourceGroup .GetApplicationInsightsComponentAsync("my-appinsights");
ComponentLinkedStorageAccountCollection linkedStorage = component.GetComponentLinkedStorageAccounts();
ComponentLinkedStorageAccountData storageData = new ComponentLinkedStorageAccountData{ LinkedStorageAccount = new ResourceIdentifier( "/subscriptions/<sub-id>/resourceGroups/<rg>/providers/Microsoft.Storage/storageAccounts/<storage-account>")};
ArmOperation<ComponentLinkedStorageAccountResource> operation = await linkedStorage .CreateOrUpdateAsync(WaitUntil.Completed, StorageType.ServiceProfiler, storageData);8. List and Manage Components
csharp
// List all Application Insights components in resource groupawait foreach (ApplicationInsightsComponentResource component in resourceGroup.GetApplicationInsightsComponents()){ Console.WriteLine($"Component: {component.Data.Name}"); Console.WriteLine($" App ID: {component.Data.AppId}"); Console.WriteLine($" Type: {component.Data.ApplicationType}"); Console.WriteLine($" Ingestion Mode: {component.Data.IngestionMode}"); Console.WriteLine($" Retention: {component.Data.RetentionInDays} days");}
// List web testsawait foreach (WebTestResource webTest in resourceGroup.GetWebTests()){ Console.WriteLine($"Web Test: {webTest.Data.WebTestName}"); Console.WriteLine($" Enabled: {webTest.Data.IsEnabled}"); Console.WriteLine($" Frequency: {webTest.Data.Frequency}s");}
// List workbooksawait foreach (WorkbookResource workbook in resourceGroup.GetWorkbooks()){ Console.WriteLine($"Workbook: {workbook.Data.DisplayName}");}9. Update Component
csharp
ApplicationInsightsComponentResource component = await resourceGroup .GetApplicationInsightsComponentAsync("my-appinsights");
// Update using full data (PUT operation)ApplicationInsightsComponentData updateData = component.Data;updateData.RetentionInDays = 180;updateData.SamplingPercentage = 50;updateData.Tags["updated"] = "true";
ArmOperation<ApplicationInsightsComponentResource> operation = await resourceGroup .GetApplicationInsightsComponents() .CreateOrUpdateAsync(WaitUntil.Completed, "my-appinsights", updateData);10. Delete Resources
csharp
// Delete Application Insights componentApplicationInsightsComponentResource component = await resourceGroup .GetApplicationInsightsComponentAsync("my-appinsights");await component.DeleteAsync(WaitUntil.Completed);
// Delete web testWebTestResource webTest = await resourceGroup.GetWebTestAsync("webtest-homepage");await webTest.DeleteAsync(WaitUntil.Completed);Key Types Reference
| Type | Purpose |
|---|---|
ApplicationInsightsComponentResource | App Insights component |
ApplicationInsightsComponentData | Component configuration |
ApplicationInsightsComponentCollection | Collection of components |
ApplicationInsightsComponentApiKeyResource | API key for programmatic access |
WebTestResource | Availability/web test |
WebTestData | Web test configuration |
WorkbookResource | Analysis workbook |
WorkbookData | Workbook configuration |
ComponentLinkedStorageAccountResource | Linked storage for exports |
Application Types
| Type | Enum Value |
|---|---|
| Web Application | Web |
| iOS Application | iOS |
| Java Application | Java |
| Node.js Application | NodeJS |
| .NET Application | MRT |
| Other | Other |
Web Test Locations
| Location ID | Region |
|---|---|
us-ca-sjc-azr | West US |
us-tx-sn1-azr | South Central US |
us-il-ch1-azr | North Central US |
us-va-ash-azr | East US |
emea-gb-db3-azr | UK South |
emea-nl-ams-azr | West Europe |
emea-fr-pra-edge | France Central |
apac-sg-sin-azr | Southeast Asia |
apac-hk-hkn-azr | East Asia |
apac-jp-kaw-edge | Japan East |
latam-br-gru-edge | Brazil South |
emea-au-syd-edge | Australia East |
Best Practices
- Use workspace-based — Workspace-based App Insights is the current standard
- Link to Log Analytics — Store data in Log Analytics for better querying
- Set appropriate retention — Balance cost vs. data availability
- Use sampling — Reduce costs for high-volume applications
- Store connection string securely — Use Key Vault or managed identity
- Enable multiple test locations — For accurate availability monitoring
- Use workbooks — For custom dashboards and analysis
- Set up alerts — Based on availability tests and metrics
- Tag resources — For cost allocation and organization
- Use private endpoints — For secure data ingestion
Error Handling
csharp
using Azure;
try{ ArmOperation<ApplicationInsightsComponentResource> operation = await components .CreateOrUpdateAsync(WaitUntil.Completed, "my-appinsights", data);}catch (RequestFailedException ex) when (ex.Status == 409){ Console.WriteLine("Component already exists");}catch (RequestFailedException ex) when (ex.Status == 400){ Console.WriteLine($"Invalid configuration: {ex.Message}");}catch (RequestFailedException ex){ Console.WriteLine($"Azure error: {ex.Status} - {ex.Message}");}SDK Integration
Use the connection string with Application Insights SDK:
csharp
// Program.cs in ASP.NET Corebuilder.Services.AddApplicationInsightsTelemetry(options =>{ options.ConnectionString = configuration["ApplicationInsights:ConnectionString"];});
// Or set via environment variable// APPLICATIONINSIGHTS_CONNECTION_STRING=InstrumentationKey=...;IngestionEndpoint=...Related SDKs
| SDK | Purpose | Install |
|---|---|---|
Azure.ResourceManager.ApplicationInsights | Resource management (this SDK) | dotnet add package Azure.ResourceManager.ApplicationInsights |
Microsoft.ApplicationInsights | Telemetry SDK | dotnet add package Microsoft.ApplicationInsights |
Microsoft.ApplicationInsights.AspNetCore | ASP.NET Core integration | dotnet add package Microsoft.ApplicationInsights.AspNetCore |
Azure.Monitor.OpenTelemetry.Exporter | OpenTelemetry export | dotnet add package Azure.Monitor.OpenTelemetry.Exporter |


