HEARTBEATS

CactiでPHP APCのステータスを取得する

   

お初にお目にかかります。斎藤です。

2012年5月中旬より、インフラエンジニアとして仕事をしております。どうぞよろしくお願いします。

さて、今日はPHPのパフォーマンス改善の際に用いることがあるAPC(Alternative PHP Cache)のパフォーマンスをCactiで確認できるようにした経緯について、お話し致します。

Cactiはパフォーマンスモニタリングツールとして人気があります。ネットワークトラフィックやサーバ本体のリソースはもちろん、MySQLやApacheをはじめとしたミドルウェアはPercona社にて頒布しているPercona Monitoring Plugins for Cactiを用いると取得することができます(以下 Percona)。それなら、ほかのデータも...と欲も出てくるものです。 そんな中、今回のテーマであるAPCのモニタリングを実現するものとしてPALMがあります。しかし、元の状態ではHTTPで直接取得しようとするため当社ではそのまま利用できませんでした。その背景が2つあります。

1) LVSなどの裏にいるWebサーバをモニタリングしなければならない

2) モニタリング用のスクリプトはローカルからのアクセスのみ許可したい

そこで、PALMをベースにSSH経由でデータを取得できるようにしたCactiテンプレートを作成しましたので、こちらにて頒布します。

なお、元のPALMにあるCactiテンプレートはAPC以外のデータも取得できますが、これらはPerconaでも取得でき重複するため、今回はAPCのみの取得に絞っています。

ファイル

お願い: ファイルの利用、および手順の適用は、各個人の責任においてご利用ください。当社では責任を負いかねます。

前提

  • 既にCactiを利用されている方向けに書いています
  • CentOS 5.6系 + Apache 2.2系 をもとに例示します
  • Cactiの動作確認は 0.8.7e, 0.8.7i, 0.8.8a で行っています
  • 元のPALMで取得できるAPC以外のモニタリングは今回行わないこととします

手順

SSH鍵の作成

※Perconaを既に使われている方は、パスして結構です。

パスワードなしのSSH鍵を作成します。

作成後、秘密鍵をcactiサーバ側、公開鍵をWebサーバ側にセットすることとなります。

Webサーバ側の設定

公開鍵の設定

※Perconaを既に使われている方は、パスして結構です。

ユーザ "cacti" を作成します。

# adduser cacti

"cacti" ユーザに公開鍵をセットします。

# su - cacti
$ mkdir ~/.ssh/
$ vim ~/.ssh/authorized_keys
(公開鍵を流し込む)
$ chmod -R go-rwx ~/.ssh/
$ exit

スクリプトのインストール

ディストリビュージョンによってドキュメントルートが違うものがあります。今回は"/var/www/html"とします。あらかじめ確認の上、作業を進めてください。

# wget http://artur.ejsmont.org/blog/sites/default/files/palm_v3.zip
# unzip palm_v3.zip palm_v3/stats_apc.php -d /var/www/html/
# ls -lFh /var/www/html/palm_v3/
(stats_apc.php のみがあればOK)
# rm palm_v3.zip

Apacheの設定変更

# vim /var/www/html/palm_v3/.htaccess
Order deny,allow
Deny from all
Allow from 127.0.0.1 ::1

※補足 特にバーチャルホストを使っている方は、httpd.confにエイリアスを書いていただく方法でもよいかと思います。その場合は、Apacheの再起動が必要になります。

# vi /usr/local/apache2/conf/httpd.conf
(以下を書き足す)
Alias /palm_v3/ "/var/www/html/palm_v3/" 
<Directory "/var/www/html/palm_v3/">
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1 ::1
</Directory>

# /etc/init.d/httpd configtest
(OKになるかチェック)
# /etc/init.d/httpd graceful
# ps auwxxf
(プロセスの再起動、および起動時刻のチェック。)
# curl http://127.0.0.1/palm_v3/stats_apc.php
(データが取得できたらGood!)

最後のcurlコマンドを実行した際、このような形でデータが取得できたときは成功です。数値は、環境により異なりますので留意してください。

memory_segments:1 segment_size:33554296 total_memory:33554296 
cached_files_count:68 cached_files_size:11297440 cache_hits:70150 
cache_misses:68 cache_full_count:0 user_cache_vars_count:0 
user_cache_vars_size:0 user_cache_hits:0 user_cache_misses:0 
user_cache_full_count:0

Cactiサーバ側の設定

Cactiテンプレートのインポート

cacti_host_template_palm_through_ssh_-_php_apc.xml をダウンロードし、インポートします。

※秘密鍵をCactiのポーリングプログラム(poller.php)がデフォルトで参照する場所以外に保存されている場合は、インポート後に"Data Input Methods"からsshコマンドで秘密鍵ファイルを指定する引数を入れてください。

ホストの登録

ホストを登録します。

流れは通常のホスト登録と同様ですが、通信を初めとしたサーバリソースをモニタリングするものとは別に、APCデータ取得用のホストを作られるとよいかと思います。

グラフの登録

グラフテンプレート一覧から、グラフを登録します。

登録する際に次の項目についての入力項目が表示されます。通常はデフォルト値で結構ですが、変更されるときのために、説明を記述します。

  • ssh port: 登録したサーバにsshで接続するポートを指定します。SSHサーバのポートを変えている場合は22から変更してください。
  • httpd host: Webサーバのアドレスを指定します。データ取得時、sshで当該サーバにログインしてからcurlで取得を行っています。ホスト名ベースでバーチャルホストを張っているとき等は、変えていただく必要があるかもしれません。
  • httpd port: Webサーバのポートを指定します。ポートを変えている場合は、80から変更します。
  • palm dir: PALMのスクリプトをインストールしたディレクトリを指定します。都合により、上記の手順とは違うディレクトリにインストールした場合のみ、変更します。

おわりに

おつかれさまでした!

10分程度待ち、チャートがプロットされていくようになれば、成功です。参考までに、プロット結果の例を示します。


APCのチューニングや、運用監視にお役立てください。

それでは皆様、ごきげんよう。

株式会社ハートビーツの技術情報やイベント情報などをお届けする公式ブログです。



ハートビーツをフォロー

  • Twitter:HEARTBEATS
  • Facebook:HEARTBEATS
  • HATENA:HEARTBEATS
  • RSS:HEARTBEATS

殿堂入り記事