Azure虚机磁盘容量警报(邮件提醒)
2017-03-27 10:43
141 查看
上周有个客户提出这样的需求:根据虚拟机磁盘的实际使用量,当达到某一阈值时设置邮件提醒。
在这个需求中我们只需要解决两点问题:
计算虚拟机磁盘实际使用量
发送邮件
使用VS新建一个名为CalculatePageBlobActualUsage控制台应用程序,使用Nuget搜索“WindowsAzure.Storage”并安装
配置存储账号信息:
通过下面的代码就可以获取到使用量,只需要传入指定的PageBlob。
在这个需求中我们只需要解决两点问题:
计算虚拟机磁盘实际使用量
发送邮件
使用VS新建一个名为CalculatePageBlobActualUsage控制台应用程序,使用Nuget搜索“WindowsAzure.Storage”并安装
配置存储账号信息:
计算虚机磁盘实际使用量
虚机磁盘是以Page Blob文件形式存储在Storage中的,而我们付给Azure的存储费用是按实际使用量计算的,而并非是按磁盘大小计算的,那么如何知道我们虚机磁盘的实际使用量?通过下面的代码就可以获取到使用量,只需要传入指定的PageBlob。
private static long GetActualDiskSize(CloudPageBlob pageBlob) { pageBlob.FetchAttributes(); return 124 + pageBlob.Name.Length * 2 + pageBlob.Metadata.Sum(m => m.Key.Length + m.Value.Length + 3) + pageBlob.GetPageRanges().Sum(r => 12 + (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(11); 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)1024 * 1024 * 1024 * 10; if (size > threshold) { //当磁盘实际使用量大于10GB时,发送邮件警告 SendMail(toMailAddress, body, subject); } Console.ReadKey(); }
收到警报邮件
如下图所示,我们已经收到了警报邮件相关文章推荐
- Linx监控分享--磁盘空间监控+邮件提醒
- Azure上linux虚机使用fio测试磁盘,以及附加数据盘建立raid提高iops
- Azure 上删除虚机是否保留附加磁盘?
- 【TX1学习与开发系列】(二)交换空间与磁盘容量增加
- 提醒事件每天/月/季/年提醒功能(邮件,短信提醒功能的事件提醒)
- VC获取磁盘容量
- windows 2008磁盘容量限制
- 监控服务器:设置用户登录邮件提醒
- lvm 通过扩容本身磁盘容量扩容
- python监控脚本,监控CPU,磁盘报警时发送邮件
- Windows Azure Virtual Machine (36) 扩展Azure ARM VM的磁盘大小
- 磁盘与目录的容量
- zabbix对数据盘磁盘容量进行监控
- Linux系统下为Gitlab配置邮件提醒的方法详解
- U盘容量突然减小了?磁盘管理下看到U盘被分区了!
- 使用shell编写一个脚本,磁盘超过80%邮件报警
- C++ 获得本地磁盘盘符的容量信息
- 邮件客户端thunderbird造成磁盘消耗过大的临时处理办法
- linux用户登录检测发送邮件提醒
- ZenCart recover_cart_sales未付款客户邮件提醒插件