API för Application Insights för anpassade händelser och mått
Infoga några rader med kod i ditt program för att ta reda på vad användarna gör med det eller för att diagnostisera problem. Du kan skicka telemetri från enhets- och skrivbordsappar, webbklienter och webbservrar. Använd Azure Application Insights core telemetry API för att skicka anpassade händelser och mått samt dina egna versioner av standardtelemetri. Det här API:et är samma API som standardprogrammet Insights datainsamlare använder.
API-sammanfattning
Kärn-API:et är enhetligt på alla plattformar, förutom några varianter som GetMetric (endast.NET).
| Metod | Används för |
|---|---|
TrackPageView |
Sidor, skärmar, blad eller formulär. |
TrackEvent |
Användaråtgärder och andra händelser. Används för att spåra användarbeteende eller för att övervaka prestanda. |
GetMetric |
Noll- och flerdimensionella mått, centralt konfigurerad aggregering, endast C#. |
TrackMetric |
Prestandamått, till exempel kölängder som inte är relaterade till specifika händelser. |
TrackException |
Loggning av undantag för diagnos. Spåra var de inträffar i förhållande till andra händelser och granska stackspårningar. |
TrackRequest |
Logga frekvensen och varaktigheten för serverbegäranden för prestandaanalys. |
TrackTrace |
Resursdiagnostikloggmeddelanden. Du kan också samla in loggar från tredje part. |
TrackDependency |
Logga varaktigheten och frekvensen för anrop till externa komponenter som din app är beroende av. |
Du kan koppla egenskaper och mått till de flesta av dessa telemetri-anrop.
Innan du börjar
Om du inte har någon referens för Application Insights SDK ännu:
Lägg till Application Insights SDK i projektet:
I din enhets- eller webbserverkod inkluderar du:
C#:
using Microsoft.ApplicationInsights;Visual Basic:
Imports Microsoft.ApplicationInsightsJava:
import com.microsoft.applicationinsights.TelemetryClient;Node.js:
var applicationInsights = require("applicationinsights");
Hämta en TelemetryClient-instans
Hämta en instans av TelemetryClient (förutom i JavaScript på webbsidor):
För ASP.NET Core-appar och icke-HTTP/Worker för .NET/.NET Core-appar rekommenderar vi att du hämtar en instans av från containern för beroendeinjektion enligt förklaringen i TelemetryClient respektive dokumentation.
Om du använder AzureFunctions v2+ eller Azure WebJobs v3+ följer du det här dokumentet.
C#
private TelemetryClient telemetry = new TelemetryClient();
Om du ser att den här metoden är föråldrad kan du läsa mer i microsoft/ApplicationInsights-dotnet#1152.
Visual Basic
Private Dim telemetry As New TelemetryClient
Java
private TelemetryClient telemetry = new TelemetryClient();
Node.js
var telemetry = applicationInsights.defaultClient;
TelemetryClient är trådsäkert.
För ASP.NET- och Java-projekt hämtas inkommande HTTP-begäranden automatiskt. Du kanske vill skapa ytterligare instanser av TelemetryClient för andra moduler i din app. Du kan till exempel ha en TelemetryClient-instans i mellanprogramklassen för att rapportera affärslogikhändelser. Du kan ange egenskaper som UserId och DeviceId för att identifiera datorn. Den här informationen är kopplad till alla händelser som instansen skickar.
C#
TelemetryClient.Context.User.Id = "...";
TelemetryClient.Context.Device.Id = "...";
Java
telemetry.getContext().getUser().setId("...");
telemetry.getContext().getDevice().setId("...");
I Node.js projekt kan du använda för att skapa en ny instans, men detta rekommenderas endast för scenarier som kräver isolerad new applicationInsights.TelemetryClient(instrumentationKey?) konfiguration från defaultClient singletonen .
TrackEvent
I Application Insights är en anpassad händelse en datapunkt som du kan visa i Metrics Explorer som ett aggregerat antal och i Diagnostiksökning som enskilda förekomster. (Det är inte relaterat till MVC eller andra ramverk "händelser.")
Infoga TrackEvent anrop i koden för att räkna olika händelser. Hur ofta användarna väljer en viss funktion, hur ofta de uppnår specifika mål eller kanske hur ofta de gör särskilda typer av misstag.
I en spelapp kan du till exempel skicka en händelse när en användare vinner spelet:
JavaScript
appInsights.trackEvent({name:"WinGame"});
C#
telemetry.TrackEvent("WinGame");
Visual Basic
telemetry.TrackEvent("WinGame")
Java
telemetry.trackEvent("WinGame");
Node.js
telemetry.trackEvent({name: "WinGame"});
Anpassade händelser i Analytics
Telemetrin finns i tabellen på customEvents fliken Application Insights Logs (Programloggar) eller Usage Experience (Användningsupplevelse). Händelser kan komma från trackEvent(..) eller klicka på Plugin-programmet För automatisk insamling av analys.
Om sampling används visar egenskapen itemCount ett värde större än 1. Till exempel innebär itemCount==10 att av 10 anrop till trackEvent() överför samplingsprocessen bara ett av dem. För att få rätt antal anpassade händelser bör du därför använda kod som customEvents | summarize sum(itemCount) .
GetMetric
Information om hur du effektivt använder GetMetric()-anropet för att samla in lokalt föraggregeringsmått för .NET- och .NET Core-program finns i GetMetric-dokumentationen.
TrackMetric
Anteckning
Microsoft.ApplicationInsights.TelemetryClient.TrackMetric är inte den bästa metoden för att skicka mått. Mått bör alltid föraggregering över en tidsperiod innan de skickas. Använd en av Överlagringarna för GetMetric(..) för att hämta ett måttobjekt för åtkomst till SDK:s föraggregeringsfunktioner. Om du implementerar din egen föraggregeringslogik kan du använda metoden TrackMetric() för att skicka de resulterande aggregeringarna. Om ditt program kräver att ett separat telemetriobjekt skickas vid varje tillfälle utan aggregering över tid, har du förmodligen ett användningsfall för händelsetelemetri; se TelemetryClient.TrackEvent (Microsoft.ApplicationInsights.DataContracts.EventTelemetry).
Program Insights kan diagrammått som inte är kopplade till vissa händelser. Du kan till exempel övervaka en kölängd med jämna mellanrum. Med mått är de enskilda måtten av mindre intresse än variationerna och trenderna, så statistiska diagram är användbara.
Du kan använda API:et för att Insights skicka mått till Application TrackMetric(..) Insights. Det finns två sätt att skicka ett mått:
Enskilt värde. Varje gång du utför ett mått i ditt program skickar du motsvarande värde till Application Insights. Anta till exempel att du har ett mått som beskriver antalet objekt i en container. Under en viss tidsperiod lägger du först tre objekt i containern och sedan tar du bort två objekt. Därför skulle du anropa två
TrackMetricgånger: först skicka värdet3och sedan värdet-2. Program Insights lagrar båda värdena åt dig.Aggregation. När du arbetar med mått är varje enskild mätning sällan av intresse. En sammanfattning av vad som hände under en viss tidsperiod är i stället viktig. En sådan sammanfattning kallas aggregering. I exemplet ovan är den aggregerade måttsumman för den tidsperioden
1och antalet måttvärden är2. När du använder aggregeringsmetod anropar duTrackMetricbara en gång per tidsperiod och skickar mängdvärdena. Det här är den rekommenderade metoden eftersom det avsevärt kan minska kostnaderna och prestandakostnaderna genom att skicka färre datapunkter till Application Insights, samtidigt som all relevant information samlas in.
Exempel
Enskilda värden
Så här skickar du ett enda måttvärde:
JavaScript
appInsights.trackMetric({name: "queueLength", average: 42});
C#
var sample = new MetricTelemetry();
sample.Name = "queueLength";
sample.Value = 42.3;
telemetryClient.TrackMetric(sample);
Java
telemetry.trackMetric("queueLength", 42.0);
Node.js
telemetry.trackMetric({name: "queueLength", value: 42.0});
Anpassade mått i Analytics
Telemetrin är tillgänglig i tabellen customMetrics i Application Insights Analytics. Varje rad representerar ett anrop trackMetric(..) till i din app.
valueSum– Det här är summan av måtten. Om du vill hämta medelvärdet dividera du medvalueCount.valueCount– Antalet mått som aggregerades i det härtrackMetric(..)anropet.
Sidvisningar
I en enhets- eller webbsideapp skickas telemetri för sidvisning som standard när varje skärm eller sida läses in. Men du kan ändra det om du vill spåra sidvisningar vid ytterligare eller olika tidpunkter. I en app som visar flikar eller blad kanske du till exempel vill spåra en sida när användaren öppnar ett nytt blad.
Användar- och sessionsdata skickas som egenskaper tillsammans med sidvisningar, så att användar- och sessionsdiagram blir levande när det finns telemetri för sidvisning.
Anpassade sidvisningar
JavaScript
appInsights.trackPageView("tab1");
C#
telemetry.TrackPageView("GameReviewPage");
Visual Basic
telemetry.TrackPageView("GameReviewPage")
Java
telemetry.trackPageView("GameReviewPage");
Om du har flera flikar på olika HTML-sidor kan du även ange webbadressen:
appInsights.trackPageView("tab1", "http://fabrikam.com/page1.htm");
Sidvisningar för tidsinställning
Som standard mäts de tider som rapporteras som sidvisningens inläsningstid från när webbläsaren skickar begäran tills webbläsarens sidinläsningshändelse anropas.
I stället kan du antingen:
- Ange en explicit varaktighet i trackPageView-anropet:
appInsights.trackPageView("tab1", null, null, null, durationInMilliseconds);. - Använd tidsinställningssamtal för sidvisning
startTrackPageochstopTrackPage.
JavaScript
// To start timing a page:
appInsights.startTrackPage("Page1");
...
// To stop timing and log the page:
appInsights.stopTrackPage("Page1", url, properties, measurements);
Namnet som du använder som den första parametern associerar start- och stopp-anropen. Standardvärdet är det aktuella sidnamnet.
De resulterande sidinläsningstiderna som visas Metrics Explorer härleds från intervallet mellan start- och stopp-anropen. Det är upp till dig vilket intervall du faktiskt tar tid på.
Sidtelemetri i Analytics
I Analytics visar två tabeller data från webbläsaråtgärder:
- Tabellen
pageViewsinnehåller data om URL:en och sidrubriken - Tabellen
browserTimingsinnehåller data om klientprestanda, till exempel hur lång tid det tar att bearbeta inkommande data
Så här tar det för webbläsaren att bearbeta olika sidor:
browserTimings
| summarize avg(networkDuration), avg(processingDuration), avg(totalDuration) by name
Så här identifierar du populära webbläsare:
pageViews
| summarize count() by client_Browser
Om du vill associera sidvyer med AJAX-anrop ansluter du till beroenden:
pageViews
| join (dependencies) on operation_Id
TrackRequest
Server-SDK:n använder TrackRequest för att logga HTTP-begäranden.
Du kan också anropa den själv om du vill simulera begäranden i en kontext där du inte har webbtjänstmodulen igång.
Det rekommenderade sättet att skicka telemetri för förfrågningar är dock att begäran fungerar som en åtgärdskontext.
Åtgärdskontext
Du kan korrelera telemetriobjekt genom att koppla dem till åtgärdskontexten. Standardmodulen för spårning av förfrågningar gör detta för undantag och andra händelser som skickas när en HTTP-begäran bearbetas. I Sök och analys kandu enkelt hitta händelser som är associerade med begäran med hjälp av dess åtgärds-ID.
Se Telemetrikorrelation i Application Insights för mer information om korrelation.
När du spårar telemetri manuellt är det enklaste sättet att säkerställa telemetrikorrelation med hjälp av det här mönstret:
C#
// Establish an operation context and associated telemetry item:
using (var operation = telemetryClient.StartOperation<RequestTelemetry>("operationName"))
{
// Telemetry sent in here will use the same operation ID.
...
telemetryClient.TrackTrace(...); // or other Track* calls
...
// Set properties of containing telemetry item--for example:
operation.Telemetry.ResponseCode = "200";
// Optional: explicitly send telemetry item:
telemetryClient.StopOperation(operation);
} // When operation is disposed, telemetry item is sent.
Tillsammans med att ange en StartOperation åtgärdskontext skapar ett telemetriobjekt av den typ som du anger. Den skickar telemetriobjektet när du tar bort åtgärden, eller om du uttryckligen anropar StopOperation . Om du använder RequestTelemetry som telemetrityp anges varaktigheten till tidsintervallet mellan start och stopp.
Telemetriobjekt som rapporteras inom ett åtgärdsområde blir underordnade till sådana åtgärder. Åtgärdskontexterna kan kapslas.
I Sök används åtgärdskontexten för att skapa listan Relaterade objekt:

Mer information om spårning av anpassade åtgärder finns i Spåra anpassade åtgärder med Application Insights .NET SDK.
Begäranden i Analytics
I Application Insights Analyticsvisas begäranden i requests tabellen.
Om samplingen används visar egenskapen itemCount ett värde som är större än 1. Till exempel innebär itemCount==10 att av 10 anrop till trackRequest() överför samplingsprocessen bara ett av dem. Om du vill få ett korrekt antal begäranden och genomsnittlig varaktighet segmenterat efter begärandenamn använder du kod som:
requests
| summarize count = sum(itemCount), avgduration = avg(duration) by name
TrackException
Skicka undantag till Program Insights:
- För att räknadem , som en indikation på frekvensen för ett problem.
- För att undersöka enskilda förekomster.
Rapporterna innehåller stackspårningarna.
C#
try
{
...
}
catch (Exception ex)
{
telemetry.TrackException(ex);
}
Java
try {
...
} catch (Exception ex) {
telemetry.trackException(ex);
}
JavaScript
try
{
...
}
catch (ex)
{
appInsights.trackException({exception: ex});
}
Node.js
try
{
...
}
catch (ex)
{
telemetry.trackException({exception: ex});
}
SDK:erna fångar upp många undantag automatiskt, så du behöver inte alltid anropa TrackException explicit.
- ASP.NET: Skriv kod för att fånga upp undantag.
- Java EE: Undantag fångas automatiskt.
- JavaScript: Undantag fångas automatiskt. Om du vill inaktivera automatisk insamling lägger du till en rad i kodfragmentet som du infogar på webbsidorna:
({
instrumentationKey: "your key",
disableExceptionTracking: true
})
Undantag i Analytics
I Application Insights Analyticsvisas undantag i exceptions tabellen.
Om sampling används visar egenskapen itemCount ett värde som är större än 1. Till exempel innebär itemCount==10 att av 10 anrop till trackException() överför samplingsprocessen bara ett av dem. Om du vill få ett korrekt antal undantag segmenterade efter typ av undantag använder du kod som:
exceptions
| summarize sum(itemCount) by type
Den mesta viktiga stackinformationen har redan extraherats i separata variabler, men du kan plocka isär strukturen details för att få mer. Eftersom den här strukturen är dynamisk bör du typge resultatet till den typ du förväntar dig. Ett exempel:
exceptions
| extend method2 = tostring(details[0].parsedStack[1].method)
Om du vill associera undantag med deras relaterade begäranden använder du en koppling:
exceptions
| join (requests) on operation_Id
TrackTrace
Använd TrackTrace för att diagnostisera problem genom att skicka en "sökväg" till Application Insights. Du kan skicka segment med diagnostikdata och inspektera dem i Diagnostiksökning.
I .NET-loggkort använder du det här API:et för att skicka loggar från tredje part till portalen.
I Java samlar programmet Insights Java-agenten automatiskt in och skickar loggar till portalen.
C#
telemetry.TrackTrace(message, SeverityLevel.Warning, properties);
Java
telemetry.trackTrace(message, SeverityLevel.Warning, properties);
Node.js
telemetry.trackTrace({
message: message,
severity: applicationInsights.Contracts.SeverityLevel.Warning,
properties: properties
});
JavaScript på klient-/webbläsarsidan
trackTrace({
message: string,
properties?: {[string]:string},
severityLevel?: SeverityLevel
})
Logga en diagnostikhändelse, till exempel att ange eller lämna en metod.
| Parameter | Beskrivning |
|---|---|
message |
Diagnostikdata. Kan ta mycket längre tid än ett namn. |
properties |
Mappning av sträng till sträng: Ytterligare data som används för att filtrera undantag i portalen. Standardvärdet är tomt. |
severityLevel |
Värden som stöds: SeverityLevel.ts |
Du kan söka efter meddelandeinnehåll, men (till skillnad från egenskapsvärden) kan du inte filtrera på det.
Storleksgränsen för message är mycket högre än egenskapsgränsen.
En fördel med TrackTrace är att du kan placera relativt långa data i meddelandet. Du kan till exempel koda POST-data där.
Dessutom kan du lägga till en allvarlighetsgrad i meddelandet. Och precis som med annan telemetri kan du lägga till egenskapsvärden som hjälper dig att filtrera eller söka efter olika uppsättningar av spårningar. Ett exempel:
C#
var telemetry = new Microsoft.ApplicationInsights.TelemetryClient();
telemetry.TrackTrace("Slow database response",
SeverityLevel.Warning,
new Dictionary<string,string> { {"database", db.ID} });
Java
Map<String, Integer> properties = new HashMap<>();
properties.put("Database", db.ID);
telemetry.trackTrace("Slow Database response", SeverityLevel.Warning, properties);
I Sökkan du sedan enkelt filtrera bort alla meddelanden med en viss allvarlighetsgrad som är relaterade till en viss databas.
Spårningar i Analytics
I Application Insights Analyticsvisas anrop till TrackTrace i traces tabellen.
Om sampling används visar egenskapen itemCount ett värde större än 1. Till exempel innebär itemCount==10 att av 10 anrop till trackTrace() , överförde samplingsprocessen bara ett av dem. För att få rätt antal spårningssamtal bör du därför använda kod som traces | summarize sum(itemCount) .
TrackDependency
Använd TrackDependency-anropet för att spåra svarstider och lyckade anrop till ett externt kodstycke. Resultaten visas i beroendediagrammen i portalen. Kodfragmentet nedan måste läggas till överallt där ett beroendeanrop görs.
Anteckning
För .NET och .NET Core kan du alternativt använda metoden (tillägg) som fyller de egenskaper som behövs för korrelation och vissa andra egenskaper som starttid och varaktighet så att du inte behöver skapa en anpassad timer som med exemplen TelemetryClient.StartOperation DependencyTelemetry nedan. Mer information finns i avsnittet om utgående beroendespårning i den här artikeln.
C#
var success = false;
var startTime = DateTime.UtcNow;
var timer = System.Diagnostics.Stopwatch.StartNew();
try
{
success = dependency.Call();
}
catch(Exception ex)
{
success = false;
telemetry.TrackException(ex);
throw new Exception("Operation went wrong", ex);
}
finally
{
timer.Stop();
telemetry.TrackDependency("DependencyType", "myDependency", "myCall", startTime, timer.Elapsed, success);
}
Java
boolean success = false;
Instant startTime = Instant.now();
try {
success = dependency.call();
}
finally {
Instant endTime = Instant.now();
Duration delta = Duration.between(startTime, endTime);
RemoteDependencyTelemetry dependencyTelemetry = new RemoteDependencyTelemetry("My Dependency", "myCall", delta, success);
dependencyTelemetry.setTimeStamp(startTime);
telemetry.trackDependency(dependencyTelemetry);
}
Node.js
var success = false;
var startTime = new Date().getTime();
try
{
success = dependency.Call();
}
finally
{
var elapsed = new Date() - startTime;
telemetry.trackDependency({
dependencyTypeName: "myDependency",
name: "myCall",
duration: elapsed,
success: success
});
}
Kom ihåg att server-API:erna innehåller en beroendemodul som identifierar och spårar vissa beroendeanrop automatiskt, till exempel till databaser och REST-API:er. Du måste installera en agent på servern för att modulen ska fungera.
I Java kan många beroendeanrop spåras automatiskt med hjälp av Application Insights Java-agenten.
Du använder det här anropet om du vill spåra anrop som inte fångas upp av den automatiserade spårningen.
Om du vill inaktivera standardmodulen för beroendespårning i C# redigerarApplicationInsights.config och tar bort referensen till DependencyCollector.DependencyTrackingTelemetryModule . För Java, se förhindra specifik automatiskt insamlad telemetri.
Beroenden i Analytics
I Application Insights Analyticsvisas trackDependency-anrop i dependencies tabellen.
Om sampling används visar egenskapen itemCount ett värde större än 1. Till exempel innebär itemCount==10 att av 10 anrop till trackDependency() överförde samplingsprocessen bara ett av dem. Om du vill få rätt antal beroenden segmenterade efter målkomponent använder du kod som:
dependencies
| summarize sum(itemCount) by target
Om du vill associera beroenden med deras relaterade begäranden använder du en koppling:
dependencies
| join (requests) on operation_Id
Rensa data
Vanligtvis skickar SDK data med fasta intervall (vanligtvis 30 sekunder) eller när bufferten är full (vanligtvis 500 objekt). I vissa fall kan du dock vilja tömma bufferten, till exempel om du använder SDK i ett program som stängs av.
C#
telemetry.Flush();
// Allow some time for flushing before shutdown.
System.Threading.Thread.Sleep(5000);
Java
telemetry.flush();
//Allow some time for flushing before shutting down
Thread.sleep(5000);
Node.js
telemetry.flush();
Funktionen är asynkron för serverns telemetrikanal.
Vi rekommenderar att flush()-metoden används i programmets avstängningsaktivitet.
Autentiserade användare
I en webbapp identifieras användare (som standard) av cookies. En användare kan räknas mer än en gång om de kommer åt din app från en annan dator eller webbläsare, eller om de tar bort cookies.
Om användarna loggar in på din app kan du få ett mer korrekt antal genom att ange det autentiserade användar-ID:t i webbläsarkoden:
JavaScript
// Called when my app has identified the user.
function Authenticated(signInId) {
var validatedId = signInId.replace(/[,;=| ]+/g, "_");
appInsights.setAuthenticatedUserContext(validatedId);
...
}
I ett ASP.NET MVC-webbprogram, till exempel:
Razor
@if (Request.IsAuthenticated)
{
<script>
appInsights.setAuthenticatedUserContext("@User.Identity.Name
.Replace("\\", "\\\\")"
.replace(/[,;=| ]+/g, "_"));
</script>
}
Du behöver inte använda användarens faktiska inloggningsnamn. Det behöver bara vara ett ID som är unikt för den användaren. Det får inte innehålla blanksteg eller något av tecknen ,;=| .
Användar-ID:t anges också i en sessions-cookie och skickas till servern. Om server-SDK har installerats skickas det autentiserade användar-ID:t som en del av kontextegenskaperna för både klient- och servertelemetri. Du kan sedan filtrera och söka efter den.
Om din app grupperar användare till konton kan du även skicka en identifierare för kontot (med samma teckenbegränsningar).
appInsights.setAuthenticatedUserContext(validatedId, accountId);
I Metrics Explorerkan du skapa ett diagram som räknar användare, autentiserade och användarkonton.
Du kan också Söka efter klientdatapunkter med specifika användarnamn och konton.
Anteckning
Egenskapen EnableAuthenticationTrackingJavaScript i klassen ApplicationInsightsServiceOptions i .NET Core SDK förenklar den JavaScript-konfiguration som krävs för att mata in användarnamnet som autentiserings-ID för varje spårning som skickas av Application Insights JavaScript SDK. När den här egenskapen är inställd på sant skrivs användarnamnet från användaren i ASP.NET Core ut tillsammans med telemetripå klientsidan, så det behövs inte längre att lägga till manuellt eftersom det redan matas in av SDK för appInsights.setAuthenticatedUserContext ASP.NET Core. Autentiserings-ID:t skickas också till servern där SDK i .NET Core identifierar det och använder det för all telemetri på serversidan, enligt beskrivningen i JavaScript API-referensen. Men för JavaScript-program som inte fungerar på samma sätt som ASP.NET Core MVC (till exempel SPA-webbappar) skulle du fortfarande behöva lägga till appInsights.setAuthenticatedUserContext manuellt.
Filtrera, söka och segmentera data med hjälp av egenskaper
Du kan koppla egenskaper och mått till dina händelser (och även till mått, sidvisningar, undantag och andra telemetridata).
Egenskaper är strängvärden som du kan använda för att filtrera telemetrin i användningsrapporterna. Om din app till exempel innehåller flera spel kan du koppla namnet på spelet till varje händelse så att du kan se vilka spel som är mer populära.
Stränglängden har en gräns på 8192. (Om du vill skicka stora databitar använder du meddelandeparametern i TrackTrace.)
Mått är numeriska värden som kan visas grafiskt. Du kanske till exempel vill se om det sker en gradvis ökning av poängen som din nana uppnår. Graferna kan segmenteras av de egenskaper som skickas med händelsen, så att du kan få separata eller staplade grafer för olika spel.
För att måttvärden ska visas korrekt bör de vara större än eller lika med 0.
Det finns vissa begränsningar för antalet egenskaper, egenskapsvärden och mått som du kan använda.
JavaScript
appInsights.trackEvent({
name: 'some event',
properties: { // accepts any type
prop1: 'string',
prop2: 123.45,
prop3: { nested: 'objects are okay too' }
}
});
appInsights.trackPageView({
name: 'some page',
properties: { // accepts any type
prop1: 'string',
prop2: 123.45,
prop3: { nested: 'objects are okay too' }
}
});
C#
// Set up some properties and metrics:
var properties = new Dictionary <string, string>
{{"game", currentGame.Name}, {"difficulty", currentGame.Difficulty}};
var metrics = new Dictionary <string, double>
{{"Score", currentGame.Score}, {"Opponents", currentGame.OpponentCount}};
// Send the event:
telemetry.TrackEvent("WinGame", properties, metrics);
Node.js
// Set up some properties and metrics:
var properties = {"game": currentGame.Name, "difficulty": currentGame.Difficulty};
var metrics = {"Score": currentGame.Score, "Opponents": currentGame.OpponentCount};
// Send the event:
telemetry.trackEvent({name: "WinGame", properties: properties, measurements: metrics});
Visual Basic
' Set up some properties:
Dim properties = New Dictionary (Of String, String)
properties.Add("game", currentGame.Name)
properties.Add("difficulty", currentGame.Difficulty)
Dim metrics = New Dictionary (Of String, Double)
metrics.Add("Score", currentGame.Score)
metrics.Add("Opponents", currentGame.OpponentCount)
' Send the event:
telemetry.TrackEvent("WinGame", properties, metrics)
Java
Map<String, String> properties = new HashMap<String, String>();
properties.put("game", currentGame.getName());
properties.put("difficulty", currentGame.getDifficulty());
Map<String, Double> metrics = new HashMap<String, Double>();
metrics.put("Score", currentGame.getScore());
metrics.put("Opponents", currentGame.getOpponentCount());
telemetry.trackEvent("WinGame", properties, metrics);
Anteckning
Var noga med att inte logga personligt identifierbar information i egenskaper.
Alternativt sätt att ange egenskaper och mått
Om det är mer praktiskt kan du samla in parametrarna för en händelse i ett separat objekt:
var event = new EventTelemetry();
event.Name = "WinGame";
event.Metrics["processingTime"] = stopwatch.Elapsed.TotalMilliseconds;
event.Properties["game"] = currentGame.Name;
event.Properties["difficulty"] = currentGame.Difficulty;
event.Metrics["Score"] = currentGame.Score;
event.Metrics["Opponents"] = currentGame.Opponents.Length;
telemetry.TrackEvent(event);
Varning
Återanvänd inte samma telemetriobjektinstans ( i det här event exemplet) för att anropa Track*() flera gånger. Detta kan leda till att telemetri skickas med felaktig konfiguration.
Anpassade mått och egenskaper i Analytics
I Analyticsvisas anpassade mått och egenskaper i attributen customMeasurements och för varje customDimensions telemetripost.
Om du till exempel har lagt till en egenskap med namnet "spel" i din begärandetelemetri räknar den här frågan antalet förekomster av olika värden för "spel" och visar medelvärdet av det anpassade måttet "poäng":
requests
| summarize sum(itemCount), avg(todouble(customMeasurements.score)) by tostring(customDimensions.game)
Observera att:
- När du extraherar ett värde från customDimensions eller customMeasurements JSON har det dynamisk typ, så du måste typge
tostringdet ellertodouble. - Om du vill ta hänsyn till risken för samplingbör du använda ,
sum(itemCount)intecount().
Tidshändelser
Ibland vill du ta reda på hur lång tid det tar att utföra en åtgärd. Du kanske till exempel vill veta hur lång tid det tar för användarna att överväga val i ett spel. Du kan använda måttparametern för detta.
C#
var stopwatch = System.Diagnostics.Stopwatch.StartNew();
// ... perform the timed action ...
stopwatch.Stop();
var metrics = new Dictionary <string, double>
{{"processingTime", stopwatch.Elapsed.TotalMilliseconds}};
// Set up some properties:
var properties = new Dictionary <string, string>
{{"signalSource", currentSignalSource.Name}};
// Send the event:
telemetry.TrackEvent("SignalProcessed", properties, metrics);
Java
long startTime = System.currentTimeMillis();
// Perform timed action
long endTime = System.currentTimeMillis();
Map<String, Double> metrics = new HashMap<>();
metrics.put("ProcessingTime", (double)endTime-startTime);
// Setup some properties
Map<String, String> properties = new HashMap<>();
properties.put("signalSource", currentSignalSource.getName());
// Send the event
telemetry.trackEvent("SignalProcessed", properties, metrics);
Standardegenskaper för anpassad telemetri
Om du vill ange standardegenskapsvärden för några av de anpassade händelser som du skriver kan du ange dem i en TelemetryClient-instans. De är kopplade till varje telemetriobjekt som skickas från klienten.
C#
using Microsoft.ApplicationInsights.DataContracts;
var gameTelemetry = new TelemetryClient();
gameTelemetry.Context.GlobalProperties["Game"] = currentGame.Name;
// Now all telemetry will automatically be sent with the context property:
gameTelemetry.TrackEvent("WinGame");
Visual Basic
Dim gameTelemetry = New TelemetryClient()
gameTelemetry.Context.GlobalProperties("Game") = currentGame.Name
' Now all telemetry will automatically be sent with the context property:
gameTelemetry.TrackEvent("WinGame")
Java
import com.microsoft.applicationinsights.TelemetryClient;
import com.microsoft.applicationinsights.TelemetryContext;
...
TelemetryClient gameTelemetry = new TelemetryClient();
TelemetryContext context = gameTelemetry.getContext();
context.getProperties().put("Game", currentGame.Name);
gameTelemetry.TrackEvent("WinGame");
Node.js
var gameTelemetry = new applicationInsights.TelemetryClient();
gameTelemetry.commonProperties["Game"] = currentGame.Name;
gameTelemetry.TrackEvent({name: "WinGame"});
Enskilda telemetrianrop kan åsidosätta standardvärdena i deras egenskapsordlistor.
För JavaScript-webbklienter använder du JavaScript-telemetriinitierare.
Om du vill lägga till egenskaper i all telemetri, inklusive data från standardsamlingsmoduler, implementerar du ITelemetryInitializer.
Sampling, filtrering och bearbetning av telemetri
Du kan skriva kod för att bearbeta telemetrin innan den skickas från SDK:n. Bearbetningen omfattar data som skickas från standardmodulerna för telemetri, till exempel insamling av HTTP-begäranden och beroendeinsamling.
Lägg till egenskaper i telemetrin genom att implementera ITelemetryInitializer . Du kan till exempel lägga till versionsnummer eller värden som beräknas från andra egenskaper.
Filtrering kan ändra eller ta bort telemetri innan den skickas från SDK:n genom att implementera ITelemetryProcessor . Du styr vad som skickas eller tas bort, men du måste ta hänsyn till effekten på dina mått. Beroende på hur du tar bort objekt kan du förlora möjligheten att navigera mellan relaterade objekt.
Sampling är en paketerad lösning för att minska mängden data som skickas från din app till portalen. Det gör det utan att de mått som visas påverkas. Och det gör det utan att det påverkar din möjlighet att diagnostisera problem genom att navigera mellan relaterade objekt, till exempel undantag, begäranden och sidvisningar.
Inaktivera telemetri
Stoppa och starta insamling och överföring av telemetri dynamiskt:
C#
using Microsoft.ApplicationInsights.Extensibility;
TelemetryConfiguration.Active.DisableTelemetry = true;
Java
telemetry.getConfiguration().setTrackingDisabled(true);
Om du vill inaktivera valda standardinsamlare, till exempel prestandaräknare, HTTP-begäranden eller beroenden, tar du bort eller kommenterar bort relevanta rader i ApplicationInsights.config. Du kan till exempel göra detta om du vill skicka dina egna TrackRequest-data.
Node.js
telemetry.config.disableAppInsights = true;
Inaktivera valda standardinsamlare– till exempel prestandaräknare, HTTP-begäranden eller beroenden – vid initieringstid, kedjekonfigurationsmetoder till SDK-initieringskoden:
applicationInsights.setup()
.setAutoCollectRequests(false)
.setAutoCollectPerformance(false)
.setAutoCollectExceptions(false)
.setAutoCollectDependencies(false)
.setAutoCollectConsole(false)
.start();
Om du vill inaktivera dessa insamlare efter initieringen använder du objektet Konfiguration: applicationInsights.Configuration.setAutoCollectRequests(false)
Utvecklarläge
Under felsökningen är det bra att få telemetrin att gå igenom pipelinen så att du kan se resultatet direkt. Du får också ytterligare meddelanden som hjälper dig att spåra eventuella problem med telemetrin. Stäng av den i produktion eftersom det kan göra appen långsammare.
C#
TelemetryConfiguration.Active.TelemetryChannel.DeveloperMode = true;
Visual Basic
TelemetryConfiguration.Active.TelemetryChannel.DeveloperMode = True
Node.js
Till Node.js kan du aktivera utvecklarläge genom att aktivera intern loggning via och ange till 0, vilket gör att din telemetri skickas så snart setInternalLogging maxBatchSize den samlas in.
applicationInsights.setup("ikey")
.setInternalLogging(true, true)
.start()
applicationInsights.defaultClient.config.maxBatchSize = 0;
Ange instrumenteringsnyckeln för vald anpassad telemetri
C#
var telemetry = new TelemetryClient();
telemetry.InstrumentationKey = "---my key---";
// ...
Dynamisk instrumenteringsnyckel
För att undvika att blanda telemetri från utvecklings-, test- och produktionsmiljöer kan du skapa separata program Insights-resurser och ändra deras nycklar, beroende på miljön.
I stället för att hämta instrumenteringsnyckeln från konfigurationsfilen kan du ange den i koden. Ange nyckeln i en initieringsmetod, till exempel global.aspx.cs i en ASP.NET tjänst:
C#
protected void Application_Start()
{
Microsoft.ApplicationInsights.Extensibility.
TelemetryConfiguration.Active.InstrumentationKey =
// - for example -
WebConfigurationManager.Settings["ikey"];
...
}
JavaScript
appInsights.config.instrumentationKey = myKey;
På webbsidor kanske du vill ställa in den från webbserverns tillstånd, i stället för att koda den bokstavligen i skriptet. Till exempel på en webbsida som genereras i en ASP.NET app:
JavaScript i Razor
<script type="text/javascript">
// Standard Application Insights webpage script:
var appInsights = window.appInsights || function(config){ ...
// Modify this part:
}({instrumentationKey:
// Generate from server property:
@Microsoft.ApplicationInsights.Extensibility.
TelemetryConfiguration.Active.InstrumentationKey;
}) // ...
String instrumentationKey = "00000000-0000-0000-0000-000000000000";
if (instrumentationKey != null)
{
TelemetryConfiguration.getActive().setInstrumentationKey(instrumentationKey);
}
TelemetryContext
TelemetryClient har en kontextegenskap som innehåller värden som skickas tillsammans med alla telemetridata. De anges vanligtvis av standardmodulerna för telemetri, men du kan också ange dem själv. Ett exempel:
telemetry.Context.Operation.Name = "MyOperationName";
Om du själv anger något av dessa värden bör du överväga att ta bort den relevanta raden frånApplicationInsights.config, så att dina värden och standardvärdena inte blir förvirrade.
- Komponent: Appen och dess version.
- Enhet: Data om enheten där appen körs. (I webbappar är detta den server eller klientenhet som telemetrin skickas från.)
- InstrumentationKey: Programmet Insights resurs i Azure där telemetrin visas. Den hämtas vanligtvis från ApplicationInsights.config.
- Plats: Enhetens geografiska plats.
- Åtgärd: Den aktuella HTTP-begäran i webbappar. I andra apptyper kan du ställa in detta för att gruppera händelser.
- ID: Ett genererat värde som korrelerar olika händelser, så att du kan hitta relaterade objekt när du inspekterar en händelse i diagnostiksökningen.
- Namn: En identifierare, vanligtvis URL:en för HTTP-begäran.
- SyntheticSource: Om den inte är null eller tom, en sträng som anger att källan för begäran har identifierats som en robot eller ett webbtest. Som standard undantas den från beräkningar i Metrics Explorer.
- Session: Användarens session. ID:t anges till ett genererat värde som ändras när användaren inte har varit aktiv på ett tag.
- Användare: Användarinformation.
Gränser
Det finns vissa begränsningar för antalet mått och händelser per program, det vill säga per Instrumentation-nyckel. Gränserna beror på vilken prisplan du väljer.
| Resurs | Standardgräns | Anteckning |
|---|---|---|
| Totala data per dag | 100 GB | Du kan minska datamängden genom att ange ett tak. Om du behöver mer data kan du öka gränsen i portalen, upp till 1 000 GB. Skicka e-post till för kapaciteter som är större än 1 000 GB AIDataCap@microsoft.com . |
| Begränsning | 32 000 händelser/sekund | Gränser är mätt under en minut. |
| Data lagrings loggar | 30-730 dagar | Den här resursen är för loggar. |
| Mått för datakvarhållning | 90 dagar | Den här resursen är för Metrics Explorer. |
| Flerstegstest för tillgänglighet (kvarhållning av detaljerade resultat) | 90 dagar | Den här resursen innehåller detaljerade resultat för varje steg. |
| Maximal storlek för telemetri | 64 kB | |
| Maximalt antal telemetri objekt per batch | 64 KB | |
| Namnlängd för egenskaper och mätvärden | 150 | Se typ scheman. |
| Stränglängd för egenskapsvärde | 8 192 | Se typ scheman. |
| Längd för spårnings- och undantagsmeddelande | 32 768 | Se typ scheman. |
| Tillgänglighetstester (antal per app) | 100 | |
| Data kvarhållning för profilering | 5 dagar | |
| Profilerade data har skickats per dag | 10 GB |
Mer information finns i Om priser och kvoter i Application Insights.
Använd sampling för att undvika att nå datahastighetsgränsen.
Information om hur länge data sparas finns i Datalagring och sekretess.
Referensdokument
SDK-kod
Frågor
Vilka undantag kan Track_()-anrop?
Inga. Du behöver inte omsluta dem i try-catch-satser. Om SDK stöter på problem loggas meddelanden i felsökningskonsolens utdata och – om meddelandena skickas via diagnostisk sökning.
Finns det REST API att hämta data från portalen?
Ja, API:et för dataåtkomst. Andra sätt att extrahera data är export från Analytics till Power BI och kontinuerlig export.