Creating a performance collection rule using the SDK

Here is a sample that demonstrates how to create a performance collection rule using the SDK. The only caviat is that this rule will not work for agentless monitoring. A powershell version will follow soon.

using System;

using System.Collections.Generic;

using System.Text;

using Microsoft.EnterpriseManagement;

using Microsoft.EnterpriseManagement.Configuration;


namespace RuleCreationSample


    class Program


        static void Main(string[] args)


            ManagementGroup mg;

            ManagementPack mp;

            ManagementPackRule rule;


            mg = new ManagementGroup(“localhost”);

            mp = mg.GetManagementPacks(“Test”)[0];

            rule = new ManagementPackRule(mp, “SamplePerformanceCollectionRule”);


            CreateDataSourceModule(rule, mg);

            CreateWriteActionModules(rule, mg);


            rule.Target = mg.GetMonitoringClasses(“Microsoft.Windows.Server.2003.OperatingSystem”)[0];

            rule.Category = ManagementPackCategoryType.PerformanceCollection;

            rule.DisplayName = “Sample Performance Counter collection rule”;

            rule.Description = “This rule was created by a sample that demonstrates how to create a performance collection rule using the SDK”;






        private static void CreateWriteActionModules(

            ManagementPackRule rule,

            ManagementGroup mg



            ManagementPackModuleType dbWriteActionModuleType;

            ManagementPackModuleType dwWriteActionModuleType;

            ManagementPackWriteActionModule dbWriteActionModule;

            ManagementPackWriteActionModule dwWriteActionModule;


            dbWriteActionModuleType = mg.GetMonitoringModuleTypes(“Microsoft.SystemCenter.CollectPerformanceData”)[0];

            dwWriteActionModuleType = mg.GetMonitoringModuleTypes(“Microsoft.SystemCenter.DataWarehouse.PublishPerformanceData”)[0];


            dbWriteActionModule = new ManagementPackWriteActionModule(rule, “WriteToDB”);

            dwWriteActionModule = new ManagementPackWriteActionModule(rule, “WriteToDW”);


            dbWriteActionModule.TypeID = (ManagementPackWriteActionModuleType)dbWriteActionModuleType;

            dwWriteActionModule.TypeID = (ManagementPackWriteActionModuleType)dwWriteActionModuleType;







        private static void CreateDataSourceModule(

            ManagementPackRule rule,

            ManagementGroup mg



            ManagementPackModuleType dsModuleType;

            ManagementPackDataSourceModule dsModule;


            dsModuleType = mg.GetMonitoringModuleTypes(“System.Performance.DataProvider”)[0];


            dsModule = new ManagementPackDataSourceModule(rule, “DS”);

            dsModule.TypeID = (ManagementPackDataSourceModuleType)dsModuleType;


            dsModule.Configuration = CreateConfig(“% Processor Time”, “_Total”, “Processor”, 10);






        static string CreateConfig(

            string counterName,

            string instanceName,

            string objectName,

            int frequencyInSeconds



            StringBuilder builder = new StringBuilder();



            builder.AppendFormat(“<CounterName>{0}</CounterName>”, counterName);

            builder.AppendFormat(“<ObjectName>{0}</ObjectName>”, objectName);

            builder.AppendFormat(“<InstanceName>{0}</InstanceName>”, instanceName);


            builder.AppendFormat(“<Frequency>{0}</Frequency>”, frequencyInSeconds);


            return (builder.ToString());








Comments (5)

  1. Scott Moon says:

    What do I do with this? Is there an import function or a way to add more than one performance counter? Thank you.

  2. smooner3 says:

    How do I call or use this?

  3. borisyan says:

    This is an SDK sample of how you can create performance collection rules. In order to use this sample, you need to compile the code and run it. I am hoping to post soon a PS sample which you could invoke using PowerShell.

  4. Scott Moon says:

    I guess I’m way behind the curve on this. Once I compile the code how do I get it into the management console? Or for a lack of a better term How do I use it?

    Do you know of a book or guide that starts off at square one on how to code in C# and/or XML for System Centerp Operations Manager? Kind of like The SDK for Dummies.

    Thanks again for your blog and help.