2015年2月2日月曜日

NginxのQPSを監視するNagiosプラグイン

https://www.flickr.com/photos/r405/13540449253/

https://github.com/regilero/check_nginx_status

Nginxのアクティブコネクション/秒・リクエスト/秒・コネクション/秒を監視するNagiosプラグインです。(※ QPS = リクエスト/秒としています)
これらにしきい値をもうけてアラートをすることができます。
例えば、Nginxが100 リクエスト/秒を超えたらアラートメールを飛ばすなどです。
Webサービスを公開する前には負荷テストをして限界値を測ると思いますが、その限界値に達しないように、あらかじめ、しきい値をもうけて監視しておくと安心できます。


以下、設定方法です。

Nginxの設定ファイルのserverディレクティブに location /nginx_status を追記。
参考)HttpStubStatusModule - Nginx Community
http://wiki.nginx.org/HttpStubStatusModule
server {
    ~~~~~~~~~~~~
    ~~~~~~~~~~~~

    # status
    location /nginx_status {
      stub_status on;
      access_log  off;
      allow       127.0.0.1;
      deny        all;
    }
}

Nginxをリロード。
# /etc/init.d/nginx configtest
# /etc/init.d/nginx reload

PerlモジュールのLWP::UserAgentをインストール。
# yum -y install perl-libwww-perl

check_nginx_status.plプラグインをNagiosのプラグインディレクトリに設置。
# curl https://raw.githubusercontent.com/regilero/check_nginx_status/master/check_nginx_status.pl -O /usr/lib64/nagios/plugins/check_nginx_status.pl

check_nginx_status.plの動作チェック。
# perl /usr/lib64/nagios/plugins/check_nginx_status.pl -H 127.0.0.1 -t 1 -w 1000,100,200 -c 2000,200,300
NGINX OK -  0.048 sec. response time, Active: 38 (Writing: 2 Reading: 0 Waiting: 36) ReqPerSec: 27.770 ConnPerSec: 1.008 ReqPerConn: 37.364|Writing=2;;;; Reading=0;;;; Waiting=36;;;; Active=38;;;; ReqPerSec=27.770492;;;; ConnPerSec=1.008197;;;; ReqPerConn=37.364247;;;;

オプションの意味は?
-H 127.0.0.1 ホスト名を指定
-t 1 秒単位のタイムアウト値しきい値を設定
-w 10000,100,200 アクティブコネクション1000、リクエスト/秒100、コネクション/秒200 これらのしきい値を超えたらWARNING
-c 20000,200,300 アクティブコネクション2000、リクエスト/秒200、コネクション/秒300 これらのしきい値を超えたらCRITICAL

動作チェックで作成されたテンポラリファイルを削除しておく。
# rm /tmp/127.0.0.1_check_nginx_status*

その他の細かい設定については、ヘルプを確認してください。
# perl /usr/lib64/nagios/plugins/check_nginx_status.pl -h

あとは、Nagios/Nrpeに上記のような設定を組み込んでおけばOKです。
Enjoy!