この記事は、Mackerel アドベントカレンダー(全部CRE)の23日目の記事です。アドベントカレンダーも大詰めですが、だいぶしんどくなってきてます!! こんなときはそう、プラグイン読み解きシリーズ!今回は mackerel-plugin-unicorn です!
僕は、今でこそCREというお仕事に従事しておりますが、前職では Ruby(Rails)でのアプリケーション開発をおこなうのが主業務である、ソフトウェアエンジニアでした。そういうこともあり、unicornには大変お世話になりました。今こそ、その恩を返すとき!(?)
当記事が前提とするバージョン
この記事を書いている今の最新版である、mackerel-agent-plugins の v0.53.0 を前提としています。
Releases · mackerelio/mackerel-agent-plugins · GitHub
どんなプラグイン?
このプラグインは mackerel-plugin-unicorn
という名前のとおり、Ruby製アプリケーションサーバー・unicornの稼働状況をモニタリングするためのプラグインです。
インストールと設定手順
mackerel-plugin-unicorn プラグインは、Mackerelがプラグイン集として提供しているパッケージ、 mackerel-agent-plugins
に含まれています。以下のようなコマンドでインストールすることができます。
$ yum install mackerel-agent-plugins
$ apt-get install mackerel-agent-plugins
詳細は下記ヘルプページも参照してください。
インストール先は /usr/bin/mackerel-plugin-unicorn
です(他のプラグインも同じ場所にインストールされています)。この状態で、mackerel-plugin-unicorn を手動実行することも可能です。このプラグインに限らず、Mackerelのプラグインは要はコマンドですので、手動でも実行する事ができます。
設定ファイルである mackerel-agent.conf は、デフォルトでは /etc/mackerel-agent/mackerel-agent.conf
にインストールされます。mackerel-plugin-unicorn を使う際の conf への追記内容などは、README.md に記載されていますので、ご確認ください。
mackerel-agent-plugins/README.md at master · mackerelio/mackerel-agent-plugins · GitHub
conf への追記ができたら、mackerel-agentを再起動することで設定完了です。
取得されるメトリック
このプラグインにより取得され、Mackerelにグラフ描画されるメトリックについて、以下に各グラフ定義ごとに説明します。 また表中の diff
とは、プラグイン側で差分値計算をするかどうかについて示しており、◯
となっている項目はプラグインの処理として「前回の実行時の値と差分」を計算し出力しています(データソースがいわゆるカウンターメトリックで単調増加する値)。diff
が ○
となっている値に関しては差分値ですが、それ以外の値はすべて、プラグイン実行時・その瞬間のときの値となります。
Memory
ラベル名 | メトリック名 | diff | 説明 |
---|---|---|---|
Workers | custom.unicorn.memory.memory_workers |
- | コマンド ps auxw | grep [u]nicorn | grep -v master | awk {m+=$6*1024} END{print m;} を実行した結果(psコマンドで得られる、unicorn の master プロセス以外のプロセスの RSS 列の合計値がベース) |
Master | custom.unicorn.memory.memory_master |
- | コマンド ps auxw | grep [u]nicorn | grep master | awk {m=$6*1024} END{print m;} を実行した結果(psコマンドで得られる、unicorn の master プロセスの RSS 列の値がベース) |
Worker Average | custom.unicorn.memory.memory_workeravg |
- | custom.unicorn.memory.memory_workers の値を unicorn worker プロセスの数で割った値 |
Workers
ラベル名 | メトリック名 | diff | 説明 |
---|---|---|---|
Idle Workers | custom.unicorn.workers.idle_workers |
- | プラグイン実行タイミングのCPUカウンタ(/proc/<pid>/stat から取得)と、その1秒後のCPUカウンタの差がゼロであった worker unicorn プロセスの数。 |
Busy Workers | custom.unicorn.workers.busy_workers |
- | unicorn worker プロセスの数と、custom.unicorn.workers.idle_workers の値との差。 |
以上、5種類のメトリックとなります。こうしてみるとさらっと書いてるように見えるかもしれませんが、プラグインでの実装を見ると awk を駆使していたりもして、だいぶ頑張っていることがわかります。苦労がにじみ出ている......。。
実装に興味を覚えた方は、ぜひちらっとでも見てみていただければと!→ mackerel-agent-plugins/mackerel-plugin-unicorn/lib at master · mackerelio/mackerel-agent-plugins · GitHub
利用可能なオプション
-pidfile
必須オプションです。unicorn の pid ファイルをフルパスで指定する必要があります。
-metric-key-prefix
このプラグインで取得されるメトリック、描画されるグラフのラベルなどに prefix を付与することができます。これを活用することにより、ひとつのホスト内で複数のunicornサーバーが稼働していたとしても、それぞれを個別にモニタリングすることが可能です。こんな↓かんじ。
[plugin.metrics.unicorn] command = "mackerel-plugin-unicorn -pidfile=/var/www/app/shared/tmp/pids/unicorn.pid" [plugin.metrics.unicorn_foobar] command = "mackerel-plugin-unicorn -pidfile=/var/www/foobar/shared/tmp/pids/unicorn.pid -metric-key-prefix=foobar"
まとめ
unicornのモニタリングに使えるプラグイン、mackerel-plugin-unicorn を解説しました。僕も、ちょっと前まで趣味でも Rails + unicorn で趣味Webアプリを運用していて、そこでもこのプラグインをドッグフーディングしていたのですが、今はもう全部Goにリプレースしてしまっており、それもあってグラフのスクショとかも出せずでした。スクショの一枚でも残しておけばよかったなぁ(´・ω・`)。
上記の通り、メトリック種類は5つと多くはないですが、厳選されている印象も受けました。例えば、負荷試験実施期間中や本番ローンチ前とかに worker プロセスの調整をする際に活用する、とか、他にもあれこれ使ってもらえるのではないでしょうか!