Estensione degli eventi di monitoraggio dello stato ASP.NET
Aggiornamento: novembre 2007
È possibile eseguire le attività seguenti per estendere le funzionalità di monitoraggio dell'integrità di ASP.NET.
Creare una classe di eventi Web personalizzata ereditando dai tipi di evento Web standard. Si noti che se l'applicazione eredita da WebBaseEvent o WebBaseErrorEvent deve essere eseguita con un livello di attendibilità parziale. Per tutti gli altri eventi deve essere eseguita con un livello di attendibilità totale. Per aggiungere dati personalizzati a un evento personalizzato, eseguire l'override del metodo FormatCustomEventDetails. Non eseguire l'override del metodo ToString per evitare di sovrascrivere o alterare importanti informazioni di sistema. Gli eventi personalizzati devono essere generati in modo esplicito mediante la chiamata del metodo Raise. Gli eventi standard possono essere generati solo da ASP.NET. Per gli esempi di codice, vedere Procedura: implementare e generare eventi di monitoraggio dello stato di ASP.NET personalizzati.
Personalizzare un tipo di evento standard creando una classe che implementi l'interfaccia IWebEventCustomEvaluator.
Creare un provider personalizzato per elaborare un evento creando una classe che erediti la classe WebEventProvider o la classe BufferedWebEventProvider. Se il provider esegue la registrazione, è anche possibile utilizzare la classe WebEventFormatter. I provider di eventi personalizzati possono essere utilizzati per registrare gli eventi in un file di log personalizzato, inviare dati relativi agli eventi ad applicazioni di terze parti e così via. Per gli esempi di codice, vedere Procedura: implementare l'esempio di provider di monitoraggio dello stato personalizzato.
Memorizzazione nel buffer degli eventi di monitoraggio dello stato di ASP.NET
È possibile configurare i provider degli eventi per il monitoraggio dello stato di SQL e posta elettronica (SqlWebEventProvider, SimpleMailWebEventProvider e TemplatedMailWebEventProvider) per la memorizzazione degli eventi nel buffer. In questo modo si riduce l'impatto sulle prestazioni dell'applicazione che riguardano l'invio di messaggi di posta elettronica frequenti o l'esecuzione di inserimenti frequenti in SQL Server. La memorizzazione nel buffer degli eventi per il monitoraggio dell'integrità consente inoltre di proteggere il server SMTP e SQL Server da carichi eccessivi che possono essere dovuti a un elevato volume di eventi.
Memorizzazione nel buffer del provider di eventi SQL
Se si attiva la memorizzazione nel buffer per il provider degli eventi SQL, quest'ultimo, prima di inserire le informazioni sugli eventi nel database in un batch, memorizza nel buffer informazioni sugli eventi in base alla modalità di buffer specificata.
Per impostazione predefinita, il provider SqlWebEventProvider non è configurato per l'utilizzo della memorizzazione nel buffer. Ogni volta che viene generato un evento, le relative informazioni vengono inserite immediatamente nel database. È possibile ignorare questa impostazione predefinita attivando la memorizzazione nel buffer nell'elemento providers del file Web.config in cui è specificato il provider SQL. A questo scopo, impostare l'attributo buffer dell'elemento add su true. Se si configura un proprio provider SQL, ovvero non si utilizza SqlWebEventProvider, e se non si specifica un valore per l'attributo buffer, il valore predefinito è true.
È possibile personalizzare il comportamento della funzione di memorizzazione nel buffer selezionando una modalità di buffer predefinita. In alternativa, è possibile aggiungere elementi personalizzati all'insieme bufferModes. Ogni elemento definisce proprietà, quali la dimensione del buffer e la frequenza di svuotamento del buffer. È quindi possibile configurare il provider per l'utilizzo di una delle modalità di buffer definite.
Nell'esempio riportato di seguito vengono illustrate le impostazioni di configurazione per il provider di eventi SQL con la memorizzazione nel buffer attivata.
![]() |
---|
L'elemento AnalysisbufferModes è già configurato nel file radice Web.config e non è necessario che venga dichiarato nuovamente in un file Web.config a livello di applicazione. Anche l'elemento SqlWebEventProviderproviders è configurato nel file Web.config principale, ma l'attributo buffer è impostato su false e l'attributo bufferMode è impostato su Notification. Pertanto l'elemento providers mostrato nell'esempio deve essere dichiarato in un file Web.config a livello di applicazione. Occorre inoltre utilizzare un elemento clear o remove per rimuovere la configurazione di livello superiore per il provider SqlWebEventProvider. |
Nell'esempio il provider di eventi SQL è configurato per l'utilizzo della modalità di buffer Analysis, quando è attivata la memorizzazione nel buffer, definita nell'elemento bufferModes. In tale modalità il provider elimina le informazioni sugli eventi ogni 5 minuti. Il provider elimina fino a 100 eventi per notifica e memorizza nel buffer fino a 1000 eventi nel caso di un aumento improvviso della frequenza degli eventi. Garantisce inoltre di inviare al massimo un evento al minuto.
<healthMonitoring>
<providers>
<clear/>
<add
ConnectionStringName="LocalSqlServer"
maxEventDetailsLength="1073741823"
buffer="true"
bufferMode="Analysis"
name="SqlWebEventProvider"
type="System.Web.Management.SqlWebEventProvider,System.Web, Version=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a"
/>
</providers>
<bufferModes>
<add
name="Analysis"
maxBufferSize="1000"
maxFlushSize="100"
urgentFlushThreshold="100"
regularFlushInterval="00:05:00"
urgentFlushInterval="00:01:00"
maxBufferThreads="1"
/>
</bufferModes>
</healthMonitoring>
Memorizzazione nel buffer del provider di eventi di posta elettronica
Se si attiva la memorizzazione nel buffer per i provider di eventi di posta elettronica, tali provider memorizzano gli eventi nel buffer prima di inviare i messaggi di posta elettronica come notifiche di eventi. Se si configura un provider di eventi di posta elettronica senza specificare un valore per l'attributo buffer dell'elemento add per il provider di eventi di posta elettronica, l'impostazione predefinita è true. Per disattivare la memorizzazione nel buffer, impostare l'attributo buffer su false.
È possibile personalizzare il comportamento della funzione di memorizzazione nel buffer selezionando una modalità di buffer predefinita. In alternativa, è possibile aggiungere elementi personalizzati all'insieme bufferModes. Ogni elemento definisce proprietà, quali la dimensione del buffer e la frequenza di svuotamento del buffer. È, quindi, possibile configurare il provider per l'utilizzo di una delle modalità di buffer definite. Si consiglia di utilizzare la modalità CriticalNotification.
Nell'esempio riportato di seguito vengono illustrate le impostazioni di configurazione per i provider degli eventi di posta elettronica con la memorizzazione nel buffer disattivata per la classe SimpleMailWebEventProvider e attivata per la classe TemplatedMailWebEventProvider. Il provider TemplatedMailWebEventProvider è configurato per l'utilizzo della modalità di buffer CriticalNotification che è già configurata nel file Web.config principale. In modalità CriticalNotification, il provider tenta di svuotare tutte le informazioni sugli eventi non appena gli eventi vengono ricevuti. Tuttavia, il tentativo di svuotamento non avverrà più di una volta al minuto per evitare di sovraccaricare il server di posta elettronica. I messaggi sono di dimensioni gestibili. Le informazioni riguardano al massimo 20 eventi.
Se il sistema di monitoraggio dell'integrità riceve un volume di informazioni sugli eventi superiore al massimo consentito, al momento della generazione di nuovi eventi quelli meno recenti inizieranno a essere eliminati. Il sistema di monitoraggio dell'integrità cerca di non eliminare gli eventi eseguendo più spesso lo svuotamento quando il buffer sta per diventare completo. Tuttavia, non tenta di inviare informazioni per gli eventi eliminati, sebbene nel successivo svuotamento venga inclusa la notifica che gli eventi sono stati eliminati. Presupponendo che non siano stati cancellati a causa di un eccessivo carico di lavoro del provider, gli eventi più recenti subiranno un ritardo massimo di cinque minuti.
<healthMonitoring>
<providers>
<!-- mail provider with attributes that are always relevant -->
<add
name="SimpleMailWebEventProvider"
type="System.Web.Management.SimpleMailWebEventProvider"
to="SystemAdministrator@contoso.com"
from="HealthMonitoring@contoso.com"
buffer="false"
/>
<!-- mail provider with attributes that are relevant only
when buffering is enabled -->
<add
name="SampleTemplatedMailWebEventProvider"
type="System.Web.Management.TemplatedMailWebEventProvider"
to="SystemAdministrator@contoso.com"
from="HealthMonitoring@contoso.com"
buffer="true"
bufferMode="Critical Notification"
template="Template.aspx" />
</providers>
<bufferModes>
<add
name="Critical Notification"
maxBufferSize="100" maxFlushSize="20"
urgentFlushThreshold="1"
regularFlushInterval="Infinite"
urgentFlushInterval="00:01:00"
maxBufferThreads="1"
/>
</bufferModes>
</healthMonitoring>
Perché l'esempio funzioni, è necessario configurare un server SMTP nel file di configurazione come mostrato nell'esempio seguente.
<system.net>
<mailSettings>
<smtp deliveryMethod="Network">
<network
defaultCredentials="true"
host="127.0.0.1"
port="25"
username="username"
password="password" />
</smtp>
</mailSettings>
</system.net>
Per ulteriori informazioni, vedere Elemento <mailSettings> (Impostazioni di rete).
![]() |
---|
La memorizzazione di password in testo non crittografato in un file di configurazione comporta rischi di sicurezza. Se si memorizzano le credenziali nel file di configurazione, è necessario crittografare il contenuto dell'elemento di configurazione <mailSettings> utilizzando la configurazione protetta. Per ulteriori informazioni, vedere Crittografia delle informazioni di configurazione utilizzando la configurazione protetta. |
Impostazioni della modalità di buffer
È possibile specificare il comportamento del buffer impostando gli attributi riportati di seguito dell'elemento add nell'elemento bufferModes.
regularFlushInterval Intervallo regolare di cancellazione delle informazioni sugli eventi.
urgentFlushThreshold Numero di eventi le cui informazioni devono essere memorizzate nel buffer prima che questo venga svuotato.
Le impostazioni riportate di seguito specificano le garanzie fornite dal provider al ricevente di eventi.
maxBufferSize Numero massimo di eventi le cui informazioni verranno memorizzate nel buffer. Se il numero di eventi del buffer supera questo valore, gli eventi meno recenti verranno cancellati.
maxFlushSize Numero massimo di eventi le cui informazioni verranno cancellate contemporaneamente dal provider
urgentFlushInterval Periodo minimo di attesa del provider prima del successivo svuotamento. Se dall'ultimo svuotamento non è trascorso il tempo indicato dalla proprietà urgentFlushInterval ma il buffer è già pieno, le informazioni relative agli eventi meno recenti verranno eliminate dal buffer. Il provider tiene traccia del numero di eventi cancellati e include un avviso nella successiva notifica sugli eventi.
Utilizzo di WMI per tenere traccia degli eventi di monitoraggio dell'integrità di ASP.NET
Un metodo di monitoraggio degli eventi di integrità di ASP.NET consiste nell'utilizzo del provider di eventi Strumentazione gestione Windows (WMI), la classe WmiWebEventProvider, che converte gli eventi di monitoraggio dello stato Web (eventi Web) in eventi WMI. WMI fornisce un modello di oggetti standard in cui le entità da monitorare possono essere rappresentate come oggetti. Tali entità rappresentano computer, schede di rete, stampanti, applicazioni software e così via e vengono associate al modello di oggetti WMI in modo da potere essere monitorate mediante applicazioni personalizzate. Nell'illustrazione seguente è mostrata la relazione tra gli eventi Web ASP.NET, WMI e un'applicazione consumer in attesa di eventi WMI.
Relazione tra ASP.NET e WMI
Connessione tra eventi di stato e WMI
Il monitoraggio dello stato ASP.NET fornisce l'infrastruttura per la connessione tra gli eventi di stato e WMI mediante l'associazione degli eventi alle classi WMI in modo che possano essere considerati come oggetti WMI. Viene inoltre fornito il supporto per l'elaborazione degli eventi di stato e il successivo invio al sistema WMI. Per ulteriori informazioni sull'associazione degli eventi ASP.NET a WMI, vedere Procedura dettagliata: ascolto di eventi WMI durante il monitoraggio dello stato di ASP.NET. Per ulteriori informazioni su WMI, vedere Windows Management Instrumentation nel sito Web MSDN (informazioni in lingua inglese).
Nel seguente elenco sono descritti i passaggi necessari per monitorare gli eventi di integrità con WMI:
Definire l'associazione tra le classi di eventi Web e gli oggetti WMI. Questa operazione viene eseguita automaticamente per ciascuna classe di eventi Web standard. Le associazioni sono contenute nel file MOF (Managed Object Format) per ASP.NET, %SystemRoot%\Microsoft.NET\Framework\<versione>\aspnet.mof.
Nota:
Tutti gli eventi personalizzati vengono associati al tipo di evento di base in WMI. Non è possibile associare un evento di monitoraggio dello stato ASP.NET personalizzato a un evento WMI arbitrario.
Ad esempio, nel codice riportato di seguito viene illustrata la definizione della classe WMI associata al tipo WebHeartbeatEvent.
class HeartbeatEvent : ManagementEvent { /* * ProcessStatistics */ DATETIME ProcessStartTime; sint32 ThreadCount; sint64 WorkingSet; sint64 PeakWorkingSet; sint64 ManagedHeapSize; sint32 AppdomainCount; sint32 RequestsExecuting; sint32 RequestsQueued; sint32 RequestsRejected; };
Per ulteriori informazioni sui file MOF, vedere Managed Object Format in WMI SDK su MSDN (informazioni in lingua inglese).
Definire un provider di monitoraggio dell'integrità ASP.NET che elaborerà gli eventi.
Il provider standard è la classe WmiWebEventProvider. Per impostazione predefinita è già configurato nella sezione healthMonitoring del file radice Web.config mediante l'elemento seguente:
<providers> <add name="WmiWebEventProvider" type="System.Web.Management.WmiWebEventProvider,System.Web, Version=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a" /> </providers>
Immettere le impostazioni appropriate nella sezione healthMonitoring del file di configurazione per creare l'associazione tra le classi di eventi Web e il provider di eventi WMI, la classe WmiWebEventProvider.
Per impostazione predefinita, il provider di eventi WMI non sottoscrive eventi Web. È possibile utilizzare gli elementi riportati di seguito in un file Web.config a livello di applicazione per effettuare la sottoscrizione del provider di eventi WMI a tutti gli eventi Web. Per impostazione predefinita, il tipo di evento All Events viene configurato nell'elemento eventMappings del file radice Web.config. Viene mappato alla classe WebBaseEvent.
<rules> <add name="Testing Wmi" eventName="All Events" provider="WmiWebEventProvider" profile="Critical" /> </rules>
Creare un'applicazione in attesa di eventi WMI o utilizzare un'applicazione di terze parti.
Nell'esempio di codice riportato in Procedura dettagliata: ascolto di eventi WMI durante il monitoraggio dello stato di ASP.NET viene creata un'applicazione console che visualizza informazioni sugli eventi ogni volta che viene generato un evento Web.
Personalizzazione dell'infrastruttura degli eventi di stato WMI
Quando si verifica un evento Web, il monitoraggio dell'integrità ASP.NET l'invia all'oggetto WmiWebEventProvider. L'oggetto del provider elabora l'evento e inserisce i dati appropriati secondo la definizione della classe MOF correlata. Il provider invia quindi questi dati al sistema WMI utilizzando una chiamata al codice non gestito.
L'unica opzione di personalizzazione per l'invio di eventi Web a WMI è creare una propria applicazione personalizzata che utilizzi gli eventi di monitoraggio dell'integrità ASP.NET dopo che questi sono stati emessi come eventi WMI. In questo caso l'unica modifica da apportare alla configurazione è definire un nuovo elemento rules come indicato in precedenza. L'applicazione resta in attesa degli eventi di stato ASP.NET sotto forma di eventi WMI emessi dal sistema operativo. Per ulteriori informazioni, vedere Procedura dettagliata: ascolto di eventi WMI durante il monitoraggio dello stato di ASP.NET.
![]() |
---|
Non è possibile estendere la classe WmiWebEventProvider. Le uniche classi che possono essere estese dal provider di eventi sono WebEventProvider e BufferedWebEventProvider. |
Implementazione di provider ed eventi di monitoraggio dello stato di ASP.NET personalizzati
Per impostazione predefinita, alcuni eventi sono già acquisiti nei contatori di prestazioni, nel log eventi o inviati al sistema di analisi ASP.NET. È possibile attivare altri eventi eseguendone il mapping ai provider esistenti. Per ulteriori informazioni, vedere la sezione "Utilizzo degli eventi Web mediante i provider di eventi" in Cenni preliminari sul monitoraggio dello stato di ASP.NET.
Se nessuna delle classi di provider o di eventi Web esistenti soddisfa le esigenze, è possibile estenderle. Nella tabella seguente sono indicati i modi in cui è possibile personalizzare il monitoraggio dell'integrità ASP.NET.
Attività |
Implementazione |
Esempio |
---|---|---|
Creare una classe di eventi personalizzata. |
Creare una classe che eredita da WebBaseEvent e implementa il metodo Raise virtuale. Per aggiungere dati personalizzati a un evento personalizzato, eseguire l'override del metodo FormatCustomEventDetails. |
Procedura: implementare e generare eventi di monitoraggio dello stato di ASP.NET personalizzati |
Creare un provider di eventi personalizzato per elaborare un evento Web incorporato o personalizzato. |
Creare una classe che eredita dalla classe WebEventProvider o una delle classi derivate. Se il provider esegue la registrazione, eredita anche dalla classe WebEventFormatter. |
Procedura: implementare l'esempio di provider di monitoraggio dello stato personalizzato |
Vedere anche
Attività
Procedura: bloccare le impostazioni di configurazione di ASP.NET
Concetti
Cenni preliminari sul monitoraggio dello stato di ASP.NET
Cenni preliminari sulla configurazione di ASP.NET
Riferimenti
Elemento bufferModes per healthMonitoring (schema delle impostazioni ASP.NET)
Elemento providers per healthMonitoring (schema delle impostazioni ASP.NET)