You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 12:33:24