server-memo.net

muninでapacheを監視

      2016/10/21

CentOSにインストールされている「apache」を「munin」で監視する方法です。

作業は監視対象サーバ(監視されている側)で行います。

監視環境の構築手順は以下のページで説明しています。

Munin+apachでの監視環境構築
Munin+nginxでの監視環境構築

apacheの監視について

初期状態の「apache」は、「munin-node」での監視に必要なステータスの情報が取得できないため、ステータスを取得できるように設定を追加する必要があります。

追加する設定は「CentOS 6」と「CentOS 7」で、設定ファイルの場所や設定内容が異なるため、それぞれの設定について説明をしていきます。

設定する項目は「CentOS6」「CentOS7」ともに下記内容になります。

  • ステータス表示モジュールの有効化 (LoadModule status_module modules/mod_status.so)
  • 拡張ステータス表示の有効化 (ExtendedStatus On)
  • server-statusハンドラーの有効化 (SetHandler server-status)

CentOS6環境のapache設定

「CentOS6」の場合は「httpd.conf」に初期設定でステータス表示モジュールが有効化されていたり、その他の設定がコメント化されて用意されているので、それを使用して設定していきます。

「httpd.conf」のバックアップをしてから、設定作業を行っていきます。

# cp -p /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf_yyyymmdd
# vi /etc/httpd/conf/httpd.conf

ステータス表示モジュール(mod_status.so)の有効化

「apache」のステータスを表示させるためには「mod_status.so」モジュールが読み込まれている必要があります。

「CentOS6」では、初期設定で「mod_status.so」モジュールを読み込む設定がされているはずですが、念のため下記設定があるかどうか確認して、設定がなければ追加してください。

LoadModule status_module modules/mod_status.so

拡張ステータス表示の有効化

初期状態ではコメント化されているので「#」を削除して、設定を有効化してください。

変更前
# ExtendedStatus On
変更後
ExtendedStatus On

もし、設定がなければ次の項目の「server-statusハンドラー設定」のすぐ上に設定追加しておいてください。

server-statusハンドラー設定

「http://l27.0.0.1/server-status」というURLでアクセスされたときに、サーバのステータスを表示させるように「SetHandler server-status」を設定します。

また、関係ない第三者にapacheのステータス情報を見せるのは、セキュリティ上よくないのでアクセス制限も合わせて設定しておきます。

CentOS6ではコメント化されて用意されている設定があるので、「#」を削除して設定を有効化するのとともに「Allow from .example.com 」の部分を編集して、アクセス制限も行っていきます。

変更前
#<Location /server-status>
# SetHandler server-status
# Order deny,allow
# Deny from all
# Allow from .example.com
#</Location>
変更後

今回はmunin-nodeからだけステータスが参照できれば良いので、「Allow from 127.0.0.1」としてローカルホストからのみ許可しています。

<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Location>

設定反映

apacheを再起動して設定を反映させます。

# apachectl graceful

apache設定変更(CentOS7)

「CentOS7」環境で「apache」の詳細ステータスを表示させる設定です。

ステータス表示モジュール(mod_status.so)の有効化

「CentOS7」でも、「mod_status.so」は初期設定で読み込む設定となっていますが、「CentOS6」の場合と異なり「/etc/httpd/conf.modules.d/00-base.conf」にて下記の設定が有効化されているはずなので、念のために確認しておいてください。

LoadModule status_module modules/mod_status.so

もし、設定されていな場合は追加しておいて下さい。

拡張ステータス表示の有効化

「CentOS6」では「httpd.conf」にコメント化された「ExtendedStatus On」の設定があったのですが、「CentOS7」ではその設定がないため新たに設定を追加する必要があります。

「httpd.conf」に設定を追加しても良いのですが、今回は後で管理しやすいように「/etc/httpd/conf.d/」ディレクトリに「status.conf」という設定ファイルを新規作成、ステータス表示関連の設定を「httpd.conf」から切り出して、そこに設定を行っていきたいと思います。

# vi /etc/httpd/conf.d/status.conf
設定内容
ExtendedStatus On

server-statusハンドラー設定

こちらの設定も「CentOS6」とは異なり「httpd.conf」に設定が用意されていないので、新規に作成した「status.conf」に「http://l27.0.0.1/server-status」というURLでアクセスされた場合、サーバのステータスを表示させるように「SetHandler server-status」設定を追加します。

アクセス制御について

「CentOS7」の標準リポジトリにある「apache」はバージョンが「2.4」系であるため、アクセス制御に「Require」ディレクティブが使用できるようになりました。

そこで、今回は「CentOS6」の場合とは異なる「Require ip 127.0.0.1」を設定してローカルホストからのみステータス表示URLにアクセスできるように設定していきます。

設定内容
<Location /server-status>
  SetHandler server-status
  Require ip 127.0.0.1
</Location>

status.conf 記述例

「拡張ステータス表示の有効化」と「server-statusハンドラー設定」を行った「status.conf」は下記のようになります。

ExtendedStatus On

<Location /server-status>
  SetHandler server-status
  Require ip 127.0.0.1
</Location>

設定反映

設定が完了しましたら、「apache」を再起動して設定を反映させます。

# apachectl graceful

apacheステータス取得確認

設定が完了しましたら、「apache」のステータスを表示できるか動作確認を行ってください。

webブラウザで確認

監視対象サーバ上からwebブラウザで「http://127.0.0.1/server-status」にアクセスすることで、現在のステータスを確認することが出来ます。

apache_status_00

CUIで確認

GUI環境が無い場合はコマンドでもステータス情報を取得することが出来ます。

ステータスを取得するためのURLがWebブラウザの場合と最後が若干異なるので注意してください。

$ wget -q -O - http://127.0.0.1/server-status/?auto

実行例

コマンドを実行して、下記のようにステータス情報が取得できることを確認してください。

$ wget -q -O - http://127.0.0.1/server-status/?auto
Total Accesses: 50
Total kBytes: 116
CPULoad: .000392696
Uptime: 15279
ReqPerSec: .00327247
BytesPerSec: 7.77433
BytesPerReq: 2375.68
BusyWorkers: 1
IdleWorkers: 5
Scoreboard: _____W................................................
..................................................................
..................................................................
..................................................................
....

munin-node設定

「apache」の設定が完了しましたら、次に「munin-node」の設定を行っていきます。

プラグイン追加

監視項目の追加は、事前に用意されている「プラグイン」を有効化することで可能となります。

「apache」に関する監視プラグインは下記の3つなので、それぞれ追加を行っていきます。

  • apache_accesses
  • apache_processes
  • apache_volume

プラグイン追加方法

「/usr/share/munin/plugins/」ディレクトリに格納されているプラグインへのリンクを、「/etc/munin/plugins」に作成することでプラグインが追加され監視が開始されます。

# cd /etc/munin/plugins
# ln -s /usr/share/munin/plugins/apache_accesses apache_accesses
# ln -s /usr/share/munin/plugins/apache_processes apache_processes
# ln -s /usr/share/munin/plugins/apache_volume apache_volume

※プラグイン追加の詳しい方法はこちらのページで解説していますので、参考にしてみてください。

設定反映

プラグインの追加作業が完了しましたら「muni-node」を再起動して設定を反映させます。

CentOS6までの場合
# service munin-node restart
CentOS7の場合
# systemctl restart munin-node

動作確認

設定が完了しましたら、「munin-node」から「apache」のステータスを取得できるか、「munin-run プラグイン名」を実行して動作確認を行ってください。

apache_accesses動作確認
# munin-run apache_accesses
accesses80.value 394
apache_processes動作確認
# munin-run apache_processes
busy80.value 1
idle80.value 5
free80.value 250
apache_volume動作確認
# munin-run apache_volume
volume80.value 410624

# Unknown service と表示される場合

これは、プラグインが正常に追加されていない場合に表示されます。

# munin-run apache_accesses
# Unknown service 'apache_accesses'

「/etc/munin/plugins/」ディレクトリ内を確認して、正常にリンクが作成されている確認してください。

ステータス情報が取得できない場合

「munin-run」コマンドを実行して取得してきた結果に「U」と表示されている場合は、「apache」からのステータス取得に失敗しています。

ステータス取得失敗例
# munin-run apache_accesses
accesses80.value U

この場合は下記の項目を確認して下さい。

  • apacheが起動しているか確認
  • apahceの設定に不備が無いかの確認
  • apacheを80番ポート以外で動作させていないかの確認

「apache」を80番ポート以外で動作させている場合は、別途設定が必要となります。

apacheを80番ポート以外で動作させている場合の設定

「apache」を80番ポート以外で運用している場合は、「munin-node」に「apache」のポート番号を設定してあげないとステータスを取得することが出来ません。

設定は下記のファイルどちらかに行います。

  • /etc/munin/plugin-conf.d/munin-node
  • /etc/munin/plugin-conf.d/apache

「/etc/munin/plugin-conf.d/munin-node」ファイルは既に作成済みで、いくつか設定が記述されてるはずなので、一番後ろにでも設定を追加してください。

「/etc/munin/plugin-conf.d/apache」ファイルを使用する場合は、ファイルを新規作成してそこに設定を追加していってください。

追加設定

「apache」を「8080」番ポートで動作させている場合は、下記のように「8080」と設定します。

[apache_*]
env.ports 8080

設定反映

設定の追加作業が完了しましたら「muni-node」を再起動して設定を反映させます。

CentOS6までの場合
# service munin-node restart
CentOS7の場合
# systemctl restart munin-node

動作確認

「munin-run」コマンドを使用して、「apache」からステータスを取得できるか確認してください。

# munin-run apache_processes
busy10080.value 1
idle10080.value 16
free10080.value 239

 - Munin