Quando pubblichiamo un applicativo ASP.NET Core su Microsoft Azure è molto probabile che gli affianchiamo un'istanza di Application Insight. Tramite un wizard di Visual Studio possiamo facilmente configurarlo e in pochi passi tenere traccia di tutto: richieste, risposte, durate e metriche.
Delle volte la telemetria è fin troppo eccessiva. Da una parte va ad aumentare lo spazio, e quindi anche i costi, dell'istanza, dall'altra può influenzare negativamente alcuni alert di monitoraggio che potremmo aver agganciato. Per esempio potremmo aver impostato delle regole per ricevere e-mail in caso di eccezioni o di richieste HTTP con status code diverso da 2xx.
Per ovviare a questo, all'interno del SDK di Application Insight possiamo far ricorso ad un ITelemetryProcessor personalizzato, cioè un nostro oggetto che si pone nel mezzo e decide se mandare la telemetria oppure no. La filosofia è del tutto simile a quella dei middleware: si crea una classe che accetta il delegato al processor successivo.
public class FilterTelemetryProcessor : ITelemetryProcessor { private readonly ITelemetryProcessor _next; public FilterTelemetryProcessor(ITelemetryProcessor next) { _next = next; } }
Nell'unico metodo di nome Process possiamo valutare l'item passato e decidere se proseguire oppure no.
public void Process(ITelemetry item) { // Escludo i 401 if (item is RequestTelemetry r && r.ResponseCode.Equals("401", StringComparison.OrdinalIgnoreCase)) { return; } // Escludo una certa tipologia di eccezioni if (item is ExceptionTelemetry et && et.Exception is COMException) { return; } _next.Process(item); }
Nell'esempio precedente saltiamo tutte le risposte di tipo 401 ed escludiamo alcune eccezioni che riteniamo superflue.
Non ci resta che agganciare la nostra classe direttamente nello Startup, subito dopo la chiamata a AddApplicationInsightsTelemetry, come nell'esempio seguente.
services.AddApplicationInsightsTelemetry(); // Processor personalizzato services.AddApplicationInsightsTelemetryProcessor<FilterTelemetryProcessor>();
Prima di procedere con un filtro, si consiglia sempre di verificare se la configurazione desiderata non sia già disponibile nelle opzioni, configurabile direttamente nella chiamata a AddApplicationInsightsTelemetry.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Recuperare l'ultima versione di una release di GitHub
Usare una container image come runner di GitHub Actions
Creazione di componenti personalizzati in React.js con Tailwind CSS
Cambiare la chiave di partizionamento di Azure Cosmos DB
Generare velocemente pagine CRUD in Blazor con QuickGrid
Utilizzare database e servizi con gli add-on di Container App
Rinnovare il token di una GitHub App durante l'esecuzione di un workflow
Autenticarsi in modo sicuro su Azure tramite GitHub Actions
Aggiungere interattività lato server in Blazor 8
Ottenere un token di accesso per una GitHub App
Creazione di plugin per Tailwind CSS: espandere le funzionalità del framework dinamicamente
Eseguire query manipolando liste di tipi semplici con Entity Framework Core
I più letti di oggi
- Accedere con ASP.NET ad un documento XML creato dall'oggetto recordset di ADO e ASP
- Richiamare programmaticamente le operazioni di aggiornamento, eliminazione e inserimento di FormView, DetailsView e GridView
- Aumentare la scalabilità di ASP.NET Core Web API con caching client side
- Visualizzare contenuti Fullscreen con HTML5
- Disabilitare un bottone in una pagina HTML pensando all'accessibilità
- Realizzare siti sicuri con ASP.NET Web Pages
- Focus dei tag input con HTML5
- Disponibile la beta di Silverlight 5
- Ricavare lo spazio occupato su disco dal nostro sito