Nginxで今現在どのくらいのクライアントが接続しているのか確認をしたいというお話。
環境
- CentOS7.5
- nginx/1.15.2
アクティブコネクション数の取得手順
設定するには、http_stub_status_module というモジュールが必要となる。
が、比較的新しいバージョンにはデフォルトで組み込まれているようなので、コンパイルし直さないといけない・・・ということはなさそうです。
1 2 3 4 5 6 |
# nginx -V nginx version: nginx/1.15.2 configure arguments: --prefix=/etc/nginx : --with-http_stub_status_module : |
入っていることが確認できたら、Nginxの設定ファイルに以下を追加する。locationのURLは何でも良い。
1 2 3 4 5 |
server{ location /nginx_connection_stat { stub_status on; } } |
ただ、これだけだとURL直打ちで誰でも見れてしまうので、以下のようにする。
1 2 3 4 5 6 7 8 |
server{ location /nginx_connection_stat { stub_status on; access_log off; allow 127.0.0.1; deny all; } } |
Nginxを再起動して設定を反映します。
1 |
# systemctl restart nginx |
設定したURLに接続してみる。以下はサーバローカルで実行しているが、allowとdenyの設定によってリモートからWebブラウザで接続も可能。
1 2 3 4 5 |
# curl http://127.0.0.1/nginx_connection_stat Active connections: 1 server accepts handled requests 1 1 1 Reading: 0 Writing: 1 Waiting: 0 |
以下のようにwhileでループ実行させれば、簡単なリアルタイム監視もできる。
1 2 3 4 5 6 |
# while true > do > echo --------------------------- > curl http://127.0.0.1/nginx_connection_stat > sleep 1 > done |
アクセスが無いとほんとに機能してるのかわからないので、ループ実行させた状態で、クライアントから一気にアクセスを発生させてみる。
1 |
# ab -n 10000 -c 500 http://192.168.2.100/ |
サーバ側ではURL接続をループさせておく。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
# while true; do echo -------- ; curl http://127.0.0.1/nginx_connection_stat; sleep 1; done --------------------------- Active connections: 1 server accepts handled requests 10812 10812 10668 Reading: 0 Writing: 1 Waiting: 0 --------------------------- Active connections: 204 server accepts handled requests 11716 11716 11370 Reading: 0 Writing: 2 Waiting: 202 --------------------------- Active connections: 233 server accepts handled requests 14133 14133 13757 Reading: 0 Writing: 1 Waiting: 232 --------------------------- Active connections: 108 server accepts handled requests 17271 17271 17020 Reading: 0 Writing: 1 Waiting: 107 --------------------------- Active connections: 4 server accepts handled requests 21724 21724 21578 Reading: 0 Writing: 2 Waiting: 2 --------------------------- |
Active Connections と Waiting ががっつり反応してくれています^^
ちゃんと監視できていますね。
ステータス表示の意味としては以下(公式より)
Active connections
Waiting接続を含むアクティブなクライアント接続の現在の数。accepts
受け入れられたクライアント接続の合計数。handled
処理された接続の総数。一般的に、パラメータ値は、accepts リソース制限に達するまで(たとえば、worker_connectionsの制限値)に達していない場合 と同じです。requests
クライアント要求の合計数。Reading
nginxがリクエストヘッダを読み込んでいる現在の接続数。Writing
nginxが応答をクライアントに書き戻している現在の接続数。Waiting
要求を待機しているアイドル状態のクライアント接続の現在の数。
とりあえず、「Active connections」で現在の接続数と「Waiting」でアイドル状態の値が使えそう。
これもgrep、awkとか使って値だけ取れれば、Zabbixのユーザパラメータの設定でコネクション数の監視ができそうですね。
おしまい。