Elastic Observability monitors metrics for Microsoft Azure in just minutes


Developers and SREs choose Microsoft Azure to run their applications because it is a trustworthy world-class cloud platform. It has also proven itself over the years as an extremely powerful and reliable infrastructure for hosting business-critical applications.

Elastic Observability offers over 25 out-of-the-box integrations for Microsoft Azure services with more on the way. A full list of Azure integrations can be found in our online documentation.

Elastic Observability aggregates not only logs but also metrics for Azure services and the applications running on Azure compute services (Virtual Machines, Functions, Kubernetes Service, etc.). All this data can be analyzed visually and more intuitively using Elastic®’s advanced machine learning (ML) capabilities, which help detect performance issues and surface root causes before end users are affected.

For more details on how Elastic Observability provides application performance monitoring (APM) capabilities such as service maps, tracing, dependencies, and ML-based metrics correlations, read APM correlations in Elastic Observability: Automatically identifying probable causes of slow or failed transactions.

That’s right, Elastic offers capabilities to collect, aggregate, and analyze metrics for Microsoft Azure services and applications running on Azure. Elastic Observability is for more than just capturing logs — it offers a unified observability solution for Microsoft Azure workloads.

In this blog, we’ll review how Elastic Observability can monitor metrics for a three-tier web application running on Microsoft Azure and leveraging:

  • Microsoft Azure Virtual Machines
  • Microsoft Azure SQL database
  • Microsoft Azure Virtual Network

As you will see, once the integration is installed, metrics will arrive instantly and you can immediately start deriving insights from metrics.

Prerequisites and config

Here are some of the components and details we used to set up this demonstration:

  • Ensure you have a Microsoft Azure account and an Azure service principal with permission to read monitoring data from Microsoft Azure (see details in our documentation).
  • This post does not cover application monitoring; instead, we will focus on how Microsoft Azure services can be easily monitored. If you want to get started with examples of application monitoring, see our Hello World observability code samples.
  • In order to see metrics, you will need to load the application. We’ve also created a Playwright script to drive traffic to the application.

Three-tier application overview

Before we dive into the Elastic deployment setup and configuration, let's review what we are monitoring. If you follow the Microsoft Learn N-tier example app instructions for deploying the "What's for Lunch?" app, you will have the following deployed.

three tier application overview

What’s deployed:

  • Microsoft Azure VM presentation tier that renders an HTML client in the user's browser and enables user requests to be sent to the “What’s for Lunch?” app
  • Microsoft Azure VM application tier that communicates with the presentation and the database tier
  • Microsoft Azure SQL instance in the database tier, handling requests from the application tier to store and serve data

At the end of the blog, we will also provide a Playwright script that can be run to send requests to this app in order to load it with example data and exercise its functionality. This will help drive metrics to “light up” the dashboards.

Setting it all up

Let’s walk through the details of how to deploy the example three-tier application, Azure integration on Elastic and visualize what gets ingested in Elastic’s Kibana® dashboards.

Step 0: Get an account on Elastic Cloud

Follow the instructions to get started on Elastic Cloud.

elastic cloud free trial sign up

Step 1: Deploy the Microsoft Azure three-tier application

From the Azure portal, click the Cloud Shell icon at the top of the portal to open Cloud Shell…

open cloud shell

… and when the Cloud Shell first opens, select Bash as the shell type to use.

cloud shell bash

If you’re prompted that “You have no storage mounted,” then click the Create storage button to create a file store to be used for saving and editing files from Cloud Shell.

cloud shell create storage

You should now see the open Cloud Shell terminal.

cloud shell terminal

Run the following command in Cloud Shell to define the environment variables that we’ll be using in the Cloud Shell commands required to deploy and view the sample application.

Be sure to specify a valid RESOURCE_GROUP from your available Resource Groups listed in the Azure portal. Also specify a new password to replace the SpecifyNewPasswordHere placeholder text before running the command. See the Microsoft password policy documentation for password requirements.


Run the following az deployment group create command, which will deploy the example three-tier web app in around five minutes.

az deployment group create --resource-group $RESOURCE_GROUP --template-uri https://raw.githubusercontent.com/MicrosoftDocs/mslearn-n-tier-architecture/master/Deployment/azuredeploy.json --parameters password=$APP_PASSWORD

After the deployment has completed, run the following command, which returns the URL for the app.

az deployment group show --output table --resource-group $RESOURCE_GROUP --name azuredeploy --query properties.outputs.webSiteUrl

Copy the web app URL and paste it into a browser to view the example “What’s for Lunch?” web app.

whats for lunch app

Step 2: Create an Azure service principal and grant access permission

Go to the Microsoft Azure Portal. Search for active directory and select Microsoft Entra ID.

search active directory

Copy the Tenant ID for use in a later step in this blog post. This ID is required to configure Elastic Agent to connect to your Azure account.

your organization overview

In the navigation pane, select App registrations.

your organization overview app registrations

Then click New registration.

your organization new registrations

Type the name of your application (this tutorial uses three-tier-app-azure) and click Register (accept the default values for other settings).

register an application

Copy the Application (client) ID and save it for later. This ID is required to configure Elastic Agent to connect to your Azure account.

In the navigation pane, select Certificates & secrets, and then click New client secret to create a new security key.

three tier app new client secret

Type a description of the secret and select an expiration. Click Add to create the client secret. Under Value, copy the secret value and save it (along with your client ID) for later.

After creating the Azure service principal, you need to grant it the correct permissions. In the Azure Portal, search for and select Subscriptions.

three tier subscriptions

In the Subscriptions page, click the name of your subscription. On the subscription details page, copy your Subscription ID and save it for a later step.

subscription essentials copy

 In the navigation pane, select Access control (IAM).

subscription access control

Click Add and select Add role assignment.

subscription access control add role assignment

On the Role tab, select the Monitoring Reader role and then click Next.

add role assignment monitoring reader

On the Members tab, select the option to assign access to User, group, or service principal. Click Select members, and then search for and select the principal you created earlier. For the description, enter the name of your service principal. Click Next to review the role assignment.

add role assignment description

Click Review + assign to grant the service principal access to your subscription.

add role assignment review assign

Step 3: Create an Azure VM instance

In the Azure Portal, search for and select Virtual machines.

search virtual machines

On the Virtual machines page, click + Create and select Azure virtual machine.

azure virtual machine

On the Virtual machine creation page, enter a name like “metrics-vm” for the virtual machine name and select VM Size to be “Standard_D2s_v3 - 2 vcpus, 8 GiB memory.” Click the Next : Disks button.

create a virtual machine next disks

On the Disks page, keep the default settings and click the Next : Networking button.

create a virtual machine next networking

On the Networking page, demo-vnet should be selected for Virtual network and demo-biz-subnet should be selected for Subnet. These resources are created as part of the three-tier example app’s deployment that was done in Step 1.

Click the Review + create button.

create virtual machine review create

On the Review page, click the Create button.

create virtual machine validation passed

Step 4: Install the Azure Resource Metrics integration

In your Elastic Cloud deployment, navigate to the Elastic Azure integrations by selecting Integrations from the top-level menu. Search for azure resource and click the Azure Resource Metrics tile.

integrations azure resource metrics

Click Add Azure Resource Metrics.

azure resource metrics

Click Add integration only (skip agent installation).

add integration only

Enter the values that you saved previously for Client ID, Client Secret, Tenant ID, and Subscription ID.

add azure resource metrics integration

As you can see, the Azure Resource Metrics integration will collect a significant amount of data from eight Azure services. Click Save and continue.

You’ll be presented with a confirmation dialog window. Click Add Elastic Agent to your hosts.

azure resource metrics integration added

This will display the instructions required to install the Elastic agent. Copy the command under the Linux Tar tab.

add agent linux tar

Next you will need to use SSH to log in to the Azure VM instance and run the commands copied from Linux Tar tab. Go to Azure Virtual Machines in the Azure portal. Then click the name of the VM instance that you created in Step 3.

metrics vm

Click the Select button in the SSH Using Azure CLI section.

metrics vm connect

Select the “I understand …” checkbox and then click the Configure + connect button.

ssh using azure cli

Once you are SSH’d inside the VM instance terminal window, run the commands copied previously from Linux Tar tab in the Install Elastic Agent on your host instructions. When the installation completes, you’ll see a confirmation message in the Install Elastic Agent on your host form.

add agent confirmed

Super! The Elastic agent is sending data to Elastic Cloud. Now let’s observe some metrics.

Step 5: Run traffic against the application

While getting the application running is fairly easy, there is nothing to monitor or observe with Elastic unless you add a load on the application.

Here is a simple script you can also run using Playwright to add traffic and exercise the functionality of the Azure three-tier application:

import { test, expect } from '@playwright/test';

test('homepage for Microsoft Azure three tier app', async ({ page }) => {
	// Load web app
	await page.goto('');
	// Add lunch suggestions
	await page.fill('id=txtAdd', 'tacos');
	await page.keyboard.press('Enter');
	await page.waitForTimeout(1000);
	await page.fill('id=txtAdd', 'sushi');
	await page.keyboard.press('Enter');
	await page.waitForTimeout(1000);
	await page.fill('id=txtAdd', 'pizza');
	await page.keyboard.press('Enter');
	await page.waitForTimeout(1000);
	await page.fill('id=txtAdd', 'burgers');
	await page.keyboard.press('Enter');
	await page.waitForTimeout(1000);
	await page.fill('id=txtAdd', 'salad');
	await page.keyboard.press('Enter');
	await page.waitForTimeout(1000);
	await page.fill('id=txtAdd', 'sandwiches');
	await page.keyboard.press('Enter');
	await page.waitForTimeout(1000);
	// Click vote buttons
	await page.getByRole('button').nth(1).click();
	await page.getByRole('button').nth(3).click();
	await page.getByRole('button').nth(5).click();
	await page.getByRole('button').nth(7).click();
	await page.getByRole('button').nth(9).click();
	await page.getByRole('button').nth(11).click();
	// Click remove buttons
	await page.getByRole('button').nth(12).click();
	await page.getByRole('button').nth(10).click();
	await page.getByRole('button').nth(8).click();
	await page.getByRole('button').nth(6).click();
	await page.getByRole('button').nth(4).click();
	await page.getByRole('button').nth(2).click();

Step 6: View Azure dashboards in Elastic

With Elastic Agent running, you can go to Elastic Dashboards to view what’s being ingested. Simply search for “dashboard” in Elastic and choose Dashboard.


This will open the Elastic Dashboards page. In the Dashboards search box, search for azure vm and click the [Azure Metrics] Compute VMs Overview dashboard, one of the many out-of-the-box dashboards available.

dashboards create

You will see a Dashboard populated with your deployed application’s VM metrics.

azure compute vm

On the Azure Compute VM dashboard, we can see the following sampling of some of the many available metrics:

  • CPU utilization
  • Available memory
  • Network sent and received bytes
  • Disk writes and reads metrics

For metrics not covered by out-of-the-box dashboards, custom dashboards can be easily created to visualize metrics that are important to you.

Congratulations, you have now started monitoring metrics from Microsoft Azure services for your application!

Analyze your data with Elastic AI Assistant

Once metrics and logs (or either one) are in Elastic, start analyzing your data with context-aware insights using the Elastic AI Assistant for Observability.

Conclusion: Monitoring Microsoft Azure service metrics with Elastic Observability is easy!

We hope you’ve gotten an appreciation for how Elastic Observability can help you monitor Azure service metrics. Here’s a quick recap of what you learned:

  • Elastic Observability supports ingest and analysis of Azure service metrics.
  • It’s easy to set up ingest from Azure services via the Elastic Agent.
  • Elastic Observability has multiple out-of-the-box Azure service dashboards you can use to preliminarily review information and then modify for your needs.

Try it out for yourself by signing up via Microsoft Azure Marketplace and quickly spin up a deployment in minutes on any of the Elastic Cloud regions on Microsoft Azure around the world. Your Azure Marketplace purchase of Elastic will be included in your monthly consolidated billing statement and will draw against your committed spend with Microsoft Azure.

The release and timing of any features or functionality described in this post remain at Elastic's sole discretion. Any features or functionality not currently available may not be delivered on time or at all.