Azure:使用System.Diagnostics.PerformanceCounter

时间:2012-05-14 09:53:37

标签: azure system.diagnostics performancecounter

我知道Microsoft.WindowsAzure.Diagnostics性能监控。就像使用System.Diagnostics.PerformanceCounter一样,我正在寻找更实时的东西 我们的想法是在AJAX请求时发送实时信息。

使用azure中提供的性能计数器:http://msdn.microsoft.com/en-us/library/windowsazure/hh411520

以下代码有效(或者至少在Azure Compute Emulator中,我没有在Azure的部署中尝试过它):

    protected PerformanceCounter FDiagCPU = new PerformanceCounter("Processor", "% Processor Time", "_Total");
    protected PerformanceCounter FDiagRam = new PerformanceCounter("Memory", "Available MBytes");
    protected PerformanceCounter FDiagTcpConnections = new PerformanceCounter("TCPv4", "Connections Established");

在MSDN页面中再往下是我想要使用的另一个计数器: 网络接口(*)\接收的字节数/秒

我尝试创建性能计数器:

protected PerformanceCounter FDiagNetSent = new PerformanceCounter("Network Interface", "Bytes Received/sec", "*");

但后来我收到一个异常,说“*”不是有效的实例名称。

这也不起作用:

protected PerformanceCounter FDiagNetSent = new PerformanceCounter("Network Interface(*)", "Bytes Received/sec");

是否直接在Azure中使用性能计数器?

1 个答案:

答案 0 :(得分:1)

您在这里遇到的问题与Windows Azure无关,而是与性能计数器有关。顾名思义,网络接口(*)\ Bytes Received / sec 是特定网络接口的性能计数器。

要初始化性能计数器,您需要使用您希望从中获取指标的实例(网络接口)的名称对其进行初始化:

var counter = new PerformanceCounter("Network Interface",
        "Bytes Received/sec", "Intel[R] WiFi Link 1000 BGN");

从代码中可以看出,我正在指定网络接口的名称。在Windows Azure中,您无法控制服务器配置(硬件,Hyper-V虚拟网卡等),因此我不建议您使用网络接口的名称。

这就是枚举实例名称以初始化计数器可能更安全的原因:

var category = new PerformanceCounterCategory("Network Interface");
foreach (var instance in category.GetInstanceNames())
{
    var counter = new PerformanceCounter("Network Interface",
                                               "Bytes Received/sec", instance);
    ...
}