<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Mr. MOM goes Cloud</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/mrmomgoescloud/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/mrmomgoescloud/feed.xml</link>
    <description />
    <lastBuildDate>Wed, 17 Apr 2019 03:45:47 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Send SCOM Custom Performance Counters to OMS</title>
      <link>https://docs.microsoft.com/archive/blogs/mrmomgoescloud/send-scom-custom-performance-counters-to-oms</link>
      <pubDate>Sun, 18 Oct 2015 06:07:14 GMT</pubDate>
      <dc:creator><![CDATA[Markus Klein - Bern]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/mrmomgoescloud/2015/10/18/send-scom-custom-performance-counters-to-oms/</guid>
      <description><![CDATA[Since the release of the Operations Management Suite there have been a lot of solutions and...]]></description>
      <content:encoded><![CDATA[<p>Since the release of the Operations Management Suite there have been a lot of solutions and intelligence packs been added. One of the latest ones was a pack to upload Performance Counters to OMS by defining them in the OMS console.
</p><p><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/05/06/metablogapi/103015_0948_SendSCOMCus1.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-05-06-metablogapi/103015_5F00_0948_5F00_SendSCOMCus1.png" alt=" " />
	</p><p>This performance collection is being setup by OMS intelligence packs that are distributed to the SCOM Management Server and Agent. 
</p><div><table style="border-collapse:collapse;" border="0"><colgroup><col style="width:312px;" /><col style="width:402px;" /><col style="width:222px;" /></colgroup><tbody valign="top"><tr style="background:black;"><td style="padding-left:7px;padding-right:7px;border-top:solid black 0.5pt;border-left:solid black 0.5pt;border-bottom:solid black 0.5pt;"><p><span style="color:white;"><strong>Intelligence Pack ID</strong></span></p></td><td style="padding-left:7px;padding-right:7px;border-top:solid black 0.5pt;border-bottom:solid black 0.5pt;"><p><span style="color:white;"><strong>Intelligence Pack Display Name</strong></span></p></td><td style="padding-left:7px;padding-right:7px;border-top:solid black 0.5pt;border-bottom:solid black 0.5pt;border-right:solid black 0.5pt;"><p><span style="color:white;"><strong>Management Pack Bundle</strong></span></p></td></tr><tr><td style="background:white;padding-left:7px;padding-right:7px;border-top:none;border-left:solid black 0.5pt;border-bottom:solid black 0.5pt;"><p><strong>Microsoft.IntelligencePacks.Performance</strong></p></td><td style="padding-left:7px;padding-right:7px;border-top:none;border-bottom:solid black 0.5pt;"><p>Microsoft System Center Advisor Performance collection library</p></td><td style="padding-left:7px;padding-right:7px;border-top:none;border-bottom:solid black 0.5pt;border-right:solid black 0.5pt;"><p>Microsoft.IntelligencePacks.Performance.mpb</p></td></tr><tr><td style="background:white;padding-left:7px;padding-right:7px;border-left:solid black 0.5pt;border-bottom:solid black 0.5pt;"><p><strong>Microsoft.IntelligencePacks.Types</strong></p></td><td style="padding-left:7px;padding-right:7px;border-bottom:solid black 0.5pt;"><p>Microsoft System Center Advisor Types Library</p></td><td style="padding-left:7px;padding-right:7px;border-bottom:solid black 0.5pt;border-right:solid black 0.5pt;"><p>Microsoft.IntelligencePacks.Types.mpb</p></td></tr></tbody></table></div><p>
 </p><p>This has brought up the question, if it is possible to also upload custom performance counters from SCOM into OMS. My colleague Wei Hao Lim has shown, that it is indeed possible by using two Write Actions from these Intelligence Packs. For details, look at <a href="https://blogs.msdn.com/b/wei_out_there_with_system_center/archive/2015/09/29/oms-collecting-nrt-performance-data-from-an-opsmgr-powershell-script-collection-rule-created-from-a-wizard.aspx"><span style="font-family:Segoe UI;font-size:10pt;">https://blogs.msdn.com/b/wei_out_there_with_system_center/archive/2015/09/29/oms-collecting-nrt-performance-data-from-an-opsmgr-powershell-script-collection-rule-created-from-a-wizard.aspx</span></a><span style="color:black;font-family:Segoe UI;font-size:10pt;">. 
</span></p><p><span style="font-family:Segoe UI;font-size:10pt;"><span style="color:black;">For the upload to work, the Performance Object Name has to be built like this: </span><strong>\\FQDN\ObjectName</strong><span style="color:black;">. This means, that if you want to just add the new write actions to a standard rule, you end up with Performance Objects in SCOM that have different ObjectNames for each agent.
</span></span></p><p><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/05/06/metablogapi/103015_0948_SendSCOMCus2.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-05-06-metablogapi/103015_5F00_0948_5F00_SendSCOMCus2.png" alt=" " />
	</p><p>While this might just be a cosmetic problem, I don&#39;t really like this, having fought many battles with the SQL Performance Counters that include the SQL engine name in many cases. So my goal was to create write actions into OMS based on the ones that Wei has used, but be able to send a normal looking ObjectName into SCOM database and DWH and a OMS compliant ObjectName into OMS. To achieve this, I created two new WriteActionTypes like this:
</p><p>
 </p><p><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/05/06/metablogapi/103015_0948_SendSCOMCus3.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-05-06-metablogapi/103015_5F00_0948_5F00_SendSCOMCus3.png" alt=" " />
	</p><p>
 </p><p>Basically what&#39;s happening here is that I create the Performance Counters with a &quot;normal&quot; SCOM ObjectName and when it is time to send them to OMS, I run them through a second DataGenericMapper to change the ObjectName into the OMS compliant ObjectName format of <strong>\\FQDN\ObjectName</strong>. After that, they are fed into the same write actions, that Wei has described in his Blog Post.
</p><p><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/05/06/metablogapi/103015_0948_SendSCOMCus4.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-05-06-metablogapi/103015_5F00_0948_5F00_SendSCOMCus4.png" alt=" " />
	</p><p>As you can see, the first DataGenericMapper gets the PropertyBag output of your custom Performance Counter Script in the well-known <strong>$Data/Property[@Name=&#39;&lt;PropertyName&gt;&#39;]$</strong> format. The second one gets the same Data that is then already on the Data bus, therefore can be referred to by <strong>$Data/&lt;PropertyName&gt;$</strong>. If you target a class coming off of Microsoft.Windows.Computer, the FQDN translates to 
</p><p><strong>\\$Target/Host/Property[Type=&quot;Windows!Microsoft.Windows.Computer&quot;]/NetworkName$</strong>
	</p><p>making the whole term look like 
</p><p><strong>\\$Target/Host/Property[Type=&quot;Windows!Microsoft.Windows.Computer&quot;]/NetworkName$\$Data/ObjectName$</strong>.
</p><p>These two new WriteActionTypes can then be used in your Performance Collection Rule like this:
</p><p><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/05/06/metablogapi/103015_0948_SendSCOMCus5.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-05-06-metablogapi/103015_5F00_0948_5F00_SendSCOMCus5.png" alt=" " />
	</p><p>By doing this, you get a &quot;SCOM-like&quot; Performance ObjectName in SCOM while still being able to comply with the OMS ObjectName format and upload your customer performance data into OMS.
</p><p>Here is the counter in SCOM:
</p><p><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/05/06/metablogapi/103015_0948_SendSCOMCus6.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-05-06-metablogapi/103015_5F00_0948_5F00_SendSCOMCus6.png" alt=" " />
	</p><p>And here the same counter in OMS:
</p><p><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/05/06/metablogapi/103015_0948_SendSCOMCus7.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-05-06-metablogapi/103015_5F00_0948_5F00_SendSCOMCus7.png" alt=" " />
	</p><p>
 </p><p>So if you are not shy to edit Management Packs in XML, import the Management Pack and start using the new Write Actions.
</p><p>The reference should look similar to this:
</p><p><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/05/06/metablogapi/103015_0948_SendSCOMCus8.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-05-06-metablogapi/103015_5F00_0948_5F00_SendSCOMCus8.png" alt=" " />
	</p><p>Now add the new Write Actions to your Rule. In the XML it should then look like this:
</p><p><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/05/06/metablogapi/103015_0948_SendSCOMCus9.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-05-06-metablogapi/103015_5F00_0948_5F00_SendSCOMCus9.png" alt=" " />
	</p><p>Now be patient, it might take a few hours for the counters to show up in OMS, but eventually they will.
</p><p>Hope you are having fun with this and start using OMS more often…
</p><p>You can download the Management Pack from <a href="https://gallery.technet.microsoft.com/Sample-MP-WriteActions-to-b720052e"><span style="font-family:Segoe UI;font-size:10pt;">https://gallery.technet.microsoft.com/Sample-MP-WriteActions-to-b720052e</span></a><span style="color:black;font-family:Segoe UI;font-size:10pt;">
		</span>
	</p><p>
 </p><p>Some general Information about Near Real Time (NRT) Performance Data in OMS: <br /><a href="https://blogs.technet.com/b/momteam/archive/2015/09/01/near-real-time-performance-data-collection-in-oms.aspx">https://blogs.technet.com/b/momteam/archive/2015/09/01/near-real-time-performance-data-collection-in-oms.aspx</a>
	</p><p>
 </p><p><strong>UPDATE:
</strong></p><p>
 </p><p>I added the Version 1.2.1102.0 of the OpsInsights Management Pack Microsoft.IntelligencePacks.Performance to the ZIP File. Some people have told me that this is being a blocker for installation.
</p><p>
 </p><p><span style="font-size:14pt;"><strong>Disclaimer: <br />All information on this blog is provided on an as-is basis with no warranties and for informational purposes only. Use at your own risk. The opinions and views expressed in this blog are those of the author and do not necessarily state or reflect those of my employer.
</strong></span></p><p>
 </p>]]></content:encoded>
    </item>
    <item>
      <title>Monitoring Office 365 with System Center Operations Manager 2012 R2</title>
      <link>https://docs.microsoft.com/archive/blogs/mrmomgoescloud/monitoring-office-365-with-system-center-operations-manager-2012-r2</link>
      <pubDate>Sun, 27 Sep 2015 02:23:10 GMT</pubDate>
      <dc:creator><![CDATA[Markus Klein - Bern]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/mrmomgoescloud/2015/09/27/monitoring-office-365-with-system-center-operations-manager-2012-r2/</guid>
      <description><![CDATA[Office 365 is becoming more and more commonly used these days. So naturally the requirement to...]]></description>
      <content:encoded><![CDATA[<p>Office 365 is becoming more and more commonly used these days. So naturally the requirement to monitor a bit more closely what exactly is going on in your subscription becomes a topic for a lot of small, medium and larger customers. Microsoft does offer a SCOM Management Pack for Office 365 (can be downloaded at <a href="https://www.microsoft.com/en-us/download/details.aspx?id=43708">https://www.microsoft.com/en-us/download/details.aspx?id=43708</a><span style="color:black;">) but once you import it and look at the dashboard it provides, you might be a bit disappointed.<span style="font-family:Segoe UI;font-size:10pt;">
			</span></span></p><p>
 </p><p><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/05/06/metablogapi/092715_0948_MonitoringO1.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-05-06-metablogapi/092715_5F00_0948_5F00_MonitoringO1.png" alt=" " />
	</p><p>
 </p><p>What the official Management Pack does give you is an overview of Incidents (Active and Resolved) and Planned Maintenance Times. There is no information on how well you are connected or what kind of performance your end users might experience. That got me thinking and experimenting around a little bit. I have created a management pack that gives you additional information on your Office 365 environment. So far only for Exchange Online, but the other components are in the works as well. The MP is not ready to share quite yet, I need to add some documentation and features to it, but I thought I test the waters a little bit by giving you all a little teaser screenshot of the current state of my O365 Exchange Online Dashboard…
</p><p>Here is the Overview Dashboard
</p><p><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/05/06/metablogapi/092715_0948_MonitoringO2.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-05-06-metablogapi/092715_5F00_0948_5F00_MonitoringO2.png" alt=" " />
	</p><p>And then the detailed dashboard
</p><p><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/05/06/metablogapi/092715_0948_MonitoringO3.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-05-06-metablogapi/092715_5F00_0948_5F00_MonitoringO3.png" alt=" " />
	</p><p>So I would love to get some feedback from whoever reads this:
</p><ul><li>Is this useful?
</li><li>What are the KPIs and/or synthetic transactions that are most interesting and important to you/your customers?
</li></ul><p>So much for the moment… Watch this space, there will be updates to this as I go along, hopefully with a lot of feedback from my readers.
</p><p>
 </p>]]></content:encoded>
    </item>
    <item>
      <title>Groups and Distributed Applications with 3-State Rollup</title>
      <link>https://docs.microsoft.com/archive/blogs/mrmomgoescloud/groups-and-distributed-applications-with-3-state-rollup</link>
      <pubDate>Tue, 18 Aug 2015 04:04:06 GMT</pubDate>
      <dc:creator><![CDATA[Markus Klein - Bern]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/mrmomgoescloud/2015/08/18/groups-and-distributed-applications-with-3-state-rollup/</guid>
      <description><![CDATA[When you work with System Center Operations Manager 2012 one of the things that you might have run...]]></description>
      <content:encoded><![CDATA[<p>When you work with System Center Operations Manager 2012 one of the things that you might have run into is the limitations it has on rolling up state. Sure you can choose between the Best State, Worst State and a percentage value in between, but what I often hear is: &quot;Why can&#39;t we turn the group or Distributed Application State yellow when only one or only non-critical components are affected and red only when we lose service availability? In other words, or easier graphically, you want this:
</p><p><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/05/06/metablogapi/081815_1107_GroupsandDi1.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-05-06-metablogapi/081815_5F00_1107_5F00_GroupsandDi1.png" alt=" " />
	</p><p>Unfortunately, SCOM 2012 does not give you this rollup variation out of the box.
</p><p>After just accepting this for the longest time, I have tried to &quot;simulate&quot; this behavior with normal SCOM components. I remembered that the &quot;Health Service Heartbeat Failure&quot; monitor has some Recovery Tasks that forcibly set a monitor&#39;s state. 
</p><p><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/05/06/metablogapi/081815_1107_GroupsandDi2.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-05-06-metablogapi/081815_5F00_1107_5F00_GroupsandDi2.png" alt=" " />
	</p><p>So as one does trying to find out what&#39;s in a sealed MP, I exported the Microsoft.Systemcenter.2007 Management Pack from PowerShell and looked for the WriteActionModuleType. This is the one:
</p><p><span style="font-family:Courier New;font-size:8pt;">      &lt;WriteActionModuleType ID=&quot;Microsoft.SystemCenter.Health.SetStateAction&quot; Accessibility=&quot;<span style="background-color:yellow;">Internal</span>&quot; Batching=&quot;false&quot;&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">        &lt;Configuration&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">          &lt;IncludeSchemaTypes&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">            &lt;SchemaType&gt;Health!System.Health.AlertSchema&lt;/SchemaType&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">            &lt;SchemaType&gt;System!System.ManagedEntityKeysSchema&lt;/SchemaType&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">          &lt;/IncludeSchemaTypes&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">          &lt;xsd:element name=&quot;ManagementGroupId&quot; type=&quot;xsd:string&quot; xmlns:xsd=&quot;https://www.w3.org/2001/XMLSchema&quot; /&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">          &lt;xsd:element name=&quot;MonitorId&quot; type=&quot;xsd:string&quot; xmlns:xsd=&quot;https://www.w3.org/2001/XMLSchema&quot; /&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">          &lt;xsd:element name=&quot;ManagedEntityTypeId&quot; type=&quot;xsd:string&quot; xmlns:xsd=&quot;https://www.w3.org/2001/XMLSchema&quot; /&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">          &lt;xsd:element name=&quot;KeyProperties&quot; type=&quot;System.ManagedEntityKeys&quot; xmlns:xsd=&quot;https://www.w3.org/2001/XMLSchema&quot; /&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">          &lt;xsd:element name=&quot;HealthState&quot; type=&quot;System.Health.AlertHealthState&quot; xmlns:xsd=&quot;https://www.w3.org/2001/XMLSchema&quot; /&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">        &lt;/Configuration&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">        &lt;ModuleImplementation Isolation=&quot;Any&quot;&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">          &lt;Native&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">
			<span style="background-color:yellow;">&lt;ClassID&gt;44cbc334-8b5f-4cb6-bee0-6bdcbc80e8d5&lt;/ClassID&gt;</span>
		</span></p><p><span style="font-family:Courier New;font-size:8pt;">          &lt;/Native&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">        &lt;/ModuleImplementation&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">        &lt;InputType&gt;System!System.BaseData&lt;/InputType&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">      &lt;/WriteActionModuleType&gt;
</span></p><p>
 </p><p>As you can see, this is using a native module that we do not have any deeper insight into, it&#39;s is stored in a DLL. But we can refer to it by the ClassID I marked yellow. We could even use the module directly if it were not marked as &quot;Internal&quot;. So the way to go for this is to implement a similar WriteActionModuleType and create a WriteActionModule using it. Looking around other blogs a bit, I found that someone had already done this:
</p><p>Roman Zolotov has already created this and wrote about it in the following blog post: <br /><a href="https://blogs.technet.com/b/scpferublog/archive/2014/11/07/how-to-change-the-state-of-monitors-part-2.aspx"><span style="font-family:Segoe UI;font-size:10pt;">https://blogs.technet.com/b/scpferublog/archive/2014/11/07/how-to-change-the-state-of-monitors-part-2.aspx</span></a><span style="color:black;font-family:Segoe UI;font-size:10pt;">
		</span></p><p><span style="color:black;font-family:Segoe UI;font-size:10pt;">If you look at his Management Pack, he has taken exactly the same native module but created a &quot;Public&quot; implementation:
</span></p><p><span style="font-family:Courier New;font-size:8pt;">      &lt;WriteActionModuleType ID=&quot;Custom.Task.Library.Set.Monitor.State.WA&quot; Accessibility=&quot;<span style="background-color:yellow;">Public</span>&quot; Batching=&quot;false&quot;&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">        &lt;Configuration&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">          &lt;IncludeSchemaTypes&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">            &lt;SchemaType&gt;Health!System.Health.AlertSchema&lt;/SchemaType&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">          &lt;/IncludeSchemaTypes&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">          &lt;xsd:element name=&quot;ManagementGroupId&quot; type=&quot;xsd:string&quot; xmlns:xsd=&quot;https://www.w3.org/2001/XMLSchema&quot; /&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">          &lt;xsd:element name=&quot;MonitorId&quot; type=&quot;xsd:string&quot; xmlns:xsd=&quot;https://www.w3.org/2001/XMLSchema&quot; /&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">          &lt;xsd:element name=&quot;ManagedEntityId&quot; type=&quot;xsd:string&quot; xmlns:xsd=&quot;https://www.w3.org/2001/XMLSchema&quot; /&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">          &lt;xsd:element name=&quot;HealthState&quot; type=&quot;System.Health.AlertHealthState&quot; xmlns:xsd=&quot;https://www.w3.org/2001/XMLSchema&quot; /&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">        &lt;/Configuration&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">        &lt;ModuleImplementation Isolation=&quot;Any&quot;&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">          &lt;Native&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">            &lt;ClassID&gt;<span style="background-color:yellow;">44cbc334-8b5f-4cb6-bee0-6bdcbc80e8d5</span>&lt;/ClassID&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">          &lt;/Native&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">        &lt;/ModuleImplementation&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">        &lt;InputType&gt;System!System.BaseData&lt;/InputType&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">      &lt;/WriteActionModuleType&gt;
</span></p><p>
 </p><p>And with that he created another WriteActionModuleType that we can then use to force any Monitor into any state we want. 
</p><p><span style="font-family:Courier New;font-size:8pt;">      &lt;WriteActionModuleType ID=&quot;Custom.Task.Library.Set.Monitor.Action&quot; Accessibility=&quot;Public&quot; Batching=&quot;false&quot;&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">        &lt;Configuration&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">          &lt;IncludeSchemaTypes&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">            &lt;SchemaType&gt;Health!System.Health.AlertSchema&lt;/SchemaType&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">          &lt;/IncludeSchemaTypes&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">          &lt;xsd:element minOccurs=&quot;1&quot; name=&quot;MonitorId&quot; type=&quot;xsd:string&quot; xmlns:xsd=&quot;https://www.w3.org/2001/XMLSchema&quot; /&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">          &lt;xsd:element minOccurs=&quot;1&quot; name=&quot;HealthState&quot; type=&quot;System.Health.AlertHealthState&quot; xmlns:xsd=&quot;https://www.w3.org/2001/XMLSchema&quot; /&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">        &lt;/Configuration&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">        &lt;ModuleImplementation Isolation=&quot;Any&quot;&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">          &lt;Composite&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">            &lt;MemberModules&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">              &lt;WriteAction ID=&quot;WA&quot; TypeID=&quot;Custom.Task.Library.Set.Monitor.State.WA&quot;&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">                &lt;ManagementGroupId&gt;$Target/ManagementGroup/Id$&lt;/ManagementGroupId&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">                &lt;MonitorId&gt;$Config/MonitorId$&lt;/MonitorId&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">                &lt;ManagedEntityId&gt;$Target/Id$&lt;/ManagedEntityId&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">                &lt;HealthState&gt;$Config/HealthState$&lt;/HealthState&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">              &lt;/WriteAction&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">            &lt;/MemberModules&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">            &lt;Composition&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">              &lt;Node ID=&quot;WA&quot; /&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">            &lt;/Composition&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">          &lt;/Composite&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">        &lt;/ModuleImplementation&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">        &lt;InputType&gt;System!System.BaseData&lt;/InputType&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">      &lt;/WriteActionModuleType&gt;
</span></p><p>
 </p><p>Another idea taken from Roman&#39;s blog post is to use this Module type in a Recovery Action of a dependency monitor. This opened up the way to achieve what I had set out to go for. Now I could create the following… 
</p><p><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/05/06/metablogapi/081815_1107_GroupsandDi3.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-05-06-metablogapi/081815_5F00_1107_5F00_GroupsandDi3.png" alt=" " />
	</p><p>If this is a little overwhelming, let me start by explaining the scenario.
</p><p><strong>The Scenario
</strong></p><p>During a Service Mapping engagement at your customer, you heard …
</p><ul><li>… that they have four Print Servers that make the Print Server Service
</li><li>… that the only thing important is the Print Spooler service on those 4 servers
</li><li>… that the CIO does not care about the individual servers but cares a lot about the print service, as they need it to print the delivery papers and invoices for their customers
</li><li>… that the service will (somehow) still be available as long as one Print Server is up and running, but that they should know as soon as the first Print Spooler service goes down in order to proactively avoid a service outage
</li><li>… that they want to present the appropriate state information to different audiences like End Users, Service Owners, Help Desk, etc.
</li></ul><p>Especially the last requirement connects this with the topic of this post. Depending on the audience, we need to represent the state of the Print Service in different ways: 
</p><ul><li>End Users only need the Red/Green traffic light. Presenting a degraded state might lead to increased help desk calls and leaves the end user in a confused state. For them the service is purely binary, either it prints or it doesn&#39;t.
</li><li>Print Service Owner / Support needs a more granular view. They need to be made aware that a part of the overall Print Service is down and that not reacting might lead to a total service outage. So they need a Red/Amber/Green traffic light. They also need a view that represents the state of the components of the Print Service in order to identify the origin of a service degradation.
</li><li>Other groups may or may not fit in either of those categories. CxOs, Owners of Business Services depending on the Print Service, Department Heads, etc. all may be interested in various levels of depth on the service health. Their requirements need to be taken into consideration as well.
</li></ul><p><strong>The Implementation
</strong></p><p>As per requirement 2, we need to make sure we monitor the Print Spooler service on the 4 Print Servers. The standard server build disables the Print Spooler service on all servers with the exception of the Print Servers. So the WMI Query 
</p><p><span style="font-family:Courier New;">select * from Win32_Service where Name = &quot;Spooler&quot; and StartMode = &quot;Auto&quot;
</span></p><p>will find those servers. So we can use this to seed discover instances of the newly defines &quot;Print Service Host&quot; Class. As we are only interested in the Print Spooler Windows Service we then discover the service with a similar discovery on just those Print Service Hosts.
</p><p><span style="font-family:Courier New;">select * from Win32_Service where Name = &quot;Spooler&quot;</span>
	</p><p>This will now give us the four Print Spooler Services we are interested in.
</p><p><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/05/06/metablogapi/081815_1107_GroupsandDi4.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-05-06-metablogapi/081815_5F00_1107_5F00_GroupsandDi4.png" alt=" " />
	</p><p>Now from the Service Availability perspective we need to group those with the &quot;Best Of&quot; Rollup algorithm chosen, from a Service Degradation perspective we need to use the &quot;Worst Of&quot; algorithm. So let&#39;s do both, we create two identical groups from the same objects. As Group Objects do not rollup state by default, we also need to create a Dependency Monitor for either of them. In here we then choose the different Rollup algorithms. 
</p><div><table style="border-collapse:collapse;" border="0"><colgroup><col style="width:77px;" /><col style="width:840px;" /></colgroup><tbody valign="top"><tr><td style="padding-left:7px;padding-right:7px;border-top:solid 0.5pt;border-left:solid 0.5pt;border-bottom:solid 0.5pt;border-right:solid 0.5pt;"><p style="text-align:center;"><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/05/06/metablogapi/081815_1107_GroupsandDi5.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-05-06-metablogapi/081815_5F00_1107_5F00_GroupsandDi5.png" alt=" " /></p></td><td style="padding-left:7px;padding-right:7px;border-top:solid 0.5pt;border-left:none;border-bottom:solid 0.5pt;border-right:solid 0.5pt;"><p><span style="font-family:Courier New;font-size:8pt;">&lt;DependencyMonitor ID=&quot;ThreeStateRollup.PrintServiceAvailabilityDependencyMonitor&quot; Accessibility=&quot;Internal&quot; Enabled=&quot;true&quot; Target=&quot;ThreeStateRollup.PrintServiceAvailabilityGroup&quot; ParentMonitorID=&quot;Health!System.Health.AvailabilityState&quot; Remotable=&quot;true&quot; Priority=&quot;Normal&quot; RelationshipType=&quot;SCIG!Microsoft.SystemCenter.InstanceGroupContainsEntities&quot; MemberMonitor=&quot;Health!System.Health.AvailabilityState&quot;&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">&lt;Category&gt;Custom&lt;/Category&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">&lt;Algorithm&gt;<span style="background-color:yellow;">BestOf</span>&lt;/Algorithm&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">&lt;MemberUnAvailable&gt;Error&lt;/MemberUnAvailable&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">&lt;/DependencyMonitor&gt;</span></p></td></tr><tr><td style="padding-left:7px;padding-right:7px;border-top:none;border-left:solid 0.5pt;border-bottom:solid 0.5pt;border-right:solid 0.5pt;"><p style="text-align:center;"><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/05/06/metablogapi/081815_1107_GroupsandDi6.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-05-06-metablogapi/081815_5F00_1107_5F00_GroupsandDi6.png" alt=" " /></p></td><td style="padding-left:7px;padding-right:7px;border-top:none;border-left:none;border-bottom:solid 0.5pt;border-right:solid 0.5pt;"><p><span style="font-family:Courier New;font-size:8pt;">&lt;DependencyMonitor ID=&quot;ThreeStateRollup.PrintServiceDegradationDependencyMonitor&quot; Accessibility=&quot;Internal&quot; Enabled=&quot;true&quot; Target=&quot;ThreeStateRollup.PrintServiceDegradationGroup&quot; ParentMonitorID=&quot;Health!System.Health.AvailabilityState&quot; Remotable=&quot;true&quot; Priority=&quot;Normal&quot; RelationshipType=&quot;SCIG!Microsoft.SystemCenter.InstanceGroupContainsEntities&quot; MemberMonitor=&quot;Health!System.Health.AvailabilityState&quot;&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">&lt;Category&gt;Custom&lt;/Category&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">&lt;Algorithm&gt;<span style="background-color:yellow;">WorstOf</span>&lt;/Algorithm&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">&lt;MemberUnAvailable&gt;Error&lt;/MemberUnAvailable&gt;
</span></p><p><span style="font-family:Courier New;font-size:8pt;">&lt;/DependencyMonitor&gt;</span></p></td></tr></tbody></table></div><p>
 </p><p>So far, we have two groups where one (Availability Group) stays green as long as one Print Spooler service is green and the other (Degradation Group) turns red as soon as the first Print Spooler service goes down. So the Availability Group&#39;s State would serve well for our End Users and everyone who only needs to Red/Green Service State. But we do not yet cover the needs of the Red/Amber/Green requirements that the Print Service Owners and Supporters want. For this the WriteActionModuleType introduces in the beginning comes into play. We now define a Recovery for the Dependency Monitor of the Print Service Degradation Group:
</p><p><span style="font-family:Courier New;font-size:8pt;">&lt;Recovery ID=&quot;ThreeStateRollup.ForceWarningRecovery&quot; Target=&quot;ThreeStateRollup.PrintServiceDegradationGroup&quot; Monitor=&quot;ThreeStateRollup.PrintServiceDegradationDependencyMonitor&quot; Accessibility=&quot;Public&quot; Enabled=&quot;true&quot; ExecuteOnState=&quot;Error&quot; Remotable=&quot;true&quot; ResetMonitor=&quot;true&quot; Timeout=&quot;300&quot;&gt;<br />&lt;Category&gt;Custom&lt;/Category&gt;<br />&lt;WriteAction ID=&quot;WA&quot; TypeID=&quot;<span style="background-color:yellow;">CTL!Custom.Task.Library.Set.Monitor.Action</span>&quot;&gt;<br />&lt;MonitorId&gt;$MPElement[Name=&quot;ThreeStateRollup.PrintServiceDegradationDependencyMonitor&quot;]$&lt;/MonitorId&gt;<br />&lt;HealthState&gt;Warning&lt;/HealthState&gt;<br />&lt;/WriteAction&gt;<br />&lt;/Recovery&gt;
</span></p><p>The WriteActionModuleType comes from Roman&#39;s Management Pack that we have imported. Alternatively, we could of course create our own version of the WriteActionModuleType within our Print Service Management Pack.
</p><p>Now we force the Print Service Degradation Group&#39;s state into &quot;Warning&quot; when the regular rollup changes it to &quot;Error&quot;, i.e. whether we have one, two, three or four Print Spooler services down, our Group state is always Amber.
</p><p>All we need to do now to have the 3-State Rollup is to group our two new groups together, add a Dependency monitor and use the &quot;Worst Of&quot; rollup algorithm. This will then lead to the following situation:
</p><p><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/05/06/metablogapi/081815_1107_GroupsandDi7.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-05-06-metablogapi/081815_5F00_1107_5F00_GroupsandDi7.png" alt=" " />
	</p><p>The first column is the Availability Group which by definition can only be either Red or Green. The second column is the Degradation Group which we now forced into being either Amber or Green. The &quot;Worst Of&quot; algorithm then turns the Print Service State to Yellow when one, two or three Print Spoolers are down and to Red when the Service Availability turns Red, i.e. the Print Service is down.
</p><p><strong>Dashboards
</strong></p><p>So this now allows us to present the State of the Service to different audiences. The Print Service box for the &quot;Contoso Service Desk Dashboard&quot; on the left presents the state of our new 3-State Rollup Print Service Group Object, the Print Service box in the &quot;Contoso End User Dashboard&quot; on the right presents the state of the Print Service Availability Group.
</p><p><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/05/06/metablogapi/081815_1107_GroupsandDi8.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-05-06-metablogapi/081815_5F00_1107_5F00_GroupsandDi8.png" alt=" " />
	</p><p><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/05/06/metablogapi/081815_1107_GroupsandDi9.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-05-06-metablogapi/081815_5F00_1107_5F00_GroupsandDi9.png" alt=" " />
	</p><p><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/05/06/metablogapi/081815_1107_GroupsandDi10.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-05-06-metablogapi/081815_5F00_1107_5F00_GroupsandDi10.png" alt=" " />
	</p><p><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/05/06/metablogapi/081815_1107_GroupsandDi11.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-05-06-metablogapi/081815_5F00_1107_5F00_GroupsandDi11.png" alt=" " />
	</p><p><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/05/06/metablogapi/081815_1107_GroupsandDi12.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-05-06-metablogapi/081815_5F00_1107_5F00_GroupsandDi12.png" alt=" " />
	</p>]]></content:encoded>
    </item>
  </channel>
</rss>