Отслеживание событий при помощи сервиса Application Insights

Одна из полезных возможностей Application Insights — это отслеживание событий, которые происходят в приложение во время работы. На основании этих данных можно сделать выводы об использовании приложения, какие фичи пользователи используют, а какие нет. Отдельно можно провести анализ ошибок, возникающих при работе.

Пользовательские события

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

Для работы с пользовательскими событиями, кроме подключения AI к проекту, требуется добавить немного кода в приложение. Для взаимодействия с сервисом используется объект TelemetryClient. Отправка события регистрация пользователя в приложении может выглядеть так:

TelemetryClient telemetry = new TelemetryClient();
telemetry.TrackEvent("UserSignup");

Если вместе с событием требуется учитывать какие-то дополнительные данные, то в метод TrackEvent можно передать дополнительные параметры:

TelemetryClient telemetry = new TelemetryClient();
telemetry.TrackEvent("UserSignup",new Dictionary<string, string>
{
    {"Role", "Observer"},
    {"Company", "A&B"}
});

Аналитика по событиям выглядит следующим образом:

Можно получить дополнительные проекции данных, используя фильтры:

Клик по каждому событию также покажет подробную информацию по выбранному событию.

Как и в случае с анализом работоспособности приложения, здесь можно настроить уведомления, которые будут отправляться при достижении пороговых значений. Например, если количество добавлений в корзину за день меньше, чем какое-то выбранное значение, то вы получите уведомление по email.

Логи

Другой замечательной возможностью AI является возможность хранения и обработки логов. Безусловно многие хранят логи на своих серверах в файлах специального формата. Но я думаю не ошибусь, если скажу, что процесс чтения и анализа лог-файлов не доставляет особого удовольствия. Все потому, что в большинстве случаев это простые текстовые файлы, содержащие огромный объем данных.

Application Insights ведет журнал внутренних событий - HTTP-запрос, просмотр страницы и т.п. При возникновении нестандартных ситуаций в приложении можно также отправить эту информацию в AI. Для этого используется тот же самый объект TelemetryClient:

try
{
  // ...
}
catch (Exception ex)
{
  TelemetryClient telemetry =
          new TelemetryClient();
  telemetry.TrackException(ex);

  throw;
}

Информация об исключении передается в метод TrackException и далее отправляется на сервис. Есть перегруженная версия этого метода, которая вместе с исключение позволяет отправить на сервер дополнительные данные (свойства и метрики, критичность исключения и т.д.):

try
{
    // ...
}
catch (Exception ex)
{
  TelemetryClient telemetry = new TelemetryClient();
  telemetry.TrackException(new ExceptionTelemetry(ex)
  {
    Properties =
    {
        {"Role", "Observer"},
        {"Company", "A&B"}
    },
    Metrics =
    {
        {"Balance", 150},
    },
    SeverityLevel = SeverityLevel.Critical
  });

  throw;
}

Позже по этим данным можно строить дополнительные проекции данных и подвергать их анализу.

Если в приложении уже присутствует система ведения логов, то можно подключить AI к ней. На данный момент существуют адаптеры для:

Отчет по содержимому логов выглядит так:

В верхней части показывается общая статистика и тренды. По каждому событию можно кликнуть и получить полную информацию. Что удобно, AI умеет систематизировать события и по выбранному событию отобразить запросы, так или иначе связанные с этим событием.

Таким образом, данные аспекты работы приложения всегда остаются под вашим контролем.