У меня есть проект 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.
Любая помощь будет оценена.