本文介绍:
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 发送的通知,解析如下:
关于解析内容的具体字段属性,参见: