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

A monitoração de integridade do ASP.NET permite aos administradores de sistema monitorarem o status de implantação de aplicativos da Web.

Observação:

Confiança média ou superior é necessária para disparar um evento de monitoração de integridade.

Esse tópico contém:

  • Cenários

  • Recursos de monitoramento da integridade do ASP.NET

  • Segundo plano

  • Exemplos de código

  • Referência de Classe

Cenários

Monitoramento da integridade ASP.NET permite que você execute as seguintes tarefas:

  • Monitorar o desempenho de um aplicativo para garantir que ele esteja íntegro.

  • Diagnosticar rapidamente os aplicativos ou sistemas que estão falhando.

  • Avaliar os eventos significativos durante o ciclo de vida de um determinado aplicativo.

  • Monitorar aplicativos ASP.NET ativos, individualmente ou em um sítio da Web.

  • Registrar em log eventos interessantes que não necessariamente se relacionam a erros em um aplicativo ASP.NET.

Voltar ao topo

Recursos

O sistema de monitoramento da integridade do ASP.NET inclui:

  • Tipos de eventos que obtém informações do estado da integridade do aplicativo.

  • Tipos de provedores que processam informações de eventos.

  • Tipos adicionais que ajudam você gerenciar eventos de integridade.

Voltar ao topo

Segundo plano

O monitoramento de integridade ASP.NET oferece aos administradores uma maneira fácil para monitorar a integridade de um aplicativo ASP.NET e obter informações detalhadas sobre recursos ASP.NET em tempo de execução (para instrumentar a aplicação).Monitoramento de integridade contém classes de eventos de monitoramento Web pronto para o uso (eventos Web), e provedores de monitoramento da integridade (listeners).Pacote de eventos Web de informações de eventos de integridades

Os provedores escutam os eventos e dissipam as informações referente a eles, geralmente registrando as informações em log ou notificando um administrador.Você conecta um evento Web à um provedor (conhecido como habilitar o evento ), fazendo as configurações no arquivo de configuração do aplicativo.

O sistema monitoramento da integridade do ASP.NET é implementado usando classes no namespace System.Web.Management .

Configurando a Monitoração de Integridade do ASP.NET

Você pode configurar o aplicativo para usar provedores de monitoramento internos ou personalizados que processam informações de integridade e reportam no status de integridade e as características de desempenho do aplicativo instrumentado.

Você adicionar provedores e eventos da Web para um aplicativo definindo a seção healthMonitoring no arquivo de configuração.Você usa classes internas ou personalizadas para captar os dados do evento e processá-los.

Para obter mais informações sobre arquivos de configuração, consulte Arquivos de configuração ASP.NET.

Hierarquia de classes de eventos da Web

Quando um evento da Web é disparado, uma instância da classe do evento associado é criada.Dados de evento são coletados nas propriedades desse objeto.Provedores de eventos processam esses dados.

Eventos da Web podem conter informações sobre o processo de trabalho, domínio de aplicativo, dados de solicitação, dados de resposta, erros de aplicativos, erros de configuração, e eventos de auditoria.Informações de integridade contidas em uma classe de evento pai são herdadas por qualquer classe de evento filha.

As relações entre as classes de eventos da Web são mostradas na ilustração a seguir.

Hierarquia de classes de eventos da Web

Quanto mais para baixo um evento está na hierarquia de classes de evento da Web, mais específico são os dados para o aplicativo ASP.NET.Por exemplo, as classes derivadas podem expor informações, como rastreamentos de pilha, IPs de clientes e informações de processo e tarefas.

Informações Sobre Eventos da Web

A tabela a seguir lista informações que o ajudam a decidir qual classe de evento da Web herdar ou usar.As linhas se referem à classes de evento da Web.As colunas se referem às classes de informações, que são geralmente incluídas como propriedades nas classes de evento da Web.

Se seu aplicativo não estiver sendo executado com confiança total, somente a classe WebBaseEvent é herdável.Isso ajuda a proteger informações confidenciais contra exposição através das classes de informações listadas na tabela.

Classes de evento da Web

WebApplicationInformation

WebProcessInformation

WebProcessStatistics

WebRequestInformation

WebThreadInformation

WebBaseEvent

Dados gerados por esta classe.

Não disponível

Não disponível

Não disponível

Não disponível

WebManagementEvent

Dados gerados pela classe pai

Dados gerados por esta classe.

Não disponível

Não disponível

Não disponível

WebHeartbeatEvent

Dados gerados pela classe pai

Dados gerados pela classe pai

Dados gerados por esta classe.

Não disponível

Não disponível

WebRequestEvent

Dados gerados pela classe pai

Dados gerados pela classe pai

Não disponível

Dados gerados por esta classe.

Não disponível

WebApplicationLifetimeEvent

Dados gerados pela classe pai

Dados gerados pela classe pai

Não disponível

Não disponível

Não disponível

WebBaseErrorEvent

Dados gerados pela classe pai

Dados gerados pela classe pai

Não disponível

Não disponível

Não disponível

WebErrorEvent

Dados gerados pela classe pai

Dados gerados pela classe pai

Não disponível

Dados gerados por esta classe.

Dados gerados por esta classe.

WebRequestErrorEvent

Dados gerados pela classe pai

Dados gerados pela classe pai

Não disponível

Dados gerados pela classe pai

Dados gerados pela classe pai

WebAuditEvent

Dados gerados pela classe pai

Dados gerados pela classe pai

Não disponível

Dados gerados por esta classe.

Não disponível

WebSuccessAuditEvent

Dados gerados pela classe pai

Dados gerados pela classe pai

Não disponível

Dados gerados pela classe pai

Não disponível

WebAuthenticationSuccessAuditEvent

Dados gerados pela classe pai

Dados gerados pela classe pai

Não disponível

Dados gerados pela classe pai

Não disponível

WebFailureAuditEvent

Dados gerados pela classe pai

Dados gerados pela classe pai

Não disponível

Dados gerados pela classe pai

Não disponível

WebAuthenticationFailureAuditEvent

Dados gerados pela classe pai

Dados gerados pela classe pai

Não disponível

Dados gerados pela classe pai

Não disponível

WebViewStateFailureAuditEvent

Dados gerados pela classe pai

Dados gerados pela classe pai

Não disponível

Dados gerados pela classe pai

Não disponível

Hierarquias de Classes de Provedores

ASP.NET inclui provedores internos que você pode usar para processar eventos da Web.Você também pode herdar das classes internas para criar seu próprio provedor personalizado, sujeitos às limitações de herança listadas aqui:

  • A classe WebEventProvider pode ser herdada pelos aplicativos executados em qualquer nível de confiança.

  • A classe BufferedWebEventProvider pode ser herdada pelos aplicativos executados em qualquer nível de confiança.

  • A classe SqlWebEventProvider pode ser herdada apenas pelos aplicativos executados em nível de confiança total.

Outras classes não podem ser herdadas por aplicativos, qualquer que seja o nível de confiabilidade.Para obter mais informações, consulte as visões gerais para classes de provedor individuais.

A ilustração a seguir mostra a relação entre as classes de provedor na Web do espaço de nomes System.Web.Management.

Hierarquia de classes de provedor da Web

Usando Eventos de Monitoramento de Integridade do ASP.NET.

Você pode trabalhar com eventos de monitoramento de integridade do ASP.NET nas seguintes formas:

  • Use classes de evento e provedores internas.Você normalmente não precise fornecer implementações personalizadas de nenhuma classe de eventos Web do ASP.NET.Observe que seu aplicativo não criar esses eventos, o .NET Framework faz isso.No entanto, você deve configurá-los conforme explicado posteriormente neste tópico.Para obter mais informações, consulte Como: Enviar email for integridade Monitoring Notifications.

  • Crie classes personalizadas para eventos da Web ou provedores.Você normalmente cria eventos Web personalizados se você precisar acrescentar informações personalizadas para aquilo que já é fornecido pelos eventos internos da Web.Você normalmente criar provedores personalizados se você desejar enviar dados de eventos através de um mecanismo diferente dos disponíveis com os provedores internos.Para obter mais informações, consulte Usando Eventos de Monitoramento de Integridade do ASP.NET..

Usando Eventos e Provedores da Web Internos

Usar eventos da Web internos e provedores para o monitoramento da integridade é a estratégia mais comum.Ela requer somente que você configure o aplicativo para usar os eventos e os provedores que você precisa.Faça o seguinte:

  • Adicionar a classe de evento Web interno do ASP.NET que você precisa ao elementoeventMappings da seção healthMonitoring no arquivo de configuração do aplicativo.

  • Adicionar o provedor que consome o evento para o elementoproviders da seção healthMonitoring.

  • Adicione um item para o elementorules que define a associação entre o evento e o provedor.

Por padrão, as classes internas de monitoramento da integridade ASP.NET são configuradas na seção healthMonitoring do arquivo web.config raiz.A seção healthMonitoring estabelece a seguinte configuração padrão:

  • Todas as classes de evento da Web que derivam de WebBaseEvent são especificadas no elemento eventMappings.Esta seção é usada para atribuir um nome amigável a um grupo de classes de eventos.

  • Todas as classes de evento que derivam de WebBaseEvent são incluídas em pelo menos um dos grupos que estão definidos no elemento eventMappings.

Os provedores de eventos EventLogWebEventProvider, WmiWebEventProvider, e SqlWebEventProvider são especificados no elemento providers.Você pode especificar outros provedores internos no elemento providers, como as classes SimpleMailWebEventProvider, TemplatedMailWebEventProvider, ou TraceWebEventProvider.

As regras que associe o erro da Web e a auditoria de eventos de falha para as classes EventLogWebEventProvider são especificadas no elemento rules.Você pode ativar outros eventos e provedores Web, adicionando mais elementos rules.Um evento é considerado ativado se ele estiver mapeado para um provedor de eventos no elemento rules.Os elementos eventMappings e providers devem ser configurados para o evento, mas a menos que os dois estejam conectados no elemento rules, o evento não estará ativado.

Você pode especificar valores de parâmetro para os itens configurados.Os exemplos incluem os parâmetros que limitam o número de eventos que podem ocorrer, que especificam o intervalo entre dois eventos, ou que especificam opções de eventos de armazenamento buffer para SQL e provedores de email.

Configurando um Provedor Personalizado

Se você precisar de processamento personalizado de informações de evento da Web, você pode criar um provedor de eventos de integridade personalizado.O seu provedor é uma classe que herda das classes WebEventProvider ou BufferedWebEventProvider.Para um exemplo, consulte Como: Implementar o integridade Monitoring Custom provedor Example.A criação de um provedor personalizado é a personalização mais comum de monitoramento de integridade.Ela requer que você modifique o arquivo de configuração nos seguintes aspectos:

  • Adicione o provedor personalizado que processa o evento para o elemento providers da seçãohealthMonitoring no arquivo de configuração.

  • Adicione um item para o elementorules que define a associação entre o evento e o provedor.

  • Coloque o conjunto de módulos contendo a implementação do provedor personalizado na subpasta Bin do aplicativo.Você não pode colocar o arquivo de código-fonte do provedor na subpasta App_Code, porque o sistema de monitoramento de integridade é configurado e criado antes que quaisquer arquivos de código na subpasta App_Code sejam compilados.

O atributotype do elemento providers requer pelo menos o nome da classe.Se o assembly não estiver localizado no diretório bin do aplicativo, o assembly deve ser fortemente nomeado e instalado no cache global de assemblies.Nesse caso, o atributo type do elemento providers requer o nome forte completo, como mostrado no exemplo de código a seguir, onde os valores Version e PublicKeyToken correspondem ao seu conjunto de módulos.

type="Microsoft.Samples.Web.Management.SampleCustomEventProvider, Sample.SampleCustomEventProvider,Version=n.n.n.n,Culture=neutral, PublicKeyToken=xxxx"

O exemplo a seguir mostra como associar o provedor SampleCustomEventProvider ao evento WebHeartbeatEvent.O evento Heartbeats já está configurado no arquivo raiz Web.config.

<healthMonitoring 
  heartBeatInterval="1" 
  enabled="true">
  <rules>
    <add 
      name="Heartbeat Events" 
      eventName="Heartbeats" 
      provider="Sample Custom Event Provider"
      profile="Default" 
      minInstances="1" 
      maxLimit="Infinite" 
      minInterval="00:01:00"
      custom="" 
    />
  </rules>
  <providers>
    <add 
      name="Sample Custom Event Provider" 
      type="Microsoft.Samples.Web.Management.SampleCustomEventProvider, Sample.SampleCustomEventProvider,Version=1.0.0.0,Culture=neutral, PublicKeyToken=xxxxxxxxxxxx" 
    />
  </providers>
</healthMonitoring>

Configurando um Evento Personalizado

Se você precisar de informações sobre eventos de integridade personalizados, você pode compilar um evento personalizado de integridade.Para um exemplo, consulte Como: Implementar e disparar Custom ASP.NET integridade Monitoring Events.A criação de um evento personalizado da Web é menos comum do que a criação de um provedor personalizado.Ele requer que você modifique o arquivo de configuração.Você também deve chamar explicitamente o evento personalizado no momento apropriado.

Para configurar o evento, você deve seguir estes procedimentos:

  • Adicione a classe de evento de integridade personalizado ao elementoeventMappings da seção healthMonitoring.

  • Adicione um elementorules que define a associação entre o evento e o provedor.

  • Adicione o conjunto de módulos que contenha a implementação do evento da Web personalizada para o subdiretório Bin do aplicativo ASP.NET.Como alternativa, você pode adicionar o arquivo código-fonte do evento ao subdiretório App_Code.

Se você usar um conjunto de módulos, o atributo type do elemento eventMappings irá requerer pelo menos o nome da classe e o nome do arquivo de conjunto de módulos, como mostrado no exemplo de código a seguir:

type="System.Web.Management.SampleCustomWebEvent, Sample.SampleCustomWebEvent"

Se você usar um arquivo código-fonte, você precisará especificar somente o nome da classe.

O exemplo a seguir mostra como associar o provedor de evento EventLogWebEventProvider a um evento personalizados SampleCustomWebEvent.O provedor de eventos EventLogProvider já está configurado no arquivo raiz Web.config.

<healthMonitoring 
  heartBeatInterval="0" 
  enabled="true">
  <rules>
    <add 
      name="Sample Custom Events" 
      eventName="SampleCustomWebEvent" 
      provider="EventLogProvider"
      profile="Default" 
      minInstances="1" 
      maxLimit="Infinite" 
      minInterval="00:01:00"
      custom="" 
    />
  </rules>
  <eventMappings>
    <add 
      name="SampleCustomWebEvent" 
      type="System.Web.Management.SampleCustomWebEvent, Sample.SampleCustomWebEvent,Version=1.0.0.0,Culture=neutral, PublicKeyToken=xxxxxxxxxxxx" "
      startEventCode="0" 
      endEventCode="2147483647" 
    />
  </eventMappings>
</healthMonitoring>

Protegendo a Monitoração de Integridade ASP.NET

Por padrão, o recurso de monitoramento da integridade é habilitado para aplicativos ASP.NET.Você pode desativar-lo definindo o atributo enabled do elemento healthMonitoring como false.As configurações padrão são definidas para os valores mais seguros disponíveis.Para obter mais informações sobre definições de configuração do monitoramento da integridade, consulte healthMonitoring.Considere bloquear as definições de configuração de monitoração da integridade usando o elemento location.

Observação:

Ao implementar evento cliente personalizado ou provedores de eventos personalizados, você deve codificar ou verificar o conteúdo do evento para evitar problemas de scripts entre sites.

Protegendo Valores de Configuração

Ao armazenar informações confidenciais em um arquivo de configuração para um aplicativo, você deve criptografar os valores confidenciais usando a configuração protegida.Informações que são especialmente confidenciais incluem as chaves de criptografia armazenadas no elemento de configuração machineKey, e sequências de conexão a uma fonte de dados armazenadas no elemento de configuração connectionStrings.Para obter mais informações, consulte Criptografando informações de configuração usando configuração protegida.

A seção de configuração healthMonitoring pode ser acessado somente pelo código que usa confiança média ou superior.Isso impede que aplicativos de confiança baixa registrem tipos personalizados.

Segurança para extensão do monitoramento da integridade

Os tipos de monitoramento de integridade no espaço de nomes System.Web.Management têm as seguintes características:

  • Construtores base de classe são marcados como protectedinternal.Portanto, instâncias dos tipos de eventos base de classe não podem ser criadas diretamente pelo código do usuário.

  • Acesso à instâncias de evento da Web está limitado a provedores com configuração especificada, filtros e páginas modelo.

  • As demandas de links de herança em eventos com conteúdo protegido garantem que possam ser derivados somente eventos personalizados confiáveis.

  • Eventos confiáveis personalizados que expõem dados confidenciais de propriedades de evento protegidos devem aplicar segurança de acesso de código neles mesmos para evitar ataques.Para obter detalhes sobre segurança de acesso a código, consulte Segurança do Acesso ao código ASP.NET ou Noções Básicas sobre Segurança de Accesso a Código.

  • Os tipos Instrumentação de Gerenciamento do Windows (WMI) que são usados para exibir eventos Web são bloqueados para impedir que todos os usuários acessem dados de evento.

    Observação:

    Ao implementar evento cliente personalizado ou provedores de eventos personalizados, você deve codificar ou verificar o conteúdo do evento para evitar problemas de scripts entre sites.

Protegendo Conexões com Fontes de Dados

Você pode criar provedores personalizados de monitoração de integridade para registrar dados do evento em um banco de dados.O ASP.NET inclui um provedor SQL.Para obter mais informações sobre armazenar em log os dados de eventos, consulte Proteção de acesso a dados.

Para manter a conexão ao seu servidor de banco de dados seguro, você deve criptografar informações de sequência de conexão no arquivo de configuração usando a configuração protegida.Para obter mais informações, consulte Criptografando informações de configuração usando configuração protegida.

Quando você usa um provedor SQL, você deve proteger o banco de dados de forma apropriada usando a autenticação.Arquivos do Microsoft SQL Server Express Edition devem ser devidamente assegurados pelas listas do controle de acessos (ACLs) e pela autentificação SQL.

Observação:

SQL Server Express Edition não deve ser executado sob uma conta sem-privilégios quando você está fazendo armazenamento de dados de eventos em um banco de dados.

Protegendo Contra a Ataques de Negação de Serviço

Eventos da Web podem ser acionados por uma solicitação HTTP ou código de aplicativo que gera exceções ou eventos.A capacidade do provedor de eventos pode ser excedida por um volume alto de eventos ou eventos grandes.Nesse caso, o aplicativo ASP.NET ou servidor pode ser sobrecarregado, o que pode afetar o uso da memória, espaço em disco e o tráfego de rede.

Para reduzir a exposição do aplicativo a um ataque de negação de serviço, o ASP.NET por padrão usa o design a seguir:

  • ASP.NET mede sem uma instância de um evento por minuto.Esta frequência de regulagem é configurada no elemento profiles e associada com eventos e provedores no elemento rules.

  • Evento de gravação em buffer é isolado para cada tipo de provedor para evitar competição pelo espaço de buffer.Configurações do buffer são configuradas no elemento bufferModes.Provedores podem ser configurados para usar um conjunto específico de configurações do buffer, especificando o elemento bufferModes que contém as configurações apropriadas.

  • Para criar um evento personalizado, confiança média ou maior é necessária.

Como um administrador do sistema, você pode configurar a otimização e as configurações de buffer para evitar estouro, especialmente para eventos que podem ser acionadas por solicitações http.Além disso, você pode definir modos de buffer separados para lidar com eventos importantes e não importantes.

A segurança de mensagens de erro e eventos

Para impedir que informações sigilosas sejam expostas a fontes indesejáveis, configure seu aplicativo para não exibir mensagens de erro detalhadas.Você pode também configurar o aplicativo para exibir mensagens de erro detalhadas somente quando o cliente é o próprio servidor Web.Para obter mais informações, consulte customErrors.

Por padrão, ASP.NET registra grande volume, excepcional, pedidos de eventos da Web para o sistema de monitoramento de performance.Na configuração padrão, isso significa que tentativas de login falhas registrarão nomes de usuário e outras informações de diagnóstico no log de eventos do aplicativo.Esses dados podem ser exibidos no Visualizador do Eventos do Windows.Se o servidor está executando um dos produtos Microsoft Windows Server, você pode melhorar a segurança do aplicativo, protegendo o log de eventos.Você também pode definir parâmetros para especificar o tamanho, retenção e outras características do log de eventos para evitar um ataque indireto de negação de serviço contra ele.

Bloqueando as Configurações do Monitoramento a Integridade do ASP.NET

No cenário de hospedagem do aplicativo, você geralmente deseja bloquear algumas configurações em um site para impedir a modificação.Por exemplo, talvez queira proteger as configurações do monitoramento de integridade de aplicativos hospedados para reduzir o risco de modificações acidentais nas configurações de aplicativos da Web.

Você pode bloquear as configurações adicionando um atributo allowOverride="false" em uma marca <location>.Isso faz com que o sistema de configuração acione um erro se um arquivo de configuração que seja inferior na hierarquia tentar substituir qualquer seção de configuração que é definida no elemento location.

O arquivo de configuração exemplo a seguir mostra como bloquear a seção healthMonitoring de um aplicativo ASP.NET que é chamado application1.As configurações poderiam ser armazenadas no nível de servidor (no arquivo Machine.config) ou no nível do site.

<configuration>
  <location path="application1" allowOverride="false">
    <system.web>
      <healthMonitoring
        enabled="true"
        heartBeatInterval="60">
        <bufferModes>
          <add name="Logging"
            maxBufferSize="1000"
            maxFlushSize="200"
            urgentFlushThreshold="800"
            regularFlushInterval="00:30:00"
            urgentFlushInterval="00:05:00"
            maxBufferThreads="1"
          />
        </bufferModes>
        <providers>
           <add name="EventLogProvider"
            type="System.Web.Management.EventLogWebEventProvider, System.Web, Version=%ASSEMBLY_VERSION%, Culture=neutral, PublicKeyToken=%MICROSOFT_PUBLICKEY%"
            buffer="true"
            bufferMode="Logging"
          />
        </providers>
        <eventMappings>
          <add name="All Errors"
            type="System.Web.Management.WebBaseErrorEvent, System.Web, Version=%ASSEMBLY_VERSION%, Culture=neutral, PublicKeyToken=%MICROSOFT_PUBLICKEY%" 
          />
        </eventMappings>
        <profiles>
          <add name="Default"
            minInstances="1"
            maxLimit="Infinite"
            minInterval="00:10:00"
          />
        </profiles>
        <rules>
          <add name="All Errors Default"
            eventName="All Errors"
            provider="EventLogProvider"
            profile="Default"
            minInterval="00:01:00" 
          />
        </rules>
      </healthMonitoring>
    </system.web>
  </location>
</configuration>

Você pode bloquear elementos com mais granularidade usando atributos adicionais, como lockItem,lockAttributes e lockElements.Para obter mais informações, consulte Atributos de Geral herdados por elementos de seção.

Voltar ao topo

Exemplos de código

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

Como: Implementar o integridade Monitoring Custom provedor Example

Como: Enviar email for integridade Monitoring Notifications.

Demonstra Passo a passo: Ouvindo eventos WMI no ASP.NET integridade Monitoring

Voltar ao topo

Referência de Classe

  • System.Web.Management
    O espaço de nomes que contém os tipos de gerenciamento e monitoração do status de integridade de aplicativos da Web..

  • System.Management
    O espaço de nomes que contém tipos para conexão com a infraestrutura da Instrumentação de Gerenciamento do Windows (WMI).

  • System.Management.Instrumentation
    O espaço de nomes que contém tipos para instrumentação de aplicativos para usuários potenciais do WMI.

  • HealthMonitoringSection
    O tipo que obtém ou define por código os atributos de configuração healthMonitoring.

Voltar ao topo

Consulte também

Tarefas

Como: bloquear ASP.NET configuração Settings

Conceitos

Usando Eventos de Monitoramento de 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)