Interface de cópia em massa da Coleta de Eventos

O AppFabric fornece um provedor de cópia em massa padrão para SQL Server, que oferece melhor desempenho ao gravar grandes quantidades de dados de eventos no repositório de monitoramento. No entanto, você pode estar armazenando seus dados de monitoramento de eventos em um repositório que não seja para SQL Server. Nessa caso, será necessário desenvolver um provedor de cópia em massa específico para banco de dados para oferecer suporte à cópia em massa de dados de eventos no repositório que não é destinado ao SQL Server. Se um plug-in de cópia em massa adequado não tiver sido registrado para um armazenamento de dados específico, o Serviço de Coleta de Eventos será revertido ao modo de inserção em lote de ADO.NET para gravar eventos no repositório de monitoramento.

Para criar um provedor de cópia em massa específico para banco de dados, a classe de objeto de .NET Framework 4 implementará a interface Microsoft.ApplicationServer.Monitoring.EventCollector.IBulkCopy como parte da funcionalidade do provedor de cópia em massa. Em seguida, você registrará o provedor no arquivo Web.config. O registro do provedor de cópia em massa solicitará que Serviço de Coleta de Eventos chame a interface IBulkCopy do provedor quando for necessário gravar eventos no repositório. Somente o Serviço de Coleta de Eventos poderá acessar essa interface de forma programática. Quando ela for chamada, o provedor de cópia em massa transferirá grandes quantidades de dados de eventos armazenados em cache de uma sessão de Rastreamento de Eventos para Windows (ETW) para o repositório de monitoramento.

Configurando um provedor de cópia em massa

Este é um exemplo de como o provedor de cópia em massa padrão do SQL Server, System.Data.SqlClient, fornecido pelo AppFabric, é registrado com Serviço de Coleta de Eventos. Você registraria seu provedor de cópia em massa específico para banco de dados de forma semelhante.

<microsoft.applicationServer>
  <monitoring lockElements="bulkCopyProviders, collectors">
    <bulkCopyProviders>
        <bulkCopyProvider providerName="System.Data.SqlClient" type="Microsoft.ApplicationServer.Monitoring.EventCollector.SqlServerBulkCopy, Microsoft.ApplicationServer.Monitoring, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
        </bulkCopyProviders>
    <collectors>
        <collector name="" session="0">
        <settings retryCount="10" eventBufferSize="10000" retryWait="00:00:15" maxWriteDelay="00:00:05" />
        </collector>
    </collectors>
    <default enabled="true" connectionStringName="DefaultMonitoringConnectionString" monitoringLevel="HealthMonitoring" />
  </monitoring>
</microsoft.applicationServer>
    
<connectionStrings>
    <add connectionString="Data Source=localhost;Initial Catalog=ApplicationServerMonitoring;Integrated Security=True" name="DefaultPersistenceConnectionString" providerName="System.Data.SqlClient" />
    <add connectionString="Data Source=localhost;Initial Catalog=ApplicationServerMonitoring;Integrated Security=True" name="DefaultMonitoringConnectionString" providerName="System.Data.SqlClient" />
</connectionStrings>

Microsoft.ApplicationServer.Monitoring.EventCollector.SqlServerBulkCopy é o tipo de classe do provedor que implementa a interface IBulkCopy. A operação de cópia em massa ocorre quando uma das seguintes condições é atendida:

  • O número de eventos no buffer de eventos de Serviço de Coleta de Eventos excede o atributo eventBufferSize. Nesse exemplo, ele está definido para gravar quando o limite de 10.000 eventos for atingido.

  • O intervalo de tempo expira no atributo maxWriteDelay. Nesse exemplo, ele está definido para gravar a cada 5 segundos.

Para obter mais informações sobre como configurar o Serviço de Coleta de Eventos e o provedor de cópia em massa, consulte Configurar o Serviço de Coleta de Eventos.

Microsoft.ApplicationServer.Monitoring.EventCollector.IBulkCopy (Interface)

Esta é uma definição da interface IBulkCopy. Você implementaria o método WriteServer para identificar a tarefa de gravação de dados de evento específica para banco de dados usando a classe do provedor específico para banco de dados.

Namespace: Microsoft.ApplicationServer.Monitoring.EventCollector
namespace Microsoft.ApplicationServer.Monitoring.EventCollector
{
    using System;
    using System.Data;
    using System.Data.Common;


    public interface IBulkCopy
    {
        //Number of rows in each batch. At the end of each batch, the rows in the batch are written to store
        int BatchSize { get; set; }
      
        //The destination table name in the store to write the rows
        string DestinationTableName { get; set; }

        //The database connection to the store to which the rows are written
        DbConnection Connection { get; set; }

        //Copies all rows from the supplied IDataReader to the destination table specified by the DestinationTableName property, on the store specified by the Connection property
        void WriteToServer(IDataReader dataReader);
    }
}

Para obter mais informações sobre a classe DataTable, consulte DataTable Class (https://go.microsoft.com/fwlink/?LinkId=168571).

  2011-12-05