Как отслеживать пользовательские события из Azure WebJobs в Application Insights? - PullRequest
0 голосов
/ 01 мая 2018

У меня есть проект Azure WebJobs (v2.2.0), который я хотел бы отслеживать с помощью Application Insights (AI), и есть события, которые я хотел бы отслеживать. В обычном веб-приложении, настроенном на использование AI, вы можете просто использовать это:

TelemetryClient tc = new TelemetryClient();
tc.TrackEvent("EventName");

Однако, похоже, это не работает в контексте WebJob! Я настроил свой проект WebJob в соответствии с инструкциями для WebJob SDK repo , который в итоге выглядит следующим образом:

Программа

using System.Configuration;
using System.Diagnostics;
using Microsoft.Azure.WebJobs;
using Microsoft.Extensions.Logging;

namespace WebJobs
{
  public class Program
  {
    public static void Main()
    {
      JobHostConfiguration config = new JobHostConfiguration();
      config.UseTimers();

      using (LoggerFactory loggerFactory = new LoggerFactory())
      {
        string key = ConfigurationManager.AppSettings["webjob-instrumentation-key"];
        loggerFactory.AddApplicationInsights(key, null);
        loggerFactory.AddConsole();
        config.LoggerFactory = loggerFactory;
        config.Tracing.ConsoleLevel = TraceLevel.Off;

        if (config.IsDevelopment)                
          config.UseDevelopmentSettings();                

        JobHost host = new JobHost(config);

        host.RunAndBlock();
      }
    } 
  }
}

Функции

Это просто тестовая функция, которая будет запускаться каждую минуту в течение получаса.

using Core.Telemetry;
using Microsoft.ApplicationInsights;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Timers;
using System;
using System.Collections.Generic;

namespace WebJobs.Functions
{
  public class TestFunctions
  {
    public void TelemetryTest([TimerTrigger(typeof(Schedule))] TimerInfo timer)
    {
      TelemetryClient tc = new TelemetryClient();
      tc.TrackEvent("TelemetryTestEvent");
    }

    // schedule that will run every minute
    public class Schedule : DailySchedule
    {
        private static readonly string[] times =
        {
          "12:01","12:02","12:03","12:04","12:05","12:06","12:07","12:08","12:09","12:10",
          "12:11","12:12","12:13","12:14","12:15","12:16","12:17","12:18","12:19","12:20",
          "12:21","12:22","12:23","12:24","12:25","12:26","12:27","12:28","12:29","12:30"
        };

        public Schedule() : base(times) { }
    }
  }
}

Это, кажется, частично работает, потому что я вижу некоторую телеметрию в ИИ, но не пользовательские события. Например, я вижу Запрос , появляющийся каждый раз, когда TestFunctions.TelemetryTest() запускается и различные Трассировка с во время инициализации WebJob.

Возможно, я что-то неправильно настроил или неправильно получаю TelemetryClient, но не могу найти документацию по отслеживанию пользовательских событий в WebJobs.

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 01 мая 2018

Попробуйте установить явный ключ инструментов:

tc.Context.InstrumentationKey = "<your_key>";

Согласно документам вы сможете получить ключ, используя

System.Environment.GetEnvironmentVariable(
            "APPINSIGHTS_INSTRUMENTATIONKEY", EnvironmentVariableTarget.Process)

, если вы настроили интеграцию с приложениями.

...