ปิดใช้งานข้อมูลเชิงลึกของแอปพลิเคชันในการแก้ไขข้อบกพร่อง


104

ฉันจะปิดใช้งานข้อมูลเชิงลึกของแอปพลิเคชันโดยอัตโนมัติได้อย่างไรเมื่อใช้การกำหนดค่าดีบักและเปิดใช้งานเฉพาะในรุ่นเท่านั้น
เป็นไปได้หรือไม่ที่จะทำสิ่งนี้โดยไม่ต้องสร้างคีย์เครื่องมืออื่นสำหรับการดีบักเท่านั้น

ฉันมี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-environment-stamps-and-app-versions.aspx

คำตอบ:


71

คุณสามารถลองใช้ คุณสมบัติTelemetryConfiguration.DisableTelemetryด้วยวิธีนี้ ..

#if DEBUG
            TelemetryConfiguration.Active.DisableTelemetry = true;
#endif

ฉันพยายามเพิ่มคำสั่งนี้ก่อนหน้านี้WindowsAppInitializer.InitializeAsync();(ฉันก็ลองทำตาม) แต่ตัวนับเหตุการณ์เชิงลึกของแอปพลิเคชัน Visual Studio เพิ่มขึ้น ฉันไม่สามารถดูได้ว่าเซสชันนี้ได้รับการบันทึกอย่างมีประสิทธิภาพในพอร์ทัลสีฟ้าหรือไม่เนื่องจากมีเซสชันและผู้ใช้มากเกินไป ฉันจะพยายามในตอนกลางคืน
Alberto Rivelli

อัลเบอร์โตฉันทดสอบเช่นนี้ - 'รหัส' สาธารณะปิดผนึกคลาสบางส่วน MainPage: หน้า {TelemetryClient telemetry; MainPage สาธารณะ () {this.InitializeComponent (); #if DEBUG TelemetryConfiguration.Active.DisableTelemetry = true; #endif telemetry = TelemetryClient ใหม่ (); } โมฆะส่วนตัว button_Click (ผู้ส่งวัตถุ RoutedEventArgs จ) {telemetry.TrackEvent ("เหตุการณ์ที่กำหนดเอง"); } 'code' .. และดูเหมือนจะใช้งานได้ ฉันจะลองหน้าอื่นด้วย จะแจ้งให้คุณทราบ
Abhijit Jana

นอกจากนี้จาก Visual Studio เองคุณสามารถตรวจสอบได้ว่ามีการส่งเหตุการณ์ทางไกลหรือไม่ ฉันเพิ่งโพสต์เมื่อวันวานนี้วิธีรับจำนวนเหตุการณ์ Application Insights จาก Visual Studio 2015
Abhijit Jana

นั่นคือสิ่งที่ฉันเขียนตัวนับเหตุการณ์ในสตูดิโอภาพเพิ่มขึ้น
Alberto Rivelli

2
แม้จะตั้งค่า DisableTelemetry เป็น true และเป็นคีย์เครื่องมือวัดที่ว่างเปล่าโมดูล telemetry จะเก็บข้อมูลต่อไป ข้อมูลจะไม่ถูกส่ง แต่จะถูกรวบรวม ดูปัญหานี้ที่บันทึกไว้กับ App Insights: github.com/Microsoft/ApplicationInsights-dotnet/issues/397 หากคุณต้องการปิดใช้งานเอาต์พุตการเปิดตัวคุณสามารถทำตามขั้นตอนที่พบได้ที่ github.com/Microsoft/ApplicationInsights-dotnet/issues/310
Guillaume LaHaye

60

นอกเหนือจากโซลูชันอื่น ๆ แล้วฉันขอแนะนำให้เพิ่มสิ่งต่อไปนี้สมมติว่า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 กับการจัดเตรียมและปล่อยการกำหนดค่าเพื่อการผลิต ทั้งสองสามารถเปิดใช้งาน telemetry ของตัวเองได้ ดังนั้นการเปลี่ยนแปลงของคุณจะปิดการใช้งาน telemetry สำหรับสภาพแวดล้อมการจัดเตรียม
Sergey G.

1
@Sergey ฉันขอแนะนำให้กำหนดการกำหนดค่าเดียวและกำหนดตัวแปร STAGING ที่นั่น ดังนั้นคุณสามารถแยกแยะระหว่างการดีบักในเครื่องได้ดีขึ้น อีกทางเลือกหนึ่งคือกำหนดสัญลักษณ์ใหม่ LOCAL และแทนที่ในConditional-attribute
Alexander Schmidt

โดยทั่วไปเรามีสตริงการเชื่อมต่อ DB บัญชีที่จัดเก็บข้อมูลและการตั้งค่าอื่น ๆ สำหรับ STAG และ PROD (เช่นรหัสแอป FB, บัญชี SendGrid, การตั้งค่าแอป ฯลฯ ) ยิ่งไปกว่านั้น - ในเครื่องเรามีโปรแกรมจำลองการจัดเก็บ Azure และ SQL Express ในเครื่อง ดังนั้นจึงไม่มีวิธีทำงานกับการกำหนดค่าเดียว เราต้องการการกำหนดค่าที่แตกต่างกัน 3 แบบและการกำหนดค่าภายในเครื่องควรมีการวัดระยะทางไกล
Sergey G.

คุณยังสามารถกำหนดสัญลักษณ์ที่กำหนดเองในการกำหนดค่าได้มากกว่าหนึ่งรายการ จากนั้นแทนที่จะใช้ Conditional ("DEBUG") คุณสามารถทำ Conditional ("WHATEVER") หรือคุณสามารถคว้าค่าจาก appSettings และใช้การแปลงเพื่อทำให้มันหายไปในสภาพแวดล้อมที่ไม่ใช่ในพื้นที่
joelmdev

TelemetryConfigurationไม่ได้กำหนดไว้
Meekohi

34

สำหรับโครงการ ASP.NET Core นั้น App Insights จะเปิดโดยค่าเริ่มต้นซึ่งจะบันทึกข้อมูลจำนวนมากลงในหน้าต่างแก้ไขข้อบกพร่อง

หากต้องการปิดใช้งานให้ไปที่ "TOOLS -> Options -> Projects and Solutions -> Web Projects" และเลือก "Disable local Application Insights for Asp.Net Core web projects"

ด้านล่างนี้คือภาพสำหรับการปิดใช้งานข้อมูลเชิงลึกของแอปในเครื่อง

ภาพ

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับปัญหานี้คุณสามารถดูปัญหา 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 จริงจัง

17

การเรียกใช้แอปพลิเคชันเว็บ 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 ในโซลูชันเดียวกัน


2
วันนี้ล้าสมัยแล้ววันนี้เราจะทำอย่างไรให้ถูกต้อง
Alex Gordon

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;
    }
}

วันนี้ล้าสมัยแล้ววันนี้เราจะทำอย่างไรให้ถูกต้อง
Alex Gordon

11

ฉันเพิ่งมีปัญหาเดียวกัน

เราต้องการควบคุมการตั้งค่าใน web.config จึงเพิ่มคีย์ DisableAITelemetry ภายในการตั้งค่าแอพของเรา:

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

ด้วยการสร้างแบบสดและการสาธิตเราจะไม่รวมค่า (เพื่อให้ค่าเริ่มต้นเป็นเท็จ)

จากนั้นเราสามารถแก้ไขได้โดยเพิ่มสิ่งนี้:

bool disable;
string disableAiTelemetry = ConfigurationManager.AppSettings["DisableAITelemetry"];
bool.TryParse(disableAiTelemetry, out disable);
TelemetryConfiguration.Active.DisableTelemetry = disable;

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 Telemetry" ในหน้าต่างเอาต์พุต
Mike Gledhill

7

เราพบวิธีที่ง่ายที่สุดในการป้องกันไม่ให้ติดตามเข้าไปในบันทึกการแก้ไขข้อบกพร่องนั้นทำได้ง่ายๆดังนี้:

Extensibility.Implementation.TelemetryDebugWriter.IsTracingDisabled = True

5

Microsoft.ApplicationInsights.AspNetCore เวอร์ชัน 2.1

services.AddApplicationInsightsTelemetry(options =>
{
    options.EnableDebugLogger = false;
});

นี่ควรจะซ่อน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
//...
}

1
วันนี้ล้าสมัยแล้ววันนี้เราจะทำอย่างไรให้ถูกต้อง
Alex Gordon

1

ณ 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 dev ของเรา:

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

        TelemetryDebugWriter.IsTracingDisabled = true;
#endif
    }
}

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/…
Noah Stahl
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.