C#控制台程序向Azure Application Insights发送可用性事件无数据显示问题排查
问题:C#控制台应用发送Application Insights可用性事件无数据显示
我正在编写一个C#控制台应用程序,旨在实现Azure Application Insights中「添加标准测试」等效的「可用性」事件功能,以下是我的代码:
TelemetryConfiguration configuration = new TelemetryConfiguration(); configuration.ConnectionString = "InstrumentationKey=5xxx-xxx-xxx;IngestionEndpoint=https://usxxxxxx.in.applicationinsights.azure.com/;LiveEndpoint=https://usxxxxxx.livediagnostics.monitor.azure.com/"; var client = new TelemetryClient(configuration); var counter = 0; while (counter < 10) { try { var stopwatch = Stopwatch.StartNew(); Thread.Sleep(5000); stopwatch.Stop(); var success = true; // Set test Result success var durationMs = stopwatch.ElapsedMilliseconds; // Create AvailabilityTelemetry var availabilityTelemetry = new AvailabilityTelemetry { Name = "AvailabilityTest", Success = success, Duration = TimeSpan.FromMilliseconds(durationMs), Timestamp = DateTimeOffset.UtcNow, Message = "System is available", }; // Send availability telemetry client.TrackAvailability(availabilityTelemetry); client.Flush(); Console.WriteLine("Availability event sent successfully!"); } catch (Exception ex) { client.TrackException(ex); // Log error details Console.WriteLine($"Error: {ex.Message}"); } counter++; }
该代码已在活动日志中生成元数据,但并未创建任何可用性事件。当我点击Application Insights左侧面板「调查」下的「可用性」菜单时,无法找到任何可用数据进行展示。请问我遗漏了什么?
解决方案
你遗漏了几个关键字段和发送环节的处理,导致可用性事件无法被Application Insights的可用性视图正确识别:
- 必须添加
RunLocation字段:Azure Application Insights的可用性视图依赖该字段来区分测试运行的地理位置/环境,没有这个字段的事件不会在可用性面板中展示。可以设置为自定义值,比如"LocalDevelopment"或实际的区域名称。 - 必须添加唯一的
Id字段:每个单次测试运行需要一个唯一标识符,用来关联测试的生命周期,可通过Guid.NewGuid()生成。 - Flush后需等待发送完成:控制台应用是短生命周期程序,调用
Flush()后需要等待一段时间,确保异步发送的请求完成,否则程序退出会中断数据上传。 - 可选:添加测试的上下文标签:可以通过
Context.Properties添加额外的标识信息,方便后续筛选分析。
修改后的代码示例:
TelemetryConfiguration configuration = new TelemetryConfiguration(); configuration.ConnectionString = "InstrumentationKey=5xxx-xxx-xxx;IngestionEndpoint=https://usxxxxxx.in.applicationinsights.azure.com/;LiveEndpoint=https://usxxxxxx.livediagnostics.monitor.azure.com/"; var client = new TelemetryClient(configuration); var counter = 0; while (counter < 10) { try { var stopwatch = Stopwatch.StartNew(); Thread.Sleep(5000); stopwatch.Stop(); var success = true; var durationMs = stopwatch.ElapsedMilliseconds; // Create AvailabilityTelemetry with required fields var availabilityTelemetry = new AvailabilityTelemetry { Name = "AvailabilityTest", Success = success, Duration = TimeSpan.FromMilliseconds(durationMs), Timestamp = DateTimeOffset.UtcNow, Message = "System is available", RunLocation = "LocalDevelopment", // 新增:测试运行位置 Id = Guid.NewGuid() // 新增:单次测试的唯一ID }; // 可选:添加自定义属性 availabilityTelemetry.Context.Properties.Add("TestEnvironment", "ConsoleApp"); // Send availability telemetry client.TrackAvailability(availabilityTelemetry); client.Flush(); // 等待发送完成,控制台应用必须添加此步骤 Task.Delay(5000).Wait(); Console.WriteLine("Availability event sent successfully!"); } catch (Exception ex) { client.TrackException(ex); Console.WriteLine($"Error: {ex.Message}"); } counter++; }
修改后重新运行程序,等待几分钟(Application Insights数据有延迟),即可在「可用性」面板中看到对应的测试数据。
内容的提问来源于stack exchange,提问作者R.A 1
相关产品推荐
相关产品推荐

