Как предоставить пользовательские имена для событий просмотра страницы в Azure App Insights? - PullRequest
0 голосов
/ 14 декабря 2018

По умолчанию App Insights использует заголовок страницы в качестве имени события.Наличие динамических имен страниц, таких как «Заказ 32424», создает безумное количество типов событий.

Документация по этому вопросу говорит об использовании метода trackEvent, но примеров нет.

appInsights.trackEvent("Edit button clicked", { "Source URL": "http://www.contoso.com/index" })

Каков наилучший подход?Было бы идеально иметь какую-то карту / фильтр, который позволял бы изменять имя события для некоторых страниц на общее имя, такое как «Order 23424» => «Order», в то же время оставляя большинство страниц такими, какие они есть.

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

С помощью Дмитрий Матвеев Я пришел со следующим окончательным кодом:

var appInsights = window.appInsights;

if (appInsights && appInsights.queue) {
    function adjustPageName(item) {
        var name = item.name.replace("AppName", "");

        if (name.indexOf("Order") !== -1)
            return "Order";

        if (name.indexOf("Product") !== -1)
            return "Shop";

        // And so on...

        return name;
    }

    // Add telemetry initializer
    appInsights.queue.push(function () {
        appInsights.context.addTelemetryInitializer(function (envelope) {
            var telemetryItem = envelope.data.baseData;

            // To check the telemetry item’s type:
            if (envelope.name === Microsoft.ApplicationInsights.Telemetry.PageView.envelopeType || envelope.name === Microsoft.ApplicationInsights.Telemetry.PageViewPerformance.envelopeType) {

                // Do not track admin pages
                if (telemetryItem.name.indexOf("Admin") !== -1)
                    return false;

                telemetryItem.name = adjustPageName(telemetryItem);
            }

        });
    });
}

Почему этот код важен?Поскольку App Insights по умолчанию использует заголовки страниц в качестве имени для PageView, вы будете иметь сотни и тысячи различных событий, например, «Заказ 123132», которые сделают дальнейший анализ (последовательность, потоки, события) бессмысленным.

Ключосновные моменты:

  • var name = item.name.replace("AppName", ""); Если вы поместите название своего приложения / продукта в заголовок, вы, вероятно, захотите удалить его из названия вашего события, потому что оно будет повторяться везде.
  • appInsights && appInsights.queue Вы должны проверить на appInsights.queue, потому что по какой-то причине он может не быть определен и вызвать ошибку.
  • if (telemetryItem.name.indexOf("Admin") !== -1) return false; возврат false приведет к тому, что событие вообще не будет записано.Существуют определенные события / страницы, которые вы, скорее всего, не хотите отслеживать, например административная часть веб-сайта.
  • Существует два типа событий, в которых в качестве имени события используется заголовок страницы: PageView и PageViewPerformance.Имеет смысл изменить их обоих.
0 голосов
/ 15 декабря 2018

Вы должны иметь возможность использовать инициализатор телеметрии подход для замены определенного шаблона в имени события на более "общую" версию этого имени.

Вот пример из Application InsightsJS SDK GitHub о том, как изменить данные pageView перед их отправкой.С небольшим изменением вы можете использовать его для изменения имен событий в зависимости от их внешнего вида:

window.appInsights = appInsights;
...
// Add telemetry initializer
appInsights.queue.push(function () {
    appInsights.context.addTelemetryInitializer(function (envelope) {
        var telemetryItem = envelope.data.baseData;

        // To check the telemetry item’s type:
        if (envelope.name === Microsoft.ApplicationInsights.Telemetry.PageView.envelopeType) {
            // this statement removes url from all page view documents
            telemetryItem.url = "URL CENSORED";
        }

        // To set custom properties:
        telemetryItem.properties = telemetryItem.properties || {};
        telemetryItem.properties["globalProperty"] = "boo";

        // To set custom metrics:
        telemetryItem.measurements = telemetryItem.measurements || {};
        telemetryItem.measurements["globalMetric"] = 100;
    });
});
// end

...
appInsights.trackPageView();
appInsights.trackEvent(...);
...