Azure.ResourceManager.ApplicationInsights (.NET)
Azure Resource Manager SDK for managing Application Insights resources for application performance monitoring.
Installation
dotnet add package Azure.ResourceManager.ApplicationInsights dotnet add package Azure.Identity
Current Version: v1.0.0 (GA)
API Version: 2022-06-15
Environment Variables
AZURE_SUBSCRIPTION_ID=<your-subscription-id> AZURE_RESOURCE_GROUP=<your-resource-group> AZURE_APPINSIGHTS_NAME=<your-appinsights-component>
Authentication
using Azure.Identity; using Azure.ResourceManager; using Azure.ResourceManager.ApplicationInsights;
ArmClient client = new ArmClient(new DefaultAzureCredential());
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 workbooks
Core Workflows
- Create Application Insights Component (Workspace-based)
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}");
- Get Connection String and Keys
ApplicationInsightsComponentResource component = await resourceGroup .GetApplicationInsightsComponentAsync("my-appinsights");
// Get connection string for SDK configuration string 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}");
- Create API Key
ApplicationInsightsComponentResource component = await resourceGroup .GetApplicationInsightsComponentAsync("my-appinsights");
ApplicationInsightsComponentApiKeyCollection apiKeys = component.GetApplicationInsightsComponentApiKeys();
// API key for reading telemetry ApplicationInsightsApiKeyContent 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!
- Create Web Test (Availability Test)
WebTestCollection webTests = resourceGroup.GetWebTests();
// URL Ping Test WebTestData 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}");
- Create Multi-Step Web Test
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);
- Create Workbook
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 GUID string 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}");
- Link Storage Account
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);
- List and Manage Components
// List all Application Insights components in resource group await 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 tests await 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 workbooks await foreach (WorkbookResource workbook in resourceGroup.GetWorkbooks()) { Console.WriteLine($"Workbook: {workbook.Data.DisplayName}"); }
- Update Component
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);
- Delete Resources
// Delete Application Insights component ApplicationInsightsComponentResource component = await resourceGroup .GetApplicationInsightsComponentAsync("my-appinsights"); await component.DeleteAsync(WaitUntil.Completed);
// Delete web test WebTestResource 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
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:
// Program.cs in ASP.NET Core builder.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
Reference Links
Resource URL
NuGet Package https://www.nuget.org/packages/Azure.ResourceManager.ApplicationInsights
API Reference https://learn.microsoft.com/dotnet/api/azure.resourcemanager.applicationinsights
Product Documentation https://learn.microsoft.com/azure/azure-monitor/app/app-insights-overview
GitHub Source https://github.com/Azure/azure-sdk-for-net/tree/main/sdk/applicationinsights/Azure.ResourceManager.ApplicationInsights