MuninでServersMan@VPSを監視: nginx その1

Tablet PC deals and Promotion
管制塔

だいぶ間があいてしまいました。前回紹介したMuninによるサーバ監視の続きです。

今回はMuninのプラグインを使ってnginxを監視する項目を追加していきます。

プラグインのダウンロード

MuninのプラグインはGithubを使って公開されています。

もちろんここから手動でダウンロードしても良いのですが、何かと面倒なのでgitで一気にダウンロードしてします。

まずはgitをインストールしておきます。

apt-get install git

次にダウンロードしたファイルを格納する場所を用意します。Debianの場合はパッケージ管理外のファイルは/usr/local以下に置くことになっているので、次のように準備しておきます。

mkdir –p /usr/local/share/munin

作成したディレクトリに移動してプラグインの全ファイルを一気にダウンロードしてしまいます。

cd /usr/local/share/munin
git clone https://github.com/munin-monitoring/contrib.git

確認してcontroibディレクトリとその中にさらにディレクトリができていればOKです。

ls -F /usr/local/share/munin
contrib/
ls -F /usr/local/share/munin/contrib
README.md/ images/ plugins/ samples/ templates/ tools/

ここのplugins以下にプラグインが入っています。

nginxの監視を強化

下記のWebサイトを見ると10個のプラグインが登録されていることがわかります。

簡単に紹介します。

  • nginx-cache-hit-rate
    プロキシ・キャッシュのヒット率を表示
  • nginx-cache-multi_
    キャッシュのステータスを表示
  • nginx-combined
    一つのグラフで下記をまとめて表示

    • Request /sec
    • Connection / sec
    • Request / connection
    • Active connections
    • Reading
    • Writing
    • Waiting
  • nginx_connection_request
    1コネクションあたりのリクエスト数を表示
  • nginx_error
    httpのステータスコードを元にエラー率を表示
  • nginx_memory
    メモリ使用量を表示
  • nginx_upstream
    転送量を表示(?)
  • nginx_upstream_multi_
    指定したサイトに関するリクエスト数・キャッシュ・ステータス・httpのステータスコードなどを表示
  • nginx_vhost_traffic
    指定したバーチャルホストのトラフィックを表示
  • nginx_working_set
    Working set(実メモリ上の使用サイズ)を表示

それぞれを設定してみます。

nginx-cache-hit-rateプラグイン

このプラグインにはReadBackwards.pmというperlのモジュールが必要なのでインストールします。

apt-get install libfile-readbackwards-per

次に/etc/nginx/nginx.confに次の記述を追記して新しいログのフォーマットをcacheという名前で定義します。

log_format cache '$remote_addr - $host [$time_local] "$request" $status '
                 '$body_bytes_sent "$http_referer" '
                 'rt=$request_time ut="$upstream_response_time" '
                 'cs=$upstream_cache_status';

キャッシュヒット率を監視したいサイトの設定ファイル(/etc/nginx/site-availableにあるファイル)を変更して、作成したフォーマット(cache)でログを記録するようにします。このためには次の行を追加します。

access_log /var/log/nginx/サイト名-cache.log cache;

ログファイルのファイル名は何でも良いです。なお、nginxは複数のログを記録できるので、必要であれば従来のacces_logの設定を残しておいても問題ありません。

次にプラグインのシンボリックリンクを/etc/munin/pluginsに作成します。シンボリックリンクの名前には「_サイト名」をつけるようにします。

cd /etc/munin/plugins
ln -s /usr/local/share/munin/contrib/plugins/nginx/nginx-cache-hit-rate nginx-cache-hit-rate_サイト名

最後に/etc/munin/plugin-conf.dのmunin-nodeに次の内容を追記します。

[nginx-cache-hit-rate_サイト名]
env.logfile /var/log/nginx/サイト名-cache.log

これで設定は完了です。念のためMuninを再起動しておきます。

/etc/init.d/munin-node restart

監視結果が表示されるのはログに1000行たまった後になります。

私のサイトはこんな感じになりました。

nginx-cache-hit-rate

時間帯によってヒット率が大きく変わることが分かります。アクセス数が大目の日中から夜中にかけてはわりとヒット率が高いようです。ただ、「Hits」と「Misses」を足しても100%にならないのが不思議なところです。

nginx-cache-multiプラグイン

このプラグインも上記のniginx-cache-hit-rateで設定したログファイルを使用します。

このプラグインは若干の修正が必要でした。/usr/local/share/munin/contrib/plugins/nginx/nginx-cache-multi_の52行目を次のように変更します(BYPASSの部分)。

cache_status_list = { "MISS" : 0, "EXPIRED" : 0, "UPDATING" : 0, "STALE" : 0, "HIT" : 0, "NONE" : 0, "TOTAL" : 0, "BYPASS" : 0 }

次にプラグインのシンボリックリンクを/etc/munin/pluginsに作成します。シンボリックリンクの名前には「_サイト名」をつけ、さらに「_number」と「_percent」をつけたものを作成します。

cd /etc/munin/plugins
ln -s /usr/local/share/munin/contrib/plugins/nginx/nginx-cache-multi_ nginx-cache-multi_サイト名_number
ln -s /usr/local/share/munin/contrib/plugins/nginx/nginx-cache-multi_ nginx-cache-multi_サイト名_percent

最後に/etc/munin/plugin-conf.dのmunin-nodeに次の内容を追記します。

[nginx-cache-multi_サイト名_*]
env.logfile /var/log/nginx/サイト名-cache.log

念のためMuninを再起動しておきます。

/etc/init.d/munin-node restart

監視結果は次のようになります。上がキャッシュヒット・キャッシュミスなどのイベントの発生回数を示すグラフで、下が割合を表すグラフです。このほかにも、イベントごとのグラフも生成されます。

nginx-cache-multi_number

nginx-cache-multi_percent

まとめ

今回はMuninのプラグインを導入してnginxの監視項目を増やしてみました。

Muninのnginx用プラグインは10個あるのですが、今回はその中のnginx-cache-hit-rateとnginx-cache-multiを紹介しました。

長くなったので他のnginx用プラグインについては次回に続きます。