Usando Eventos de Monitoramento de Integridade do ASP.NET.

Você pode executar as seguintes tarefas para estender os recursos de monitoramento de integridade ASP.NET.

Armazenando Eventos de Monitoramento de Integridade do ASP.NET.

Você pode configurar eventos de monitoramento de provedores para SQL e integridade de e-mail (SqlWebEventProvider, SimpleMailWebEventProvider e TemplatedMailWebEventProvider) para usar o armazenamento de eventos.Isso ajuda a reduzir o efeito no desempenho do aplicativo do envio frequente de mensagens de e-mail ou executar frequentes inserções no servidor SQL.Armazenando eventos de monitoramento de integridade, você também protege os servidores SMTP e SQL de cargas intensas que podem ser causadas por alto volume eventos.

Armazenamento do Provedor de Eventos SQL

Se você ativar armazenamento para o provedor de eventos SQL, o provedor armazena informações de evento de acordo com o modo de armazenamento especificado antes de inserir as informações de evento no banco de dados em um lote.

Por padrão, o provedor SqlWebEventProvider não está configurado para usar armazenamento.Sempre que um evento é disparado, suas informações imediatamente são inseridas no banco de dados.Você pode substituir essa configuração padrão, permitindo armazenamento em buffer no elemento Providers do arquivo Web.config onde o provedor SQL está especificado.Para fazer isso, configura-se o atributo buffer do elemento adicionar para true.Se você configurar seu próprio provedor SQL (ou seja, se você não usar SqlWebEventProvider), e se você não especificar um valor para o atributo buffer, o padrão é true.

Você pode personalizar o comportamento do buffer, selecionando um modo de buffer predefinido.Como alternativa, você pode adicionar elementos personalizados para a coleção bufferModes.Cada elemento define as propriedades, como o tamanho do buffer e a frequência para liberar o buffer.Em seguida, você pode configurar o provedor para usar um dos modos de buffer que você definiu.

O exemplo a seguir mostra as definições de configuração para o provedor de eventos SQL com o armazenamento em buffer ativado.

Observação:

O elemento AnalysisbufferModes já está configurado no arquivo raiz Web.config e não tem que ser declarado novamente em um arquivo Web.config no nível do aplicativo.O elemento SqlWebEventProviderproviders também é configurado no arquivo raiz Web.config, mas o atributo buffer é definido como false e o atributo bufferMode é definido como Notification.Portanto, o elemento providers que é mostrado no exemplo deve ser declarado em um arquivo Web.config no nível do aplicativo.Você também deve usar um elemento Limpar ou Remover para remover a configuração de nível mais alto para o provedor SqlWebEventProvider.

No exemplo, o provedor de eventos SQL é configurado para usar o modo Analysis de buffer quando o buffer estiver ativado, que é definido no elemento bufferModes.Nesse modo, o provedor libera as informações de evento a cada 5 minutos.Ele libera até 100 eventos por notificação e armazena até 1000 eventos no caso de um aumento repentino na frequência de eventos.O provedor garante não enviar os eventos mais frequentemente que uma vez a cada 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>

Armazenamento do Provedor de Eventos de E-mail

Se você ativar armazenamento em buffer para os provedores de eventos de e-mail, o armazenador dos provedores dispara os eventos antes que de enviarem mensagens e-mail com notificações de evento.Se você configurar um provedor de eventos de e-mail e você não especificar um valor para o atributo buffer do elemento adicionar para provedor de eventos de e-mail, o padrão é true.Você pode desativar armazenamento definindo o atributo buffer como false.

Você pode personalizar o comportamento do buffer, selecionando um modo de buffer predefinido.Como alternativa, você pode adicionar elementos personalizados para a coleção bufferModes.Cada elemento define as propriedades, como o tamanho do buffer e a frequência para liberar o buffer.Em seguida, você pode configurar o provedor para usar um dos modos de buffer que você definiu.É recomendável que você use o modo CriticalNotification.

O exemplo a seguir mostra as definições de configurações para os provedores de eventos de e-mail com o armazenamento em buffer desativado para a classe SimpleMailWebEventProvider e ativado para a classe TemplatedMailWebEventProvider.O provedor TemplatedMailWebEventProvider está configurado para usar o modo de armazenamento CriticalNotification, que já está configurado no arquivo raiz Web.config.No modo CriticalNotification, o provedor tenta liberar todas as informações de evento, assim que os eventos são recebidos.No entanto, a tentativa de liberação não funcionará com mais frequência do que a cada minuto para evitar colocar uma carga pesada no servidor de email.As mensagens são de tamanho gerenciável.As informações são para 20 eventos no máximo.

Se o sistema de monitoramento de integridade receber mais informações de evento que o máximo permitido, os eventos mais antigos são ignorados quando novos eventos são gerados.O sistema de monitoramento de integridade tenta evitar cancelamento de eventos, liberando com mais frequência quando o buffer está ficando cheio.No entanto, ele não tentará enviar quaisquer informações para eventos se eles tiverem sido interrompidos.(No entanto, ele inclui notificação na próxima liberação de eventos que foram descartados). Os eventos mais recentes serão atrasados em mais cinco minutos se o provedor ficar sob carga pesada, supondo que eles não sejam ignorados por causa de um buffer cheio.

<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>

Para o exemplo funcionar, você deve configurar um servidor SMTP no arquivo de configuração, conforme mostrado no exemplo o seguir.

<system.net>
  <mailSettings>
    <smtp deliveryMethod="Network">
      <network 
        defaultCredentials="true" 
        host="127.0.0.1" 
        port="25" 
        username="username" 
        password="password" />
    </smtp>
  </mailSettings>
</system.net>

Para obter mais informações, consulte < mailSettings > Elemento (configurações de rede).

Observação:

Não há riscos de segurança associados em armazenar senhas de texto não criptografadas em um arquivo de configuração.Se você mantiver credenciais no arquivo de configuração, você deve criptografar o conteúdo do elemento de configuração &lt;processModel&gt; usando configuração protegida.Para obter mais informações, consulte Criptografando informações de configuração usando configuração protegida.

Configurações do Modo de Armazenamento

Você pode definir os seguintes atributos do elemento adicionar no elemento bufferModes para especificar o comportamento do buffer:

  • regularFlushInterval As informações de eventos regulares liberam intervalo.

  • urgentFlushThreshold   O número de eventos cujas informações devem ser armazenadas em buffer antes que o buffer seja liberado.

As configurações a seguir especificam as garantias feitas pelo provedor para o receptor de eventos.

  • maxBufferSize O número máximo de eventos cujas informações o buffer manterá.Se o número de eventos no buffer puder exceder esse valor, os eventos mais antigos serão descartados.

  • maxFlushSize O número máximo de eventos cujas informações o provedor irá liberar de cada vez.

  • urgentFlushInterval O tempo mínimo em que o provedor aguardará antes de executar outra liberação urgente.Se a hora representada pela propriedade urgentFlushInterval não passou desde a última liberação, mas o buffer estiver cheio, informações de eventos mais antigos são descartadas do buffer.O provedor mantém registro de quantos eventos foram descartados e inclui um aviso na próxima notificação de evento.

Usando WMI para Rastrear ASP.NET Eventos de Monitoramento de Integridade

Uma maneira para monitorar os eventos de integridade do ASP.NET é usar o provedor de eventos Instrumento de Gerenciamento do Windows (WMI), a classe WmiWebEventProvider.Este provedor converte eventos de monitoramento de integridade (eventos da Web) para eventos WMI.WMI fornece um modelo padrão de objeto em que as entidades que você deseja monitorar possam ser representadas como objetos.Essas entidades representam computadores, placas de rede, impressoras, aplicativos de software e assim por diante.As entidades são mapeadas no modelo de objeto WMI para que eles possam ser monitorados por aplicativos personalizados.A ilustração a seguir mostra a relação entre os eventos da Web ASP.NET, WMI e um aplicativo do consumidor que escuta eventos WMI.

Relação entre o ASP.NET e o WMI

Conexão Entre Eventos de Saúde e WMI

Monitoramento de integridade ASP.NET fornece a infraestrutura para a conexão entre eventos de saúde e WMI.Ele faz isso mapeando esses eventos para as classes WMI para que elas possam ser tratadas como objetos WMI.Ele também oferece o suporte para processamento de eventos de integridade e distribuição para o sistema WMI.Para obter detalhes sobre como mapear os eventos do ASP.NET para WMI, consulte Demonstra Passo a passo: Ouvindo eventos WMI no ASP.NET integridade Monitoring.Para obter mais informações sobre o Instrumentação de Gerenciamento do Windows, consulte Windows Management instrumentação no site do MSDN.

A lista a seguir descreve as etapas que são necessárias para monitorar eventos de integridade com WMI:

  1. Defina o mapeamento entre as classes de evento da Web e objetos WMI.Essa etapa já é feita para você para cada classe padrão de evento da Web.Esses mapeamentos são contidos no arquivo formato MOF (MOF) para ASP.NET, < versão > %SystemRoot%\Microsoft.NET\Framework\ \ASPNET.mof do arquivo.

    Observação:

    Todos os eventos personalizados são mapeados para o tipo de evento base em WMI.Não é possível mapear um evento personalizado de monitoramento de integridade ASP.NET para um evento WMI arbitrário.

    Por exemplo, o código a seguir mostra a definição de classe WMI mapeada para o tipo WebHeartbeatEvent.

    class HeartbeatEvent : ManagementEvent {
        /*
         * ProcessStatistics    
         */
        DATETIME    ProcessStartTime;
        sint32      ThreadCount;
        sint64      WorkingSet;
        sint64      PeakWorkingSet;
        sint64      ManagedHeapSize;
        sint32      AppdomainCount;    
        sint32      RequestsExecuting;
        sint32      RequestsQueued;
        sint32      RequestsRejected;
    }; 
    

    Para obter mais informações sobre os arquivos MOF, consulte Managed Object Format in the SDK DO WMI no MSDN.

  2. Defina um provedor de monitoramento de integridade ASP.NET que processará os eventos.

    O provedor padrão é a classe WmiWebEventProvider.Por padrão, isso já está configurado na seção healthMonitoring do arquivo raiz Web.config usando o seguinte elemento:

    <providers>
      <add 
        name="WmiWebEventProvider" 
        type="System.Web.Management.WmiWebEventProvider,System.Web, Version=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a" 
      />
    </providers>
    
  3. Insira as configurações apropriadas na seção healthMonitoring do arquivo de configuração para criar a associação entre classes de evento da Web e o provedor de eventos WMI, a classe WmiWebEventProvider.

    Por padrão, o provedor de eventos WMI não se inscreve para nenhum evento da Web.Você pode usar os seguintes elementos em um arquivo Web.config no nível do aplicativo para inscrever o provedor de eventos WMI para todos os eventos da Web.Por padrão, o tipo de evento All Events é configurado no elemento eventMappings no arquivo raiz Web.config.Ele é mapeado para a classe WebBaseEvent.

    <rules>
      <add 
        name="Testing Wmi"
        eventName="All Events" 
        provider="WmiWebEventProvider" 
        profile="Critical"
      />
    </rules>
    
  4. Criar um aplicativo para escutar eventos WMI, ou usar um aplicativo de terceiros.

    O exemplo de código em Demonstra Passo a passo: Ouvindo eventos WMI no ASP.NET integridade Monitoring cria um aplicativo de console que exibe informações sobre eventos sempre que é gerado um evento da Web.

Personalizando a Infraestrutura de Eventos da Integridade WMI

Quando ocorre um evento da Web, monitoramento da integridade ASP.NET distribui-o ao objeto WmiWebEventProvider.O objeto do provedor processa o evento e preenche os dados apropriados de acordo com a definição da classe relacionada ao MOF.O provedor, em seguida, distribui esses dados para o sistema WMI, usando uma chamada para código não gerenciado.

A única opção de personalização para enviar os eventos da Web para WMI é se você criar um aplicativo personalizado que consome monitorando de eventos de integridade ASP.NET após eles serem emitidos como eventos WMI.Nesse caso, a única alteração de configuração que você precisará fazer é configurar um novo elemento rules conforme listado anteriormente.Seu aplicativo escutará pelos eventos da integridade do ASP.NET no formulário de eventos WMI, como emitido pelo sistema operacional.Para obter mais informações, consulte Demonstra Passo a passo: Ouvindo eventos WMI no ASP.NET integridade Monitoring.

Observação:

Você não pode estender a classe WmiWebEventProvider.As únicas classes provedoras de eventos que você pode estender são as classes WebEventProvider e BufferedWebEventProvider.

Implementando o monitorando de integridadede eventos e provedores personalizados no ASP.NET

Por padrão, alguns eventos já são capturados nos contadores de desempenho, capturados no log de eventos ou enviadas para o sistema de rastreamento do ASP.NET.Você pode ativar outros eventos, mapeando-los para provedores existentes.Para obter mais informações, consulte a seção " consumindo da Eventos com Evento Fornecedores " em Visão Geral do Monitoramento da Integridade do ASP.NET.

Se nenhum dos eventos da Web ou provedores das classes existentes atenderem às suas necessidades, você pode estendê-los.A tabela a seguir lista maneiras que você pode personalizar o monitoramento da integridade ASP.NET.

Tarefa

Implementação

Exemplo

Criar uma classe de Evento da Web personalizada.

Crie uma classe que herda de WebBaseEvent e implementa o método virtual Raise.Para adicionar dados personalizados a um evento personalizado, substitua o método FormatCustomEventDetails.

Como: Implementar e disparar Custom ASP.NET integridade Monitoring Events

Criar um provedor de evento personalizado para processar um evento da Web interna ou personalizada.

Crie uma classe que herda da classe WebEventProvider (ou uma das classes derivadas).Se o seu provedor executa o log, também herda da classe WebEventFormatter.

Como: Implementar o integridade Monitoring Custom provedor Example

Consulte também

Tarefas

Como: bloquear ASP.NET configuração Settings

Conceitos

Visão Geral do Monitoramento da Integridade do ASP.NET

Visão Geral da Configuração ASP.NET

Referência

bufferModes elemento para healthMonitoring (ASP.NET Settings Esquema)

provedores de elemento para healthMonitoring (ASP.NET Settings Esquema)