Azureの小ネタ (改)

~Azureネタを中心に、色々とその他の技術的なことなどを~

Windows Azure Diagnostics パフォーマンスカウンタ編

昨日に引き続き、Windows Azureのログ関連の話題でパフォーマンスカウンタ。
とりあえずコードの紹介から。

パフォーマンスカウンタは、 PerformanceCounterConfiguration インスタンスを作成し、そのインスタンスに、取得したいパフォーマンスカウンタの文字列と、サンプリングレートを設定し、PerformanceCountersのデータソースにAddすることで、取得することができます。
以下は、サンプルトして5秒単位という短い間隔で取得していますが、通常は分単位でしょうか。


パフォーマンスカウンタとして取得できるものは、コマンドプロンプトで typeperf /q とすることで一覧が取得できますが、これがそのままAzureで取得できるのかは不明。

    // Monitorの取得
    var mconfig = DiagnosticMonitor.GetDefaultInitialConfiguration();
    // CPU パフォーマンスカウンタ
    var cpu = new PerformanceCounterConfiguration()
    {
        CounterSpecifier = @"\Processor(_Total)\% Processor Time",
        SampleRate = TimeSpan.FromSeconds(5),
    };
    // メモリ パフォーマンスカウンタ
    var mem = new PerformanceCounterConfiguration()
    {
        CounterSpecifier = @"\Memory\Available Mbytes",
        SampleRate = TimeSpan.FromSeconds(5),
    };

    // データソースに追加
    mconfig.PerformanceCounters.DataSources.Add(cpu);
    mconfig.PerformanceCounters.DataSources.Add(mem);

    // 転送間隔の設定
    mconfig.PerformanceCounters.ScheduledTransferPeriod = TimeSpan.FromSeconds(30);

    // モニタ開始
    DiagnosticMonitor.Start("DiagnosticsConnectionString", mconfig);


パフォーマンスカウンタは、WASDPerformanceCountersTableに出力されます。
Timestampは、転送されてEntityとして追加された時間なので、パフォーマンスカウンタの取得時間としては、EventTickCountを参考にする。あとは、CounterNmaeと、CounterValueが取得したいデータそのもの。ただし、全部混ざって出力されてしまうので、なんとかする必要がある。
EventTickCountの値は、DateTime.FormBinaryメソッドで変換できる。

Console.WriteLine (DateTime.FromBinary(634158331190590000));



いくつかの手番を経て Excelにてピボットグラフ化したものが以下。とくに何もしていない
Webロールなんですけど、開始直後はCPUを使っているようです。

3rdパーティツール的には以下のAzure Diagnostic Manager が便利そうなんですけど、$70弱なんで試してません。
http://www.cerebrata.com/products/AzureDiagnosticsManager/Default.aspx