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.