Данные пользовательской метрики ApplicationInsights недоступны для WebJob - PullRequest
0 голосов
/ 13 апреля 2019

Я использую функцию Azure и WebJob в .Net и отправляю журналы в ApplicationInsights с помощью TelemetryClient.

У меня почти одинаковый код входа для функции WebJob и Azure.

Для функции Azure я вижу свои данные в запросах, трассировках и пользовательских метриках, но для веб-задания нет доступных данных в пользовательских метриках, доступных только в трассировках и запросах.

Код регистрации моего EventHub WebJob

public Task ProcessEventsAsync(PartitionContext context, IEnumerable<EventData> messages)
    {
        foreach (var eventData in messages)
        {
            Log log = LogManager.GetLogger();
            RequestTelemetry requestTelemetry = new RequestTelemetry { Name = "EventhubWebJob" };
            requestTelemetry.Properties.Add("MessageId", Guid.NewGuid().ToString());
            IOperationHolder<RequestTelemetry> operation = log.TelemetryClient.StartOperation(requestTelemetry);
            operation.Telemetry.Success = true;
            log.Trace($"Message processing start...");
            try
            {
                log.Trace("Message received.");
                Console.WriteLine($"Message received.");
            }
            catch (Exception ex)
            {
                operation.Telemetry.Success = false;
                log.Trace(ex.Message);
                throw;
            }
            finally
            {
                log.Trace($"Message processing completed.");
                log.TelemetryClient.StopOperation(operation);
            }

        }

        return context.CheckpointAsync();
    }

Ниже приведены данные о той же функции, что и мне для WebJob.

enter image description here

1 Ответ

1 голос
/ 15 апреля 2019

Если вы хотите использовать ApplicationInsights с WebJob, вам нужно использовать пакет Microsoft.Azure.WebJobs.Logging.ApplicationInsights nuget, даже если это бета-версия.

Вам нужно всего три пакета:

  1. Microsoft.Azure.WebJobs.Logging.ApplicationInsights
  2. Microsoft.Extensions.Logging
  3. Microsoft.Extensions.Logging.Console

Настройка JobHostConfiguration

string instrumentationKey = Environment.GetEnvironmentVariable("APPINSIGHTS_INSTRUMENTATIONKEY");
if (!string.IsNullOrEmpty(instrumentationKey))
{
      // build up a LoggerFactory with ApplicationInsights and a Console Logger
       config.LoggerFactory = new LoggerFactory().AddApplicationInsights(instrumentationKey, null).AddConsole();
       config.Tracing.ConsoleLevel = TraceLevel.Off;
}

Примечание : не забудьте добавить APPINSIGHTS_INSTRUMENTATIONKEY в настройках приложения.

Что касается фильтрации ILogger, вы можете обратиться к Application Insights Integration wiki, CategoryLevels позволяет вам указать уровни журналов для определенных категорий, чтобы вы могли точно настроить выходные данные журналов.

И вы можете добавить LogError с кодом:

public static void ProcessQueueMessage([QueueTrigger("queue")] string message, ILogger logger)
    {
    //you can directly use this line of code.
    logger.LogError(new Exception(),"it is a test error...");
    }

Обновление

enter image description here

Обновление:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...