コンピュータのモニタリングには、多種多様な方法がある。大規模なシステムには、プロプライエタリの大がかりなアプリケーションを適用してもよいだろう。ソフトウェアや、システムの微調整を行うコンサルタントに費用をかけられるからだ。NagiosやOpenNMSなどのオープンソースのモニタリングツールは、入手はタダだが、計画や微調整はやはり必要になる。システム上のプロセスデータに関するやや小さな問題に対処したい場合には、プロセスモニタリングツールである ps-watcher が便利だ。
ps-watcherは、ある1つの作業に特化して、それをうまく処理してくれるUnixツールの1例である。システム上のすべてのプロセス情報にアクセスし、その情報に基づいた選択を行うことを可能とする。ps-watcherは、異なるUnixおよびLinuxマシン上のさまざまなプロセス情報に対し、一貫したインターフェースを提供する(ただし、注意を要する部分あり)。
ps-watcherは、最初からシステムに含まれてはいないかもしれないが、これをインストールするのは簡単である。ソースコードをダウンロードし、「configure; make; make install」というお決まりのコマンドを実行する。ps-watcherをroot権限でインストールまたは実行する必要はないが、実行したい処理によってはrootで起動するか、sudoコマンドを使用する必要があるかもしれない。簡単なモニタリングや警告のためだけならば、任意のユーザでps-watcherを実行することができる。システム要件は特にないため、任意のUnix系システムにインストールし、稼働させることができるはずだ。
インストールを終えたら、構成ファイルを作成する。構成ファイルには、psコマンドの出力に基づくps-watcherのレポート内容に対する、モニタリングや操作のための規則を記述する。構成ファイルの他にも、ps-watcherの動作を微調整したり、デバッグを支援したりするためのコマンドラインオプションを指定することができる。
簡単な例
ps-watcherは、メモリ溢れによるマシンのクラッシュを防ぐことができる。つまり、バグによって同一プログラムのコピーが多数実行される現象を回避する。基本的な使用例の1つは、あるプログラムが稼働していることを保証するというものである。たとえば、正確な時刻を維持するためのNetwork Time Protocolデーモンntpdのコピーが、CentOS Linuxサーバ上に1つだけ存在するようにしたい場合を考える。ntpdを継続的に稼働させるのは、それほど容易というわけでもない。たとえば、システム時間と基準時間が大きく異なる場合は、起動直後に停止してしまう。ntpdを継続的に稼働させるための方法の1つは、任意の時点において少なくとも1つのntpdが稼働していることをps-watcherによって保証することである。以下の内容からなるps-watcher.cfgファイルを作成する。
[ntpd] occurs = none action = /etc/init.d/ntpd restart
角括弧に囲まれた1行目は、psの出力におけるcmdフィールドとマッチングさせるための正規表現である。特定のプロセスが稼働していることをモニタリングし、かつ、そのプロセスがある条件を満たす場合には何らかの操作を行う、という記述をしたい場合には、同一のプロセス名で2度マッチングさせたいと思うかもしれないが、ps-watcherでは、1つの構成ファイル内で同一のプロセス名に複数回マッチさせることはできないようになっている(このための方法については、後ほど説明する)。この場合の回避策としては、"ntpd"と"ntp"など、少し異なる正規表現にマッチさせるという手段をとるしかない。2行目(occurs=none)は、マッチするプロセス名がなければaction行を実行するようにps-watcherに指示している。occurs行は、アクション行の実行頻度を制御する。noneの場合は、マッチするものがなければアクションを実行し、everyの場合は、マッチしたすべてに対してアクションを実行する。指定可能なその他の値については、ps-watcherのmanページを参照してほしい。
この構成ファイルを使用するには、(rootで)ps-watcherを起動し、「ps-watcher --config ps-watcher.cfg」というコマンドによってこの構成ファイルを指定する。ps-watcherは自動的に自分自身をデーモン化し、定期的に再実行する(デフォルトでは5分おき)。ps-watcherが常に稼働されるようにするには、/etc/rc.localに1行追加して、ブートの度にこれが起動されるようにする。
