httpレスポンスタイムの内訳をグラフにしてみた


はじめまして。3月に入社した年寄りの新人です。

小ネタとしてツールを作ってみましたので紹介します。

Webサーバの応答がちょっと遅いな?とか思ったときにどこで引っかかっているのか大まかにでもわかると切り分けの役に立つと思います。muninのプラグインとしてすでにhttpingプラグインがありますが、もっと細かな情報が知りたいこともありますよね?今回はcurlの-wオプションを使ってmuninのプラグインを作ってみました。curl の-wオプションは以下のように使います。

$ curl -s -o /dev/null -w “%{time_namelookup}\n” http://www.dmm.com

とすると名前解決にかかった時間を表示してくれます。詳しくはマニュアルを参照して頂くとして使える変数と大まかな意味を図示するとこんな感じです。

これClipboard01

 

コマンドで返される値を使ってmuninのプラグインを作りました。作成にあたっては先ほどのhttpingプラグインを参考にさせていただきました。大変感謝しております。このプラグインを使い色々なページのレスポンスを見てみるとどこに時間がかかっているかわかります。(チェックは5分に1回なので許してね)。こちらは比較的軽いページの結果です。

www.dmm.com

こちらは上に比較すると画像データが多く、表示に少々時間のかかるページです。

www.amazon.co.jp

いかがでしょう?プラグインのソースは以下のようなものです。

#!/bin/sh
: << =cut

=head1 NAME

curl_httpresp - Plugin to monitor http response time (with curl)

=head1 AUTHOR

Copyright 2014 "tsutii"

=head1 LICENSE

ISCL

=head1 MAGIC MARKERS

 #%# family=auto
 #%# capabilities=autoconf

=cut

. $MUNIN_LIBDIR/plugins/plugin.sh

URL=${URL:-"http://localhost/"}
curl_bin=$(which curl)
if [ "$1" = "autoconf" ]; then
echo yes
exit 0
fi
#
if [ "$1" = "config" ] ; then
echo "graph_args -r --lower-limit 0 ";
echo "graph_title http response $URL";
echo "graph_category http-response";
echo "graph_info HTTP response time: $URL";
echo 'graph_vlabel sec'
echo "total.label total time"
echo "total.draw AREA"
echo "total.type GAUGE"
echo "total.info total time"
print_warning total
print_critical total
echo "starttransfer.label startransfer time"
echo "starttransfer.draw AREA"
echo "starttransfer.type GAUGE"
echo "starttransfer.info startransfer time"
print_warning starttransfer
print_critical starttransfer
echo "pretransfer.label pretransfer time"
echo "pretransfer.draw AREA"
echo "pretransfer.type GAUGE"
echo "pretransfer.info pretransfer time"
print_warning pretransfer
print_critical pretransfer
echo "redirect.label redirect time"
echo "redirect.draw LINE1"
echo "redirect.type GAUGE"
echo "redirect.info redirect time"
print_warning redirect
print_critical redirect
echo "appconnect.label appconnect time"
echo "appconnect.draw LINE1"
echo "appconnect.type GAUGE"
echo "appconnect.info time to appconnect time"
print_warning appconnect
print_critical appconnect
echo "connect.label connect time"
echo "connect.draw AREA"
echo "connect.type GAUGE"
echo "connect.info time to connect time"
print_warning connect
print_critical connect
echo "namelookup.label namelookup time"
echo "namelookup.draw AREA"
echo "namelookup.type GAUGE"
echo "namelookup.info time to namelookup"
print_warning namelookup
print_critical namelookup
exit 0
fi
#
$curl_bin --location --output "/dev/null" -s -w \
"namelookup.value %{time_namelookup}\n"\
"connect.value %{time_connect}\n"\
"appconnect.value %{time_appconnect}\n"\
"pretransfer.value %{time_pretransfer}\n"\
"redirect.value %{time_redirect}\n"\
"starttransfer.value %{time_starttransfer}\n"\
"total.value %{time_total}\n" $URL

このプラグインはmunin-nodeから実行されます。

  • チェック対象のURLはhttp://www1.example.co.jp/, http://www2.example.co.jp/
  • muninのプラグインの置き場所は/usr/share/munin/plugins/以下
  • muninの設定ファイルは/etc/munin/以下

という条件では以下の設定で使えるようになります

  1. プラグインの置き場所の/usr/share/munin/plugins/に 上のプラグインをhttpresp_curl_ のような名前で置いて実行属性を与えておく
  2. /etc/munin/plugin-conf.d/httpresp_curl というファイルを作る。内容は以下の通り
  3. [httpresp_curl_www1.example.co.jp]
      env.URL http://www1.example.co.jp/

    [httpresp_curl_www2.example.co.jp]
      env.URL http://www2.example.co.jp/
  4. /etc/munin/plugins/ 以下にプラグインへのシンボリックリンクを作る。シンボリックリンクの名前はhttpresp_curlで[ ]の中に記述した名前にする。
  5. # cd /etc/munin/plugins
    # ln -s /usr/share/munin/plugins/httpresp_curl_ httpresp_curl_www1.example.co.jp
    # ln -s /usr/share/munin/plugins/httpresp_curl_ httpresp_curl_www2.example.co.jp

以上です

«
»

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Optionally add an image (JPEG only)