As you may know, there are different ways to give visibility into “client side” monitoring of web apps within Operations Manager : on-premise synthetic transactions, cloud-based synthetic transactions through Global Service Monitoring, Application Performance Management (APM) feature.
These features provide great insight on the web application performance from an end user perspective, but require delegated access to the Operations Manager console to set up the corresponding template.
Once in a while, I heard customers enquire if there was a way to give business users or applications owners the ability to enable monitoring of their own web apps with System Center?
Well, ultimately, all settings are stored in a management pack! So in this post, we’ll see how you could provide “synthetic transactions as a service” by using Operations Manager and some PowerShell scripting, automated by Orchestrator.
What does it look like?
Everything starts with a user entering the details of the website to monitor (name and URL) – this screenshot uses the Orchestrator web console, but you could integrate this in another self-service portal, like Service Manager.
After the runbook has run, an email is being sent to notify the user the transaction and the dashboard have been created
When the user clicks on the link, the Operations Manager web console displays the new dashboard.
First it will not show any data…
…and then a couple minutes later a green and empty circle should show up, turning to full green once the watcher node is fully enabled…
…and then performance data should also start to display
How does it work?
The sample runbook used in this solution starts from an existing source management pack doing the same work for a www.bing.com synthetic transactions, clones the file, modifies the appropriate XML strings based on the user input, and then imports the new management pack before sending a notification email:
Quite frankly, this could have been a single PowerShell script! Doing it with Orchestrator has multiple benefits, including the ability to integrate easily with ticketing and other processes, and to expand the solution in a more flexible manner after the fact (providing more options to the user, and branching).
Important Note : As you’ve seen, the technique outlined here relies on modifying XML output from a source management pack them. Similar to how you could potentially enable APM programmatically, this is not a fully supported and recommended way to create a synthetic transaction (for which the Operations Manager SDK actually provides documentation). The reason the XML approach is used in this sample, is because it also brings us the ability to create a dashboard on the fly when working with the XML data. This enables a scenario that some of you with deeper MP and XML knowledge may be interested in, when working with Operations Manager as a platform. Things to be particularly careful about would be to check with upcoming releases if the format of the template changes the XML it generates.
Can I try it too?
Of course! The runbook and the source management pack file can be downloaded here, and you would then:
1. Copy the source management pack file in a folder on the Operations Manager server
2. Configure the runbook variables for your environment (see the descriptions of the variables for more details on what they do and the type of data to enter)
In a future post, I’d like to show how we could go further by creating delegation, so that the user can only see his/her dashboard. This means automating the role based access control through PowerShell/API calls, and retrieving the user name requesting the transaction. That last bit is actually easy to do when you use self-service interfaces that can pass along the user details, like System Center 2012 Service Manager. A side benefit of working with the originating user information is that we would also be able to dynamically send the notification to the user’s address, and not always to the same one – making this closer to a full self-service experience.
Some improvements could also certainly be added like proxy support, through a variable.
Thanks for reading!