azure 自定义指标未显示在带遥测客户端的App Insights中

k2arahey  于 2023-01-27  发布在  其他
关注(0)|答案(1)|浏览(110)

我的应用程序是ASP.NET Core 6应用程序。我正在使用Application Insights的遥测客户端并调用GetMetric以在Azure门户中记录自定义指标。
我使用的是Microsoft.ApplicationInsights.AspNetCore版本2.21.0
使用构造函数注入遥测客户端:

public RaftService (ILogger<RaftService> logger,
                    IHttpClientFactory clientFactory,
                    IOptions<RaftOptions> raftOptions,
                    IOrderNoteService orderNoteService,
                    TelemetryClient telemetryClient)
{
    _logger = logger;
    _clientFactory = clientFactory;
    _options = raftOptions;
    _orderNoteService = orderNoteService;
    _telemetryClient = telemetryClient;
}

我调用GetMetricTrackValue方法如下:

var _paymentAPIStatusCodeMetric = _telemetryClient.GetMetric("PaymentAPIStatusCode");
_paymentAPIStatusCodeMetric.TrackValue(Convert.ToInt32(response.StatusCode));

我在appsettings.json文件中指定连接字符串,如下所示:

当我在VS 2022中本地运行应用程序时,我可以看到指标被记录。我的TelemetryClient对象如下所示。我看到检测键被分配,连接字符串被填充。

当我将应用程序部署为应用程序服务时,不会记录自定义指标。我的TelemetryClient对象如下所示-由于某种原因,未在TelemetryConfiguration中填充instrumentation键,DisableTelemetry显示为true。

你知道为什么在Azure中将应用程序作为应用程序服务运行时使用Instrumentation Key = ""DisableTelemetry = true吗?
我猜,由于未设置检测密钥,因此自定义指标不会记录在Azure门户中。
任何帮助都将不胜感激。

zbwhf8kr

zbwhf8kr1#

请按如下方式更改您的代码。

public class RaftService: IDisposable
{
    private readonly TelemetryClient _tc;
    private readonly Stopwatch _sw = new Stopwatch();
    private readonly string _operationName;
    
    public RaftService(TelemetryClient tc, string operationName,ILogger<RaftService> logger,
                IHttpClientFactory clientFactory,
                IOptions<RaftOptions> raftOptions,
                IOrderNoteService orderNoteService)
    {
        _tc = tc;
        _operationName = operationName;
        _logger = logger;
        _clientFactory = clientFactory;
        _options = raftOptions;
        _orderNoteService = orderNoteService;
        _sw.Start();
    }
    
    public void Dispose()
    {
        _sw.Stop();
        _tc.GetMetric(_operationName).TrackValue(_sw.ElapsedMilliseconds);
    }
}

那你可以宣布死亡。

using(new RaftService(tc, "metricName"))
{
    // 
}

最后,您可以查看日志。

相关问题