Как сохранить копию телеметрии Application Insights в файл локально (на машине, которая ее создала)?

#asp.net-core #logging #local #azure-application-insights

Вопрос:

У меня есть приложение ASP .NET CORE с установленной программой application insights. Как настроить его для сохранения копии телеметрии в локальный файл (в дополнение к отправке в облако)?

Я не ищу функцию непрерывного экспорта (AFAIU, сначала она должна пройти через портал). Я ищу сценарий типа «сохраните 100% телеметрии локально, но отправьте выборочное подмножество в Azure».

Ответ №1:

Один из способов — добавить телеметрический процессор, который сохраняет элемент телеметрии локально и вызывает this.Next.Process(item) .

В качестве альтернативы вы можете добиться того же с помощью TelemetrySink.

Первый подход, вероятно, проще.

Чтобы сохранить их в текстовом представлении, вы можете использовать Microsoft.ApplicationInsights.Extensibility.Implementation.JsonSerializer.Serialize (принимает IEnumerable<ITelemetry> telemetryItems ). Это вернет массив байтов. Я предполагаю, что вызов Deserialize этого массива байтов должен дать вам строковое представление json.

Комментарии:

1. Я сначала попробовал маршрут процессора, но потребовалась бы некоторая работа, чтобы правильно сериализовать все типы телеметрии, которые он может получать. AFAICS, я не должен просто конвертировать его в Json, так как это захватит содержимое его контекстной переменной. Знаете ли вы о существующем решении или способе преобразования произвольного элемента телеметрии в строку плоского журнала?

2. В Application Insights для этого есть функция (добавлена как часть ответа). Мы используем его в одном сценарии для сериализации в массив байтов. Я думаю, Десериализация должна дать вам строку.