Monitorare Funzioni di Azure e Hub eventi

Hub eventi di Azure
Funzioni di Azure
Monitoraggio di Azure

Il monitoraggio fornisce informazioni dettagliate sul comportamento e sull'integrità dei sistemi e consente di creare una visualizzazione olistica dell'ambiente, tendenze storiche, correlare fattori diversi e misurare le variazioni delle prestazioni, del consumo o della frequenza degli errori.

Funzioni di Azure offre l'integrazione predefinita con Application Insights. Da Application Insights è possibile ottenere informazioni quali il numero di istanze dell'app per le funzioni o la richiesta e la telemetria delle dipendenze di una funzione. Quando si lavora con Funzioni e Hub eventi, Application Insights può anche tenere traccia delle telemetrie delle dipendenze in uscita nell'hub eventi, calcolando il tempo di elaborazione e mostrando il flusso end-to-end del sistema connesso tramite Hub eventi.

Questa sezione presenta funzionalità utili e informazioni dettagliate che è possibile ottenere da Application Insights per Hub eventi e la soluzione Funzioni.

Mappa delle applicazioni

Application Map mostra come interagiscono tra loro i componenti di un sistema. A causa dei dati di telemetria delle dipendenze forniti da Application Insights, esegue il mapping del flusso di eventi tra Funzioni di Azure e Hub eventi, inclusa la media di ogni esecuzione della funzione e la durata media di un evento in Hub eventi, nonché la visualizzazione delle transazioni che contengono errori contrassegnati in rosso.

Dopo aver inviato il carico previsto al sistema, è possibile passare ad Application Insights nel portale di Azure e nella barra laterale scegliere Mappa applicazioni. Ecco una mappa che mostra tre funzioni, tre hub eventi e errori evidenti durante la scrittura in un database downstream:

Mappa delle applicazioni

Dettagli sulle transazioni end-to-end

I dettagli delle transazioni end-to-end mostrano in che modo i componenti del sistema interagiscono tra loro, in ordine cronologico. Questa visualizzazione mostra anche per quanto tempo un evento è trascorso nell'elaborazione. È anche possibile esaminare i dati di telemetria di ogni componente da questa visualizzazione, semplificando la risoluzione dei problemi tra i componenti all'interno della stessa richiesta quando si è verificato un problema.

Transazione end-to-end

Metriche e telemetria della piattaforma

Le metriche generate dalla piattaforma in Monitoraggio di Azure per Hub eventi e Funzioni di Azure possono essere usate per il monitoraggio complessivo del comportamento e dell'integrità della soluzione:

  • Hub eventi di Azure metriche in Monitoraggio di Azure sono di interesse per acquisire informazioni utili per Hub eventi(ad esempio aggregazioni di richieste in ingresso, richieste in uscita, richieste limitate, richieste riuscite, messaggi in ingresso, messaggi in uscita, messaggi acquisiti, byte in uscita, byte in uscita, byte acquisiti, errori utente).

  • Funzioni di Azure metriche condividono molte delle metriche del servizio app Azure, con l'aggiunta di unità di esecuzione delle funzioni e di esecuzione delle funzioni che possono essere usate per comprendere l'utilizzo e il costo del piano a consumo. Altre metriche di interesse sono Connessioni, Dati in, Uscita dati, Working Set di memoria media, Numero di thread, Richieste e Tempo di risposta.

Funzioni di Azure si integra con Application Insights per fornire dati di telemetria avanzati e dettagliati e informazioni dettagliate sulle esecuzioni dell'host e delle funzioni di Funzioni. Per altre informazioni, vedere Analizzare Funzioni di Azure dati di telemetria in Application Insights. Quando si usa Application Insights per monitorare una topologia, sono disponibili diverse configurazioni. Per altre informazioni, vedere Come configurare il monitoraggio per Funzioni di Azure.

Di seguito è riportato un esempio di dati di telemetria aggiuntivi per le funzioni attivate di Hub eventi generate nella tabella delle tracce :

Trigger Details: PartionId: 6, Offset: 3985758552064-3985758624640, EnqueueTimeUtc: 2022-10-31T12:51:58.1750000+00:00-2022-10-31T12:52:03.8160000+00:00, SequenceNumber: 3712266-3712275, Count: 10

Queste informazioni richiedono l'uso dell'estensione di Hub eventi 4.2.0 o versione successiva. Questi dati sono molto utili perché contengono informazioni sul messaggio che ha attivato l'esecuzione della funzione e possono essere usati per l'esecuzione di query e informazioni dettagliate. Include i dati seguenti per ogni volta che viene attivata la funzione:

  • ID partizione (6)
  • Intervallo di offset della partizione (3985758552064-3985758624640)
  • Intervallo di tempo accodamento in FORMATO UTC (2022-10-31T12:51:58.1750000+00:00-2022-10-31T12:52:03.8160000+00:00)
  • Intervallo di numeri di sequenza 3712266-3712275
  • E il numero di messaggi (10)

Per esempi su come usare questi dati di telemetria, vedere la sezione Query di Application Insights di esempio.

La telemetria personalizzata è anche possibile per linguaggi diversi (libreria di classi C#, C# isolato, script C#, JavaScript, Java, PowerShell e Python). Questa registrazione viene visualizzata nella tabella delle tracce in Application Insights. È possibile creare voci personalizzate in Application Insights e aggiungere dimensioni personalizzate che possono essere usate per eseguire query sui dati e creare dashboard personalizzati.

Infine, quando l'app per le funzioni si connette a un hub eventi usando un'associazione di output, le voci vengono scritte anche nella tabella Dipendenze di Application Insights.

Tabella delle dipendenze

Per Hub eventi, la correlazione viene inserita nel payload dell'evento e viene visualizzata una proprietà Diagnostic-Id negli eventi:

Proprietà Id diagnostica

Segue il formato del contesto di traccia W3C usato anche come ID operazione e collegamenti di operazione nei dati di telemetria creati da Funzioni, che consente ad Application Insights di costruire la correlazione tra eventi dell'hub eventi ed esecuzioni di funzioni, anche quando vengono distribuite.

Correlazione di eventi batch

Query di Application Insights di esempio

Di seguito è riportato un elenco di query utili di Application Insights durante il monitoraggio di Hub eventi con Funzioni di Azure. Questa query visualizza informazioni dettagliate per la funzione attivata dall'hub eventi usando i dati di telemetria generati dall'estensione di Hub eventi 4.2.0 e versioni successive.

Quando il campionamento è abilitato in Application Insights, possono verificarsi lacune nei dati.

Informazioni dettagliate sull'elaborazione degli eventi

I dati vengono generati solo nel formato corretto quando viene usato l'invio in batch. Invio batch indica che la funzione accetta più eventi per ogni esecuzione, consigliata per le prestazioni. Tenere presente quanto segue:

  • Il dispatchTimeMilliseconds valore approssima l'intervallo di tempo tra il momento in cui l'evento è stato scritto nell'hub eventi e il momento in cui è stato prelevato dall'app per le funzioni per l'elaborazione.
  • dispatchTimeMilliseconds può essere negativo o altrimenti impreciso a causa della deviazione del clock tra il server hub eventi e l'app per le funzioni.
  • Le partizioni di Hub eventi vengono elaborate in sequenza. Un messaggio non verrà inviato al codice della funzione per l'elaborazione fino a quando non vengono elaborati tutti i messaggi precedenti. Monitorare il tempo di esecuzione delle funzioni perché tempi di esecuzione più lunghi causeranno ritardi di invio.
  • Il calcolo usa l'oggetto enqueueTime del primo messaggio nel batch. I tempi di invio potrebbero essere inferiori per altri messaggi nel batch.
  • dispatchTimeMilliseconds si basa sul punto nel tempo.
  • I numeri di sequenza sono per partizione e l'elaborazione duplicata può verificarsi perché Hub eventi non garantisce il recapito di messaggi esattamente una volta.
traces
| where message startswith "Trigger Details: Parti"
| parse message with * "tionId: " partitionId:string ", Offset: "
offsetStart:string "-" offsetEnd:string", EnqueueTimeUtc: "
enqueueTimeStart:datetime "+00:00-" enqueueTimeEnd:datetime "+00:00, SequenceNumber: "
sequenceNumberStart:string "-" sequenceNumberEnd:string ", Count: "
messageCount:int
| extend dispatchTimeMilliseconds = (timestamp - enqueueTimeStart) / 1ms
| project timestamp, cloud_RoleInstance, operation_Name, processId =
customDimensions.ProcessId, partitionId, messageCount, sequenceNumberStart,
sequenceNumberEnd, enqueueTimeStart, enqueueTimeEnd, dispatchTimeMilliseconds

Elaborazione dettagliata degli eventi

Visualizzazione della latenza dispatch

Questa query visualizza la latenza di invio degli eventi 50 e 90° percentile per una determinata funzione attivata dall'hub eventi. Per altri dettagli e note, vedere la query precedente.

traces
| where operation_Name == "<ENTER THE NAME OF YOUR FUNCTION HERE>"
| where message startswith "Trigger Details: Parti"
| parse message with * "tionId: " partitionId:string ", Offset: "
offsetStart:string "-" offsetEnd:string", EnqueueTimeUtc: "
enqueueTimeStart:datetime "+00:00-" enqueueTimeEnd:datetime "+00:00, SequenceNumber: "
sequenceNumberStart:string "-" sequenceNumberEnd:string ", Count: "
messageCount:int
| extend dispatchTimeMilliseconds = (timestamp - enqueueTimeStart) / 1ms
| summarize percentiles(dispatchTimeMilliseconds, 50, 90) by bin(timestamp, 5m)
| render timechart

Visualizzazione della latenza dispatch

Riepilogo della latenza dispatch

Questa query è simile a quella precedente, ma mostra una visualizzazione di riepilogo.

traces
| where message startswith "Trigger Details: Parti"
| parse message with * "tionId: " partitionId:string ", Offset: "
offsetStart:string "-" offsetEnd:string", EnqueueTimeUtc: "
enqueueTimeStart:datetime "+00:00-" enqueueTimeEnd:datetime "+00:00, SequenceNumber: "
sequenceNumberStart:string "-" sequenceNumberEnd:string ", Count: "
messageCount:int
| extend dispatchTimeMilliseconds = (timestamp - enqueueTimeStart) / 1ms
| summarize messageCount = sum(messageCount),
percentiles(dispatchTimeMilliseconds, 50, 90, 99, 99.9, 99.99) by operation_Name

Riepilogo della latenza dispatch

Distribuzione dei messaggi tra partizioni

Questa query mostra come visualizzare la distribuzione dei messaggi tra le partizioni.

traces
| where message startswith "Trigger Details: Parti"
| parse message with * "tionId: " partitionId:string ", Offset: "
offsetStart:string "-" offsetEnd:string", EnqueueTimeUtc: "
enqueueTimeStart:datetime "+00:00-" enqueueTimeEnd:datetime "+00:00, SequenceNumber: "
sequenceNumberStart:string "-" sequenceNumberEnd:string ", Count: "
messageCount:int
| summarize messageCount = sum(messageCount) by cloud_RoleInstance,
bin(timestamp, 5m)
| render areachart kind=stacked

Distribuzione dei messaggi tra partizioni

Distribuzione dei messaggi tra istanze

Questa query illustra come visualizzare la distribuzione dei messaggi tra istanze.

traces
| where message startswith "Trigger Details: Parti"
| parse message with * "tionId: " partitionId:string ", Offset: "
offsetStart:string "-" offsetEnd:string", EnqueueTimeUtc: "
enqueueTimeStart:datetime "+00:00-" enqueueTimeEnd:datetime "+00:00, SequenceNumber: "
sequenceNumberStart:string "-" sequenceNumberEnd:string ", Count: "
messageCount:int
| summarize messageCount = sum(messageCount) by cloud_RoleInstance,
bin(timestamp, 5m)
| render areachart kind=stacked

Distribuzione dei messaggi tra istanze

Esecuzione di istanze e istanze allocate

Questa query mostra come visualizzare il numero di istanze di Funzioni di Azure che elaborano eventi da Hub eventi e il numero totale di istanze (elaborazione e attesa del lease). Nella maggior parte dei casi dovrebbero essere uguali.

traces
| where message startswith "Trigger Details: Parti"
| summarize type = "Executing Instances", Count = dcount(cloud_RoleInstance) by
bin(timestamp, 60s)
| union (
    traces
    | summarize type = "Allocated Instances", Count = dcount(cloud_RoleInstance) by
bin(timestamp, 60s)
)
| project timestamp, type, Count
| render timechart

Esecuzione di istanze e istanze allocate

Tutti i dati di telemetria per un'esecuzione di funzione specifica

Il campo operation_Id può essere usato tra le diverse tabelle in Application Insights. Per Hub eventi attivati Funzioni di Azure query seguente, ad esempio, genera informazioni sul trigger, dati di telemetria dai log all'interno del codice della funzione e dipendenze ed eccezioni:

union isfuzzy=true requests, exceptions, traces, dependencies
| where * has "<ENTER THE OPERATION_ID OF YOUR FUNCTION EXECUTION HERE>"
| order by timestamp asc

Tutti i dati di telemetria per un'esecuzione di funzione specifica

Latenza end-to-end per un evento

Poiché la proprietà enqueueTimeUtc nella traccia dei dettagli del trigger mostra l'ora di accodamento solo del primo evento di ogni batch elaborato dalla funzione, è possibile usare una query più avanzata per calcolare la latenza end-to-end degli eventi tra due funzioni con Hub eventi. Questa query espanderà i collegamenti all'operazione (se presenti) nella richiesta della seconda funzione ed eseguirà il mapping dell'ora di fine allo stesso ID operazione corrispondente della prima ora di inizio della funzione.

let start = view(){
requests
| where operation_Name == "FirstFunction"
| project start_t = timestamp, first_operation_Id = operation_Id
};
let link = view(){
requests
| where operation_Name == "SecondFunction"
| mv-expand ex = parse_json(tostring(customDimensions["_MS.links"]))
| extend parent = case(isnotempty(ex.operation_Id), ex.operation_Id, operation_Id )
| project first_operation_Id = parent, second_operation_Id = operation_Id
};
let finish = view(){
traces
| where customDimensions["EventName"] == "FunctionCompleted" and operation_Name
== "SecondFunction"
| project end_t = timestamp, second_operation_Id = operation_Id
};
start
| join kind=inner (
link
| join kind=inner finish on second_operation_Id
) on first_operation_Id
| project start_t, end_t, first_operation_Id, second_operation_Id
| summarize avg(datetime_diff('second', end_t, start_t))

Latenza end-to-end per un evento

Collaboratori

Questo articolo viene gestito da Microsoft. Originariamente è stato scritto dai seguenti contributori.

Autore principale:

Per visualizzare i profili LinkedIn non pubblici, accedere a LinkedIn.

Passaggi successivi

Per altre informazioni, vedere gli articoli correlati seguenti: