上周有个客户提出这样的需求:根据虚拟机磁盘的实际使用量,当达到某一阈值时设置邮件提醒。

在这个需求中我们只需要解决两点问题:

  1. 计算虚拟机磁盘实际使用量
  2. 发送邮件

使用VS新建一个名为CalculatePageBlobActualUsage控制台应用程序,使用Nuget搜索“WindowsAzure.Storage”并安装

配置存储账号信息:

计算虚机磁盘实际使用量

虚机磁盘是以Page Blob文件形式存储在Storage中的,而我们付给Azure的存储费用是按实际使用量计算的,而并非是按磁盘大小计算的,那么如何知道我们虚机磁盘的实际使用量?

通过下面的代码就可以获取到使用量,只需要传入指定的PageBlob。

  1. private static long GetActualDiskSize(CloudPageBlob pageBlob)
  2. {
  3. pageBlob.FetchAttributes();
  4. return + pageBlob.Name.Length *
  5. + pageBlob.Metadata.Sum(m => m.Key.Length + m.Value.Length + )
  6. + pageBlob.GetPageRanges().Sum(r => + (r.EndOffset - r.StartOffset));
  7. }
  8.  
  9. [DllImport("Shlwapi.dll", CharSet = CharSet.Auto)]
  10. public static extern long StrFormatByteSize(long fileSize, [MarshalAs(UnmanagedType.LPTStr)] StringBuilder buffer, int bufferSize);
  11. public static string GetFormattedDiskSize(long size)
  12. {
  13. var sb = new StringBuilder();
  14. StrFormatByteSize(size, sb, sb.Capacity);
  15. return sb.ToString();
  16. }

发送邮件

关于发送邮件本身就没有任何技术难度,我们只需要做一个逻辑判断,假设我们需要当虚机磁盘使用量超过10GB就给用户发送邮件警报。

  1. private static void SendMail(string toMailAddress, string body, string subject, string path="")
  2. {
  3. SmtpClient smtpClient = new SmtpClient("smtp.qq.com");
  4. smtpClient.EnableSsl = true;
  5. //Credentials登陆SMTP服务器的身份验证
  6. smtpClient.Credentials = new NetworkCredential("username", "password");
  7. MailMessage message = new MailMessage(new MailAddress("from email"), new MailAddress(toMailAddress));
  8. // message.Bcc.Add(new MailAddress("tst@qq.com")); //可以添加多个收件人
  9. message.Body = body;
  10. message.Subject = subject;
  11. if (path != "")
  12. {
  13. Attachment att = new Attachment(@path);
  14. message.Attachments.Add(att);
  15. }
  16. smtpClient.Send(message);
  17. }

根据阈值发送警报邮件

  1. private static string _storageConnectionString = ConfigurationManager.AppSettings["StorageConnectionString"];
  2. private static string _containerName = ConfigurationManager.AppSettings["ContainerName"];
  3. private static string _vhdName = ConfigurationManager.AppSettings["VHDName"];
  4. static void Main(string[] args)
  5. {
  6. CloudStorageAccount storageAccount = CloudStorageAccount.Parse(_storageConnectionString);
  7. CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
  8. CloudBlobContainer blobContainer = blobClient.GetContainerReference(_containerName);
  9. CloudPageBlob pageBlob = blobContainer.GetPageBlobReference(_vhdName);
  10. long size = GetActualDiskSize(pageBlob);
  11. string actualSize = GetFormattedDiskSize(size);
  12. string toMailAddress = "huzc@nysoftland.com.cn";
  13. string body = "您的虚机磁盘当前实际使用量为" + actualSize;
  14. string subject = "磁盘容量警报";
  15. //阈值为10GB
  16. long threshold = (long) * * * ;
  17. if (size > threshold)
  18. {
  19. //当磁盘实际使用量大于10GB时,发送邮件警告
  20. SendMail(toMailAddress, body, subject);
  21. }
  22. Console.ReadKey();
  23. }

收到警报邮件

如下图所示,我们已经收到了警报邮件

Azure虚机磁盘容量警报(邮件提醒)的更多相关文章

  1. 给Azure 虚机的硬盘扩充容量[转]

    接到用户的需求,需要给Azure 上虚机的硬盘扩充空间,网上找到下面的资源,做个备忘: https://github.com/azure-contrib/WindowsAzureDiskResizer

  2. vmware中的 CentOS7 虚机磁盘动态扩容

    0.在vmware的配置项中,将虚机的磁盘大小调大,步骤简单,此处略 查看当前状态 文件系统状态 df -h 磁盘状态 lsblkfdisk   -l  1.首先要再创建一个物理分区 (使用fdisk ...

  3. Windows Azure Virtual Machine (29) 修改Azure VM 数据磁盘容量

    <Windows Azure Platform 系列文章目录> 当我们使用Windows Azure管理界面,创建Azure虚拟机的时候,默认挂载的磁盘是固定大小的 1.比如我创建1个Wi ...

  4. Terraform:创建 Azure 虚机

    笔者在前文<Terraform 简介>中简单介绍了 Terraform 相关的概念,本文让我们使用 Terraform 在 Azure 上创建一个虚机,以此来直观体验一下 Terrafor ...

  5. 虚机扩大容量与vm减少所占容量

    Linux的虚拟机碎片整理 sudo dd if=/dev/zero of=/free bs=1M sudo rm -f /free 镜像压缩 移动镜像 VBoxManage internalcomm ...

  6. KVM导入Ubuntu Cloud 镜像创建虚机及调整磁盘大小

    Ubuntu Cloud Images Ubuntu官网会给各种公有云平台提供cloud镜像, 例如AWS, MS Azure, Google Cloud, 以及本地虚机环境例如 QEMU, VMwa ...

  7. 在Azure Ubunt Server 14.04虚机中使用Deep-Visualization-Toolbox

      参考网站 a)   https://zhuanlan.zhihu.com/p/24833574?utm_source=tuicool&utm_medium=referral b)   ht ...

  8. KVM 虚机镜像操作, 扩容和压缩

    KVM镜像操作 qemu-img命令 创建镜像 qemu-img create # 创建一个设备空间大小为10G的镜像 qemu-img create -f qcow2 centos7-guest.q ...

  9. 云与备份之(1):VMware虚机备份和恢复

    本系列文章会介绍云与备份之间的关系,包括: (1)VMware 虚机备份和恢复 (2)KVM 虚机备份和恢复 (3)云与备份 (4)OpenStack 与备份 (5)公有云与备份 1. 与备份有关的V ...

随机推荐

  1. javascript私有方法揭示为公有方法

    揭示模式可用于将私有方法暴露为公共方法.当为了对象的运转而将所有功能放置在一个对象中以及想尽可能地保护该对象,这种揭示模式就非常有用. 板栗: var myarray; (function(){ va ...

  2. CSS图片下面产生间隙的6种解决方案

    CSS图片下面产生间隙的6种解决方案 在进行页面的DIV+CSS排版时,遇到IE6(当然有时Firefox下也会偶遇)浏览器中的图片元素img下出现多余空白的问题绝对是常见的对於 该问题的解决方法也是 ...

  3. Javascript Jquery 中的数组定义与操作

    1.认识数组 数组就是某类数据的集合,数据类型可以是整型.字符串.甚至是对象Javascript不支持多维数组,但是因为数组里面可以包含对象(数组也是一个对象),所以数组可以通过相互嵌套实现类似多维数 ...

  4. 第5月第15天 php email

    1. <?php require_once "Mail.php"; $from = "luckyeggs<fuping304@163.com>" ...

  5. python字典转datafarm,pandas

    # coding:utf-8 import json import pandas as pd with open("./article_file/all_article.json" ...

  6. deeplearning.ai学习RNN

    一.RNN基本结构 普通神经网络不能处理时间序列的信息,只能割裂的单个处理,同时普通神经网络如果用来处理文本信息的话,参数数目将是非常庞大,因为如果采用one-hot表示词的话,维度非常大. RNN可 ...

  7. 苹果ANCS协议学习【转】

    苹果ANCS协议学习 转自:http://www.cnblogs.com/alexcai/p/4321514.html 综述 苹果通知中心(Apple Notification Center Serv ...

  8. Linux dd命令中dsync与fdatasync的区别【转】

    在Linux系统中经常会使用dd命令来测试硬盘的写入速度,命令会涉及到两个参数:dsync与fdatasync,本文介绍一下其区别. dd if=/dev/zero of=/tmp/1Gbytes b ...

  9. 关于阿里云和ucloud云服务器负载均衡器slb和ulb会话保持的配置

    在阿里云slb或者ucloud的ulb上对公司网站后台做了负载均衡以后,发现经常需要重新登录,单独访问没有这样的问题,问题就出在session的保持上,在云控制台中有配置会话的相关选项 阿里云的配置 ...

  10. 初始ASP.NET数据控件【续 DataList】

    DataList控件  DataList控件也是一个常用的数据绑定控件,相对于GridView控件虽然没它那么强大的功能,但是灵活性却很强势.因为其本身就是一个富有弹性的控件.DataList控件可以 ...