Application Insights для приложения WebAPI - PullRequest
1 голос
/ 20 апреля 2020

Можно ли указать Application Insights использовать другой InstrumentationKey в зависимости от URL-адреса запроса?

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

Формат URL: https://webapi.com/v1/ {client_name} / bla / bla

Было бы здорово настроить конфигурацию для выбора InstrumentationKey по client_name из запроса.

Ответы [ 3 ]

0 голосов
/ 23 апреля 2020

Было бы здорово настроить конфигурацию, чтобы выбрать InstrumentationKey по client_name из запроса.

Вы можете динамически выбирать ikey согласно client_name из запроса. Сначала вам нужно получить URL-адрес запроса, а затем проверить имя клиента.

Для этого вы можете добавить следующий код в файл Global.asax:

    void Application_BeginRequest(Object source, EventArgs e)
    {
        var app = (HttpApplication)source;
        //get the request url
        var uriObject = app.Context.Request.Url.ToString();

        if (uriObject.Contains("/client_name_1"))
        {
            Microsoft.ApplicationInsights.Extensibility.
                      TelemetryConfiguration.Active.InstrumentationKey = "ikey_1";
        }
        else if (uriObject.Contains("/client_name_2"))
        {
            Microsoft.ApplicationInsights.Extensibility.
                      TelemetryConfiguration.Active.InstrumentationKey = "ikey_2";
        }
        else
        {
            Microsoft.ApplicationInsights.Extensibility.
                      TelemetryConfiguration.Active.InstrumentationKey = "ikey_3";
        }
    }

Результат теста :

enter image description here

Но я хочу сказать, что мы редко используем еще 1 икей в одной среде. Если ваша цель состоит в том, чтобы сделать данные не беспорядочными, я предлагаю вам использовать только 1 ikey, а затем использовать запрос Кусто для вашей цели.

0 голосов
/ 24 апреля 2020

Если цель состоит в том, чтобы отправлять разные телеметрические элементы на разные ключи инструментария, правильный способ добиться этого - изменить отдельный элемент с помощью TelemetryInitializer для получения правильного ikey.

Инициализатор, подобный следующему:

item.Context.InstrumentationKey = ikey.

Этот инициализатор должен обращаться к HttpContext и динамически определять ikey из маршрута запроса / других параметров.

Изменение T C .Active не рекомендуется для этой цели, так как это глобальная общая настройка.

(Это не очень распространенный случай использования - но внутри Microsoft есть команды, которые делают это для приложений масштаба PROD)

0 голосов
/ 20 апреля 2020

Вы можете сделать это. Если у вас есть регистратор, укажите в параметре ApplicationInsightsKey и передайте ключ для клиента при каждом вызове или введите его при загрузке, если ваше приложение основано на арендаторе.

Извлечение документов здесь: Разделение телеметрия от разработки, тестирования и производства

Microsoft.ApplicationInsights.Extensibility.
TelemetryConfiguration.Active.InstrumentationKey = <App-Insights-Key-for-the-client>

Просто измените ключ Application Insights перед регистрацией, и он выполнит свою работу.

...