Как исправить отсутствие данных телеметрии (например, событий, исключений) в приложении Live Metric Stream Azure? - PullRequest
1 голос
/ 17 мая 2019

У меня есть клиент на C #, которого я хочу отслеживать с помощью лазурных идей.

Я добавил следующие Nugets:

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 во время отладки.

Я много раз пытался удалить и переустановить все нюансы.Обновил их до последней версии, но без каких-либо усилий.

Это связанный код для моего клиента Azure.Payload - это просто класс с несколькими свойствами, которые я хочу отслеживать.Он сопоставлен со словарем для отправки полезной нагрузки.

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.Но, как я уже сказал, не такая живая метрика, что было бы неплохо и должно нормально работать с кодом, который я думаю.

Есть идеи, почему поток живой метрики не работает так, как задумано?

Править: Нашел причину ... Проблема в том, что мое первое событие отслеживания отправляется, когда клиент, кажется, не готов вообще.Если я отложил отправку, он работает как положено.Мое решение - отложить первую отправку трека.Не хорошо, но у меня нет другой идеи ...

...