Azure 服務監控API調用

概述

在使用Azure的過程當中,不少用戶但願經過code的方式獲取服務在管理門戶中顯示的監視信息,如虛擬機的CPU、服務總線的總消息出入數等。目前Azure的大部分服務都已經支持經過監控器的API查詢和訪問這些指標,使用過程當中請使用2018-01-01 API版本。api

本文首先介紹如何經過Rest API獲取認證信息Authorization,而後以獲取虛擬機CPU監控指標爲示例演示
監控API的使用,最後介紹經過SDK獲取監控。瀏覽器


獲取認證Authorization(三種方式)

一、經過瀏覽器快速獲取

在開發測試過程當中,能夠經過Chrome瀏覽器F12功能快速獲取認證信息。
imageapp

二、經過AD認證信息獲取

關於AD應用的建立,請參考連接經過 PowerShell 獲取認證憑據部分的建立示例腳本,固然也能夠直接在Azure管理門戶手動建立AD Application。若是是手動建立,請注意權限的授予問題,若是是第一次使用對門戶不熟悉,請直接使用PowerShell腳本。dom

POST /b388b808-0ec9-4a09-a414-a7cbbd8b7e9b/oauth2/token?api-version=1.0 HTTP/1.1
Host: login.chinacloudapi.cn
Content-Type: application/x-www-form-urlencoded
Cache-Control: no-cache
Postman-Token: 5ea61bff-49b0-ec09-44bd-f9437d53932e

grant_type=client_credentials&resource=https%3A%2F%2Fmanagement.chinacloudapi.cn%2F&client_id=42c02c81-eff8-4dff-cc84-4e43b6ea8a6f&client_secret=123456

image

關於參數的獲取,請參考建立AD應用腳本的說明。ide

三、經過帳戶名和祕鑰獲取
POST /common/oauth2/token?api-version=1.0 HTTP/1.1
Host: login.chinacloudapi.cn
Content-Type: application/x-www-form-urlencoded
Cache-Control: no-cache
Postman-Token: c35a61d2-e2af-28e9-36b2-70ef717c7013

grant_type=password&resource=https%3A%2F%2Fmanagement.chinacloudapi.cn%2F&username=tao.yu%40microsoftinternal.partner.onmschina.cn&password=123456&client_id=1950a258-227b-4e31-a9cf-717495945fc2

image

獲取虛擬機CPU Rest請求示例

目前監控器已經支持的監控指標請參考Azure監控器支持的指標測試

URL: https://management.chinacloudapi.cn/subscriptions/ecf1d1be-9348-434c-86ef-f903f7bb7001/resourceGroups/yuvmtest2/providers/Microsoft.Compute/virtualMachines/yuvmtest2/providers/microsoft.insights/metrics?metricnames=Percentage CPU&api-version=2018-01-01

Authorization:Bearer + 空格 + token

image

注意: Rest認證使用的是Bearer格式進行的認證,因此使用以前方式獲取的token須要在前面加上"Bearer + 空格"ui

示例只是簡單的演示了獲取VM CPU的方式,用戶能夠根據本身的須要,調整請求的參數,獲取其它類型資源的監控信息,固然也能夠添加相應的過濾條件獲取須要的信息。url

更多示例請參考: Azure監控RESTAPI演練spa


使用C# SDK獲取監控信息

目前關於Monitor的sdk還在Preview階段,最新版本的sdk還沒法使用VS安裝。rest

能夠安裝預覽版本:0.18.1-preview進行測試,(Install-Package Microsoft.Azure.Management.Monitor -Version 0.18.1-preview)

安裝參考連接:Microsoft.Azure.Management.Monitor

其它包的安裝

Install-Package Microsoft.Rest.ClientRuntime.Azure.Authentication -Version 2.3.4

Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory -Version 3.19.8

下面的測試Code是在Net Core環境下進行的測試。

using System;
using System.Collections.Generic;
using Microsoft.Azure.Management.Monitor;
using Microsoft.Azure.Management.Monitor.Models;
using Microsoft.IdentityModel.Clients.ActiveDirectory;
using Microsoft.Rest.Azure.Authentication;

namespace GetAzureVmMonitor
{
    namespace Vmtest
    {
        class Program
        {
            //對應虛擬機屬性信息
            private const string ResourceUri = "/subscriptions/ecf1d1be-9348-434c-86ef-f903f7bb7001/resourceGroups/yuvmtest2/providers/Microsoft.Compute/virtualMachines/yuvmtest2";

            static void Main(string[] args)
            {
                //AD APPlication 信息
                string domain = "b388b808-0ec9-4a09-a414-a7cbbd811e9b";
                string clientId = "42c02c81-eff8-4df6-8884-4e43b6e11a6f";
                string clientSecret = "123456";
                //使用AD獲取認證
                var credentials = ApplicationTokenProvider.LoginSilentAsync(domain, new ClientCredential(clientId, clientSecret), ActiveDirectoryServiceSettings.AzureChina).Result;

                //建立Monitor client對象
                MonitorClient monitorClient = new MonitorClient(new Uri("https://management.chinacloudapi.cn"), credentials);

                var actualMetrics = monitorClient.Metrics.List(resourceUri: ResourceUri,
                                                                metric: "Percentage CPU",
                                                                resultType: ResultType.Data
                                                                );

                IEnumerable<Metric> value = actualMetrics.Value;
                EnumerateMetrics(value);
                Console.ReadKey(true);
            }

            /// <summary>
            /// 打印輸出部分結果
            /// </summary>
            /// <param name="metrics"></param>
            /// <param name="maxRecords"></param>
            private static void EnumerateMetrics(IEnumerable<Metric> metrics, int maxRecords = 5)
            {
                foreach (var metric in metrics)
                {
                    Console.WriteLine(metric.Id);

                    foreach (var test in metric.Timeseries)
                    {
                        foreach (var data in test.Data)
                        {
                            Console.WriteLine(data.TimeStamp + " : " + data.Average);
                        }
                        Console.WriteLine("----------");
                    }
                }
            }
        }
    }
}

ResourceUri 對應管理門戶虛擬機的Properties -> RESOURCE ID。

參考連接

Azure 監控器文檔

使用 REST 接口獲取訂閱下虛擬機信息

相關文章
相關標籤/搜索