本文介绍:

vmss 在自动增加/减少虚拟机后得到通知:

1.通过web hook或电子邮件得到通知

2.通过诊断将信息发送到事件中心event hub或者storage blob

 

视频讲解:

 

图文内容:

创建新的资源组:

本文所有操作均在新的资源组中进行:

 

创建虚拟机规模集:

 

为了节约虚拟机费用,我们选择配置不高的虚拟机,另外,本例中windows 或者 linux虚拟机均可以。

 

在网络配置中:

创建新的nic中 开启公共网络会为每一台虚拟机添加一个公网ip;

负载均衡开启后,所有虚拟机会通过负载均衡添加一个公网ip,可通过nat转发实现登录到虚拟机中

 

初始实例数量为首次创建虚拟机规模集时生成的虚拟机数量:

虚拟机规模集因为包含多台虚拟机,创建过程会稍微长,大概5分钟左右。

创建诊断用的storage:

 

创建诊断用的事件中心命名空间和事件中心:

 

创建新的事件中心

 

 

捕获功能会将事件中心的数据自动写入到stoage中,这是事件中心的一个有用的功能。

 

 

开始测试:

 

 

创建一个自定义缩放策略:

策略通常包含 自动扩大和缩小的指标,比如CPU>70%,实例增加1,CPU< 30%,实例减1;

 

 

自定义缩放策略保存成功后,可以设置 通知  和诊断设置:

如下图设置了电子邮件通知;

web hook 方式稍后介绍;

 

诊断设置 可以将诊断信息发送到 log analytics/ storage/ event hub,本例中,我们将诊断信息发送到 storage 和 event hub;

 

触发自动缩放:

将实例全部删除或者通过运行程序调整CPU利用率以触发自动缩放;

可以看到下方,新的虚拟机正在创建过程中;

此时,通知会即时的响应,即虚拟机一创建,会立即发送 email和 web hook 通知,但是诊断中的信息可能存在几分钟的时延。

 

检查电子邮件,包含订阅信息,资源组信息,实例数量变化等等。

 

在storage中会发现如下内容:

包含 scale actions等三个“文件夹”;

 

对于event hub的检测,我们可以通过 代码或 azure cli 中读取出event hub的消息,本文不再介绍这部分内容。

 

配置web hook接受通知:

本例中,我们将在一台云上的虚拟机里开发用于接受通知的web hook,承载方式为azure functions:

注意需要给虚拟机修改如下入站端口:

 

在 虚拟机规模集中scaling中添加web hook 信息如下:

Functions 的实例代码如下:

using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;

namespace Company.Function
{
    public static class HttpTriggerCSharp1
    {
        [FunctionName("HttpTriggerCSharp1")]
        public static async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequest req,
            ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");

            
            string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
            dynamic data = JsonConvert.DeserializeObject(requestBody);         

            log.LogInformation(requestBody);

   
            string responseMessage = "ok";

            return new OkObjectResult(responseMessage);
        }
    }
}

 

在触发自动缩放时,我们抓到了 通过web hook 发送的通知,解析如下:

 

关于解析内容的具体字段属性,参见:

https://docs.microsoft.com/zh-cn/azure/azure-monitor/platform/autoscale-webhook-email#autoscale-notification-webhook-payload-schema