しばやん雑記

ASP.NET とメイドさんが大好きなフリーランスのプログラマーのブログ

Windows Azure Web サイトの診断あれこれ

きっかけは開発していたサービスが Windows Azure Web サイト上で CPU を 100% 使っていたことでした。

Web サイトは仮想マシンやクラウドサービスと違って、リモートデスクトップで直接調べることが出来ないので、どうしたものかと思って Twitter で聞いてみたところ、中の人である河野さんからお返事を頂きました。

なるほど、Web サイトの Git デプロイエンジンである Kudu に診断系の API が用意されているようです。

Process list and minidump · projectkudu/kudu Wiki · GitHub

wiki にはエンドポイントに関する情報が無いですが、Web サイトの場合では Kudu のエンドポイントは dnsname.scm.azurewebsites.net になっているみたいです。*1

アクセスするためには認証が要求されるので、デプロイ資格情報で設定したユーザー名とパスワードを入れるとログインできます。

f:id:shiba-yan:20130730025014p:plain

dnsname.scm.azurewebsites.net/diagnostics/processes を叩くと JSON でプロセス一覧が取れたり、更に API を叩くことで指定したプロセスの情報など、かなり取れるようになっています。

例えば IIS のワーカープロセスの情報は以下のような JSON が取得出来ました。

{
  "id": 25340,
  "name": "w3wp",
  "href": "http://wsoembed.scm.azurewebsites.net/diagnostics/processes/25340",
  "minidump": "http://wsoembed.scm.azurewebsites.net/diagnostics/processes/25340/dump",
  "parent": "http://wsoembed.scm.azurewebsites.net/diagnostics/processes/13880",
  "children": [
    
  ],
  "file_name": "D:\\Windows\\SysWOW64\\inetsrv\\w3wp.exe",
  "handle_count": 636,
  "module_count": 171,
  "thread_count": 46,
  "start_time": "2013-07-29T16:50:50.1249335Z",
  "total_cpu_time": "00:00:04.2812500",
  "user_cpu_time": "00:00:03.3906250",
  "privileged_cpu_time": "00:00:00.8906250",
  "working_set": 73412608,
  "peak_working_set": 73433088,
  "private_working_set": 31424512,
  "private_memory": 63037440,
  "virtual_memory": 734519296,
  "peak_virtual_memory": 734584832,
  "paged_system_memory": 556600,
  "non_paged_system_memory": 84218,
  "paged_memory": 63037440,
  "peak_paged_memory": 63037440
}

そして minidump に記載されている URL を叩くと、本当にワーカープロセスのミニダンプファイルをダウンロードできます。

f:id:shiba-yan:20130730025823p:plain

Web サイトは本当にダウンタイム無しで WS2008R2 から WS2012 にアップグレードしてたんですな。*2

しかし、API しか用意されていないのは非常にめんどくさいなーと思って検索していたら、以下のブログ記事が見つかりました。

Using Kudu to capture hang dumps for Windows Azure Web Sites - AsiaTech: Microsoft APGC Internet Developer Support Team - Site Home - MSDN Blogs

実際はわざわざ API を手動で叩かなくても、Kudu のエンドポイントにブラウザから簡単に使える診断ログのダンプや、コンソールなどの機能が用意されていました。

f:id:shiba-yan:20130730022500p:plain

コンソールからは cd や dir などの基本的なコマンドの他に、PowerShell を使ったプロセス一覧だけは使えるようになっているみたいです。

f:id:shiba-yan:20130730024049p:plain

管理ポータルからだと CPU 時間やメモリ使用量などは遅れたものしか見れないですが、Kudu のコンソールからコマンドを叩けばすぐに見れて便利ですね。

仮想マシンやクラウドサービスほどではないですが、Web サイトで動かすレベルのアプリであれば十分な診断機能だと思います。

*1:つまり wsoembed.com なら wsoembed.scm.azurewebsites.net になる

*2:ARR 3.0 へのアップグレードもやってくれるはず…!