MRTGによるサーバ監視システムの構築:Linux管理者への道(最終回)(3/3 ページ)
サーバの状態を長期・継続的に取得してビジュアライズすることで、いままで見えなかったことが見えるようになる。これを実現するソリューションがMRTGだ。(編集局)
MRTGを利用した各種統計値の監視
最後に、MRTGを利用した具体的なシステム情報監視の設定例を紹介します。
監視システムの前提条件
今回はWebサーバを監視エージェントとし、下表の値を監視・グラフ化します。「トラフィック量」「ディスクI/O」以外の4項目に関しては閾値を設定し、値に異常が検出された場合は管理者あてにメール通知するように設定します。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
監視エージェント側の設定
トラフィック量、CPUのロードアベレージ、メモリ使用状況などは標準の状態でデータ取得が可能ですが、httpdのプロセス数やディスクの使用状況などを取得するにはエージェント側でSNMPの設定が必要になります。ここでは監視されるエージェント側に必要な設定を説明します。
- httpdのプロセス数をSNMP経由で渡す設定
Apacheなど多くのソフトウェアでは、処理を高速化するために複数のデーモンプロセスを起動し、クライアントからの要求を並列に処理します。例えば、Apacheの設定ファイルであるhttpd.confでは、以下の項目で起動プロセス数を調整可能です。
httpd.confのディレクティブ | 説明 |
---|---|
MinSpareServers 5 | あらかじめ待機させておくhttpdの最少数。Apacheは定期的にhttpdの起動プロセス数を監視し、この値を下回っていた場合は自動的にhttpdが起動される |
MaxSpareServers 10 | あらかじめ待機させておくhttpdの最大数。Apacheは定期的にhttpdの起動プロセス数を監視し、この値を上回っていた場合は自動的にhttpdが停止される |
StartServers 5 | Apache起動時に立ち上げるhttpdの数の設定 |
MaxClients 150 | 同時に起動できるhttpdの総数 |
動作中のhttpdの総数をSNMPによって採取する場合は、SNMPエージェント側の設定が必要です。具体的には、SNMPエージェント側のsnmpd.conf内に以下のような記述を追記します。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
設定後、snmpdを再起動すれば監視マネージャ側から以下のコマンドを実行することでhttpdの起動プロセス数に関する情報を取得できます。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
ただし、net-snmpのバージョンによってはDSOサポート付きのApacheのプロセス名を「libhttpd.ep」と指定する必要があったり、
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
以下のようにフルパスで指定する必要があります。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
設定後、snmpwalkコマンドでプロセス数が取得できるか否か、確認しましょう。
- ディスクの使用状況
ディスクの使用状況を確認する場合も、snmpd.confの設定を変更する必要があります。具体的には以下のような設定を追加します。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
設定後、snmpdを再起動すれば監視マネージャ側から以下のコマンドを実行することでディスクに関する情報を取得できるようになります。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
- ディスクI/Oの取得
MRTGはSNMPを利用してデータを取得するのが基本動作ですが、監視対象がsshデーモンを実装できるLinuxサーバなどに限られるのであれば、かなり柔軟に統計情報を取得することが可能です。というのも、MRTGでは単に2つのデータをグラフ化しているにすぎないので、SNMPに限らず何らかの方法で統計情報を取得できればいいわけです。
ここでは、sshで監視対象ホストの/proc/statを閲覧し、そこからディスクI/Oに関するデータを取得できるようにしてみます。そのために、ssh接続を公開鍵認証方式で行えるようにします。具体的には、ssh-keygenを利用してsshの公開鍵ペアを作成します。このとき、パスフレーズには何も入力せず、秘密鍵を暗号化しないようにしておきます。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
これにより、/root/.ssh以下にid_rsa(秘密鍵)とid_rsa.pub(公開鍵)が作成されます。監視エージェント側で作成したid_rsa.pub(公開鍵)をauthorized_keys(認証用ファイル)に登録しておけば準備完了です。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
上記の準備をしたうえで、id_rsa(秘密鍵)を監視マネージャ側に保存しておけば、監視マネージャ側から監視エージェントのあらゆる情報をssh経由で取得できるようになります。
特に、sshでのリモートアクセスが標準的になっているLinuxサーバが監視対象になる場合であれば、非常に有効な方法です。監視対象のホスト上で実行可能なコマンドであれば何でも利用できますし、sshでリモート管理できるサーバであれば、あらためてSNMPをインストールしたりSNMP用のポートをLISTENする必要がなくなります。
SNMP Manager側の設定
- MRTGの設定ファイルの作成
監視項目をすべて網羅するように、MRTGの設定ファイルを作成します。具体的には以下のような設定ファイルになります。このファイルでは、監視エージェントのコミュニティ名を「public」、IPアドレスを「192.168.0.2」としています。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
- ディスクI/Oを取得するスクリプトの作成
ディスクI/Oはssh経由で取得します。そのためのPerlスクリプト/usr/local/mrtg-2/bin/disk_io.plを以下のように作成します。ここでは、/proc/statのディスクI/Oに関するデータを利用します。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
本来、「第1パラメータ値」「第2パラメータ値」「稼働時間」「ホスト名」の4つのパラメータを出力する必要がありますが、「稼働時間」「ホスト名」はそれほど重要なデータではないため、このスクリプトでは3、4行目の出力は空行を返すようにしています。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
- 異常値検出時と正常値回復時に実行するスクリプトの作成
監視パラメータが閾値を超えた場合は、異常を検出して管理者にメールで通知するスクリプトを作成しておきます。また、検出した値が正常値に戻った場合のスクリプトも併せて作成します。
ここでは、
- 対象とするパラメータ名
- 閾値
- 現在のパラメータ値
- MRTGのURL
をメールで管理者あてに送信するものとします。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
インデックスファイルの作成
前述したMRTGの設定ファイルを利用すると、各監視項目に対するHTMLファイルが別々に作成されます。このままではWebブラウザでそれぞれのHTMLファイルを参照するのが非常に面倒です。
これを解決してくれるのが、MRTGに用意されているindexmakerというスクリプトです。このファイルは多くのデータを監視する場合に非常に有用なもので、MRTGの設定ファイルを読み込んで複数のHTMLファイルへのリンクを持ったインデックスファイルを作成してくれます。以下のように、MRTGの設定ファイルを引数にして実行し、得られた出力を/usr/local/apache/htdocs/mrtg/index.htmlとして保存すればよいでしょう。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
これにより、各統計データへのリンクが張られた以下のようなインデックスページが作成されます。
今回は、Linuxマシンを対象にSNMPやsshを利用して統計データを取得し、MRTGでグラフ化する方法を説明しました。MRTGは柔軟な設定ができる分、多少設定項目が多く複雑です。1台のサーバを監視するためにこれだけの手間を掛けるのは面倒だと考える方も多いかもしれません。
ただし、統計データを継続的に取っておくとさまざまなメリットがあることは間違いありません。ネットワークやサーバが何となくおかしいと思った際は、このような統計情報が原因究明に役に立ちます。特にサーバ管理に携わるのが初めての方は、自分が管理しているサーバがどのような挙動をしているのか、どのような場合にネットワークの異常を来すのかなど、いままで見えていなかった新たな発見もあると思います。
本連載では、サーバを管理・運用するための手法を紹介してきました。この連載が、少しでもサーバの管理・運用を始める方の手助けになれば幸いです。
Copyright © ITmedia, Inc. All Rights Reserved.