最近准备基于Microsoft Azure Management Libraries 实现虚拟机的监控。主要的需求就是获取虚拟机内置的性能计数器数据,基于性能计数器实现后续的监控和自动伸缩。

作为这一票研究的第一篇,我们以连接中国区的Azure作为起步吧。

通过Azure的订阅(Subscription)建立Azure的连接

首先要有连接的凭据,通过代码验证,这里主要有两种连接凭据:令牌凭据(TokenCloudCredentials)和证书凭据(CertificateCloudCredentials)。

我们主要介绍令牌凭据(TokenCloudCredentials):这里用到了Window Azure的OAuth认证,需要在Azure Manage Portal中允许我们的App访问Azure。

微软提供了一个入门的链接,不过貌似不是针对咱们天朝的,同时有代码编译不通过的问题,可以参考一下:

https://msdn.microsoft.com/en-us/zh-us/library/azure/dn722415.aspx

整体上分为三步:

  1. 在Azure AD(活动目录)中添加一个应用程序
  2. 创建Project添加Nuget应用
  3. 创建令牌连接Azure

我们一步一步来:

1. 在Azure AD中添加一个应用程序

访问https://manage.windowsazure.cn,输入用户名和密码登录,用户必须有Active Dictionary权限。

左边菜单倒数第二个Active Directory,选择对应的目录,点击应用程序(Applications)Tab选型卡,添加一个应用程序:AzureTestApp,类型是Native Client Application,Redirect URL设置为:http://localhost

记得要保存:

 2. 创建Project添加Nuget引用

这里使用Console工程好了,主要添加Microsoft Azure Management Libraries和Active Directory Authentication Library

Package文件是这样的:

3. 创建令牌连接Azure

在创建令牌之前,我们需要先配置一下App.Config,将我们的订阅、应用程序信息、Login服务器、ApiEndPoint信息等,这些信息又用到了我们刚才创建的应用程序。

微软给的msdn指导说明中是这样的:我们主要用前5个:

有个疑问,这几个key主要用在哪,后续代码中大家一看就明白了。微软给的示例说明中的URL,很明显是Azure Global的,我们需要搞成中国的URL,其中

login:https://login.chinacloudapi.cn/{0}

apiEndpoint:https://management.core.chinacloudapi.cn/

不要问我为什么,哥也是在鞠强老大的指导下,配置成这样的。

然后,ClientID、tenantID从哪找呢?subscriptionId肯定是你的订阅的ID,比如:37a8***-5107-4f9b-***-a11***0226

这样我们的App.Config就OK了,对了,还有一个redirectUri : http://localhost/

撸代码吧:

访问App.Config肯定要添加System.configuration引用。

为了方便凭据管理,我们设计一个Azure认证器类:Authorizator

namespace AzureTest
{
using System.Configuration;
using Microsoft.WindowsAzure;
using Microsoft.IdentityModel.Clients.ActiveDirectory; /// <summary>
/// Window Azure登录验证器
/// </summary>
class Authorizator
{
/// <summary>
/// 获取令牌凭据
/// </summary>
/// <returns>令牌凭据</returns>
public static TokenCloudCredentials GetCredentials(string subscriptionId = "")
{
var token = GetAccessToken();
if(string.IsNullOrEmpty(subscriptionId))
subscriptionId = ConfigurationManager.AppSettings["subscriptionId"];
var credential = new TokenCloudCredentials(subscriptionId, token); return credential;
} /// <summary>
/// 获取访问令牌
/// </summary>
/// <returns>访问令牌</returns>
private static string GetAccessToken()
{
AuthenticationResult result = null; var context = new AuthenticationContext(string.Format(
ConfigurationManager.AppSettings["login"],
ConfigurationManager.AppSettings["tenantId"])); result = context.AcquireToken(
ConfigurationManager.AppSettings["apiEndpoint"],
ConfigurationManager.AppSettings["clientId"],
new Uri(ConfigurationManager.AppSettings["redirectUri"])); if (result == null)
{
throw new InvalidOperationException("Failed to obtain the JWT token");
} return result.AccessToken;
}
}
}

上面代码中,Azure连接认证就ok了,我们测试一下,应该弹出Azure登录验证界面:

static void Main(string[] args)
{
var credential = Authorizator.GetCredentials();
client = new MonitorClient(credential);
client.GetMetricDefinitions();
Console.ReadLine();
}

至此,Azure连接就可以了,上面代码中有些监控的代码,MonitorClient,我们将在下一篇中介绍如何获取VM的监控指标和监控数据。

周国庆

@济南 2016/3

[博客迁移]探索Windows Azure 监控和自动伸缩系列1 - 连接中国区Azure的更多相关文章

  1. 探索Windows Azure 监控和自动伸缩系列1 - 连接中国区Azure

    最近准备基于Microsoft Azure Management Libraries 实现虚拟机的监控.主要的需求就是获取虚拟机内置的性能计数器数据,基于性能计数器实现后续的监控和自动伸缩. 作为这一 ...

  2. [博客迁移]探索Windows Azure 监控和自动伸缩系列2 - 获取虚拟机的监控定义和监控数据

    上一篇博文介绍了如何连接Windows Azure: http://www.cnblogs.com/teld/p/5113063.html 本篇我们继续上次的示例代码,获取虚拟机的监控定义和监控数据. ...

  3. 探索Windows Azure 监控和自动伸缩系列2 - 获取虚拟机的监控定义和监控数据

    上一篇博文介绍了如何连接Windows Azure: http://www.cnblogs.com/teld/p/5113063.html 本篇我们继续上次的示例代码,获取虚拟机的监控定义和监控数据. ...

  4. [博客迁移]探索Windows Azure 监控和自动伸缩系列3 - 启用Azure监控扩展收集自定义监控数据

    上一篇我们介绍了获取Azure的监控指标和监控数据: http://www.cnblogs.com/teld/p/5113376.html 本篇我们继续:监控虚拟机的自定义性能计数器. 随着我们应用规 ...

  5. 探索Windows Azure 监控和自动伸缩系列3 - 启用Azure监控扩展收集自定义监控数据

    上一篇我们介绍了获取Azure的监控指标和监控数据: http://www.cnblogs.com/teld/p/5113376.html 本篇我们继续:监控虚拟机的自定义性能计数器. 随着我们应用规 ...

  6. 博客迁移至http://www.maxzhang.com,欢迎访问!

    博客迁移至http://www.maxzhang.com,欢迎访问!

  7. 告示:CSDN博客通道支持Windows Live Writer写blog离线好友

    尊敬的各位CSDN用户: 您好! 为了更好的服务客户.CSDN已经支持Windows Live Writer离线写博客啦.Windows Live Writer于2014年5月29日正式上线啦!欢迎大 ...

  8. 博客迁移至 http://www.loveli.site

    对于博客园的Markdow 支持太过...,你懂的,  以后博客迁移至:http://www.loveli.site

  9. 【博客迁移】hyrepo.com

    博客迁移至 www.hyrepo.com

随机推荐

  1. Django 正向解析与反向解析

    正向解析就是按照顺序查找访问(urls.py---view--templates) 反向解析就是根据命名空间命名来调到指定的页面 用反向解析的原因: 随着功能的增加会出现更多的视图,可能之前配置的正则 ...

  2. linux 源码安装 mono

    $ yum install bison gettext glib2 freetype fontconfig libpng libpng-devel libX11 libX11-devel glib2- ...

  3. 使用Git,如何忽略不需要上传的文件(配置文件)

    步骤1:在目录下,选择GIt Bash Here 2.输入命令 : git update-index --assume-unchanged 文件名 3.再输入指令 git  status 查看修改文件 ...

  4. 分布式文档系统_document查询内部原理

    1.客户端发送请求到任意一个node,成为coordinate node2.coordinate node对document进行路由,将请求转发到对应的node,此时会使用round-robin随机轮 ...

  5. centos7.6 安装与配置 MongoDB yum方式

    1 创建yum源文件,添加以下内容 vim /etc/yum.repos.d/mongodb-org-4.0.repo [mongodb-org-4.0] name=MongoDB Repositor ...

  6. OC仿QQ侧滑

    之前做侧滑用的控件的DDMenu,总感觉好像差了点什么,自己尝试写了一个,三层叠加,感觉效果不理想,偶然间看到了一篇博客,与大家分享,再次申明,该代码不是我写的,只是为了给自己留一个查找资料的机会 下 ...

  7. 20190316 安装pip的一些问题

    前提条件: 1. windows环境中安装python3.7 2.注意配置环境变量 确认python.和pip都能直接在cmd 控制台使用, 一个是python命令的地址指向,一个是pip命令的地址指 ...

  8. jvm - 类的初始化过程

    我们知道,我们写的java代码称为源码,想要能够被jvm执行首先需要编译成.class文件,那么编译完到使用又都经理的哪些阶段呢?主要分为以下三个阶段: 加载:查找并加载类的二进制数据(.class文 ...

  9. 前端框架之Vue(10)-全家桶简单使用实例

    vue-router官方文档 vuex官方文档 安装 npm install vue-router --save 使用实例 vue-router初使用(webpack-simple模板) 1.切换到指 ...

  10. rest_framework的认证系统

    1.认证模块 必须用户登录之后才能访问所有图书,才能修改图片,才能查询单个图书 2.怎么使用 其实本质上就是携带token字符串,然后后台拿到数据再取数据库进行校验,看是否有这个用户 先手写一个认证模 ...