Skip to content
Code sample of the Azure Monitor metrics API using the .Net SDK
Branch: master
Clone or download
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.gitignore Initial commit Jun 8, 2017
CHANGELOG.md Updating documentation files. Oct 9, 2017
CONTRIBUTING.md
LICENSE.md Updating documentation files. Oct 9, 2017
Program.cs Updating documentation files. Oct 9, 2017
README.md Updating the readme and the project.json files Oct 17, 2017
project.json Updating the readme and the project.json files Oct 17, 2017

README.md

services platforms author
azure-monitor
dotnet
gucalder

Retrieve Azure Monitor metrics with .NET

This sample explains how to retrieve Monitor metrics and metric definitions using the Azure .NET SDK releases 0.16.0-preview and 0.16.1-preview.

NOTE: please refer to the Microsoft Open Source Code of Conduct.

NOTE: for contributions refer to the CONTRIBUTING.md file.

On this page

Run this sample

  1. If you don't have it, install the .NET Core SDK.

  2. Clone the repository.

    git clone https://github.com/Azure-Samples/monitor-dotnet-metrics-api.git
    
  3. Install the dependencies.

    dotnet restore
    
  4. Create an Azure service principal either through Azure CLI, PowerShell or the portal.

  5. Export these environment variables using your subscription id and the tenant id, client id and client secret from the service principal that you created.

    export AZURE_TENANT_ID={your tenant id}
    export AZURE_CLIENT_ID={your client id}
    export AZURE_CLIENT_SECRET={your client secret}
    export AZURE_SUBSCRIPTION_ID={your subscription id}
    
  6. Run the sample.

    dotnet run program
    

What is program.cs doing?

The sample retrieves metric definitions and metrics for a given resource. It starts by setting up a MonitorClient object using your subscription and credentials.

// Build the service credentials and Monitor client
var serviceCreds = await ApplicationTokenProvider.LoginSilentAsync(tenantId, clientId, secret);
var monitorClient = new MonitorClient(serviceCreds);
monitorClient.SubscriptionId = subscriptionId;

List metric definitions for a resource

List the metric definitions for the given resource, which is defined in the current subscription.

IEnumerable<MetricDefinition> metricDefinitions = await readOnlyClient.MetricDefinitions.ListAsync(resourceUri: resourceUri, cancellationToken: new CancellationToken());

or using a filter

var odataFilterMetricDef = new ODataQuery<MetricDefinition>("name.value eq 'CpuPercentage'");
metricDefinitions = await readOnlyClient.MetricDefinitions.ListAsync(resourceUri: resourceUri, odataQuery: odataFilterMetricDef, cancellationToken: new CancellationToken());

List metrics for a resource

IEnumerable<Metric> metrics = await readOnlyClient.Metrics.ListAsync(resourceUri: resourceUri, cancellationToken: CancellationToken.None);

or with a filter

// The comma-separated list of metric names must be present if a filter is used
var metricNames = "name.value eq 'CpuPercentage'"; // could be concatenated with " or name.value eq '<another name>'" ...

// Time grain is optional when metricNames is present
string timeGrain = " and timeGrain eq duration'PT5M'";

// Defaulting to 3 hours before the time of execution for these datetimes
string startDate = string.Format(" and startTime eq {0}", DateTime.Now.AddHours(-3).ToString("o"));
string endDate = string.Format(" and endTime eq {0}", DateTime.Now.ToString("o"));

var odataFilterMetrics = new ODataQuery<Metric>(
    string.Format(
        "{0}{1}{2}{3}",
        metricNames,
        timeGrain,
        startDate,
        endDate));

Write("Call with filter parameter (i.e. $filter = {0})", odataFilterMetrics);
metrics = await readOnlyClient.Metrics.ListAsync(resourceUri: resourceUri, odataQuery: odataFilterMetrics, cancellationToken: CancellationToken.None);
You can’t perform that action at this time.