Поделиться через


Интерфейс массового копирования сбора событий

AppFabric предоставляет поставщика массового копирования по умолчанию для SQL Server, который обеспечивает лучшую производительность при записи больших объемов данных событий в хранилище данных наблюдения. Однако возможно сохранение данных наблюдения за событиями в хранилище, отличном от хранилища SQL Server. В этом случае потребуется разработать поставщика массового копирования для конкретной базы данных, поддерживающего массовое копирование данных событий в хранилище, отличное от хранилища SQL Server. Если подходящий подключаемый модуль массового копирования не зарегистрирован для конкретного хранилища данных, то Служба сбора событий возвращается в режим пакетной вставки ADO.NET для записи событий в хранилище данных наблюдения.

Чтобы создать поставщика массового копирования для конкретной базы данных, класс объектов Платформа .NET Framework 4 реализует интерфейс Microsoft.ApplicationServer.Monitoring.EventCollector.IBulkCopy как часть функциональности поставщика массового копирования. Затем этого поставщика следует зарегистрировать в корневом файле Web.config. Регистрация поставщика массового копирования указывает Служба сбора событий вызывать интерфейс IBulkCopy поставщика, когда потребуется записать события в хранилище. Только Служба сбора событий имеет программный доступ к этому интерфейсу. Когда эта служба вызывается, поставщик массовых копий передает большие объемы кэшированных данных событий из сеанса трассировки событий Windows (ETW) в хранилище данных наблюдения.

Настройка поставщика массового копирования

Далее приводится пример регистрации поставщика массового копирования SQL Server по умолчанию, System.Data.SqlClient, предоставляемого AppFabric, с помощью Служба сбора событий. Поставщика массового копирования для конкретной базы данных можно регистрировать аналогично.

<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 – это тип класса поставщика, который реализует интерфейс IBulkCopy. Операция массового копирования вызывается при выполнении одного из следующих условий.

  • Количество событий в буфере событий Служба сбора событий превысило значение, заданное в атрибуте eventBufferSize. В данном примере установлено, что запись следует начинать, когда будет достигнуто ограничение в 10000 событий.

  • Интервал времени, заданный в атрибуте maxWriteDelay, истек. В данном примере установлено значение 5 секунд.

Дополнительные сведения о настройке Служба сбора событий и поставщика массового копирования см. в разделе Настройка службы сбора событий.

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

Это определение интерфейса IBulkCopy. Можно реализовывать метод WriteServer для обработки задачи записи данных событий для конкретной базы данных с помощью класса поставщика для этой базы данных.

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);
    }
}

Дополнительные сведения о классе DataTable см. в статье Класс DataTable (https://go.microsoft.com/fwlink/?LinkId=168571).

  2012-03-05