そーだいなるらくがき帳

そーだいが自由気侭に更新します。

Nginxの監視 ~ mackerel-plugin-nginxを読み解く

この記事は Mackerel プラグインアドベントカレンダー(全部CRE) の3日目です。

qiita.com

soudai.hatenablog.com

それでは3日目は mackerel-plugin-nginx です。

ここではNginxの細かい説明は割愛します。

mackerel-plugin-nginxはWebServerとして広く使われているNginx専用のpluginです。 Nginx、急に README.md がシンプル!! インストール方法書いてないので簡単に導入方法を説明します。

github.com

インストールと設定手順

NginxのプラグインはApache2の server-status と同様に nginx_status を可視化してくれるプラグインです。 そのためMackerelのプラグインをインストール後にnginx_statusを有効化する必要があります。

プラグインプラグイン集として提供しているパッケージの mackerel-agent-plugins に含まれています。 インストール先は /usr/bin/mackerel-plugin-nginx です。

mackerel-plugin-nginxのインストールはこれだけではなく、nginx_statusを見れるようにするにはstub_statusを有効化する必要があり、そのためにはNginx側にも追加の設定が必要です。 /etc/nginx/conf.d/default.confを適宜設定して下記の内容を追記してください。

server {
    listen 8080;
    server_name localhost;
    location /nginx_status {
        stub_status on;
        access_log off;
        allow 127.0.0.1;
        deny all;
    }
}

これにより http://localhost:8080/nginx_status にアクセスするとNginxの情報が見れるようになります。

# curl http://localhost:8080/nginx_status
Active connections: 1
server accepts handled requests
 6 6 6
Reading: 0 Writing: 1 Waiting: 0

mackerel-plugin-nginxはこの情報をパースしてグラフにしてくれるのです。 次にMackerelのプラグインはコマンドですので実行する事ができます。

※/usr/bin はPATHが通っているので省略出来ます

-- /usr/bin はPATHが通っているので省略出来ます
# mackerel-plugin-nginx
nginx.connections.connections   1.000000        1511916349
nginx.requests.accepts  20.000000       1511916349
nginx.requests.handled  20.000000       1511916349
nginx.requests.requests 20.000000       1511916349
nginx.queue.reading     0.000000        1511916349
nginx.queue.writing     1.000000        1511916349
nginx.queue.waiting     0.000000        1511916349

設定ファイルであるmackerel-agent.confは標準では /etc/mackerel-agent/mackerel-agent.conf にインストールされます。 こちらに下記のとおり追記しましょう。

[plugin.metrics.nginx]
command = "mackerel-plugin-nginx"

以上を行った上でmackerel-agentを再起動してください。

見れるメトリック

nginx_statusで見れる情報についてはNginxの公式ドキュメントに纏まっています。

Module ngx_http_stub_status_module

ですがもう少し具体的に見ていきましょう。

各グラフ定義ごとに説明します。 また表に出てくるdiffとはプラグイン上で差分値計算をするかどうかです。 となっている項目はプラグインで前回の実行時の値と差分値計算して出力しています。

Nginx Connections

メトリック名(ラベル) プラグインの出力名 diff 説明
Active connections nginx.connections.connections Waiting接続を含むアクティブなクライアント接続の現在の数

前述のコマンドでは下記の部分です。

nginx.connections.connections   1.000000        1511916349

これは読んで時のごとく現在アクティブなコネクションの総数です。 全体のアクセスがどれくらい来ているかが分かります。

Nginx requests

メトリック名(ラベル) プラグインの出力名 diff 説明
Accepted connections nginx.requests.accepts 1分間あたりの受け入れられたクライアント接続の合計数
Handled connections nginx.requests.handled 1分間あたりの処理された接続の総数
Handled requests nginx.requests.requests 1分間あたりのクライアント要求の合計数

前述のコマンドでは下記の部分です。

nginx.requests.accepts  800.000000       1511916349
nginx.requests.handled  800.000000       1511916349
nginx.requests.requests 1000.000000       1511916349

起動してからの接続数に関する値です。 Nginxを再起動すると初期化(0に戻る)されます。
Nginx Connectionsは "今アクティブなアクセスの数" ですのでプラグインを叩いた瞬間は1アクセスかもしれません。 しかし1分間に1000件処理していた場合はNginx requestsの数が相応に増えます。 1000件要求を受けて(requests)、実際には800件のリクエストを受け付けて(accepts)、処理した(handled)場合は上記のような値になります。 そのためNginxのパフォーマンスを測る上で重要な値となります。

Nginx connection status

メトリック名(ラベル) プラグインの出力名 diff 説明
Reading nginx.queue.reading リクエストヘッダを読み込んでいる現在の接続数
Writing nginx.queue.writing Nginxが応答中の現在の接続数
Waiting nginx.queue.waiting アイドル状態のクライアント接続の現在の数。

前述のコマンドでは下記の部分です。

nginx.queue.reading     0.000000        1511916349
nginx.queue.writing     1.000000        1511916349
nginx.queue.waiting     0.000000        1511916349

こちらはNginxの接続状態を表した値になります。 例えばnginx.queue.writingが右肩上がりにどんどん増える状態だとNginxの処理が追いついて予想できます。 mackerel-plugin-apache2のApache Workersと同じような使い方できるでしょう。

3日目はWebServerで2大巨頭のNginxのプラグインについての説明でした。 明日は私の一押しプラグインRDBMSMySQLです。 引き続き、Mackerel プラグインアドベントカレンダーをお楽しみに!

4日目 mackerel-plugin-mysql