0

我知道 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 页面的下方是我想使用的另一个计数器:Network Interface(*)\Bytes Received/sec

我尝试创建性能计数器:

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

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

这也不起作用:

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

直接在 Azure 中使用性能计数器是否令人不悦?

4

1 回答 1

1

您在这里遇到的问题与 Windows Azure 无关,而是与一般性能计数器有关。顾名思义,Network Interface(*)\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);
    ...
}
于 2012-05-14T10:47:04.883 回答