◆HTTPingプラグインを書きました
「ウェブサーバが重いゾ( ゚Д゚)ゴルァ!!」 という時って、結構ありませんか。
開発(Dev)曰く、「アプリじゃなくて、インフラ側がおかしくね?」
運用(Ops)曰く、「サーバやネットワークは問題ないよ。アプリの実装がおかしくね?」
dev と ops の境界線上の事象。そんなときにお互い責め合うのではなく、原因切り分けに役立ちそうな Munin のプラグインをご紹介。というか、書きましたのでGitHubに公開しました。
これは httping という、コマンドラインツールを使います。httpinigはHTTPサーバ(ApacheやNginxなどなど)のレイテンシやスループットを計測するツールです。
オプションで Web サーバへの接続時間( connect time ) と、実際に処理及びデータを返す時間 ( processing time) を別々に取得し、 Munin 渡してグラフを描画します。
これを使えば、サーバが重いのは「インフラ側」なのか「アプリ側」なのか、どちらに原因があるのかハッキリすることが出来ます。
例えば、上のグラフでは、緑の”connect time”が Apache サーバに接続するまでの時間は平均 1.31 ミリ秒です。一方、青のコンテンツを返し終わるまでの時間 “processing time” は平均223.86ミリ秒です。しかも時折青の部分が伸びて居る部分が多いことがわかります。
このことから「どうも、アプリ側にチューニングの余地があるんじゃないかな?もしかしたら、キャッシュとかデータベースの応答も疑った方がいいよね」という予測に至ると思います。
「なんかウェブが重いみたいなんだけど、とにかく調べなきゃ分からないよね」という時に便利かなと思い、作って見たのがこのプラグインです。実は、チラッと先日のオープンソースカンファレンス 2012 Tokyo/Fall の Munin セミナーでご紹介したプラグインだったりします( ^ω^)
さて、では、実際の導入手順をご紹介します。
◆手順1:httpingをセットアップ
httpingそのもののオプションや、詳細については、去年の書き込みをご覧ください。今回は割愛します。
httping でウェブの応答時間を ping のようにチェックする | Pocketstudio.jp log3
http://pocketstudio.jp/log3/2011/04/23/httping/
まず、httping をダウンロード・セットアップします。(なお、本プラグインは HTTPing 1.5.3 で動作検証しています。古いバージョンでは、出力結果の順序が違うため)
$ wget http://www.vanheusden.com/httping/httping-1.5.4.tgz $ tar xfz httping-1.5.4.tgz $ cd httping-1.5.4 $ make # make install
これで /usr/bin/httping にセットアップされます。試しに次のように実行すると、応答状況が確認できます。中断は Ctrl + C です。
$ httping -S http://localhost/
◆手順2:Muninプラグインを設置する
httpingのセットアップが終われば、あとはプラグインを設置するだけです。
- GitHubにあるファイルをプラグインのディレクトリに展開する
- Muninのプラグイン向け設定ファイルを書き換える
- munin-run コマンドでテストする
- munin-node を再起動して、設定を反映させる
この手順でセットアップは完了します。では、順を追って見ていきましょう。
まずは、プラグインをダウンロードし、プラグイン用ディレクトリへの展開、シンボリックリンクの作成を行います。一般的なMuninのプラグインの設置と変わりません。
$ wget --no-check-certificate https://raw.github.com/zembutsu/munin-plugin-httping_/master/httping_
# cp ./httping_ /usr/share/munin/plugins/
# ln -s /usr/share/munin/plugins/httping_ /etc/munin/plugins/httpind_localhost
3行目のプラグインのシンボリック・リンク作成時「httping_localhost」としているのは理由があります。監視対象は1つだけではなく、複数の URL を指定をすることができます。URL 毎にシンボリック・リンクを作成できますので、まずは「httping_localhost」として、自ホストのものを監視対象にしてみます。もちろん、httping_web1 など、別の名前にしても構いません。
次に、Muninの設定ファイルを書き換えます。/etc/munin/plugin-conf.d/munin-node を開きます。
# vi /etc/munin/plugin-conf.d/munin-node
あるいは、plugin-conf.d ディレクトリの中に httping などのファイルを設置しても構いません。
そして、ファイルの中には次のように指定します。
[httping_localhost] env.URL http://localhost/ env.COUNT 5
変数が2つあります。env.URL は監視対象の URL です。env.COUNT は、何回計測するかの指定です。デフォルトでは、それぞれ http://localhost/ および 5 回です。
ファイル設置後は、プラグインの動作テストを行います。次のように実行し、反応があるかどうか確認します。
$ /usr/sbin/munin-run httping_localhost connect.value 0.642 processing.value 0.782
もし何も表示されない場合や、エラーが出る場合は munin-run に –debug オプションをつけると、より詳しい状況確認が可能です。
$ /usr/sbin/munin-run --debug httping_localhost
munin-run の結果が問題無ければ、あとは munin-node の再起動を行うだけでOKです。
# /etc/init.d/munin-node restart Stopping Munin Node agents: [ OK ] Starting Munin Node: [ OK ]
どうですか、うまく表示されましたか?
もし不具合レポートやご要望ありましたら、お気軽にお訊ねください( ^ω^)
早速使わせてもらっています。海外サイトなどが遅いときにも便利そうです。
http_loadtime(munin-node 1.4.5に付属)とマージしたものも作って使っています。
https://github.com/S1100/munin-plugin-httping_
※httpingと計測のやり方が違うのですが一つにまとめたグラフが見てみたく……
Pingback: httpingが不親切でちょっとハマった | 妄想コバンザメ