Отключить аналитику приложений при отладке

100

Как я могу автоматически отключить аналитику приложений при использовании конфигурации отладки и включить ее только при выпуске?
Можно ли сделать это без создания другого ключа инструментария только для отладки?

У меня есть trackeventоператоры, разбросанные по всему коду, и включение их в проверку препроцессора отладки не является идеальным решением.

Мое текущее решение для установки Build Actionв ApplicationInsights.configфайл , чтобы Noneтаким образом , что он не копируется в выходном каталог проекта, но это не процесс , который может быть автоматизирован на основе активной конфигурации сборки.

Существует режим разработчика, но его необходимо изменить вручную (если можно было условно установить файл конфигурации, очистив также решенную проблему с помощью инструментария). См. Http://apmtips.com/blog/2015/02/02/developer-mode/

Ссылка: http://blogs.msdn.com/b/visualstudioalm/archive/2015/01/07/application-insights-support-for-multiple-environments-stamps-and-app-versions.aspx

Альберто Ривелли
источник

Ответы:

71

Вы можете попробовать использовать свойство TelemetryConfiguration.DisableTelemetry Примерно так ..

#if DEBUG
            TelemetryConfiguration.Active.DisableTelemetry = true;
#endif
Абхиджит Джана
источник
Я пробовал добавить этот оператор непосредственно перед этим WindowsAppInitializer.InitializeAsync();(я также пробовал после него), но счетчик событий в Visual Studio Insights увеличился. Мне не удалось увидеть, был ли этот сеанс эффективно записан на лазурном портале, потому что существует слишком много сеансов и пользователей. Я попробую ночью.
Альберто Ривелли
Альберто, я тестировал вот так - публичный закрытый частичный класс «код» MainPage: Page {TelemetryClient telemetry; общедоступная MainPage () {this.InitializeComponent (); #if DEBUG TelemetryConfiguration.Active.DisableTelemetry = true; #endif телеметрия = новый TelemetryClient (); } private void button_Click (отправитель объекта, RoutedEventArgs e) {telemetry.TrackEvent («Пользовательское событие»); } 'code' .. и, похоже, работает. Я попробую и другие страницы. буду держать вас в курсе
Abhijit Jana
Кроме того, из самой Visual Studio вы можете проверить, отправляются ли события телеметрии или нет. Я только что опубликовал это вчера. Как получить количество событий Application Insights из Visual Studio 2015
Абхиджит Яна,
Вот что я написал, счетчик событий визуальной студии увеличился.
Альберто Ривелли
2
Даже если для параметра DisableTelemetry установлено значение true и пустой ключ инструментирования, модули телеметрии будут продолжать сбор данных. Данные не будут отправлены, но будут собраны. См. Запись об этой проблеме в App Insights: github.com/Microsoft/ApplicationInsights-dotnet/issues/397. Если вы хотите отключить дебютный вывод, вы можете выполнить действия, описанные на github.com/Microsoft/ApplicationInsights-dotnet/issues/310
Guillaume LaHaye
61

В дополнение к другим решениям я бы предложил добавить следующее, скажем, к Global.asax:

protected void Application_Start()
{    
    DisableApplicationInsightsOnDebug();
    // do the other stuff
}

/// <summary>
/// Disables the application insights locally.
/// </summary>
[Conditional("DEBUG")]
private static void DisableApplicationInsightsOnDebug()
{
    TelemetryConfiguration.Active.DisableTelemetry = true;
}

Преимущество этого метода в том, что он не требует изменения конфигураций и лучше работает с некоторыми инструментами, такими как ReSharper, который поймет его лучше, чем #-directives.

Александр Шмидт
источник
1
Обычно мы развертываем конфигурацию DEBUG в промежуточную и конфигурацию RELEASE в производственную. У них обоих может быть включена СОБСТВЕННАЯ телеметрия. Таким образом, ваше изменение отключит телеметрию для промежуточной среды.
Сергей Г.
1
@Sergey Я бы предложил определить одну конфигурацию и определить там переменную STAGING. Таким образом, вы можете лучше различать локальную отладку. Другой вариант - определить новый символ LOCAL и заменить его в Conditionalатрибуте -attribute.
Александр Шмидт
обычно у нас разные строки подключения к БД, учетные записи хранения и другие настройки для STAG и PROD (например, идентификатор приложения FB, учетная запись SendGrid, настройки приложения и т. д.). Более того - локально у нас есть эмулятор хранилища Azure и локальный SQL Express. Так что нет возможности работать с одной конфигурацией. Нам нужны 3 разные конфигурации, и в локальной должна быть отключена телеметрия.
Сергей Г.
Вы по-прежнему можете определить собственный символ в нескольких конфигурациях. Затем вместо использования Conditional («DEBUG») вы можете использовать Conditional («WHATEVER»). В качестве альтернативы вы можете получить значение из appSettings и использовать преобразования, чтобы удалить его в нелокальных средах.
joelmdev
34

Для проектов ASP.NET Core App Insights по умолчанию включен, что фактически записывает тонны информации в окно отладки.

Чтобы отключить его, перейдите в «ИНСТРУМЕНТЫ -> Параметры -> Проекты и решения -> Веб-проекты» и установите флажок «Отключить локальный Application Insights для веб-проектов Asp.Net Core».

Ниже показано изображение для отключения статистики локальных приложений.

Образ

Для получения дополнительной информации о проблеме вы можете увидеть официальную проблему github здесь

Шива Чамарти
источник
22

Как объясняется в вопросе, не развертывать или развертывать ApplicationInsights.config без <instrumentationkey>key</instrumentationkey>создания событий блокировки. Затем вы можете поместить ключ инструментария в код (только при выпуске в моем случае)

#if !DEBUG
    Microsoft.ApplicationInsights.Extensibility.TelemetryConfiguration.Active.InstrumentationKey = "instrumentation key";
#endif

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

В основном ApplicationInsights.configфайл переопределяет любой код, который устанавливает ключ инструментария, удаление его <instrumentationkey>key</instrumentationkey>внутри позволит вам использовать код для настройки ключа. Если вы удалите файл полностью, он не сработает.

Вот подтверждение: «Если вы хотите установить ключ динамически - например, если вы хотите отправлять результаты из вашего приложения в разные ресурсы - вы можете опустить ключ из файла конфигурации и вместо этого установить его в коде».

Ссылка: https://azure.microsoft.com/en-us/documentation/articles/app-insights-configuration-with-applicationinsights-config/#_instrumentationkey

Альберто Ривелли
источник
1
См. Этот блог, как использовать это с отдельнымApplicationInsights.Debug/Release.config
Yahoo Serious
16

Я решил использовать оба подхода. Я переехал InstrumentationKeyк Web.configи он будет заменен преобразованием из Web.Release.configили Web.Debug.config. (не забудьте удалить его из ApplicationInsights.configфайла). Затем я вызвал этот метод изApplication_Start()

public static void RegisterTelemetryInstrumentationKey()
{
    if (string.IsNullOrWhiteSpace(WebConfigurationManager.AppSettings["TelemetryInstrumentationKey"])
    {
        TelemetryConfiguration.Active.DisableTelemetry = true;
    }
    else
    {
        TelemetryConfiguration.Active.InstrumentationKey = AppSettings.TelemetryInstrumentationKey;
    }
}
Сергей Г.
источник
это устарело сегодня, как мы делаем это сегодня правильно?
l --''''''--------- '' '' '' '' '' ''
15

При запуске веб-приложения ASP.NET Core 2.1 с Visual Studio 2017 (15.9.2) параметр «Отключить локальные сведения о приложениях для веб-проектов Asp.Net Core» не очищал вывод в моем окне отладки.

Однако добавление следующего в Configure () в Startup.cs сделало свою работу;

if (_env.IsDevelopment())
{
    app.UseDeveloperExceptionPage();
    TelemetryConfiguration.Active.DisableTelemetry = true;
    TelemetryDebugWriter.IsTracingDisabled = true;
}

Обратите внимание, что IsTracingDisabled был ключевым решением , но я оставил DisableTelemetry на всякий случай! Кроме того, наличие обеих строк рядом друг с другом полезно при поиске похожих ссылок между проектами .NET Framework и .NET Core в одном решении.

alv
источник
2
это устарело сегодня, как мы делаем это сегодня правильно?
l --''''''--------- '' '' '' '' '' ''
11

У меня была такая же проблема.

Мы хотели управлять настройкой в ​​web.config, поэтому добавили ключ DisableAITelemetry в настройки нашего приложения:

  <appSettings>
    <add key="DisableAITelemetry" value="true" />
  </appSettings>

В реальных и демонстрационных сборках мы не будем включать значение (поэтому по умолчанию оно равно false).

Затем мы могли бы решить эту проблему, добавив это:

bool disable;
string disableAiTelemetry = ConfigurationManager.AppSettings["DisableAITelemetry"];
bool.TryParse(disableAiTelemetry, out disable);
TelemetryConfiguration.Active.DisableTelemetry = disable;
chris31389
источник
10

Немного другая игра по некоторым другим решениям. Поместите это в свой global.asax:

Microsoft.ApplicationInsights.Extensibility.Implementation.TelemetryDebugWriter.IsTracingDisabled = Debugger.IsAttached;

Он отключит вывод отладочной информации о приложении при работе в отладчике, но разрешит его в сценариях Ctrl + F5 и отладочных сборках, опубликованных на тестовых серверах.

Джош
источник
10

В приложении ASP.NET Core вы можете добавить следующее в Startus.cs, чтобы отключить Application Insights в среде разработки:

if (env.IsDevelopment()) {
    TelemetryConfiguration.Active.DisableTelemetry = true;
}

Добавьте это в конструктор сразу после builder.AddApplicationInsightsSettings();команды, и вы больше не увидите, как журналы AI забивают вашу консоль отладки.

салюче
источник
Нет ... для меня это не имело никакого значения (с ASP.Net Core 2.1). По-прежнему получайте гору сообщений «Телеметрия Application Insights» в окне вывода.
Майк Гледхилл
7

Мы нашли самый простой способ предотвратить его отслеживание в журнале отладки:

Extensibility.Implementation.TelemetryDebugWriter.IsTracingDisabled = True
Питер Джарретт
источник
5

Microsoft.ApplicationInsights.AspNetCore версии 2.1

services.AddApplicationInsightsTelemetry(options =>
{
    options.EnableDebugLogger = false;
});
JJS
источник
Предполагается, что это скрывает Application Insights Telemetry (unconfigured)сообщения с панели отладки в Visual Studio - потому что в этом случае это не работает :-(
Simon_Weaver
3
Я не уверен, что это за сообщение. Я думаю, вы хотите TelemetryDebugWriter.IsTracingDisabled = true;их удалить.
JJS
3
         public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            #region Disable Application Insights debug informations
#if DEBUG
            TelemetryConfiguration.Active.DisableTelemetry = true;
            TelemetryDebugWriter.IsTracingDisabled = true;
#endif
            #endregion
//...
}
SZL
источник
1
это устарело сегодня, как мы делаем это сегодня правильно?
l --''''''--------- '' '' '' '' '' ''
0

Начиная с .NET Core 3.1:

var telemetryConfiguration = TelemetryConfiguration.CreateDefault();
telemetryConfiguration.DisableTelemetry = true;

var telemetryClient = new TelemetryClient(telemetryConfiguration);   // Use this instance
TelemetryDebugWriter.IsTracingDisabled = true;
шелковый огонь
источник
2
Вот документы для этого, в том числе получение TelemetryConfiguration через внедрение зависимостей: docs.microsoft.com/en-us/azure/azure-monitor/app/…
Ноа Шталь,
0

Начиная с ASP.NET Core 3.1:

public void Configure(IApplicationBuilder app, IHostingEnvironment env,
    TelemetryConfiguration configuration)
{
    configuration.DisableTelemetry = true;
}
TelemetryDebugWriter.IsTracingDisabled = true;

(вышеуказанное можно вызвать из любого места, но чем раньше в жизненном цикле вашего приложения, тем лучше).

Оба могут использоваться вместе для подавления всех действий Application Insights в вашем коде. Я #if DEBUGохраняю директиву, гарантирующую, что AppInsights ничего не делает на моем локальном компьютере, но генерирует события при загрузке на наш сервер разработки Azure:

public void Configure(IApplicationBuilder app, IHostingEnvironment env,
    TelemetryConfiguration configuration)
{
    if (app.IsDevelopment())
    {
#if DEBUG
        configuration.DisableTelemetry = true;

        TelemetryDebugWriter.IsTracingDisabled = true;
#endif
    }
}
Ян Кемп
источник