One of the things I do miss from the old days with System Center Operations Manager, was the ability to create distributed applications. Which allowed us to drag components together that was monitored as a service. This could be components like
- Network components
- Windows Servers
- TCP Probes or HTTP probes
Which then was grouped together to form a service.
So, if we have a hardware component that affected the availability of the actual service, Operations Manager would mark that service as down or in a degraded state.
With the move to Azure and Azure Monitor, I feel like Microsoft took a step back and introduced a lot of lightweight monitoring options as alternatives. While there are some options as part of Application insight to provide some of the same APM (Application Performance Monitoring) capabilities there. Still, it is not on the same level as we had with Operations Manager. In addition, much of the business logic and the same old distributed application might now in 2022 be running as PaaS services in Azure such as Service Bus or even Functions.
Or you might have a combination of different PaaS services, virtual machines, and endpoints that you need to monitor, what kind of options do we have?
Recently I tried out Serverless360 which provides much of the same functionality but is more focused on the PaaS layer in Microsoft Azure. They provide the option to run from the cloud services to build your own monitoring with a self-hosted setup.
Serverless 360 has built-in monitoring capabilities against the following Azure resources
- API App
- API Management
- App Service Certificate
- Application Insight
- Azure Function
- Azure Cosmos
- Azure Data Factory
- Event Grid
- Event Hub
- Log Analytics (Queries) and Metrics
- Logic Apps
- Service Bus
- SQL Database
- Storage Queue
- Web Apps and Web Jobs
In addition to this, they also support pure REST API’s allowing us to query endpoints from their service, to get an “outside” view of the current state of the application or service.
In my demo environment I set up an integration with one of my Azure tenants using a Service principal allowing the service to query the resources contained within my environment. You can sign up for a 15-days trial here
So how does it work? There are a couple of things that we need to configure after we connected our tenant to Serverless360. First is a monitoring profile, where we define thresholds on each service and what to look for. For instance, one of the cool features is defining log analytics queries which can then be grouped together, or certain metrics on a virtual machine scale set.
1: Setting up a monitoring profile
First part is to setup a monitoring profile, where we define thresholds and what kind of metrics we want to monitor for a certain service. We can define different monitoring profiles depending on application or service.
As seen here for Service Bus and Azure functions, where we can define certain HTTP error codes we want to monitor for.
Another example is for Logic Apps where we can look for latency or certain timeout values or Web Apps where we can monitor the state of the application if it is running or not.
2: Setting up a distributed application
Once we have configured a monitoring profile, we can create a distributed application. Here we define what kind of Azure resources we want to group together, as seen in the screenshot below.
Here we define which components that make up the service we want to monitor. In my example I have a web application running on Kubernetes that I want to monitor so I group together the resources seen in the screenshot above in addition to Log Analytics were all the logs are collected.
Then I go through the wizard and select the newly created monitoring profile that I created earlier.
NOTE: That by default the monitoring alerts will check every 15 minutes and use the latest 15 min of data to evaluate the health of the distributed applications. But this is also customizable trough the UI.
3: Customize the distributed application
Once the distributed application has been created and the health checks have run, the dashboard will look like this.
NOTE: I have added a custom API Endpoint as well which checks for the availability of the web application using a simple HTTP GET call. This can be added by going into the distributed application on the left meny, clicking on resources and then click Add in the top right corner and defining API endpoint.
You can also define your own service map where we can define which components that consists of the different layers of the plattform, such as front-end and back-end.
Serverless 360 also has built-in notification mechanism that can be used to route alerts to different ITSM or messaging tools such as Slack/Teams or Service Now.
It can also trigger automation tasks when a certain alert is created.
However, I would also wish for it to be able to trigger a predefined Logic App within the environment or an Azure automation workflow, because the built-in mechanism it has for logic apps is to trigger a rerun of an existing logic app workflow. You can however work around this by using Event Hub integration to send an alert to event hub which can then trigger a logic app.
For the future I hope that the service could provide more insight to some of the more analytics services such as Synapse and Databricks to more effective at monitoring a data pipeline (outside of data factory) as well. However, so far, the product has gotten far since the last time which was 3 years ago in terms of integrating more of the different services that Microsoft provides.