NGIXN Plus にはリアルタイムに負荷とパフォーマンスメトリックを確認できるライブアクティビティモニタが含まれている。(具体的には ngx_http_status_module
というモジュール)
詳しくは この辺り を見て欲しいのだけど、このモニタリング機能は小綺麗なダッシュボードだけがやたらスポットを浴びていてちょっと悲しい。
と言うのも、この機能の本質は RESTful な JSON のインターフェイスを提供していることであり、監視ツールや統計ツールに食わせるのに打って付けな情報を提供しているところじゃないかと思う。(おそらく小綺麗なダッシュボードも JavaScript でこの値を引っ張っているんじゃないかな)
jq
コマンドあたりで中身を覗いてみる。
$ curl http://XX.XX.XX.XX/status | jq .
{
"version": 6,
"nginx_version": "1.9.4",
"address": "XX.XX.XX.XX",
"load_timestamp": 1442484744829,
"timestamp": 1442541061476,
"connections": {
"accepted": 5321791,
"dropped": 0,
"active": 2,
"idle": 28
},
"requests": {
"total": 23046320,
"current": 2
},
"server_zones": {
"server_backend_80": {
"processing": 0,
"requests": 130705,
"responses": {
"1xx": 0,
"2xx": 19970,
"3xx": 109091,
"4xx": 1590,
"5xx": 0,
"total": 130651
},
"received": 26431634,
"sent": 448333914106
},
~~ snip ~~
もう何となく結果が予想できると思うけど、JSON でアクティビティを出せると言うことは Fluentd (td-agent) などに簡単に突っ込める。
と言うわけで鉄板の、 Fluentd + ElasticSearch + Kibana な構成を超絶簡単に組める。
td-agent.conf
の簡単なサンプルとしては以下のような感じか。command
で引っ張って format
を json
に指定するのが手軽。
<source>
type exec
tag nginx-plus.status
command curl -q http://XX.XX.XX.XX/status
format json
run_interval 15s
</source>
<match nginx-plus.status>
type elasticsearch
host localhost
port 9200
type_name nginx-plus_status
logstash_format true
</match>
勿論頭から全部取らず、 http://XX.XX.XX.XX/status/server_zones/hoge
の様に欲しいところだけ取る事も出来る。
というわけで、あとは煮るなり焼くなり・・・。
なお、このステータスモニタで取れるのは送信バイトやキャッシュパススルー量などの、あくまで “ステータス” であり、アクセスログが出てくるわけではないので注意。既存のログ解析が不要になるわけではない。