昨日に引き続き、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