青葉若葉のみぎり、皆様にはますますご健勝のほどお喜び申し上げます。みなさまのサーバーも、なお一層お健やかにお過ごしのことと存じます。
本連載359回 ではMuninを利用したサーバーリソースの可視化を紹介しました。また361回 では柴田さんがSensuを紹介してくれました。サーバーを運用するにあたって、監視と通知を実現してくれる監視システムの存在が必要不可欠なことは、みなさんご理解いただけているかと思います。
監視システムには様々なOSSや商用サービスが存在しますよね。OSSであればNagios、Zabbix、あるいはCactiあたりが定番でしょうか。商用サービスではmackerelなどが最近は話題になりましたね。日本ではZabbixが比較的人気があるように思えます[1] が、実際のところ、何を使ったらよいのかよくわからないという方も多いのではないでしょうか。
筆者も、筆者の用途にとってはZabbixもCactiも少々大袈裟で面倒だなと感じています。そんな筆者がよく使うのが、シンプルに設定と死活監視が行えて、設定はプレーンなテキストファイルをetckeeperの管理下に置けるXymonです。そこで今回は、UbuntuとXymonでサーバー監視を行う方法を紹介します。
Xymonのインストール
Xymonは、いにしえのBig Brotherの流れを汲むサーバー/ネットワーク監視システムです。過去にはbbgen toolkitやhobbitと呼ばれていたこともありますので、懐かしいと感じる方もいらっしゃるかもしれませんね。XymonサーバーのOSにはUbuntu 14.04.1 LTSを使います。14.04.2ではなく14.04.1を選択したのは、デフォルトのカーネルのバージョンとサポート期間が異なるためです。XymonはUbuntu 14.04 LTSのリポジトリにあるXymon 4.3.7ではなく、Ubuntu 15.04からバックポートしたXymon 4.3.17を使います[2] 。これは、より新しいバージョンが使いたかったのと、4.3.7に含まれているApache用設定ファイルがApache 2.2向けで、2.4向けに修正するのが面倒だったというのが主な理由です。
以下のコマンドを実行してください。Xymonサーバーと、依存関係によってXymonクライアントが同時にインストールされます。
$ sudo apt - add - repository ppa : mizuno - as / xymon
$ sudo apt - get update
$ sudo apt - get install xymon
Xymonクライアントのインストール
監視対象のホストには、xymon-clientパッケージをインストールします。前述の通りXymonサーバーは、xymonパッケージのインストール時に、自分自身を監視するためのxymon-clientが同時にインストールされます。
XymonクライアントがXymonサーバーに接続して正しく情報を送るには、XYMONSERVERSとCLIENTHOSTNAMEという2つのパラメータが必要です[3] 。これらは設定ファイル/etc/default/xymon-client内で設定されています。
[3] なおXYMONSERVERSはコメントにある通り、スペースで区切って複数指定することが可能です。エージェントと直接通信するタイプの監視サーバーを複数立てることはあまりないかもしれませんが(逆に外部からポート監視のみをするサーバーを複数立てることはよくあります) 、覚えておくと役に立つかもしれません。
Debian/Ubuntuの場合、xymon-clientパッケージのインストール時に、debconfによってXYMONSERVERSの設定が行われます。Xymonサーバーが自分自身の場合、デフォルトの127.0.0.1のままにしておきましょう。Xymonサーバーとは異なるホストにxymon-clientだけをインストールした場合は、XymonサーバーのIPアドレスを入力してください。
CLIENTHOSTNAMEはサーバーのホスト名から自動的に設定されます。任意の値を設定したい場合は設定ファイルを書き換えるか、以下のコマンドを実行してください。設定値を変更した場合はxymon-clientの再起動も行っておきましょう。クライアントの設定はこれで完了です。実質パッケージをインストールするだけなので、とても簡単ですね。
$ sudo dpkg - reconfigure xymon - client
Xymonサーバーの設定
Xymonの設定ファイルは/etc/xymon以下にまとめて置かれています。その中で、サーバーの設定を記述しているファイルがxymonserver.cfgです。デフォルトのままでもXymonは動作するのですが、以下の項目は確認しておくとよいでしょう。
XYMONSERVERWWWNAME
Xymonサーバーのホスト名です。Xymonから送信されるアラートメールにはWeb UIの該当ページへのリンクが記載されるのですが、そのURLを作成する際にこの変数が参照されます。デフォルト値はlocalhostですので、そのままですと外部から(メールのリンクを辿って)Web UIにアクセスできなくなってしまいます。この変数には外部から到達可能なXymonサーバーのFQDN、もしくはIPアドレスを指定しておいてください。
ALERTCOLORSとOKCOLORS
Xymonは監視対象のステータスをred、yellow、purple、green、blue、clearの6つの色で表します。どの色を正常として、またはアラートとして扱うかがこの変数で、それぞれ色をカンマ区切りで列挙して設定します。デフォルトではred、yellow、purpleがアラートとして扱われます。通常はこのままで構いませんが、場合によってはハマる可能性があります。
たとえば「yellowの時点ではアラートメールを送らない」「 redになったらメールを送る」「 greenに復帰した時にはリカバーメールを送る」という運用をしたいとします。その状態でサーバーのロードアベレージが上下し、ステータスがgreen→yellow→red→yellow→greenと遷移したとしましょう。すると「yellow→red」の段階では当然アラートメールが送信されるのですが、「 red→yellow」の段階ではリカバーメールが送信されません。なぜならyellowはALERTCOLORSに属しているため、この段階では正常復帰と見なされないからです。ならば「yellow→green」の段階でメールが送信されるような気がしますが、これは「redになった時のアラートメール」に対応するリカバーメールですから、「 yellow→green」という遷移ではメール送信がされません。つまり状態遷移のタイミングによっては、リカバーメールが送信されないことが起こりえます[4] 。このように運用のスタイルによっては、yellowをOKCOLORSに含めるなどの変更をする必要があるかもしれません。
MAXMSG_STATUS
Xymonサーバーがクライアントから受け取れるメッセージサイズの設定で、デフォルトは256KBです。監視項目が多いクライアントでは、送信メッセージがこのサイズをオーバーしてしまう可能性があります。もしも/var/log/xymon/xymond.logに「Oversize status msg」のエラーが記録されているようであれば、この数値を増やしてみてください。増やした後はxymondプロセスの再起動が必要です。
監視対象の登録
Xymonサーバーが監視する対象を設定するファイルがhosts.cfgです。1行につき1台の監視対象を記述していく、非常にシンプルな作りになっています。デフォルトでは以下のように、Xymonサーバー自身が登録されています。
#group Servers
127.0 . 0.1 xymon . example . com # bbd http://xymon.example.com
最初のカラムがクライアントのIPアドレスです。2つめのカラムには、そのクライアントのCLIENTHOSTNAMEに設定された値を入力します。ここで覚えておきたいのは以下の3点です。
CLIENTHOSTNAMEの値は、全体でユニークで、かつサーバーとクライアントで一致していればなんでもよい(名前解決できるFQDNである必要はない) 。
Web UIやアラートメール内で表示されるホスト名として、この値がデフォルトで利用される。
CLIENTHOSTNAMEの値がDNSで名前解決可能で、かつその結果がクライアントのIPアドレスと異なる場合、Xymonは正常に通信できない。
たとえば「ドメインを引っ越してAレコードを変更したけれど、古いサーバーはそのまま別の用途で再利用する」ようなケースが3番目に該当します。この場合、サーバーの全ステータスが紫色になり、監視不能になってしまいます。1番目のルールがあるため、適当なsuffixをつけて、世の中に存在しないFQDNにしておくというのもよい考えです。ここを生のIPアドレスにしてしまうというのもひとつの手ではありますが、その場合Web UIやアラートメールを見ても何のサーバーなのかわからなくなってしまうため、あまりお勧めはできません[5] 。
「#」の後には、そのホストで監視するサービスを列挙します。この例ではクライアント上でのbbd(Big Brother互換デーモン)の動作と、URLに対してhttpアクセスが可能かどうかを監視しています。その他にデフォルトで監視できる項目としてはpingテスト(conn) 、ftp、ssh、telnet、smtp、pop3、imapなどなど、多数あります。詳しくはマニュアルを参照してください。また簡単なシェルスクリプトを自分で書くことで、独自の監視項目を追加することも可能です。
hosts.cfg内でincludeやdirectoryというタグを使うと、別のファイルを読み込むことができます。監視対象のホストが多くなってきた場合や、複数のプロジェクトをまたいで監視したいような場合は、ファイルを分割すると設定の見通しがよくなるのでお勧めです。詳しくはhosts.cfgのmanを参照してください。
XymonのWeb UI
ここまで設定ができたら、WebブラウザーからXymonのWeb UIにアクセスしてみましょう。URLは「http://(サーバーのアドレス)/xymon」です。しかし自分自身にXymonサーバーをインストールしたのでない限り、403でアクセスが拒否されたはずです。監視システムのレポートは誰に見せてもよいというわけではないため、Apahceのauthz_host_moduleによってIPアドレスによるアクセス制限が行われています。Apacheの設定は/etc/apache2/conf-enabled/xymon.confにあります[6] 。下記リストのようにlocalhostからしかアクセスできないようになっているため、( セキュリティ的に問題がないのであれば)何箇所かあるRequire ipを書き換えて、手元のPCからアクセスできるようにしてください[7] 。
Alias / xymon "/var/lib/xymon/www"
< Directory "/var/lib/xymon/www" >
Options Indexes FollowSymLinks Includes MultiViews
Require ip 127.0 . 0.1 / 8 :: 1 / 128
</ Directory >
また以下のリストに示すように、xymon-seccgi(Web UI上から監視の停止、再開などができる管理画面)はIPアドレス制限に加えてBASIC認証がかかっています。
ScriptAlias / xymon - seccgi "/usr/lib/xymon/cgi-secure"
< Directory "/usr/lib/xymon/cgi-secure" >
AllowOverride None
Options ExecCGI Includes
< RequireAll >
Require ip 127.0 . 0.1 / 8 :: 1 / 128
AuthUserFile / etc / xymon / xymonpasswd
AuthType Basic
AuthName "Xymon Administration"
Require valid - user
</ RequireAll >
</ Directory >
デフォルトでユーザーは用意されていないため、htpasswdコマンドを使って管理用のユーザーとパスワードを設定しておきましょう。
$ sudo apt - get install apache2 - utils
$ sudo htpasswd / etc / xymon / xymonpasswd admin
IPアドレス制限を変更したら、Apacheを再起動してください。あらためてアクセスすると、このような画面が表示されます。各監視項目の状態が、色のついたアイコンで表されています。
図1 Xymonの監視画面
色の意味は以下です。
緑=正常
青=監視停止中
白=未監視
紫=監視不能
黄=注意
赤=警告
また24時間以上ステータス変化がなかった場合、アイコンがフェイスマークから菱形に変わります。逆に言えばフェイスマークが表示されている場合は、24時間以内にサーバーの状態に変化があったということになります。
アイコンをクリックすると、各監視項目の詳細ページに遷移します。ここではグラフや障害の履歴を見ることができます。この見やすいステータス変化の履歴が、Xymonのいいところの一つです。またここでステータスのアイコンをクリックすると、その瞬間のtopを見ることができます。Muninなどのグラフを見ていると「ロードアベレージが上がっていたのはわかるけど、その瞬間何が起きてたの?」となりがちですが、Xymonの場合はプロセスの一覧がお手軽に記録されているので、トラブルシューティングの役に立つのではないでしょうか。
図2 状態を表すアイコンの変化
図3 ステータス変化の履歴(グラフ)
図4 ステータス変化の履歴(表)
図5 障害時のプロセス状況
監視項目の設定
xymon-clientをインストールするだけで、CPU負荷やメモリ使用量、ディスク使用量などがレポートされるようになりました。しかし、さらに監視項目を足したいと思うかもしれませんし、アラートのしきい値を変更したいと思うかもしれません。こういったクライアントの監視設定はanalysis.cfgで行います。
ファイル末尾にあるDEFAULTセクションが、すべての監視対象に適用されるデフォルトの監視項目としきい値です。たとえばロードアベレージは5.0を越えたらステータスが黄色に、10.0を越えたら赤になるよう設定されています。また/devや/runはディスク容量監視から除外するよう設定されています。
HOST=(ホスト名)で、ホストごとに特有の設定を書くことができます[8] 。この例ではubuntu.example.comにおいて、プロセスとポートの監視を追加しています。
HOST = ubuntu . exemple . com
PROC / usr / sbin / apache2
PORT LOCAL =%[.:] 22 $ STATE = LISTEN
PORT LOCAL =%[.:]( 80 | 443 ) $ STATE = LISTEN
PROCは、指定した名前のプロセスが存在するかどうかを監視するルールです。パラメータとしてプロセス名、最小プロセス数、最大プロセス数、しきい値を越えた場合の色を指定することができます。それぞれデフォルト値は1、-1(無制限) 、redとなっているため、この例ではapache2プロセスが1個未満になった場合(apache2が死んだ場合)にprocsカラムのステータスが赤に変化します。
図6 さまざまなプロセスを監視する例
PORTは、netstatを利用してクライアントのポートの使用状況を監視する設定です。LOCAL=には監視対象とするローカルアドレスを記述し[9] 、STATEには対象とするポートの状態、一般的にはLISTENもしくはESTABLISHEDを記述します。ここではTCPの22番と80番か443番をLISTENしているかどうかを監視しています。サービスが生きているかを監視するだけでなく、ESTABLISHEDなセッション数が一定数を越えたらアラートを出す、というような使い方も可能です。
エージェントレスでのサービス監視
Xymonはクライアントとサーバーが通信することで、監視対象のプロセスやメモリといった様々な情報をサーバーに集めることができましたが、エージェントを使わずにサーバーを監視することもできます。
たとえば以下のように設定すると、Xymonサーバーは監視対象に対し、sshのポートが開いているか、http、httpsで接続可能か、というチェックを行います。つまり外部のVPSなどにXymonサーバーを置くことで「一般のお客さんからWebサービスが見えるか」といったチェックに利用することができます。またXymonはhttpsでの監視を有効にすると、自動的にSSL証明書の有効期限が残っているかのチェックも行ってくれます。期限が切れる30日前からステータスが黄色になるので、アラートを設定しておけば更新忘れの防止に役立ちそうですね。
図7 SSL証明書の監視例
198.51 . 100.1 xymon . example . com # ssh http://198.51.100.1/ https://198.51.100.1/
アラートの設定
死活監視は、ただ「見てるだけ」では意味がありません。異常を検知したらメールでアラートを送信しましょう。アラートの設定はalerts.cfgで行います。
HOST = www . example . com
MAIL mizuno@example . com COLOR =! purple SERVICE = procs DURATION > 15m RECOVERED REPEAT = 24h
HOST = db . example . com
MAIL mizuno@example . com COLOR = red SERVICE =* RECOVERED REPEAT = 24h
「MAIL」に続いて送信するメールアドレスと条件を一行で記述します。COLORは送信の対象とするステータス、SERVICEは対象のサービス、DURATIONは障害状態がどの程度継続したらアラートとするか、REPEATはアラートを再送信するインターバルです。この例では、wwwサーバーはprocsが紫以外(=黄色と赤)の状態が15分以上続いた時にメールを送信し、障害が解消した時にも復帰メールを送ります。dbサーバーは監視しているすべての項目について、状態が赤になったらメールを送信します。REPEATを24時間に設定しているのは、繰り返しメールを送信したくないためです[10] 。Xymonはどの設定ファイルにも、詳しい解説と設定例がコメントで記述されていますので、詳しくはそちらを参照してください。
[10] Xymonでは「通知を繰り返さない」という設定が存在しません。REPEAT=0とすると、REPEAT=1と同じ動作をします(非常に筋が悪い設計だと思います) 。そのため、常識的に考えてなんらかの障害対応がなされるであろう時間よりも大きい値を指定して回避する必要があります。
注意すべきは、Xymonはメールをsendmailではなく、mailコマンドで送信するという点です。「 -S」オプションを解釈できるmailコマンド、つまりmailutilsやbsd-mailxパッケージなどをあらかじめインストールしておく必要があることに気をつけてください。なぜかメールが飛んでこないというような場合は、コマンドが使えるかを確認してみましょう。
おわりに
Big Brotherの流れをくむということもあり、Xymonはそれほどモダンなシステムではありません。しかしとにかく設定が簡単で、運用に必要なだけの監視体制を低コストで用意できること。またアラートの履歴やその瞬間のプロセスリストを記録してくれたり、SSL証明書の残日数もデフォルトで監視してくれる点など、使い勝手はなかなかよく、筆者は気に入っています。
「大仰なシステムはいらないけど、とりあえずWebサービスが生きてるかどうかだけでも見ておきたい」という要望は割とあるのではないかと思います[11] 。そんな時は、Xymonも選択肢の一つとして検討してみてはいかがでしょうか。