【问题标题】:ApplicationInsights OperationId is emptyApplicationInsights OperationId 为空
【发布时间】:2018-10-09 17:27:50
【问题描述】:

我正在实现自定义 ApplicationInsights 记录器,并且能够将所有日志写入跟踪、异常和请求等写入位置,但 OperationId 在跟踪和异常中为空。

昨天我使用相同的代码并在所有表中获取 OperationId。在那之后,我在玩效果不佳的多线程场景。现在我用简单的代码重新开始,但看不到 OperationId。

我的代码有什么问题?

public static class Function2
{
    private static TelemetryClient telemetryClient = new TelemetryClient(new Microsoft.ApplicationInsights.Extensibility.TelemetryConfiguration
    {
        InstrumentationKey = "********-****-********-****"
    });

    [FunctionName("Function2")]
    public static HttpResponseMessage Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = null)]HttpRequestMessage req)
    {
        RequestTelemetry requestTelemetry = new RequestTelemetry { Name = "Function2" };
        var operation = telemetryClient.StartOperation(requestTelemetry);

        telemetryClient.TrackTrace("trace message", SeverityLevel.Error);
        telemetryClient.TrackException(new System.Exception("My custom exception"));


        operation.Telemetry.Success = true;
        telemetryClient.StopOperation(operation);

        return req.CreateResponse(HttpStatusCode.OK, "Hello ");
    }
}

【问题讨论】:

  • 请在下面试试我的回答。这是一个 ikey 配置问题。

标签: c# azure azure-application-insights


【解决方案1】:

这个问题非常棘手,这是由于仪表键设置造成的。 如果您使用Microsoft.ApplicationInsights.Extensibility.TelemetryConfiguration(您在代码中使用)设置检测密钥,则应用洞察中不会出现 operation_id。

所以请使用这行代码来设置instrumentation key:

TelemetryClient telemetryClient = new TelemetryClient() { InstrumentationKey = "your_key" };

我的示例代码如下,只是改变了instrumentation key的设置方法:

public static class Function1
{

    private static TelemetryClient telemetryClient = new TelemetryClient() { InstrumentationKey = "your_key" };

    [FunctionName("Function2")]
    public static HttpResponseMessage Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = null)]HttpRequestMessage req)
    {
        RequestTelemetry requestTelemetry = new RequestTelemetry { Name = "Function211" };
        var operation = telemetryClient.StartOperation(requestTelemetry);

        telemetryClient.TrackTrace("trace message 111", SeverityLevel.Error);
        telemetryClient.TrackException(new System.Exception("My custom exception 111"));

        operation.Telemetry.Success = true;
        telemetryClient.StopOperation(operation);

        return req.CreateResponse(HttpStatusCode.OK, "Hello ");
    }
}

执行后,可以在 Azure 门户中看到 trace / exception 的 operation_id:

【讨论】:

  • 感谢@Ivan,微软应该解决这个问题。
  • @PankajRawat,我已经提交了这个问题。如果有任何反馈,我会告诉你:)。
  • @IvanYang 你有那个问题的链接吗?
  • @PeterBons,你可以看看这个issue在github。
  • 哇,在 2020 年,这仍然是一个问题。根据您初始化检测密钥的方式,跟踪的跟踪方式会有所不同。到处搜索,下载了源代码,却找不到我的TrackTrace 没有任何上下文的原因。
猜你喜欢
  • 1970-01-01
  • 2019-02-15
  • 2022-01-07
  • 2023-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-15
  • 1970-01-01
相关资源
最近更新 更多