Obtendo Definições e Dados de Monitoramento de Máquinas Virtuais no Azure

Para implementar autoescalabilidade baseada em contadores de desempenho, é essencial acessar definições e dados de monitoramento de máquinas virtuais no Azure via código. Esta abordagem permite integração personalizada com métricas desempenho.

Bibliotecas e Namespaces Essenciais

Utilize o pacote NuGet Microsoft Azure Management Libraries. Os namespaces relevantes incluem Microsoft.WindowsAzure.Management.Monitoring.Metrics e Microsoft.WindowsAzure.Management.Monitoring.Metrics.Models.

Exemplo de Código para Obter Definições de Métricas

A classe abaixo encapsula a lógica de obtenção de definições de métricas para uma máquina virtual. Note o uso de MetricClient com URI personalizado para Azure China.

namespace AzureMonitoring
{
    using Microsoft.WindowsAzure;
    using Microsoft.WindowsAzure.Management.Monitoring.Metrics;
    using Microsoft.WindowsAzure.Management.Monitoring.Metrics.Models;
    using Microsoft.WindowsAzure.Management.Monitoring.Utilities;
    using System;
    using System.Collections.Generic;

    public class MonitoramentoCliente
    {
        private readonly SubscriptionCloudCredentials _credenciais;

        public MonitoramentoCliente(SubscriptionCloudCredentials credenciais)
        {
            _credenciais = credenciais;
        }

        public void RecuperarDefinicoesMetricas()
        {
            var clienteMetricas = new MetricsClient(_credenciais, new Uri("https://management.core.chinacloudapi.cn/"));
            var idRecurso = ResourceIdBuilder.BuildVirtualMachineResourceId("nomeServicoNuvem", "nomeImplantacao", "nomeFuncao");
            Console.WriteLine($"ID do Recurso: {idRecurso}");

            var respostaDefinicoes = clienteMetricas.MetricDefinitions.List(idRecurso, null, null);
            var colecaoDefinicoes = respostaDefinicoes.MetricDefinitionCollection;

            int contador = 0;
            foreach (var definicao in colecaoDefinicoes.Value)
            {
                Console.WriteLine($"Definição {contador++}:");
                Console.WriteLine($"Nome de Exibição: {definicao.DisplayName}");
                Console.WriteLine($"Nome da Métrica: {definicao.Name}");
                Console.WriteLine($"Espaço de Nomes: {definicao.Namespace}");
                Console.WriteLine($"Alertável: {definicao.IsAlertable}");
                Console.WriteLine($"Janela Mínima de Alerta: {definicao.MinimumAlertableTimeWindow}");
                Console.WriteLine();
            }
        }
    }
}

Integração com Credenciais

Utilize um autenticador para obter credenciais de assinatura. Em seguida, instancie o cliente e execute a obtenção de definições.

static void Main(string[] args)
{
    var credenciais = AutenticadorAzure.ObterCredenciais();
    var monitoramento = new MonitoramentoCliente(credenciais);
    monitoramento.RecuperarDefinicoesMetricas();
    Console.ReadLine();
}

Obtendo Dados de Monitoramento

Para buscar valores de métricas, é necessário coletar nomes de métricas das definições e especificar um intervalo temporal. O exemplo abaixo estende a classe anterior.

public void RecuperarDadosMetricas()
{
    var clienteMetricas = new MetricsClient(_credenciais, new Uri("https://management.core.chinacloudapi.cn/"));
    var idRecurso = ResourceIdBuilder.BuildVirtualMachineResourceId("nomeServicoNuvem", "nomeImplantacao", "nomeFuncao");

    var definicoesResposta = clienteMetricas.MetricDefinitions.List(idRecurso, null, null);
    var colecaoDefinicoes = definicoesResposta.MetricDefinitionCollection;

    var nomesMetricas = new List<string>();
    var espacoNomes = "";

    foreach (var definicao in colecaoDefinicoes.Value)
    {
        if (!nomesMetricas.Contains(definicao.Name))
            nomesMetricas.Add(definicao.Name);
        espacoNomes = definicao.Namespace;
    }

    var granularidade = TimeSpan.FromMinutes(5);
    var inicio = DateTime.UtcNow.AddHours(-1);
    var fim = DateTime.UtcNow;

    var respostaValores = clienteMetricas.MetricValues.List(idRecurso, nomesMetricas, espacoNomes, granularidade, inicio, fim);

    foreach (var conjunto in respostaValores.MetricValueSetCollection.Value)
    {
        Console.WriteLine($"Métrica: {conjunto.Name}");
        foreach (var valor in conjunto.MetricValues)
        {
            Console.WriteLine($"Máximo: {valor.Maximum}{conjunto.Unit}");
            Console.WriteLine($"Média: {valor.Average}{conjunto.Unit}");
            Console.WriteLine($"Mínimo: {valor.Minimum}{conjunto.Unit}");
        }
    }
}

Resolução de Problemas Comuns

Ao configurar o MetricsClient, certifique-se de usar o URI correto para Azure China. O método BuildVirtualMachineResourceId requer três parâmetros: nome do serviço em nuvem, nome da implantação e nome da função.

Tags: Azure Monitoramento Máquinas Virtuais Métricas C#

Publicado em 6-3 21:55 por Thomas