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

 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

squidgraph1_thumb.png
Squid Graph

 この実行例の場合、スクリーンショット右側にある統計値を見てみるとリクエストの約45%はキャッシュにて処理されているので、個々のリクエストに対するSquidキャッシュの利用率はまずまず良好と評していいだろう。ただしTCP転送(TCP Transfers)に関しては、キャッシュにて処理されるトラフィックが20%程度にしか達していないので、より大型のファイルもキャッシュさせるよう設定を変更した方がよいかもしれない。また、ブルーのラインで示されたトータル転送量(Total Transfers)のグラフにおける22:00過ぎの突発的な急増(スパイク)からは、このタイムフレームにて一部のファイルがキャッシュで対応できなかったであろう可能性が示唆される。これに該当する候補として考えられるのは、以前にダウンロードされたことのないファイルか(そうしたものはキャッシュでの処理は不可能)、Squidによりキャッシュされなかったファイルだ。そして実際にどちらのケースに属していたかを確認するには、access.logを調べるしかない。

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

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

squidgraph2_thumb.png
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、ファイルシステム、検索ソリューションを中心としたコンサルティング業に従事している。

Linux.com 原文(2008年12月5日)