Presentazione dello strumento Analisi in Application InsightsA tour of Analytics in Application Insights

L'analisi è lo strumento di ricerca avanzato incluso in Application Insights.Analytics is the powerful search feature of Application Insights. Queste pagine descrivono il linguaggio di query di Log Analytics.These pages describe the Log Analytics query language.

Di seguito sono descritte alcune query di base utili per iniziare.Let's take a walk through some basic queries to get you started.

Connettersi ai dati di Application InsightsConnect to your Application Insights data

Aprire Analisi dal pannello Panoramica dell'app in Application Insights:Open Analytics from your app's overview blade in Application Insights:

In portal.azure.com, aprire la risorsa di Application Insights e selezionare Analytics.

Take: visualizzare n righeTake: show me n rows

I punti dati che registrano le operazioni degli utenti (in genere richieste HTTP ricevute dall'app Web) vengono archiviati in una tabella denominata requests.Data points that log user operations (typically HTTP requests received by your web app) are stored in a table called requests. Ogni riga è un punto dati di telemetria ricevuto da Application Insights SDK nell'applicazione.Each row is a telemetry data point received from the Application Insights SDK in your app.

Si inizierà ora a esaminare alcune righe di esempio della tabella:Let's start by examining a few sample rows of the table:

results

Nota

Inserire il cursore in un punto nell'istruzione prima fare clic su Vai.Put the cursor somewhere in the statement before you click Go. È possibile suddividere un'istruzione su più righe, ma non inserire righe vuote in un'istruzione.You can split a statement over more than one line, but don't put blank lines in a statement. Le righe vuote sono un modo pratico per mantenere più query separate nella finestra.Blank lines are a convenient way to keep several separate queries in the window.

Scegliere le colonne, trascinarle, creare gruppi in base alle colonne e applicare filtri:Choose columns, drag them, group by columns, and filter:

Fare clic sulla selezione di colonna in alto a destra dei risultati

Espandere un elemento per visualizzare i dettagli:Expand any item to see the detail:

Scegliere Tabella e usare Configura colonne

Nota

Fare clic sull'intestazione di una colonna per riordinare i risultati disponibili nel Web browser.Click the header of a column to re-order the results available in the web browser. Tuttavia, tenere presente che per un set di risultati di grandi dimensioni, il numero di righe scaricate nel browser è limitato.But be aware that for a large result set, the number of rows downloaded to the browser is limited. Questa modalità di ordinamento si limita a ordinare il set di risultati restituiti e non sempre illustra gli elementi effettivi massimi o minimi.Sorting this way simply sorts the returned result set and doesn't always show you the actual highest or lowest items. Per ordinarli in modo affidabile, usare l'operatore top o sort.To sort items reliably, use the top or sort operator.

Eseguire una query tra applicazioniQuery across applications

Se si vogliono combinare dati da più applicazioni di Application Insights, usare la parola chiave app per specificare l'applicazione con il nome della tabella.If you want to combine data from multiple Application Insights applications, use the app keyword to specify the application along with the table name. Questa query combina le richieste da due diverse applicazioni usando il comando union.This query combines the requests from two different applications using the union command.


    union app('fabrikamstage').requests, app('fabrikamprod').requests

Top e sortTop and sort

take è utile per ottenere un rapido esempio di un risultato, ma mostra le righe della tabella senza un ordine particolare.take is useful to get a quick sample of a result, but it shows rows from the table in no particular order. Per ottenere una visualizzazione ordinata, usare top per un campione o sort per l'intera tabella.To get an ordered view, use top (for a sample) or sort (over the whole table).

Mostrare le prime n righe, ordinate in base a una colonna specifica:Show me the first n rows, ordered by a particular column:


    requests | top 10 by timestamp desc
  • Sintassi: la maggior parte degli operatori ha parametri di tipo parola chiave, ad esempio by.Syntax: Most operators have keyword parameters such as by.
  • desc = ordine decrescente, asc = ordine crescente.desc = descending order, asc = ascending.

top... è più efficiente di sort ... | take....top... is a more performant way of saying sort ... | take.... Si sarebbe potuto scrivere:We could have written:


    requests | sort by timestamp desc | take 10

Il risultato sarebbe stato lo stesso, ma l'esecuzione sarebbe risultata più lenta.The result would be the same, but it would run a bit more slowly. Sarebbe stato anche possibile scrivere order, che è un alias di sort.(You could also write order, which is an alias of sort.)

Le intestazioni di colonna nella visualizzazione tabella possono essere usate anche per ordinare i risultati sullo schermo.The column headers in the table view can also be used to sort the results on the screen. Naturalmente, se è stato usato take o top per recuperare solo parte di una tabella, fare clic sull'intestazione di colonna per riordinare solo i record recuperati.But of course, if you've used take or top to retrieve just part of a table, clicking on the column header will only re-order the records you've retrieved.

Where: filtrare in base a una condizioneWhere: filtering on a condition

Di seguito sono illustrate solo le richieste che hanno restituito un particolare codice di risultato:Let's see just requests that returned a particular result code:


    requests
    | where resultCode  == "404"
    | take 10

L'operatore where accetta un'espressione booleana.The where operator takes a Boolean expression. Tenere presente i punti chiave seguenti:Here are some key points about them:

  • and, or: operatori booleaniand, or: Boolean operators
  • ==, <>, !=: uguale a e non uguale a==, <>, != : equal and not equal
  • =~, !~: stringa senza distinzione tra maiuscole e minuscole uguale a e non uguale a.=~, !~ : case-insensitive string equal and not equal. Sono disponibili numerosi altri operatori di confronto delle stringhe.There are lots more string comparison operators.

Individuare le richieste non riusciteFind unsuccessful requests

Convertire un valore di stringa in un numero intero per usare il confronto basato sul criterio "maggiore di":Convert a string value to an integer to use greater-than comparison:


    requests
    | where isnotempty(resultCode) and toint(resultCode) >= 400

TempoTime

Per impostazione predefinita, le query sono limitate alle ultime 24 ore.By default, your queries are restricted to the last 24 hours. Questo intervallo, però, può essere modificato:But you can change this range:

Eseguire l'override dell'intervallo di tempo scrivendo una query che includa timestamp in una clausola where.Override the time range by writing any query that mentions timestamp in a where-clause. ad esempio:For example:


    // What were the slowest requests over the past 3 days?
    requests
    | where timestamp > ago(3d)  // Override the time range
    | top 5 by duration

La funzionalità di intervallo di tempo è equivalente a una clausola 'where' inserita dopo ogni menzione di una delle tabelle di origine.The time range feature is equivalent to a 'where' clause inserted after each mention of one of the source tables.

ago(3d) significa 'tre giorni fa'.ago(3d) means 'three days ago'. Le altre unità di tempo includono ore (2h, 2.5h), minuti (25m) e secondi (10s).Other units of time include hours (2h, 2.5h), minutes (25m), and seconds (10s).

Altri esempi:Other examples:


    // Last calendar week:
    requests
    | where timestamp > startofweek(now()-7d)
        and timestamp < startofweek(now())
    | top 5 by duration

    // First hour of every day in past seven days:
    requests
    | where timestamp > ago(7d) and timestamp % 1d < 1h
    | top 5 by duration

    // Specific dates:
    requests
    | where timestamp > datetime(2016-11-19) and timestamp < datetime(2016-11-21)
    | top 5 by duration

Riferimento su date e ore.Dates and times reference.

Project: selezionare, rinominare e calcolare le colonneProject: select, rename, and compute columns

Usare project per selezionare solo le colonne desiderate:Use project to pick out just the columns you want:


    requests | top 10 by timestamp desc
             | project timestamp, name, resultCode

È inoltre possibile rinominare le colonne e definire nuove colonne:You can also rename columns and define new ones:


    requests
    | top 10 by timestamp desc
    | project  
            name,
            response = resultCode,
            timestamp,
            ['time of day'] = floor(timestamp % 1d, 1s)

risultato

  • I nomi di colonna possono includere spazi o simboli se sono racchiusi tra parentesi quadre, ad esempio: ['...'] o ["..."]Column names can include spaces or symbols if they are bracketed like this: ['...'] or ["..."]
  • % è il consueto operatore modulo.% is the usual modulo operator.
  • 1d (la cifra uno seguita da "d") è il valore letterale di un intervallo di tempo che indica un giorno.1d (that's a digit one, then a 'd') is a timespan literal meaning one day. Ecco altri valori letterali di intervallo di tempo: 12h, 30m, 10s, 0.01s.Here are some more timespan literals: 12h, 30m, 10s, 0.01s.
  • floor (alias bin) arrotonda un valore per difetto al multiplo più vicino del valore di base specificato.floor (alias bin) rounds a value down to the nearest multiple of the base value you provide. floor(aTime, 1s) arrotonda un'ora per difetto al secondo più vicino.So floor(aTime, 1s) rounds a time down to the nearest second.

Le espressioni possono includere tutti gli operatori consueti (+, -, ...) ed è disponibile una gamma di funzioni utili.Expressions can include all the usual operators (+, -, ...), and there's a range of useful functions.

ExtendExtend

Per aggiungere colonne a quelle già esistenti, usare extend:If you just want to add columns to the existing ones, use extend:


    requests
    | top 10 by timestamp desc
    | extend timeOfDay = floor(timestamp % 1d, 1s)

Se si vogliono mantenere tutte le colonne esistenti, extend è meno dettagliato di project.Using extend is less verbose than project if you want to keep all the existing columns.

Convertire nell'ora localeConvert to local time

I timestamp sono sempre espressi in formato UTC.Timestamps are always in UTC. Pertanto, se ci si trova sulla costa del Pacifico ed è inverno, potrebbe essere utile quanto riportato di seguito:So if you're on the US Pacific coast and it's winter, you might like this:


    requests
    | top 10 by timestamp desc
    | extend localTime = timestamp - 8h

Summarize: aggregare gruppi di righeSummarize: aggregate groups of rows

Summarize applica una funzione di aggregazione specificata a gruppi di righe.Summarize applies a specified aggregation function over groups of rows.

Ad esempio, il tempo che l'app Web impiega per rispondere a una richiesta viene indicato nel campo duration.For example, the time your web app takes to respond to a request is reported in the field duration. Verrà visualizzato il tempo medio di risposta a tutte le richieste:Let's see the average response time to all requests:

È anche possibile separare il risultato in richieste con nomi diversi:Or we could separate the result into requests of different names:

Summarize raccoglie i punti dati del flusso in gruppi che la clausola by valuta in ugual misura.Summarize collects the data points in the stream into groups for which the by clause evaluates equally. Ogni valore nell'espressione by, ovvero ogni nome di operazione univoco nell'esempio precedente, restituisce una riga nella tabella dei risultati.Each value in the by expression - each unique operation name in the above example - results in a row in the result table.

È anche possibile raggruppare i risultati per ora del giorno:Or we could group results by time of day:

Si noti che si sta usando la funzione bin, detta anche floor.Notice how we're using the bin function (aka floor). Se si usasse solo by timestamp, ogni riga di input finirebbe in un piccolo gruppo distinto.If we just used by timestamp, every input row would end up in its own little group. Per i valori scalari continui, come le ore o i numeri, è necessario suddividere l'intervallo continuo in un numero gestibile di valori discreti.For any continuous scalar like times or numbers, we have to break the continuous range into a manageable number of discrete values. Il modo più semplice per eseguire questa operazione è usare bin, che è in realtà la nota funzione floor per l'arrotondamento per difetto.bin - which is just the familiar rounding-down floor function - is the easiest way to do that.

È possibile usare la stessa tecnica per ridurre gli intervalli di stringhe:We can use the same technique to reduce ranges of strings:

Si noti che è possibile usare name= per impostare il nome di una colonna di risultati, nelle espressioni di aggregazione o nella clausola by.Notice that you can use name= to set the name of a result column, either in the aggregation expressions or the by-clause.

Conteggio dei dati campionatiCounting sampled data

sum(itemCount) è l'aggregazione consigliata per contare gli eventi.sum(itemCount) is the recommended aggregation to count events. In molti casi, itemCount==1, quindi la funzione somma semplicemente il numero di righe nel gruppo.In many cases, itemCount==1, so the function simply counts up the number of rows in the group. Ma, quando nell'operazione è previsto un campionamento, solo una frazione degli eventi originali viene conservata come punti dati in Application Insights, in modo che siano presenti eventi in numero pari a itemCount per ogni punto dati visualizzato.But when sampling is in operation, only a fraction of the original events are retained as data points in Application Insights, so that for each data point you see, there are itemCount events.

Ad esempio, se il campionamento elimina il 75% degli eventi originali, allora itemCount==4 nei record mantenuti; ciò significa che per ogni record mantenuto erano presenti quattro record originali.For example, if sampling discards 75% of the original events, then itemCount==4 in the retained records - that is, for every retained record, there were four original records.

Il campionamento adattivo causa un valore itemCount più elevato durante i periodi in cui l'applicazione viene utilizzata di frequente.Adaptive sampling causes itemCount to be higher during periods when your application is being heavily used.

Il riepilogo di itemCount offre quindi una stima valida del numero di eventi originale.Summing up itemCount therefore gives a good estimate of the original number of events.

È disponibile anche un'aggregazione count() , oltre a un'operazione di conteggio, per i casi in cui si vuole effettivamente contare il numero di righe in un gruppo.There's also a count() aggregation (and a count operation), for cases where you really do want to count the number of rows in a group.

Esiste un intervallo di funzioni di aggregazione.There's a range of aggregation functions.

Disegnare i risultatiCharting the results


    exceptions
       | summarize count=sum(itemCount)  
         by bin(timestamp, 1h)

Per impostazione predefinita, i risultati vengono visualizzati sotto forma di tabella:By default, results display as a table:

È possibile ottenere un risultato migliore della visualizzazione tabella.We can do better than the table view. Si osservino i risultati nella visualizzazione grafico con l'opzione delle barre verticali:Let's look at the results in the chart view with the vertical bar option:

Fare clic su Grafico, quindi scegliere Grafico a barre verticali e assegnare gli assi x e y

Si noti che anche se i risultati non sono stati ordinati in base all'ora (come è possibile osservare nella visualizzazione tabella), la visualizzazione grafico mostra sempre i dati data/ora nell'ordine corretto.Notice that although we didn't sort the results by time (as you can see in the table display), the chart display always shows datetimes in correct order.

Grafici di tempoTimecharts

Visualizzare il numero di eventi presenti in ogni ora:Show how many events there are each hour:


    requests
      | summarize event_count=sum(itemCount)
        by bin(timestamp, 1h)

Selezionare l'opzione di visualizzazione grafico:Select the Chart display option:

timechart

Serie multipleMultiple series

La presenza di più espressioni nella clausola summarize determina la creazione di più colonne.Multiple expressions in the summarize clause creates multiple columns.

La presenza di più espressioni nella clausola by determina la creazione di più righe, una per ogni combinazione di valori.Multiple expressions in the by clause creates multiple rows, one for each combination of values.


    requests
    | summarize count_=sum(itemCount), avg(duration)
      by bin(timestamp, 1h), client_StateOrProvince, client_City
    | order by timestamp asc, client_StateOrProvince, client_City

Tabella delle richieste in base a ora e località

Segmentare un grafico in base alle dimensioniSegment a chart by dimensions

Se si crea un grafico per una tabella contenente una colonna di stringhe e una colonna numerica, la stringa può essere usata per suddividere i dati numerici in serie separate di punti.If you chart a table that has a string column and a numeric column, the string can be used to split the numeric data into separate series of points. Se è presente più di una colonna di stringhe, è possibile scegliere la colonna da usare come discriminatore.If there's more than one string column, you can choose which column to use as the discriminator.

Segmentare un grafico di analisi

Frequenza di mancati recapitiBounce rate

Convertire un valore booleano in una stringa per usarlo come discriminatore:Convert a boolean to a string to use it as a discriminator:


    // Bounce rate: sessions with only one page view
    requests
    | where notempty(session_Id)
    | where tostring(operation_SyntheticSource) == "" // real users
    | summarize pagesInSession=sum(itemCount), sessionEnd=max(timestamp)
               by session_Id
    | extend isbounce= pagesInSession == 1
    | summarize count()
               by tostring(isbounce), bin (sessionEnd, 1h)
    | render timechart

Visualizzare più metricheDisplay multiple metrics

Se si crea un grafico per una tabella contenente più di una colonna numerica, oltre al timestamp, è possibile visualizzare qualsiasi combinazione di colonne.If you chart a table that has more than one numeric column, in addition to the timestamp, you can display any combination of them.

Segmentare un grafico di analisi

È necessario selezionare Don't Split (Non dividere) prima di poter selezionare più colonne numeriche.You must select Don't Split before you can select multiple numeric columns. Non è possibile dividere in base a una colonna di stringhe e allo stesso tempo visualizzare più di una colonna numerica.You can't split by a string column at the same time as displaying more than one numeric column.

Ciclo della media giornalieraDaily average cycle

Come varia l'uso nella giornata media?How does usage vary over the average day?

Conteggiare le richieste per un modulo di un giorno, suddivise in ore:Count requests by the time modulo one day, binned into hours:


    requests
    | where timestamp > ago(30d)  // Override "Last 24h"
    | where tostring(operation_SyntheticSource) == "" // real users
    | extend hour = bin(timestamp % 1d , 1h)
          + datetime("2016-01-01") // Allow render on line chart
    | summarize event_count=sum(itemCount) by hour

Grafico a linee delle ore di un giorno medio

Nota

Si noti che attualmente è necessario convertire le durate in valori datetime per visualizzarli in un grafico a linee.Notice that we currently have to convert time durations to datetimes in order to display on a line chart.

Confrontare più serie giornaliereCompare multiple daily series

Come varia l'uso nelle ore del giorno nei diversi paesi?How does usage vary over the time of day in different countries?


     requests  
     | where timestamp > ago(30d)  // Override "Last 24h"
     | where tostring(operation_SyntheticSource) == "" // real users
     | extend hour= floor( timestamp % 1d , 1h)
           + datetime("2001-01-01")
     | summarize event_count=sum(itemCount)
       by hour, client_CountryOrRegion
     | render timechart

Suddivisione in base a client_CountryOrRegion

Tracciare una distribuzionePlot a distribution

Quante sessioni esistono di lunghezze diverse?How many sessions are there of different lengths?


    requests
    | where timestamp > ago(30d) // override "Last 24h"
    | where isnotnull(session_Id) and isnotempty(session_Id)
    | summarize min(timestamp), max(timestamp)
      by session_Id
    | extend sessionDuration = max_timestamp - min_timestamp
    | where sessionDuration > 1s and sessionDuration < 3m
    | summarize count() by floor(sessionDuration, 3s)
    | project d = sessionDuration + datetime("2016-01-01"), count_

L'ultima riga serve per convertire in formato datetime.The last line is required to convert to datetime. Attualmente l'asse x di un grafico viene visualizzato come valore scalare solo se è un valore datetime.Currently the x-axis of a chart is displayed as a scalar only if it is a datetime.

La clausola where esclude le sessioni monofase (sessionDuration==0) e imposta la lunghezza dell'asse x.The where clause excludes one-shot sessions (sessionDuration==0) and sets the length of the x-axis.

PercentiliPercentiles

Quali intervalli di durate coprono le diverse percentuali delle sessioni?What ranges of durations cover different percentages of sessions?

Usare la query precedente, ma sostituire l'ultima riga:Use the above query, but replace the last line:


    requests
    | where isnotnull(session_Id) and isnotempty(session_Id)
    | summarize min(timestamp), max(timestamp)
      by session_Id
    | extend sesh = max_timestamp - min_timestamp
    | where sesh > 1s
    | summarize count() by floor(sesh, 3s)
    | summarize percentiles(sesh, 5, 20, 50, 80, 95)

Viene anche rimosso il limite superiore nella clausola where in modo da ottenere dati corretti che includono tutte le sessioni con più di una richiesta:We also removed the upper limit in the where clause, in order to get correct figures including all sessions with more than one request:

risultato

È possibile osservare che:From which we can see that:

  • Il 5% delle sessioni ha una durata inferiore a 3 minuti e 34 secondi;5% of sessions have a duration of less than 3 minutes 34s;
  • Il 50% delle sessioni dura meno di 36 minuti;50% of sessions last less than 36 minutes;
  • Il 5% delle sessioni dura più di 7 giorni5% of sessions last more than 7 days

Per ottenere una suddivisione separata per ogni paese, è sufficiente visualizzare la colonna client_CountryOrRegion separatamente attraverso entrambi gli operatori summarize:To get a separate breakdown for each country, we just have to bring the client_CountryOrRegion column separately through both summarize operators:


    requests
    | where isnotnull(session_Id) and isnotempty(session_Id)
    | summarize min(timestamp), max(timestamp)
      by session_Id, client_CountryOrRegion
    | extend sesh = max_timestamp - min_timestamp
    | where sesh > 1s
    | summarize count() by floor(sesh, 3s), client_CountryOrRegion
    | summarize percentiles(sesh, 5, 20, 50, 80, 95)
      by client_CountryOrRegion

JoinJoin

È possibile accedere a più tabelle, incluse le richieste e le eccezioni.We have access to several tables, including requests and exceptions.

Per trovare le eccezioni correlate a una richiesta che ha restituito una risposta di errore, è possibile creare un join delle tabelle in session_Id:To find the exceptions related to a request that returned a failure response, we can join the tables on session_Id:


    requests
    | where toint(resultCode) >= 500
    | join (exceptions) on operation_Id
    | take 30

È buona norma usare project per selezionare solo le colonne necessarie prima di eseguire il join.It's good practice to use project to select just the columns we need before performing the join. Nelle stesse clausole, si rinomina la colonna timestamp.In the same clauses, we rename the timestamp column.

Let: assegnare un risultato a una variabileLet: Assign a result to a variable

Usare let per separare le parti dell'espressione precedente.Use let to separate out the parts of the previous expression. I risultati rimangono invariati:The results are unchanged:


    let bad_requests =
      requests
        | where  toint(resultCode) >= 500  ;
    bad_requests
    | join (exceptions) on session_Id
    | take 30

Suggerimento

Nel client Analisi non inserire righe vuote tra le parti della query.In the Analytics client, don't put blank lines between the parts of the query. Verificare che vengano eseguiti tutti gli elementi.Make sure to execute all of it.

Usare toscalar per convertire una cella di tabella in un valore:Use toscalar to convert a single table cell to a value:

let topCities =  toscalar (
   requests
   | summarize count() by client_City 
   | top n by count_ 
   | summarize makeset(client_City));
requests
| where client_City in (topCities(3)) 
| summarize count() by client_City;

FunzioniFunctions

Usare Let per definire una funzione:Use Let to define a function:


    let usdate = (t:datetime)
    {
      strcat(getmonth(t), "/", dayofmonth(t),"/", getyear(t), " ",
      bin((t-1h)%12h+1h,1s), iff(t%24h<12h, "AM", "PM"))
    };
    requests  
    | extend PST = usdate(timestamp-8h)

Accesso a oggetti annidatiAccessing nested objects

È facile accedere agli oggetti annidati.Nested objects can be accessed easily. Nel flusso exceptions, ad esempio, sono visibili oggetti strutturati come questo:For example, in the exceptions stream you can see structured objects like this:

risultato

È possibile renderlo flat scegliendo le proprietà che interessano:You can flatten it by choosing the properties you're interested in:


    exceptions | take 10
    | extend method1 = tostring(details[0].parsedStack[1].method)

È necessario eseguire il cast del risultato per il tipo appropriato.Note that you need to cast the result to the appropriate type.

Proprietà e misure personalizzateCustom properties and measurements

Se l'applicazione associa agli eventi dimensioni (proprietà) e misure personalizzate, queste saranno visibili negli oggetti customDimensions e customMeasurements.If your application attaches custom dimensions (properties) and custom measurements to events, then you will see them in the customDimensions and customMeasurements objects.

Ad esempio, se l'applicazione include:For example, if your app includes:


    var dimensions = new Dictionary<string, string>
                     {{"p1", "v1"},{"p2", "v2"}};
    var measurements = new Dictionary<string, double>
                     {{"m1", 42.0}, {"m2", 43.2}};
    telemetryClient.TrackEvent("myEvent", dimensions, measurements);

Per estrarre questi valori in Dati di analisi:To extract these values in Analytics:


    customEvents
    | extend p1 = customDimensions.p1,
      m1 = todouble(customMeasurements.m1) // cast to expected type

Per verificare se una dimensione personalizzata è di tipo specifico:To verify whether a custom dimension is of a particular type:


    customEvents
    | extend p1 = customDimensions.p1,
      iff(notnull(todouble(customMeasurements.m1)), ...

DashboardDashboards

È possibile aggiungere i risultati a un dashboard in modo da riunire tutti i grafici e le tabelle più importanti.You can pin your results to a dashboard in order to bring together all your most important charts and tables.

  • Dashoboard condiviso di Azure: fare clic sull'icona di aggiunta.Azure shared dashboard: Click the pin icon. Per poterlo fare, è necessario disporre di un dashboard condiviso.Before you do this, you must have a shared dashboard. Nel portale di Azure, aprire o creare un dashboard e fare clic su Condividi.In the Azure portal, open or create a dashboard and click Share.
  • Dashboard di Power BI: fare clic su Esporta, Power BI Query (Query Power BI).Power BI dashboard: Click Export, Power BI Query. Un vantaggio di questa alternativa consiste nel fatto che è possibile visualizzare la query insieme ad altri risultati da un'ampia gamma di origini.An advantage of this alternative is that you can display your query alongside other results from a wide range of sources.

Combinare con dati importatiCombine with imported data

I report di Analisi hanno un ottimo aspetto nel dashboard, tuttavia a volte si desidera convertire i dati in un formato più semplice.Analytics reports look great on the dashboard, but sometimes you want to translate the data to a more digestible form. Si supponga, ad esempio, che gli utenti autenticati siano identificati nei dati di telemetria da un alias.For example, suppose your authenticated users are identified in the telemetry by an alias. Si desidera visualizzarne i nomi reali nei risultati.You'd like to show their real names in your results. A tale scopo, è necessario un file CSV con il mapping dagli alias ai nomi reali.To do this, you need a CSV file that maps from the aliases to the real names.

È possibile importare un file di dati e usarlo come qualsiasi tabella standard (richieste, eccezioni e così via).You can import a data file and use it just like any of the standard tables (requests, exceptions, and so on). Eseguire una query sulla propria tabella oppure aggiungerla ad altre tabelle.Either query it on its own, or join it with other tables. Ad esempio, se si dispone di una tabella denominata usermap contenente le colonne realName e userId, è possibile usarla per convertire il campo user_AuthenticatedId nei dati di telemetria della richiesta:For example, if you have a table named usermap, and it has columns realName and userId, then you can use it to translate the user_AuthenticatedId field in the request telemetry:


    requests
    | where notempty(user_AuthenticatedId)
    | project userId = user_AuthenticatedId
      // get the realName field from the usermap table:
    | join kind=leftouter ( usermap ) on userId
      // count transactions by name:
    | summarize count() by realName

Per importare in una tabella, nel pannello Schema, in Altre origini dati, seguire le istruzioni per aggiungere una nuova origine dati, caricando un campione dei dati.To import a table, in the Schema blade, under Other Data Sources, follow the instructions to add a new data source, by uploading a sample of your data. È quindi possibile usare questa definizione per caricare le tabelle.Then you can use this definition to upload tables.

La funzionalità di importazione è attualmente in anteprima e sarà inizialmente visualizzato un collegamento "Contattaci" in "Altre origini dati."The import feature is currently in preview, so you will initially see a "Contact us" link under "Other data sources." Usare questo collegamento per iscriversi al programma di anteprima. Il collegamento verrà puoi sostituito da un pulsante "Aggiungi nuova origine dati".Use this to sign up to the preview program, and the link will then be replaced by an "Add new data source" button.

TabelleTables

Il flusso di dati di telemetria ricevuto dall'app è accessibile tramite più tabelle.The stream of telemetry received from your app is accessible through several tables. Lo schema delle proprietà disponibili per ogni tabella è situato nella parte sinistra della finestra.The schema of properties available for each table is visible at the left of the window.

Tabella di richiesteRequests table

Contare le richieste HTTP all'applicazione Web e il segmento in base al nome della pagina:Count HTTP requests to your web app and segment by page name:

Richieste di conteggio segmentate per nome

Trovare le richieste con il maggior numero di esiti negativi:Find the requests that fail most:

Richieste di conteggio segmentate per nome

Tabella di eventi personalizzatiCustom events table

Se si usa Trackevent() per inviare eventi personalizzati, è possibile leggerli da questa tabella.If you use TrackEvent() to send your own events, you can read them from this table.

Esaminiamo un esempio in cui il codice dell'app contiene le righe seguenti:Let's take an example where your app code contains these lines:


    telemetry.TrackEvent("Query",
       new Dictionary<string,string> {{"query", sqlCmd}},
       new Dictionary<string,double> {
           {"retry", retryCount},
           {"querytime", totalTime}})

Visualizzare la frequenza di questi eventi:Display the frequency of these events:

Frequenza di visualizzazione degli eventi personalizzati

Estrarre le misure e le dimensioni degli eventi:Extract measurements and dimensions from the events:

Frequenza di visualizzazione degli eventi personalizzati

Tabella delle metriche personalizzateCustom metrics table

Se si usa TrackMetric() per inviare i valori metrici, i risultati sono disponibili nel flusso customMetrics.If you are using TrackMetric() to send your own metric values, you’ll find its results in the customMetrics stream. Ad esempio:For example:

Metriche personalizzate in Application Insights - Analisi

Nota

In Esplora metriche tutte le misurazioni personalizzate associate a qualsiasi tipo di telemetria vengono visualizzate insieme nel pannello delle metriche, con le metriche inviate usando TrackMetric().In Metrics Explorer, all custom measurements attached to any type of telemetry appear together in the metrics blade along with metrics sent using TrackMetric(). In Analisi, invece, le misure personalizzate sono ancora associate al tipo di telemetria su cui sono state rilevate, come eventi, richieste e così via, mentre le metriche inviate da TrackMetric vengono visualizzate all'interno del proprio flusso.But in Analytics, custom measurements are still attached to whichever type of telemetry they were carried on - events or requests, and so on - while metrics sent by TrackMetric appear in their own stream.

Tabella dei contatori delle prestazioniPerformance counters table

I contatori delle prestazioni mostrano le metriche base del sistema per l'applicazione, ad esempio CPU, memoria e uso della rete.Performance counters show you basic system metrics for your app, such as CPU, memory, and network utilization. È possibile configurare l'SDK per inviare contatori aggiuntivi, tra cui contatori personalizzati.You can configure the SDK to send additional counters, including your own custom counters.

Lo schema performanceCounters espone category, il nome counter e il nome instance per ogni contatore delle prestazioni.The performanceCounters schema exposes the category, counter name, and instance name of each performance counter. I nomi delle istanze di contatore sono applicabili solo ad alcuni contatori delle prestazioni e indicano in genere il nome del processo a cui il conteggio si riferisce.Counter instance names are only applicable to some performance counters, and typically indicate the name of the process to which the count relates. Nei dati di telemetria per ogni applicazione verranno visualizzati solo i contatori per l'applicazione specifica.In the telemetry for each application, you’ll see only the counters for that application. Ad esempio, per visualizzare quali contatori sono disponibili:For example, to see what counters are available:

Contatori delle prestazioni in Application Insights - Analisi

Per ottenere un grafico della memoria disponibile nel periodo selezionato:To get a chart of available memory over the selected period:

Timechart delle metriche in Application Insights - Analisi

Come altri dati di telemetria, performanceCounters contiene anche una colonna cloud_RoleInstance che indica l'identità del computer host in cui è in esecuzione l'app.Like other telemetry, performanceCounters also has a column cloud_RoleInstance that indicates the identity of the host machine on which your app is running. Ad esempio, per confrontare le prestazioni dell'applicazione su computer diversi:For example, to compare the performance of your app on the different machines:

Prestazioni segmentate per istanze del ruolo in Application Insights - Analisi

Tabelle delle eccezioniExceptions table

Le eccezioni segnalate dall'app sono disponibili in questa tabella.Exceptions reported by your app are available in this table.

Per trovare la richiesta HTTP che l'app gestiva al momento del rilevamento dell'eccezione, creare un join in operation_Id:To find the HTTP request that your app was handling when the exception was raised, join on operation_Id:

Creare un join delle eccezioni con le richieste in operation_Id

Tabella delle tempistiche del browserBrowser timings table

browserTimings mostra i dati di caricamento della pagina raccolti nel browser degli utenti.browserTimings shows page load data collected in your users' browsers.

Configurare l'app per la telemetria sul lato client per visualizzare queste metriche.Set up your app for client-side telemetry in order to see these metrics.

Lo schema include metriche che indicano la lunghezza delle varie fasi del processo di caricamento della pagina.The schema includes metrics indicating the lengths of different stages of the page loading process. Le metriche non indicano il tempo trascorso dagli utenti a leggere una pagina.(They don’t indicate the length of time your users read a page.)

Le metriche mostrano la popolarità delle diverse pagine e i tempi di caricamento di ogni pagina:Show the popularities of different pages, and load times for each page:

Tempistiche di caricamento delle pagine in Analisi

Tabella dei risultati di disponibilitàAvailability results table

availabilityResults mostra i risultati dei test Web.availabilityResults shows the results of your web tests. Ogni esecuzione di test da ogni posizione di test viene segnalata separatamente.Each run of your tests from each test location is reported separately.

Tempistiche di caricamento delle pagine in Analisi

Tabella delle dipendenzeDependencies table

Contiene i risultati delle chiamate che l'applicazione esegue sul database e sull'API REST e le chiamate a TrackDependency().Contains results of calls that your app makes to databases and REST APIs, and other calls to TrackDependency(). Include inoltre le chiamate AJAX effettuate dal browser.Also includes AJAX calls made from the browser.

Chiamate AJAX dal browser:AJAX calls from the browser:


    dependencies | where client_Type == "Browser"
    | take 10

Chiamate di dipendenza dal server:Dependency calls from the server:


    dependencies | where client_Type == "PC"
    | take 10

I risultati della dipendenza lato server mostrano sempre success==False se l'agente Application Insights non è installato.Server-side dependency results always show success==False if the Application Insights Agent is not installed. Tuttavia, gli altri dati sono corretti.However, the other data are correct.

Tabella delle tracceTraces table

Contiene i dati di telemetria inviati dall'app tramite TrackTrace() o altri framework di registrazione.Contains the telemetry sent by your app using TrackTrace(), or other logging frameworks.

VideoVideo

Query avanzate:Advanced queries:

Passaggi successiviNext steps

AnalyticsAnalytics