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 ...
随机推荐
- 获取web页面xpath
1. Open Chrome 2. Right click the element that you want to get xpath 3. select "Inspector" ...
- shell脚本常用参数
shell 脚本 常用参数 #!/bin/sh # 在脚本第一行脚本头 # sh为当前系统默认shell,可指定为bash等shell sh -x # 执行过程 sh -n # 检查语法 (a=bbk ...
- Ubuntu 查看CPU温度
按照这篇文章: http://www.webupd8.org/2014/06/psensor-updated-with-option-to-display.html
- Javascript - LayUI库的流加载
LayUI库的流加载 用的LayUI-v2.2.45,将整个包解压缩后添加到项目,引入两个文件即可,不需要引入Jquery,此库自带: <link href="../js/layui- ...
- Android Studio 新建drawable-hdpi、drawable-mdpi等
在不同的模式“Project” / “Android”的文件夹中查看文件夹.如果文件夹丢失,您可以轻松添加它们. 1.在“res”文件夹上右键“New”->”Android Resource D ...
- 20165230 2017-2018-2《Java程序设计》课程总结
20165230 2017-2018-2<Java程序设计>课程总结 一.作业链接汇总 每周作业链接 预备作业1:我期望的师生关系 预备作业2:做中学learning by doing个人 ...
- Paint Fence
There is a fence with n posts, each post can be painted with one of the k colors.You have to paint a ...
- 联通-长春处,FDD和TDD宏站,数据业务接入时延期望值默认值应为80ms
有小坑 备注:若已经跑过V5.40.00_Alpha1_Baseline.sql或V5.30.02_Beta_TO_V5.40.00_Alpha1.sql的脚本,再次运行升级脚本修改不成功,需手动在数 ...
- Oracle SQL部分练习题
SQL练习题 注:查询列表不建议用 “*” 1.列出至少有一个雇员的所有部门: a. select * from dept where deptno in(select distinct ...
- Angularjs里面跨作用域的实战!
好久没有来写博客了,最近一直在用Google的AngularJS,后面我自己简称AngularJS就叫AJ吧! 学习AngularJS一路也是深坑颇多啊--!就不多说了,不过还是建议大家有时间去学下下 ...