博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Windows Azure Cloud Service (26) Windows Azure 性能监视器
阅读量:6607 次
发布时间:2019-06-24

本文共 8459 字,大约阅读时间需要 28 分钟。

 《》

  

  本文参考文章: 

 

  Windows操作系统提供了查看性能监视器的功能,用于监视CPU使用率、内存使用率,硬盘读写速度,网络速度等。您可以在开始-->运行-->输入Perfmon,就可以打开性能监视器。

  我们知道,云计算的特点之一是:弹性计算。如果在某一时间点,用于对云计算资源的使用量超过了实际部署的硬件水平,我们就可以通过修改:

  • 增加单个计算节点的硬件配置,比如配置VM Size,从Small改成Extra Large。来提高硬件水平以响应更多的客户请求。
  • 多个计算节点并行计算,比如修改Instance Count,从1(单个计算节点),改成2或者更多(多个计算节点)。这样也可以提高服务水平。

  但是Windows Azure毕竟是在远程数据中心的托管服务,我们在本地是无法监视和查看Windows Azure托管服务的资源使用情况。如果我们想查看Windows Azure的性能监视器,你可能会想到:

  • 使用远程桌面连接。因为Windows Azure提供远程桌面(RDP)连接查看Azure 计算节点的功能,所以您在部署完托管服务后,可以登录到一个计算节点的远程桌面,然后运行Perfmon进行查看。

  但是这种方法的缺点显而易见:

  • 首先,你只能查看到某一个计算节点的性能监视器而无法查看所有的计算节点。
  • 其次,使用远程桌面的步骤是及其繁琐的,需要连接、输入用户名密码、输入命令行查看。
  • 而且,通过远程桌面查看到Windows Azure性能监视器的内容,无法保存在客户端。

  考虑到这些问题,微软创建了Windows Azure Diagnostics(诊断)的机制。Windows Azure Diagnostics可以诊断检索许多内容,比如跟踪日志,奔溃事件日志等,并且保存下来。在本章里,我将侧重于Peformance Counter(性能计数器),该功能可以提供WIndows Azure应用程序的关键信息。实际上,性能计数器,可以帮助您隔离性能问题。最重要的是,它可以帮您省钱,让Windows Azure的资源得到最佳利用。

 

Windows Azure Diagnostics

  每一个Windows Azure计算节点都有一个内置的诊断进程(DiagnosticsAgent.exe),负责定期收集诊断数据,并缓存到本地文件,并最终存储到一个预定义的Azure存储。请注意,在诊断过程中,也可以手动触发。

  具体来说,Peformance Counter的数据被保存到Windows Azure Storage的Table中,表名为WADPerformanceCountersTable。其他Diagnostics,比如跟踪日志,事件日志等数据也都存储在指定的表,像WadLogsTableWADDiagnosticInfrastructureLogsTable。更多信息,可以参考。

  每一个Role Instance都有一个Configuration File (配置文件),位于Azure Storage Blob下,Container(概念上类似于文件夹)为wad-control-container。配置文件主要收集性能计数器数据和相关的使用率。

  下面显示的是Disnostics Configuration File的位置。你可以下载访问wad-control-container。

配置文件中使用了一个标准的XML格式,并可以手动修改(不推荐)。

 

使用代码

在这篇文章中,我们会研究

  1.如果配置Role.cs,并且从外部程序读取Peformance Counter

  2.如何访问Azure Storage Table中的数据

  3.性能计数器的快速分析

Windows Azure诊断API

参考自MSDN

  • -允许你收集日志和诊断信息从代码运行在你的角色
  •  - 允许你收集日志和远程Diagnostics(诊断)信息

  为了Diagnostics 你的Role,你必须先在ServiceDefinition.csdef中修改配置文件。具体的您可以参考我的博文

 

在WebRole.cs中修改代码

 

public class WebRole : RoleEntryPoint{    ///     /// Entry point before starting the Role    ///     public override bool OnStart()    {        // Get the Role instance Diagnostics configuration.         var config = DiagnosticMonitor.GetDefaultInitialConfiguration();        // Define interval for persisting the performance counter data to azure storage.        config.PerformanceCounters.ScheduledTransferPeriod = TimeSpan.FromMinutes(5);        // CPU Utilization Counter        PerformanceCounterConfiguration cpuUtilizationCounter =                 new PerformanceCounterConfiguration()        {            CounterSpecifier = @"\Processor(_Total)\% Processor Time",            //define the sample internal for the specific performance counter            SampleRate = TimeSpan.FromSeconds(1)        };        if (!config.PerformanceCounters.DataSources.Contains(cpuUtilizationCounter,                     new PerformanceCounterComparer()))        {            config.PerformanceCounters.DataSources.Add(cpuUtilizationCounter);        }        // Start diagnostic monitor with the new configuration.        DiagnosticMonitor.Start    ("Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString", config);        return base.OnStart();    }    ///     /// Performance Counter Comparer    ///     private class PerformanceCounterComparer :         IEqualityComparer
{ public bool Equals(PerformanceCounterConfiguration a, PerformanceCounterConfiguration b) { //Check whether the compared objects reference the same data. if (Object.ReferenceEquals(a, b)) return true; //Check whether any of the compared objects is null. if (Object.ReferenceEquals(a, null) || Object.ReferenceEquals(b, null)) return false; // Check if the counter specifier and the sampling rate are the same. return (a.CounterSpecifier == b.CounterSpecifier && a.SampleRate == b.SampleRate); } public int GetHashCode(PerformanceCounterConfiguration counter) { //Check whether the object is null if (Object.ReferenceEquals(counter, null)) return 0; //Get hash code for the CounterSpecifier field if it is not null. int hashCounterSpecifier = counter.CounterSpecifier == null ? 0 : counter.CounterSpecifier.GetHashCode(); //Calculate the hash code for the counter. return hashCounterSpecifier ^ counter.SampleRate.GetHashCode(); } }}

 

远程配置 Performance Counter(性能计数器)

使用 

const string storageAccoutName = "Storage-Name-Here"; const string privateKey = "Storge-Private-Key-Here";const string deploymentId = "Deployment-Id-Here";var storageAccount = CloudStorageAccount.Parse(String.Format(    "DefaultEndpointsProtocol=https;AccountName={0};AccountKey={1}",     storageAccoutName, privateKey));// Get the diagnostics manager for the entire storage account.var diagnosticManager = storageAccount.CreateDeploymentDiagnosticManager(deploymentId);// Get diagnostics manager for the specific role instance.RoleInstanceDiagnosticManager roleDiagManager =   diagnosticManager.GetRoleInstanceDiagnosticManager("WebRole1", "WebRole1_IN_0");//Modify current configurationvar currentConfiguariton = roleDiagManager.GetCurrentConfiguration();currentConfiguariton.PerformanceCounters.ScheduledTransferPeriod =                         TimeSpan.FromMinutes(5);currentConfiguariton.PerformanceCounters.DataSources.Add            (new PerformanceCounterConfiguration(){    CounterSpecifier = @"\Processor(_Total)\% Processor Time",    SampleRate = TimeSpan.FromSeconds(1)});//Commit the changesroleDiagManager.SetCurrentConfiguration(currentConfiguariton);

 

检索性能计数器数据

  现在,我们已经配置了我们要监视的计数器。让我们访问Azure Storage Table(表名WADPerformanceCountersTable),并显示出来。

  我创建了PerformanceDataContext,派生自这是为了连接到Azure表,Microsoft提供的ADO扩展的一部分。你可以使用LINQ查询以检 索数据。

/// /// Query helper for retrieving data from the WADPerformanceCountersTable/// public class QueryExecuter{    ///     /// Cloud storage account client    ///     private CloudStorageAccount accountStorage;    ///     /// Default Constructor - Use development storage emulator.    ///     public QueryExecuter()    {        accountStorage = CloudStorageAccount.DevelopmentStorageAccount;    }    ///     /// Constructor    ///     /// Azure storage name    /// Azure storage private key    public QueryExecuter(string accountName, string privateKey)    {        accountStorage = CloudStorageAccount.Parse(String.Format(          "DefaultEndpointsProtocol=https;AccountName={0};AccountKey={1}", account    }    ///     /// Retrieve Performance counter data    ///     /// Counter specifier full name    /// Deployment id    /// Role name    /// Role instance name    /// Start sample date time    /// End sample date time    /// 
public List
QueryPerformanceCounter(string counterFullName, string deploymentid, string roleName, string roleInstanceName, DateTime startPeriod, DateTime endPeriod) { PerformanceDataContext context = new PerformanceDataContext( accountStorage.TableEndpoint.ToString(), accountStorage.Credentials); var data = context.PerfData; CloudTableQuery
query = null; query = (from d in data where d.PartitionKey.CompareTo("0" + startPeriod.Ticks) >= 0 && d.PartitionKey.CompareTo ("0" + endPeriod.Ticks) <= 0 && d.CounterName == counterFullName && d.EventTickCount >= startPeriod.Ticks && d.EventTickCount <= endPeriod.Ticks && d.DeploymentId == deploymentid && d.Role == roleName && d.RoleInstance == roleInstanceName select d).AsTableServiceQuery
(); List
selectedData = new List
(); try { selectedData = query.Execute().ToList
(); } catch { } return selectedData; }}

此演示,我创建了一个WindowsForm,将Diagnostics Table中的数据填充到图表中。

显示的是过去2个小时内,某一个Role Instance的CPU使用率。

 

第三方工具

Quest 软件公司开发了一个非常方便和容易使用的工具。称为。为我们对整个Azure订阅提供了深度监控的功能,包括Role Instance,数据聚合,历史数据展示,提醒机制,用户自定义深度分析计数器。

 

 

 

分类: 
本文转自Lei Zhang的博客博客园博客,原文链接:http://www.cnblogs.com/threestone/archive/2012/06/17/2552502.html,如需转载请自行联系原作者
你可能感兴趣的文章
服务化改造实践 | 如何在 Dubbo 中支持 REST
查看>>
Logwatch linux日志监视器解析
查看>>
【第8章】JVM内存管理
查看>>
easyui datagrid plunges 扩展 插件
查看>>
ubuntu Resource temporarily unavailable (Could ...
查看>>
华为8.0系统机器最简单激活XPOSED框架的教程
查看>>
数组的 基本操作 【增删查改】
查看>>
IT兄弟连 JavaWeb教程 AJAX常见问题
查看>>
感谢,终于有人把云计算、大数据和人工智能讲明白了!
查看>>
FtpUtil
查看>>
swift中的新特性
查看>>
本地新建代码如何推送到远程git上
查看>>
Maven3 上传第三方jar(无源码)
查看>>
坦克大战游戏源码
查看>>
mac 无法使用 pip easy_install指令
查看>>
无限极递归树的一个实现
查看>>
postgresql 9.3 和 产品发布
查看>>
detailview Kartik-v 美好界面的操作
查看>>
《Kali Linux 渗透测试技术详解》笔记之 nessus 学习纪要
查看>>
my.cnf
查看>>