如何在Azure Application Live Metric Stream中修复无遥测数据(例如事件,异常)?

时间:2019-05-17 08:12:29

标签: c# azure azure-application-insights metrics

我有一个C#客户巫婆,我想用蔚蓝的见解进行监控。

我添加了以下Nuget:

Microsoft.ApplicationInsights v2.9.1
Microsoft.ApplicationInsights.Agent.Intercept v2.4.0
Microsoft.ApplicationInsights.DependencyCollector v2.9.1
Microsoft.ApplicationInsights.PerfCounterCollector v2.9.1
Microsoft.ApplicationInsights.Web v2.9.1
Microsoft.ApplicationInsights.WindowsServer v2.9.1
Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel v2.9.1
Microsoft.AspNet.TelemetryCorrelation v1.0.5
System.Diagnostics.DiagnosticSource v4.5.1

问题是Azure门户在使用类别中识别了我的事件和异常,但未将其识别为实时指标流。我的客户端已连接,实时度量标准流可用,但未显示跟踪事件或异常之类的数据。即使在Visual Studio中,在调试期间也没有可用的Application Insights数据。

我已经尝试了很多次以卸载并重新安装所有nuget。无需任何努力即可将它们更新到最新版本。

这是我的Azure客户端的相关代码。有效负载只是一类具有一些我想跟踪的属性的类。它被映射到字典中以供有效载荷发送。

public override void Initialize()
{
    try
    {
        base.Initialize();

        var configuration = new TelemetryConfiguration();
        configuration.InstrumentationKey = Configuration.AnalyticsCodeId;

        var dependencies = new DependencyTrackingTelemetryModule();
        dependencies.Initialize(configuration);

        configuration.TelemetryInitializers.Add(new Microsoft.ApplicationInsights.Extensibility.OperationCorrelationTelemetryInitializer());
        configuration.TelemetryInitializers.Add(new ClientIpHeaderTelemetryInitializer());
        configuration.TelemetryInitializers.Add(new AccountIdTelemetryInitializer());
        customTelemetry = new AzureCustomTelemetryInitializer(Payload);
        configuration.TelemetryInitializers.Add(customTelemetry);

        client = new TelemetryClient(configuration);

        if (CheckTrackingIsAllowed())
            InitLiveMetric(configuration);
    }
    catch (Exception e)
    {
        Log.Write(e);
    }
}

private void InitLiveMetric(TelemetryConfiguration configuration)
{
    QuickPulseTelemetryProcessor processor = null;

    configuration.TelemetryProcessorChainBuilder
        .Use((next) =>
        {
            processor = new QuickPulseTelemetryProcessor(next);
            return processor;
        })
        .Build();

    var quickPulse = new QuickPulseTelemetryModule();
    quickPulse.Initialize(configuration);
    quickPulse.RegisterTelemetryProcessor(processor);
}

public override void SendEventAsync(string eventName, string modulName)
{
    if (!CheckTrackingIsAllowed())
        return;

    Task.Run(() =>
    {
        var p = MapAzurePayload(Payload);
        client.TrackEvent(eventName, p);
    });
}

此代码似乎正常运行,因为我可以在Azure门户的使用类别中看到跟踪的事件和异常。但是正如我所说,不是实时指标,这会非常好,并且通常必须与我认为的代码配合使用。

有什么想法为什么实时指标流无法按预期运行?

编辑:找到原因...问题是,当客户端似乎根本没有准备好时,将发送我的第一个跟踪事件。如果我延迟发送,它将按预期工作。 我的解决方案是延迟曲目的首次发送。不好,但是我没有其他想法...

0 个答案:

没有答案