Webプロキシ利用率のSquid Graphを用いた確認Leverage OSS

Webプロキシとして人気の高いSquidだが、プロキシアクセスおよび転送に関する統計情報をWebページ形式で表示するSquid Graphと組み合わせれば、Squidの設定が最適化されているかが簡単に可視化できる。

» 2009年01月28日 06時00分 公開
[Ben Martin,SourceForge.JP Magazine]
SourceForge.JP Magazine

 Squid Graphは、手元のSquidプロキシサーバのaccess.logファイルに記録されたログを基にして、キャッシュのヒット数やキャッシュのみで処理されたリクエストの比率といった、プロキシアクセスおよび転送に関する統計情報をWebページ形式で表示するためのPerlスクリプトである。こうしたSquid Graphの機能は、Squidの設定が最適化されているかという確認をする際に役立つはずだ。

 Squidのキャッシュが有効に機能しているかのそのほかの確認法としては、Simple Network Management Protocol(SNMP)のサポート設定をSquidに施した上で、Multi Router Traffic Grapher(MRTG)やCactiを用いたSquidのモニタリングをSNMPを介して実行するという手法も存在する。これに対して本稿で解説するSquid Graphの持つアドバンテージは、セットアップの手順が非常に簡単で、SNMPにかんする知識やほかのサーバをインストールする負担が不要というものだが、求める情報を取得するに当たって、Webページ形式ではないコマンドライン操作をある程度必要とするのが欠点といえるだろう。

 Squid Graphの使用に当たっては、事前にPerlおよびperl-GDをインストールしておかなくてはならない。Squid Graph本体のインストールは、必要であれば/usr/localディレクトリにコピーしておいてもいいが、あるいはより単純に./squid-graphというコマンド指定で起動させるというオプションも存在する。

 Squid Graphを実行する際には、対象となるログ情報を記録したSquidのaccess.logファイルだけでなく、その内容をグラフィカル化した統計情報をWebページとして書き出すディレクトリ名も指定しておく必要がある。access.logファイルを新規に作成してログ情報を蓄積させていくという場合は、後記の手順によるsquid.confファイルの変更も必要となる。


# vi /etc/squid/squid.conf
...
access_log /var/log/squid/access.log squid
...

 後記のサンプルコマンドは、過去24時間分におけるSquidサーバの統計情報を表示せよという指定に相当する。その実行結果として/tmp /squid-graphからindex.htmlが読み込まれると、1つ目に掲載したスクリーンショットのような画面が表示されるはずだ。


$ mkdir -p /tmp/squid-graph
$ ./squid-graph --output-dir=/tmp/squid-graph < /var/log/squid/access.log

Squid Graph Squid Graph

 この実行例の場合、スクリーンショット右側にある統計値を見てみるとリクエストの約45%はキャッシュで処理されており、個々のリクエストに対するSquidキャッシュの利用率はまずまず良好と評していいだろう。ただしTCP転送(TCP Transfers)にかんしては、キャッシュで処理されるトラフィックが20%程度にしか達していないので、より大型のファイルもキャッシュさせるよう設定を変更した方がよいかもしれない。

 ブルーのラインで示されたトータル転送量(Total Transfers)のグラフにおける22時過ぎの突発的な急増(スパイク)からは、このタイムフレームで一部のファイルがキャッシュで対応できなかった可能性が示唆される。これに該当する候補として考えられるのは、以前にダウンロードされたことのないファイルか(そうしたものはキャッシュでの処理は不可能)、Squidがキャッシュしていなかったファイルだ。そして実際にどちらのケースに属していたかを確認するには、access.logを調べるしかない。

 先の指定によるSquid Graphの出力では、TCPだけでなくUDPのトラフィックに関するグラフも生成される。UDPトラフィックが使われるのは、ほかのWebキャッシュから手元のSquidサーバが使用される場合だけなので、UDPグラフが不要であればsquid-graphの実行時に--tcp-onlyという指定をつけ加えておけばいい。

 2つ目に掲載したスクリーンショットのように、時間経過に対する累積値を示す統計グラフを生成させるには--cumulativeオプションを指定する。わたし個人の好みとしては、先に見たスパイク型グラフよりも累積型グラフの方が扱いやすいと感じているが、それはグラフ上に描かれるラインが過度に交差しないため、個々の情報を見分けやすくなっているからだ。実際2つ目のスクリーンショットを見ると、先と同様にブルーのラインで示されたトータル転送量(Total Transfers)のグラフは22時30分付近で突如上昇しているが、レッドのラインで示されたキャッシュのヒット数(Cache Hits)はそれほど急増していないと簡単に読み取ることができる。

Squid Graphの累積型グラフ Squid Graphの累積型グラフ

 デフォルト設定下のSquid Graphが生成するのは過去24時間分の情報を集計したグラフだが、これと異なる時間帯を指定するには--startまたは--endオプションを指定する。ただしその指定値にはUNIX時刻(協定世界時の1970年の始まりを基点とした秒数)を使わなくてはならない点が若干不便だが、この種の計算はGNUのdateコマンドで処理できるはずだ。dateコマンドでは、後記のように-dオプションをつけることで現在のシステム時刻以外の時間情報を出力させることもできるし、末尾にフォーマット用のオプションをつけることで日付の出力形式を指定することもできる。そしてここで必要となるUNIX時刻の出力をさせるには%sオプションを指定すればいい。


$ date -d "2006-11-20"
Mon Nov 20 00:00:00 EST 2006
$ date -d "2006-11-20" +%s
1163944800

 例えば後記のサンプルコマンドは、2006年11月20日に関する統計情報をsquid-graphに表示させるための指定だが、ここでは該当する時間帯の情報がaccess.log.2006に格納されていることを前提としている。


$ ./squid-graph --cumulative --start=$(date -d "2006-11-20" +%s) --output-dir=/tmp/squid-graph < /archives/squid/access.log.2006

 なお残念ながら--startと--endのオプションは同時に使用できないので、この種の日付指定をする場合の時間枠は常に24時間分となる。

 Squid Graphの持つ特長の1つは、ごく短時間のインストール作業だけで即座に使用開始できることだとしていいだろう。確かに同種ツールの中には機能的により充実したものも存在するが、極めて簡単なセットアップでSquidサーバの動作状況を手軽に確認できるという点では、Squid Graphに比肩するツールはそうそう簡単には見つからないはずだ。

Ben Martinは10年以上にわたってファイルシステムに取り組んでおり、博士課程の修了後、現在はlibferris、ファイルシステム、検索ソリューションを中心としたコンサルティング業に従事している。


ビジネスの最前線で使われている各種オープンソースソフトウェアを紹介した「Leverage OSS」コーナーにどうぞ


Copyright © 2010 OSDN Corporation, All Rights Reserved.

注目のテーマ