ApplicationInsights customMetrics数据不适用于WebJob

时间:2019-04-13 07:23:56

标签: azure-webjobs azure-application-insights

我正在使用.Net中的Azure函数和WebJob,并使用TelemetryClient将日志发送到ApplicationInsights。

对于WebJob和Azure函数,我具有几乎相同的日志记录代码。

对于azure函数,我可以在Requests,Traces和customMetrics中看到我的数据,但是对于WebJob,customMetrics中没有可用的数据,而仅在Traces和Requests中可用。

我的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所需的Function相同的数据。

enter image description here

1 个答案:

答案 0 :(得分:1)

如果要将ApplicationInsights与WebJob一起使用,则即使当前是beta版,也需要使用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