本サイトに記載している情報は〜2003年ころまでのものです。最新の情報ではありませんのでご注意ください。

◆spongも使ってみよう

前述の SNMP + MRTG で サーバーの状態を監視する方法の場合、
ネットワークトラフィックやメモリの使用量などをグラフで見れるのは良いのですが
特定のサービスが動いているかどうかだけを表示するには逆に不便です。

そのような目的には、spongというフリーソフト(GPLisence)がぴったりでしょう。

http://spong.sourceforge.net/

基本的な機能としては、apache と spong-server、spong-client、spong-networkを使用して、
ネットワーク越しに各種サービスが動作しているかどうか、および CPU負荷やDISK使用率が
設定値を越えていないかどうかをWebブラウザからチェックできるようになっています。

ちなみに、apacheなしで(コンソールで)チェックすることもできます。

Table Shot
spong出力結果のWeb画面はこんな感じ
(緑...正常、黄色...警告、赤...障害)


◆spongの構成

spongの実行ファイルは 下記のperlスクリプトから構成されています。
いずれも常駐して動作するので、MRTG のように cronを設定する必要はありません。

・spong-server
全体を制御するサービス。(普通はhttpdが動いているマシンで動作させる)

・spong-client
マシンのローカル情報(CPU使用率、DISK使用率など)をチェックし、情報をspong-serverへ送る。

・spong-network
監視したい対象マシンのネットワークサービスへアクセスし、サービスが生きているかどうかをチェックする。
 (普通はspong-serverと同じマシンで動作させる)

・www-spong
spongで取得した情報を Webページとして見るためのCGIスクリプト。
通常はspong-serverと一緒に、httpdが動いているマシン上におきます。

今回構築した環境は、監視対象イコールWebサーバー(ようするにマシンは1台のみ)なので
上記の実行ファイルは全部同じマシン上で動作させることになります。

なお、www-spongなどで perlのCGIモジュールが use されており、あらかじめ
perl本体だけでなく標準モジュールもインストールされている必要があります。
( perlの5.6以上?くらいなら、CGIモジュールは標準で入っているはず )


◆spongのインストール

spongのインストールは特に難しくないのですが、ちょっと独特なので
一通りAdmin-guideに目を通しておいたほうが良いでしょう....英語ですが。

と思ったら、Admin-guide(ver.2.7)と ver 2.7.7配布セット中の INSTALL ファイルで
書いてあることが違いますね(汗)。

Admin-guide の ./build を使う方法でもインストールは可能ですが、手順としては
INSTALLファイルに載っている make コマンドを使うやり方のほうが簡単です。

しかも.... ver 2.7.7の INSTALL ファイルには ./build 実行前に spong.conf-sample をリネームコピーしておけと書いてある...
これをせずに Admin-guideの通りインストールすると、デフォルトでは全く役に立たない spong.confが作成されます(体験談)。
>_<;

大まかなセットアップの流れとしては、次のようになります。

(1) spongを特定ユーザーで実行させる場合は ユーザーを作っておく(必須ではない)。
(2) spongのインストール( config.mk を編集して make )
(3) spong.conf と spong.hosts の編集
(4) apacheの設定
(5) 監視項目によっては、spongの実行ファイル(perlスクリプト)の修正も必要

config.mk の必須編集項目としては、OS種類、perlのパスあたりでしょうか。
指定可能なOSの種類は、配布セットの展開先ディレクトリで

> ./build help

を実行するとリストが表示されるので、その中から選びます。
残念ながら netbsd は無いのですが、bsdi または freebsd を選べば問題ないと思います。

freebsdとの違いは uptimeコマンドに関する部分( $UPTIME )ですが、NetBSD/PC-98 1.4.3aでは
どっちでも同じみたいです。 ちなみに、私はbsdiを選びました。

その他の項目は、インストール後に spong.conf を直接変更したほうが早いかも知れません。
(コメントが少なくて、それぞれ何を設定するのかが分かりにくいと思うので)
cpong.confの設定項目については Webサイトにspong.confの説明があります。


◆spong.confの設定

私は spong のインストールを admin-guide に沿って行ったため、spong.conf の設定に
えらい苦労しましたが、ちゃんとインストールしていれば デフォルトの spong.conf で
問題なく動くらしいです(汗)。

配布セットの spong.conf.bsdi と同じ内容からスタートして、
ドキュメントを読みながら必要な項目を全部手作業で追加しました。
(-_-)

ちなみに、ドキュメント中に「 $XXXXのデフォルト値はxxxx 」と書いてあるのは spong.conf-sample の値の事で、
設定の記述を省略すると値がxxxxになるという意味ではありません。
デフォルト値でいいやと思って設定を省略すると動作しないです。
もちろんそんな事態になるのは インストール方法を間違った(私のような)場合だけだと思いますが...

spong.conf ファイル中に設定した値は、各実行ファイル(perlスクリプト)で そのまま
記号定数として使用されます。 ( perlなので記号定数と言っても普通の変数ですが )
逆に言えば、値の指定方法などで迷ったら、spong-client などのスクリプトを直接追ってみる、
という手が使えるわけです。

Web表示関連で、インストール後にカスタマイズしておくと良さそうな項目は
次のあたりでしょうか。

$WWW_USE_IMAGES = 1;
Web画面での正常/障害表示に画像を使用する。

$DATEFMT = "%Y/%m/%d";
年月日の書式を 2003/01/04 に(デフォルト 01/04/03 だと日本人には分かりにくい) 。

spong-client に監視させる内容の設定に関しては
spong-clientのドキュメントにも目を通した方が良いでしょう。
( たとえば、$CHECKS に関する説明は、spong.conf のドキュメント中にはありません )

なお、NetBSD/PC-98に対して spong-client で memory使用量を監視する場合は、
後述のように spongプラグインの check_memory モジュールを修正する必要があります。

つづく?


【備忘録】:spong-clientのplugin check_memory をNetBSD用に書き換えたところ (後日文書化)

# for NetBSD/PC-98
# Please write into spong.conf ( refer to dmesg | grep mem )
# $MEMREALTOTAL = "xxxM";
#

(中略)

  } elsif (/^Memory:$kmb Act,$kmb Inact,$kmb Wired,$kmb Free,$kmb Swap,$k
mb Swap free/) {
  # for NetBSD/PC-98 1.4.3
($memact,$meminact,$memfree,$swapused,$swapfree) = ($1,$2,$4,$5,$6);
&to_KB($memact,$meminact,$memfree,$swapused,$swapfree);
  $hardmemused = $memact+$meminact;
  $swaptotal = $swapused+$swapfree;
  if ( ! defined $MEMREALTOTAL ) {
    $memtotal = $hardmemused+$memfree;
  } else {
    $memtotal = $MEMREALTOTAL;
    &to_KB( $memtotal );
  }

ちなみに メモリのInactとかWiredの意味が良くわかりません(汗)


◆spong.hostsの設定


****** 注:2008/08 ******
以下の文書はかなり古いものなので、参考にする場合は注意してください。
(ふ〜ん。昔はこうだったのか〜、って程度に)
*************************

spong.hosts では、主に spong-network での監視項目を設定します。
ただし、その設定内容は spong-server、spong-clientにも影響します。

要するに、spong.conf と spong.hosts の両方をちゃんと設定しないと動かないです。

%HOSTS は、監視対象のホスト名 と 監視するサービス、および そのサービスへのアクセスに
必要な情報を設定するハッシュ(というか構造体)です。

サンプルの記述を参考にすれば 設定自体は難しくないのですが、実用上の落とし穴(?)として
localhost を指定するとうまく動作しないという問題があります。
(1台のマシンで自分のみを監視する場合であっても、%HOSTS には ホスト名を記述しないといけません)

具体的には...
spong-server と spong-network は spong.hosts で設定した localhost を監視対象と認識するのですが、
spong-client は 監視対象(自マシン)のホスト名を Sys::Hostname から独自に取得するため、
localhost ではなく「ホスト名」の情報として spong-server にデータを送ってしまいます。
これを受けた spong-server は、client からの情報を localhost とは別のマシンの情報と認識し、結果的に
無効な情報とみなしてしまう訳です。

監視するネットワークサービスの設定については、spong.hostsの説明に記載されている項目以外にも、
インストール先の ./lib/Spong/Network/plugins/ に入っている(あるいはダウンロードして入れた)
モジュールが利用できます。

これらの追加モジュールの使用方法は、たとえば snmp サービスをチェックする check_snmp の場合、
モジュールのスクリプト中で定義されている

$PLUGINS{ 'snmp' } = \&check_snmp;

のキー文字列 snmp を、spong.hosts の %HOSTS に追加し、snmpアクセスに必要な情報を
追記してやればOKです。 check_snmp の利用の詳細については
ドキュメントがあります。

ただし...実際には、check_snmp は mrtg のモジュールを使用しているので、mrtg がインストール済みで かつ
mrtg2 モジュールがperlにインクルードされていないと使えません。
私は spong-network に use lib "/usr/local/mrtg-2/lib"; を追記して使ってます。

ほかのプラグインを使いたい場合も 同様の手順になりますが、spong の各実行ファイルごとに
プラグインの配置場所が異なっています。

spong-client は ./lib/Spong/Client/plugins/
spong-server は ./lib/Spong/plugins/


◆apacheとの連携

(工事中)


トップページに戻る