Datainsamling, kvarhållning och lagring i Application Insights

När du Azure Application Insights SDK i din app skickar den telemetri om din app till molnet. Det är naturligt att ansvarsfulla utvecklare vill veta exakt vilka data som skickas, vad som händer med data och hur de kan behålla kontrollen över dem. I synnerhet: kan känsliga data skickas, var lagras de och hur säkra är de?

Först det korta svaret:

  • Standardmodulerna för telemetri som körs direkt skickar troligen inte känsliga data till tjänsten. Telemetrin handlar om belastnings-, prestanda- och användningsstatistik, undantagsrapporter och andra diagnostikdata. Huvudanvändardata som visas i diagnostikrapporterna är URL:er. men din app bör inte i något fall placera känsliga data i oformaterad text i en URL.
  • Du kan skriva kod som skickar ytterligare anpassad telemetri som hjälper dig med diagnostik och övervakning av användning. (Den här utökningsbarheten är en bra funktion i Application Insights.) Det skulle vara möjligt att av misstag skriva den här koden så att den innehåller personliga och andra känsliga data. Om ditt program fungerar med sådana data bör du tillämpa en grundlig granskningsprocess på all kod som du skriver.
  • När du utvecklar och testar din app är det enkelt att kontrollera vad som skickas av SDK. Data visas i utdatafönstret för felsökning i IDE och webbläsaren.
  • Du kan välja plats när du skapar en ny programresurs Insights program. Mer information om application Insights tillgänglighet per region finns här.
  • Granska insamlade data, eftersom det kan innehålla data som tillåts i vissa fall, men inte andra. Ett bra exempel på detta är Enhetsnamn. Enhetsnamnet från en server har ingen sekretesspåverkan och är användbart, men ett enhetsnamn från en telefon eller bärbar dator kan ha en sekretesspåverkan och vara mindre användbart. Ett SDK som främst utvecklats för målservrar skulle samla in enhetsnamn som standard och detta kan behöva skrivas över i både normala händelser och undantag.

Resten av den här artikeln beskriver dessa svar mer utförligt. Det är utformat för att vara fristående, så att du kan visa det för kollegor som inte ingår i ditt omedelbara team.

Vad är Application Insights?

Azure Application Insights är en tjänst från Microsoft som hjälper dig att förbättra prestanda och användbarhet för ditt liveprogram. Det övervakar ditt program hela tiden det körs, både under testningen och efter att du har publicerat eller distribuerat det. Program Insights skapar diagram och tabeller som visar till exempel vilka tider på dagen du får de flesta användare, hur responsiv appen är och hur väl den betjänas av externa tjänster som den är beroende av. Om det finns krascher, fel eller prestandaproblem kan du söka igenom telemetridata i detalj för att diagnostisera orsaken. Och tjänsten skickar dig e-postmeddelanden om det finns några ändringar i appens tillgänglighet och prestanda.

För att få den här funktionen installerar du ett Application Insights SDK i ditt program, som blir en del av dess kod. När appen körs övervakar SDK:n dess åtgärd och skickar telemetri till Application Insights-tjänsten. Det här är en molntjänst som Microsoft Azure. (Men program Insights fungerar för alla program, inte bara program som finns i Azure.)

Programtjänsten Insights lagrar och analyserar telemetrin. Om du vill se analysen eller söka igenom den lagrade telemetrin loggar du in på ditt Azure-konto och öppnar programresursen Insights för ditt program. Du kan också dela åtkomst till data med andra medlemmar i ditt team eller med angivna Azure-prenumeranter.

Du kan exportera data från Application Insights-tjänsten, till exempel till en databas eller till externa verktyg. Du ger varje verktyg en särskild nyckel som du får från tjänsten. Nyckeln kan återkallas om det behövs.

Application Insights-SDK:er är tillgängliga för en mängd olika programtyper: webbtjänster som finns i dina egna Java EE- eller ASP.NET-servrar eller i Azure; webbklienter – det vill säga den kod som körs på en webbsida; skrivbordsappar och -tjänster; enhetsappar som Windows Phone, iOS och Android. Alla skickar telemetri till samma tjänst.

Vilka data samlas in?

Det finns tre datakällor:

  • SDK, som du integrerar med din app antingen under utveckling eller vid körning. Det finns olika SDK:er för olika programtyper. Det finns även ett SDK för webbsidor, som läses in i slutanvändarens webbläsare tillsammans med sidan.

    • Varje SDK har ett antal moduler somanvänder olika tekniker för att samla in olika typer av telemetri.
    • Om du installerar SDK:n under utveckling kan du använda dess API för att skicka din egen telemetri, utöver standardmodulerna. Den här anpassade telemetrin kan innehålla alla data som du vill skicka.
  • På vissa webbservrar finns det också agenter som körs tillsammans med appen och skickar telemetri om cpu, minne och nätverksanvändning. Till exempel kan virtuella Azure-datorer, Docker-värdar och Java EE servrar ha sådana agenter.

  • Tillgänglighetstester är processer som körs av Microsoft och som regelbundet skickar begäranden till din webbapp. Resultaten skickas till Application Insights-tjänsten.

Vilka typer av data samlas in?

Huvudkategorierna är:

  • Webbservertelemetri – HTTP-begäranden. URI, tid det tar att bearbeta begäran, svarskod, klientens IP-adress. Session id.
  • Webbsidor – Antal sidor, användare och sessioner. Sidinläsningstider. Undantag. Ajax-anrop.
  • Prestandaräknare – minne, CPU, IO, nätverksanvändning.
  • Klient- och serverkontext – OPERATIVSYSTEM, språk, enhetstyp, webbläsare, skärmupplösning.
  • Undantag och krascher – stackdumpar, build id , CPU-typ.
  • Beroenden – anrop till externa tjänster som REST, SQL, AJAX. URI eller anslutningssträng, varaktighet, lyckades, kommando.
  • Tillgänglighetstester – varaktighet för test och steg, svar.
  • Spåra loggar och anpassad telemetri alltdu - kodar till dina loggar eller telemetri.

Mer information.

Hur kan jag kontrollera vad som samlas in?

Om du utvecklar appen med hjälp Visual Studio kör du appen i felsökningsläge (F5). Telemetrin visas i fönstret Utdata. Därifrån kan du kopiera den och formatera den som JSON för enkel granskning.

Skärmbild som visar körning av appen i felsökningsläge i Visual Studio.

Det finns också en mer läsbar vy i fönstret Diagnostik.

För webbsidor öppnar du webbläsarens felsökningsfönster.

Tryck på F12 och öppna fliken Nätverk.

Kan jag skriva kod för att filtrera telemetrin innan den skickas?

Detta skulle vara möjligt genom att skriva ett plugin-program för telemetriprocessorn.

Hur länge sparas data?

Rådatapunkter (det vill säga objekt som du kan fråga i Analytics och inspektera i Sök) sparas i upp till 730 dagar. Du kan välja en kvarhållningstid på 30, 60, 90, 120, 180, 270, 365, 550 eller 730 dagar. Om du behöver behålla data längre än 730 dagar kan du använda kontinuerlig export för att kopiera dem till ett lagringskonto under datainmatningen.

Data som lagras längre än 90 dagar medför ytterligare avgifter. Läs mer om prissättningen Insights Application Azure Monitor på sidan med prisinformation.

Aggregerade data (det vill säga antal, medelvärden och andra statistiska data som du ser i Metric Explorer) bevaras i ett korn på 1 minut i 90 dagar.

Ögonblicksbilder av felsökning lagras i 15 dagar. Den här bevarandeprincipen anges per program. Om du behöver öka det här värdet kan du begära en ökning genom att öppna ett supportfall i Azure Portal.

Vem som kan komma åt data?

Data är synliga för dig och, om du har ett organisationskonto, dina gruppmedlemmar.

Den kan exporteras av dig och dina teammedlemmar och kan kopieras till andra platser och skickas vidare till andra personer.

Vad gör Microsoft med den information som min app skickar till Application Insights?

Microsoft använder endast dessa data för att tillhandahålla tjänsten till dig.

Var lagras data?

  • Du kan välja plats när du skapar en ny programresurs Insights program. Mer information om application Insights tillgänglighet per region finns här.

Hur säkra är mina data?

Program Insights är en Azure-tjänst. Säkerhetsprinciperna beskrivs i Azures säkerhets-, sekretess- och efterlevnadsprinciper white paper.

Data lagras på Microsoft Azure servrar. För konton i Azure Portal beskrivs kontobegränsningar i dokumentet Säkerhet, sekretess och efterlevnad i Azure.

Microsofts personal har begränsad åtkomst till dina data. Vi kommer bara åt dina data med din tillåtelse och om det är nödvändigt för att stödja din användning av Application Insights.

Aggregerade data i alla våra kunders program (till exempel datahastigheter och genomsnittlig storlek på spårningar) används för att förbättra Insights.

Kan någon annans telemetri störa programmets Insights data?

De kan skicka ytterligare telemetri till ditt konto med hjälp av instrumenteringsnyckeln, som finns i koden för dina webbsidor. Med tillräckligt med ytterligare data skulle dina mått inte korrekt representera appens prestanda och användning.

Kom ihåg att ta bort din instrumentationsnyckel om du delar kod med andra projekt.

Är data krypterade?

Alla data krypteras i vila och när de flyttas mellan datacenter.

Krypteras data under överföring från mitt program till Application Insights servrar?

Ja, vi använder https för att skicka data till portalen från nästan alla SDK:er, inklusive webbservrar, enheter och HTTPS-webbsidor.

Skapar SDK:n tillfällig lokal lagring?

Ja, vissa telemetrikanaler bevarar data lokalt om det inte går att nå en slutpunkt. Granska nedan för att se vilka ramverk och telemetrikanaler som påverkas.

Telemetrikanaler som använder lokal lagring skapar temp-filer i TEMP- eller APPDATA-katalogerna, som är begränsade till det specifika konto som kör ditt program. Detta kan inträffa när en slutpunkt tillfälligt var otillgänglig eller om du har drabbats av begränsningsgränsen. När det här problemet har lösts återupptar telemetrikanalen sändningen av alla nya och beständiga data.

Dessa beständiga data krypteras inte lokalt. Om det här är ett problem kan du granska data och begränsa insamlingen av privata data. (Mer information finns i Exportera och ta bort privata data.)

Om en kund behöver konfigurera den här katalogen med specifika säkerhetskrav kan den konfigureras per ramverk. Kontrollera att processen som kör ditt program har skrivåtkomst till den här katalogen, men se även till att den här katalogen är skyddad för att undvika att telemetri läses av oavsiktliga användare.

Java

C:\Users\username\AppData\Local\Temp används för att spara data. Den här platsen kan inte konfigureras från konfigurationskatalogen och behörigheterna för att komma åt den här mappen är begränsade till den specifika användaren med nödvändiga autentiseringsuppgifter. (Mer information finns i implementering.)

.NET

Som standard ServerTelemetryChannel använder den aktuella användarens lokala appdatamapp %localAppData%\Microsoft\ApplicationInsights eller temp-mapp %TMP% . (Se implementering här.)

Via konfigurationsfilen:

<TelemetryChannel Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.ServerTelemetryChannel,   Microsoft.AI.ServerTelemetryChannel">
    <StorageFolder>D:\NewTestFolder</StorageFolder>
</TelemetryChannel>

Via kod:

  • Ta bort ServerTelemetryChannel från konfigurationsfilen
  • Lägg till det här kodfragmentet i konfigurationen:
    ServerTelemetryChannel channel = new ServerTelemetryChannel();
    channel.StorageFolder = @"D:\NewTestFolder";
    channel.Initialize(TelemetryConfiguration.Active);
    TelemetryConfiguration.Active.TelemetryChannel = channel;
    

NetCore

Som standard ServerTelemetryChannel använder den aktuella användarens lokala appdatamapp %localAppData%\Microsoft\ApplicationInsights eller temp-mapp %TMP% . (Se implementering här.)

I en Linux-miljö inaktiveras lokal lagring om inte en lagringsmapp har angetts.

Anteckning

Med versionen 2.15.0-beta3 och större lokal lagring skapas nu automatiskt för Linux, Mac och Windows. För icke Windows system skapar SDK automatiskt en lokal lagringsmapp baserat på följande logik:

  • ${TMPDIR} – om ${TMPDIR} miljövariabeln anges används den här platsen.
  • /var/tmp - Om den tidigare platsen inte finns provar vi /var/tmp .
  • /tmp - om båda de tidigare platserna inte finns provar vi tmp .
  • Om ingen av dessa platser finns skapas inte lokal lagring och manuell konfiguration krävs fortfarande. För fullständig implementeringsinformation.

Följande kodfragment visar hur du ServerTelemetryChannel.StorageFolder anger i ConfigureServices() -metoden för din Startup.cs -klass:

services.AddSingleton(typeof(ITelemetryChannel), new ServerTelemetryChannel () {StorageFolder = "/tmp/myfolder"});

(Mer information finns i Anpassad konfiguration för AspNetCore.)

Node.js

Som standard %TEMP%/appInsights-node{INSTRUMENTATION KEY} används för att spara data. Behörighet att komma åt den här mappen är begränsad till den aktuella användaren och administratörer. (Se implementering här.)

Mappprefixet appInsights-node kan åsidosättas genom att ändra körningsvärdet för den statiska Sender.TEMPDIR_PREFIX variabeln som finns i Sender.ts.

JavaScript (webbläsare)

HTML5-Storage används för att bevara data. Två separata buffertar används: AI_buffer och AI_sent_buffer . Telemetri som batchas och som väntar på att skickas lagras i AI_buffer . Telemetri som just skickades placeras i AI_sent_buffer tills inmatningsservern svarar att den har tagits emot. När telemetrin har tagits emot tas den bort från alla buffertar. Vid tillfälliga fel (till exempel om en användare förlorar nätverksanslutningen) finns telemetri kvar tills den har tagits emot eller inmatningsservern svarar att telemetrin är ogiltig (felaktigt schema eller för gammalt AI_buffer till exempel).

Telemetribuffertar kan inaktiveras genom att ange enableSessionStorageBuffer till false . När sessionslagring är inaktiverat används en lokal matris i stället som beständig lagring. Eftersom JavaScript SDK körs på en klientenhet har användaren åtkomst till den här lagringsplatsen via webbläsarens utvecklarverktyg.

OpenCensus Python

Som standard använder OpenCensus Python SDK den aktuella användarmappen %username%/.opencensus/.azure/ . Behörighet att komma åt den här mappen är begränsad till den aktuella användaren och administratörer. (Se implementering här.) Mappen med dina beständiga data namnges efter Python-filen som genererade telemetrin.

Du kan ändra lagringsfilens plats genom att skicka in parametern i storage_path konstruktorn för den exporter som du använder.

AzureLogHandler(
  connection_string='InstrumentationKey=00000000-0000-0000-0000-000000000000',
  storage_path='<your-path-here>',
)

Hur gör jag för att skicka data till Application Insights TLS 1.2?

För att säkerställa säkerheten för data som överförs till Application Insights-slutpunkterna rekommenderar vi starkt att kunderna konfigurerar sina program så att de använder minst Transport Layer Security (TLS) 1.2. Äldre versioner av TLS/Secure Sockets Layer (SSL) har visat sig vara sårbara och även om de fortfarande arbetar för att tillåta bakåtkompatibilitet rekommenderas de inte , och branschen håller snabbt på att avbryta stödet för dessa äldre protokoll.

PCI Security Standards Standards Har angett en tidsgräns på 30 juni 2018 för att inaktivera äldre versioner av TLS/SSL och uppgradera till säkrare protokoll. Om ditt program/klienter inte kan kommunicera via minst TLS 1.2 när det äldre stödet har lämnats, kan du inte skicka data till Application Insights. Vilken metod du använder för att testa och verifiera programmets TLS-stöd varierar beroende på operativsystem/plattform samt vilket språk/ramverk programmet använder.

Vi rekommenderar inte att du uttryckligen anger att ditt program endast ska använda TLS 1.2 om det inte behövs eftersom detta kan bryta säkerhetsfunktioner på plattformsnivå som gör att du automatiskt kan identifiera och dra nytta av nyare säkrare protokoll när de blir tillgängliga, till exempel TLS 1.3. Vi rekommenderar att du utför en grundlig granskning av programmets kod för att söka efter hårdkodning av specifika TLS/SSL-versioner.

Plattforms-/språkspecifik vägledning

Plattform/språk Support Mer information
Azure App Services Konfiguration kan krävas. Supporten presenterades i april 2018. Läs meddelandet för konfigurationsinformation.
Azure-funktionsappar Konfiguration kan krävas. Supporten presenterades i april 2018. Läs meddelandet för konfigurationsinformation.
.NET Stöds, konfigurationen varierar beroende på version. Detaljerad konfigurationsinformation för .NET 4.7 och tidigare versioner finns i dessa instruktioner.
Statusövervakare Stöds, konfiguration krävs Statusövervakare förlitar sig på OS-konfiguration + av .NET-konfiguration för att stödja TLS 1.2.
Node.js Konfiguration i v10.5.0 kan krävas. Använd den officiella Node.js TLS/SSL-dokumentationen för alla programspecifika konfigurationer.
Java Stöd för JDK för TLS 1.2 har lagts till i JDK 6 uppdatering 121 och JDK 7. JDK 8 använder TLS 1.2 som standard.
Linux Linux-distributioner förlitar sig ofta på OpenSSL för stöd för TLS 1.2. Kontrollera OpenSSL-ändringsloggen för att bekräfta att din version av OpenSSL stöds.
Windows 8.0–10 Stöds och aktiveras som standard. Bekräfta att du fortfarande använder standardinställningarna.
Windows Server 2012 – 2016 Stöds och aktiveras som standard. Bekräfta att du fortfarande använder standardinställningarna
Windows 7 SP1 och Windows Server 2008 R2 SP1 Stöds, men är inte aktiverat som standard. Se sidan Transport Layer Security registerinställningar (TLS) för mer information om hur du aktiverar.
Windows Server 2008 SP2 Stöd för TLS 1.2 kräver en uppdatering. Se Uppdatera för att lägga till stöd för TLS 1.2 i Windows Server 2008 SP2.
Windows Vista Stöds inte. Ej tillämpligt

Kontrollera vilken version av OpenSSL som linux-distributionen körs på

Om du vill kontrollera vilken version av OpenSSL som du har installerat öppnar du terminalen och kör:

openssl version -a

Köra en TLS 1.2-testtransaktion på Linux

Om du vill köra ett preliminärt test för att se om Linux-systemet kan kommunicera via TLS 1.2 öppnar du terminalen och kör:

openssl s_client -connect bing.com:443 -tls1_2

Personliga data som lagras i Application Insights

Vår Insights innehåller en detaljerad diskussion om det här problemet.

Kan mina användare inaktivera Application Insights?

Inte direkt. Vi tillhandahåller inte någon växel som användarna kan använda för att stänga av program Insights.

Du kan dock implementera en sådan funktion i ditt program. Alla SDK:er innehåller en API-inställning som inaktiverar telemetriinsamling.

Data som skickas av Application Insights

SDK:erna varierar mellan olika plattformar och det finns flera komponenter som du kan installera. (Se Program Insights – översikt.) Varje komponent skickar olika data.

Dataklasser som skickas i olika scenarier

Din åtgärd Insamlade dataklasser (se nästa tabell)
Lägga till Application Insights SDK i ett .NET-webbprojekt ServerContext
Inneburit
Prestandaräknare
Begäranden
Undantag
Session
användare
Installera Statusövervakare i IIS Beroenden
ServerContext
Inneburit
Prestandaräknare
Lägga till Application Insights SDK till en Java-webbapp ServerContext
Inneburit
Förfrågan
Session
användare
Lägga till JavaScript SDK på webbsidan ClientContext
Inneburit
Sida
ClientPerf
Ajax
Definiera standardegenskaper Egenskaper för alla standardhändelser och anpassade händelser
Anropa TrackMetric Numeriska värden
Egenskaper
Samtalsspår* Händelsenamn
Egenskaper
Anropa TrackException Undantag
Stackdump
Egenskaper
SDK kan inte samla in data. Ett exempel:
– kan inte komma åt prestandaräknare
– undantag i telemetriinitiering
SDK-diagnostik

För SDK:er för andra plattformar, se deras dokument.

Klasser för insamlade data

Insamlade dataklass Innehåller (inte en fullständig lista)
Egenskaper Alla data – bestäms av din kod
DeviceContext Id, IP, språk, enhetsmodell, nätverk, nätverkstyp, OEM-namn, skärmupplösning, rollinstans, rollnamn, enhetstyp
ClientContext OS, språk, språk, nätverk, fönsterupplösning
Session session id
ServerContext Datornamn, språk, operativsystem, enhet, användarsession, användarkontext, åtgärd
Inneburit geoplats från IP-adress, tidsstämpel, operativsystem, webbläsare
Mått Måttnamn och -värde
Händelser Händelsenamn och -värde
Sidvisningar URL och sidnamn eller skärmnamn
Klientperf URL/sidnamn, webbläsarens inläsningstid
Ajax HTTP-anrop från webbsida till server
Begäranden URL, varaktighet, svarskod
Beroenden Type(SQL, HTTP, ...), connection string, or URI, sync/async, duration, success, SQL statement (med Statusövervakare)
Undantag Typ, meddelande, anropsstackar, källfil, radnummer, thread id
Kraschar Process id, parent process id , ; application crash thread id patch, , id build; undantagstyp, adress, orsak; fördrångade symboler och register, binära start- och slutadresser, binärt namn och sökväg, cpu-typ
Spårning Meddelande- och allvarlighetsgrad
Prestandaräknare Processortid, tillgängligt minne, begärandefrekvens, undantagsfrekvens, process privata byte, I/O-hastighet, varaktighet för begäran, längd på begärandekö
Tillgänglighet Svarskod för webbtest, varaktighet för varje teststeg, testnamn, tidsstämpel, framgång, svarstid, testplats
SDK-diagnostik Spårningsmeddelande eller undantag

Du kan stänga av vissa data genom att redigera ApplicationInsights.config

Anteckning

Klient-IP används för att dra slutsatsen av geografisk plats, men som standard lagras inte längre IP-data och alla nollor skrivs till det associerade fältet. Om du vill veta mer om personlig datahantering rekommenderar vi den här artikeln. Om du behöver lagra IP-adressdata går vi igenom dina alternativ i artikeln om IP-adresssamling.

Kan jag ändra eller uppdatera data när de har samlats in?

Nej, data är skrivskyddade och kan bara tas bort via rensningsfunktionen. Mer information finns i Vägledning för personuppgifter som lagras i Log Analytics och Application Insights.

Krediter

Den här produkten innehåller GeoLite2-data som skapats av MaxMind och som är tillgängliga från https://www.maxmind.com .