事件集合批量复制界面

AppFabric 为 SQL Server 提供默认批量复制提供程序,以在向监控存储写入大量事件数据时提供更佳性能。但是,您可能将事件监控数据存储到非 SQL Server 存储中。在这种情况下,您将需要开发数据库特定的批量复制提供程序,以支持向非 SQL Server 存储中批量复制事件数据。如果尚未为特定数据存储注册适合的批量复制插件,则事件收集服务将还原到 ADO.NET 批插入模式以便向监控存储中写入事件。

要创建数据特定的批量复制提供程序,您的 .NET Framework 4 对象类将实施 Microsoft.ApplicationServer.Monitoring.EventCollector.IBulkCopy 界面作为批量复制提供程序功能的一部分。然后,您可以在根 Web.config 文件中注册提供程序。注册批量复制提供程序将告知事件收集服务在需要向存储写入事件时调用提供程序的 IBulkCopy 界面。只有事件收集服务能够以编程方式访问此界面。调用时,批量复制提供程序将 Windows 事件跟踪 (ETW) 会话中的大量缓存的事件数据传输到监控存储。

配置批量复制提供程序

以下示例介绍如何使用AppFabric注册 事件收集服务 提供的默认 SQL Server 批量复制提供程序 System.Data.SqlClient。您可以使用相同方式注册数据库特定的批量复制提供程序。

<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 属性。在此示例中,设置为当达到 10,000 个事件限制时进行写入。

  • 时间间隔已超过 maxWriteDelay 属性。在此示例中,设置为每 5 秒进行写入。

有关如何配置事件收集服务和批量复制提供程序的详细信息,请参阅配置事件集合服务

Microsoft.ApplicationServer.Monitoring.EventCollector.IBulkCopy(界面)

此处是 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