Azure虚机磁盘容量警报(邮件提醒)
上周有个客户提出这样的需求:根据虚拟机磁盘的实际使用量,当达到某一阈值时设置邮件提醒。
在这个需求中我们只需要解决两点问题:
- 计算虚拟机磁盘实际使用量
- 发送邮件
使用VS新建一个名为CalculatePageBlobActualUsage控制台应用程序,使用Nuget搜索“WindowsAzure.Storage”并安装

配置存储账号信息:

计算虚机磁盘实际使用量
虚机磁盘是以Page Blob文件形式存储在Storage中的,而我们付给Azure的存储费用是按实际使用量计算的,而并非是按磁盘大小计算的,那么如何知道我们虚机磁盘的实际使用量?
通过下面的代码就可以获取到使用量,只需要传入指定的PageBlob。
private static long GetActualDiskSize(CloudPageBlob pageBlob)
{
pageBlob.FetchAttributes();
return + pageBlob.Name.Length *
+ pageBlob.Metadata.Sum(m => m.Key.Length + m.Value.Length + )
+ pageBlob.GetPageRanges().Sum(r => + (r.EndOffset - r.StartOffset));
} [DllImport("Shlwapi.dll", CharSet = CharSet.Auto)]
public static extern long StrFormatByteSize(long fileSize, [MarshalAs(UnmanagedType.LPTStr)] StringBuilder buffer, int bufferSize);
public static string GetFormattedDiskSize(long size)
{
var sb = new StringBuilder();
StrFormatByteSize(size, sb, sb.Capacity);
return sb.ToString();
}
发送邮件
关于发送邮件本身就没有任何技术难度,我们只需要做一个逻辑判断,假设我们需要当虚机磁盘使用量超过10GB就给用户发送邮件警报。
private static void SendMail(string toMailAddress, string body, string subject, string path="")
{
SmtpClient smtpClient = new SmtpClient("smtp.qq.com");
smtpClient.EnableSsl = true;
//Credentials登陆SMTP服务器的身份验证
smtpClient.Credentials = new NetworkCredential("username", "password");
MailMessage message = new MailMessage(new MailAddress("from email"), new MailAddress(toMailAddress));
// message.Bcc.Add(new MailAddress("tst@qq.com")); //可以添加多个收件人
message.Body = body;
message.Subject = subject;
if (path != "")
{
Attachment att = new Attachment(@path);
message.Attachments.Add(att);
}
smtpClient.Send(message);
}
根据阈值发送警报邮件
private static string _storageConnectionString = ConfigurationManager.AppSettings["StorageConnectionString"];
private static string _containerName = ConfigurationManager.AppSettings["ContainerName"];
private static string _vhdName = ConfigurationManager.AppSettings["VHDName"];
static void Main(string[] args)
{
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(_storageConnectionString);
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer blobContainer = blobClient.GetContainerReference(_containerName);
CloudPageBlob pageBlob = blobContainer.GetPageBlobReference(_vhdName);
long size = GetActualDiskSize(pageBlob);
string actualSize = GetFormattedDiskSize(size);
string toMailAddress = "huzc@nysoftland.com.cn";
string body = "您的虚机磁盘当前实际使用量为" + actualSize;
string subject = "磁盘容量警报";
//阈值为10GB
long threshold = (long) * * * ;
if (size > threshold)
{
//当磁盘实际使用量大于10GB时,发送邮件警告
SendMail(toMailAddress, body, subject);
}
Console.ReadKey();
}
收到警报邮件
如下图所示,我们已经收到了警报邮件

Azure虚机磁盘容量警报(邮件提醒)的更多相关文章
- 给Azure 虚机的硬盘扩充容量[转]
接到用户的需求,需要给Azure 上虚机的硬盘扩充空间,网上找到下面的资源,做个备忘: https://github.com/azure-contrib/WindowsAzureDiskResizer
- vmware中的 CentOS7 虚机磁盘动态扩容
0.在vmware的配置项中,将虚机的磁盘大小调大,步骤简单,此处略 查看当前状态 文件系统状态 df -h 磁盘状态 lsblkfdisk -l 1.首先要再创建一个物理分区 (使用fdisk ...
- Windows Azure Virtual Machine (29) 修改Azure VM 数据磁盘容量
<Windows Azure Platform 系列文章目录> 当我们使用Windows Azure管理界面,创建Azure虚拟机的时候,默认挂载的磁盘是固定大小的 1.比如我创建1个Wi ...
- Terraform:创建 Azure 虚机
笔者在前文<Terraform 简介>中简单介绍了 Terraform 相关的概念,本文让我们使用 Terraform 在 Azure 上创建一个虚机,以此来直观体验一下 Terrafor ...
- 虚机扩大容量与vm减少所占容量
Linux的虚拟机碎片整理 sudo dd if=/dev/zero of=/free bs=1M sudo rm -f /free 镜像压缩 移动镜像 VBoxManage internalcomm ...
- KVM导入Ubuntu Cloud 镜像创建虚机及调整磁盘大小
Ubuntu Cloud Images Ubuntu官网会给各种公有云平台提供cloud镜像, 例如AWS, MS Azure, Google Cloud, 以及本地虚机环境例如 QEMU, VMwa ...
- 在Azure Ubunt Server 14.04虚机中使用Deep-Visualization-Toolbox
参考网站 a) https://zhuanlan.zhihu.com/p/24833574?utm_source=tuicool&utm_medium=referral b) ht ...
- KVM 虚机镜像操作, 扩容和压缩
KVM镜像操作 qemu-img命令 创建镜像 qemu-img create # 创建一个设备空间大小为10G的镜像 qemu-img create -f qcow2 centos7-guest.q ...
- 云与备份之(1):VMware虚机备份和恢复
本系列文章会介绍云与备份之间的关系,包括: (1)VMware 虚机备份和恢复 (2)KVM 虚机备份和恢复 (3)云与备份 (4)OpenStack 与备份 (5)公有云与备份 1. 与备份有关的V ...
随机推荐
- CS229 笔记05
CS229 笔记05 生成学习方法 判别学习方法的主要思想是假设属于不同target的样本,服从不同的分布. 例如 \(P(x|y=0) \sim {\scr N}(\mu_1,\sigma_1^2) ...
- 20155325 2016-2017-2 《Java程序设计》第8周学习总结
教材学习内容总结 NIO用于高级输入/输出处理 名称 衔接数据源与目的地 IO InputStream,OutputStream NIO Channel 类 方法 方法的作用 ReadableByte ...
- Zookeeper笔记之使用zk实现集群选主
一.需求 在主从结构的集群中,我们假设硬件机器是很脆弱的,随时可能会宕机,当master挂掉之后需要从slave中选出一个节点作为新的master,使用zookeeper可以很简单的实现集群选主功能. ...
- Django进阶之缓存和信号
一.缓存 简介 由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存,缓存将一个某个views的返回值保存至内存或者mem ...
- 如何使用gifsicle压缩gif图片
最近我写了一些关于如何将各种形式的多媒体格式相互转换的文章,特别是GIF动图方面的,比如如何将小视频转换成GIF动图或将GIF动图转换成视频,有很多像ImageMagick,ffmpeg这样的工具帮助 ...
- ispoweroftwo 判断2的次幂【转】
转自:https://www.cnblogs.com/troublelost/p/5236391.html 首先结果是: public bool IsPowerOfTwo(int n) { if(n& ...
- php毫秒时间戳
2014年5月23日 17:46:04 凡事还是得靠自己呀,网上太多坑 如果你的机器是 32位 的可以看这个: list($usec, $sec) = explode(' ', microtime() ...
- eclipse导入项目报错multiple annotations found at this line
eclipsewindow-->preference-->Valdation-->将Manual和Build下复选框全部取消选择
- KNN算法的感受 1
本来预计的打算是一天一个十大挖掘算法,然而由于同时要兼顾数据结构面试的事情,所以 很难办到,但至少在回家前要把数据挖掘十大算法看完,过个好年,在course上学习老吴的课程还是帮了我很大的忙,虽然浪费 ...
- Java多态概述
多态 所谓多态,实际上就是一个对象的多种状态: 下面例子中,Tiger可以看做Tiger,也可以看做Animal Cat 可以看做Cat,也可以看做Animal Dog 可以看做Dog,也可以看做A ...