この記事は Mackerel プラグインアドベントカレンダー(全部CRE) の3日目です。
それでは3日目は mackerel-plugin-nginx
です。
ここではNginxの細かい説明は割愛します。
mackerel-plugin-nginxはWebServerとして広く使われているNginx専用のpluginです。 Nginx、急に README.md がシンプル!! インストール方法書いてないので簡単に導入方法を説明します。
インストールと設定手順
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のプラグインについての説明でした。 明日は私の一押しプラグイン、RDBMSのMySQLです。 引き続き、Mackerel プラグインアドベントカレンダーをお楽しみに!