I log di Application Insights sono mancanti o non corretti per le app di Funzioni di Azure
È possibile monitorare attentamente l'app per le funzioni tramite l'integrazione tra Funzioni di Azure e Application Insights. È anche possibile usare Application Insights senza alcuna configurazione personalizzata.
Se mancano i log di Application Insights o se i dati sembrano parziali o imprecisi, seguire questa procedura per risolvere il problema.
Controllare la configurazione dell'app per le funzioni
Passare all'app per le funzioni nel portale di Azure.
Selezionare Diagnostica e risoluzione dei problemi per aprire la diagnostica di Funzioni di Azure.
Nella barra di ricerca digitare Controlli di configurazione della funzione e aprirlo.
Viene visualizzato un report di diagnostica di tutti i controlli di configurazione dell'app per le funzioni. In particolare per Application Insights vengono eseguiti i controlli seguenti:
Esistono solo una delle impostazioni di connessione seguenti:
APPINSIGHTS_INSTRUMENTATIONKEY
Chiave di strumentazione di Application InsightsAPPLICATIONINSIGHTS_CONNECTION_STRING
connessioneÈ consigliabile usare il APPLICATIONINSIGHTS_CONNECTION_STRING per un comportamento più stabile. La possibilità di usare
APPINSIGHTS_INSTRUMENTATIONKEY
sarà deprecata entro il 2025.
Che la registrazione predefinita di
AzureWebJobsDashboard
sia disabilitata, come consigliato.Il campionamento è abilitato per i dati di telemetria Funzioni di Azure (abilitati per impostazione predefinita).
Raccomandazione: l'app per le funzioni deve essere nella versione 4 e la versione di runtime deve essere almeno 4.15.2xx. Questo perché, da questa versione in poi, è possibile tenere traccia dei flussi di log da Funzioni di Azure al servizio Application Insights. Monitorando i flussi di log, è possibile verificare la presenza di log mancanti.
Log di applicazioni personalizzati
Per impostazione predefinita, i log di applicazioni personalizzati scritti vengono inviati all'host Funzioni, che li invia ad Application Insights nella categoria Ruolo di lavoro. Tuttavia, alcuni stack di linguaggio consentono di inviare i log direttamente ad Application Insights, che offre il controllo completo sul modo in cui vengono generati i log scritti. In questo caso, la pipeline di registrazione passa da worker > Functions host > Application Insights
a worker > Application Insights
.
La tabella seguente riepiloga le opzioni di configurazione disponibili per ogni stack:
Stack linguaggio | Dove configurare i log personalizzati |
---|---|
.NET (modello In-Process) | host.json |
.NET (modello Isolato) | Impostazione predefinita (inviare log personalizzati all'host Funzioni): host.json Per inviare i log direttamente ad Application Insights, vedere Configurare Application Insights in HostBuilder. |
Node.JS | host.json |
Python | host.json |
Java | Impostazione predefinita (inviare log personalizzati all'host Funzioni): host.json Per inviare i log direttamente ad Application Insights, vedere Configurare l'agente Java di Application Insights. |
PowerShell | host.json |
Quando si configurano log di applicazioni personalizzati da inviare direttamente, l'host non li emette più e host.json
non ne controlla più il comportamento. Analogamente, le opzioni esposte da ogni stack si applicano solo ai log personalizzati e non modificano il comportamento degli altri log di runtime descritti in questo articolo. In questo caso, per controllare il comportamento di tutti i log, potrebbe essere necessario apportare modifiche in entrambe le configurazioni.
I log sono mancanti o parziali
Application Insights raccoglie i dati di log, prestazioni ed errori. La configurazione di campionamento viene usata per ridurre il volume di dati di telemetria. La funzionalità campionamento è abilitata per impostazione predefinita con le impostazioni illustrate nell'esempio di host.json seguente. I tipi esclusi non vengono campionati.
{
"logging": {
"applicationInsights": {
"samplingSettings": {
"isEnabled": true,
"maxTelemetryItemsPerSecond" : 20,
"excludedTypes": "Request;Exception"
}
}
}
}
Se si notano log parzialmente mancanti, ciò potrebbe verificarsi a causa del campionamento. Per determinare la frequenza di campionamento effettiva, usare una query di Analisi che usa l'intervallo di tempo necessario illustrato nel frammento di codice seguente. Se si osserva che per TelemetrySavedPercentage
qualsiasi tipo di campionamento è minore di 100, viene campionato tale tipo di dati di telemetria.
union requests,dependencies,pageViews,browserTimings,exceptions,traces
| where timestamp > todatetime("mm/dd/yyyy hh:mm:ss") and timestamp < todatetime("mm/dd/yyyy hh:mm:ss")
| summarize TelemetrySavedPercentage = 100/avg(itemCount), TelemetryDroppedPercentage = 100-100/avg(itemCount) by bin(timestamp, 1d), itemType
| sort by timestamp asc
Per altre informazioni, vedere Raccolta, conservazione e archiviazione di dati in Application Insights.
Controllare il volume e il livello di dettaglio dei log
È possibile aumentare o eliminare i log scritti. A tale scopo, è possibile usare una combinazione di livello di log e categorie come configurato in host.json.
Il logger di Funzioni di Azure include un categoria per ogni log. La categoria indica quale parte del codice di runtime o del codice della funzione ha generato il log. Ad esempio:
-
Host.Results
eFunction.<YOUR_FUNCTION_NAME>
sono alcune delle categorie disponibili. - A ogni log è assegnato un livello di log. Il valore indica l'importanza relativa, ad esempio
Warning
oInformation
.
Per altre informazioni, vedere gli altri livelli di log e categorie disponibili.
È possibile configurare il modo in cui l'applicazione deve scrivere i log seguendo il frammento di codice di esempio:
{
"version": "2.0",
"logging": {
"logLevel": {
"default": "Information", // catch all default, with modifications below for individual categories.
"Function": "Warning", // Warning level from all Functions (except the ones configured below).
"Host.Aggregator": "Trace", // Log all traces in the 'customMetrics' table of (and shown on Metrics/Alerts blade in AI) - use either this or Host.Results
"Host.Results": "Error", // Error and Critical requests are only logged in the 'requests' table of the AI (and shown on Monitor Functions blade in Functions App) - use either this or Host.Aggregator
"Function.Function1": "Information", //Information level logs from Function 1, logged in 'traces', 'dependencies' and 'customMetrics' tables of AI
"Function.Function2.User": "Information" //user code logs from Function2, logged in 'traces' table of AI
},
"applicationInsights": {
"samplingSettings": {
"isEnabled": true,
"maxTelemetryItemsPerSecond": 1,
"excludedTypes": "Exception"
}
}
}
}
Per configurare questi valori a livello di impostazioni dell'app (per evitare la ridistribuzione delle modifiche host.json ), eseguire l'override di valori specifici host.json creando un valore equivalente come impostazione dell'applicazione. Per altre informazioni, vedere Eseguire l'override dei valori di host.json.
Per altri esempi su come eliminare i log, vedere functions-log-suppress.
L'app per le funzioni integrata della rete virtuale non genera log
Se un'app per le funzioni è integrata con una rete virtuale, è necessario aprire la porta 443 per il traffico in uscita nel firewall del server per consentire all'SDK di Application Insights o all'agente di Application Insights di inviare dati al portale per gli URL seguenti:
- dc.applicationinsights.azure.com
- dc.applicationinsights.microsoft.com
- dc.services.visualstudio.com
- * .in.applicationinsights.azure.com
Per altre informazioni, vedere Indirizzi IP usati da Monitoraggio di Azure.
Contattaci per ricevere assistenza
In caso di domande o bisogno di assistenza, creare una richiesta di supporto tecnico oppure formula una domanda nel Supporto della community di Azure. È possibile anche inviare un feedback sul prodotto al feedback della community di Azure.