unicornのwokerのbusy数とidle数の比率がわからなくて、うっかりworkerが枯渇して大変なことになったので、workerの状況を返すエンドポイントを追加するrackミドルウェアを書いています。
ぶっちゃけkazeburoさんのPlack-Middleware-ServerStatus-Liteのruby版です。
この中で使っているkazuhoさん製のParallel-Scoreboardも移植しました。(まだREADMEがない。。。)
元は下記です。
Kazuho@Cybozu Labs: Parallel::Scoreboard でワーカープロセスをモニタリングする方法
使い方
config.ruに下記の用に書く。
# In config.ru use Rack::ServerStatus, scoreboard_path: './tmp'
それでrackサーバーを立ち上げるて、/server-status
というエンドポイント叩くと、workerの状態を返してくれます。(jsonでも返すように指定できます。)
% curl http://server:port/server-status Uptime: 1432227723 (12 seconds) BusyWorkers: 1 IdleWorkers: 3 -- pid status remote_addr host method uri protocol ss 55091 _ - 0 55092 _ - 1 55093 A 127.0.0.1 localhost:3000 GET /server-status HTTP/1.1 0 55094 _ - 0 # JSON format % curl http://server:port/server-status?json {"Uptime":1432388968,"BusyWorkers":1,"IdleWorkers":3,"stats":[{"remote_addr":null,"host":"-","method":null,"uri":null,"protocol":null,"pid":87240,"status":"_","ss":2},{"remote_addr":"127.0.0.1","host":"localhost:3000","method":"GET","uri":"/server-status?json","protocol":"HTTP/1.1","pid":87241,"status":"A","ss":0},{"remote_addr":null,"host":"-","method":null,"uri":null,"protocol":null,"pid":87242,"status":"_","ss":3},{"remote_addr":null,"host":"-","method":null,"uri":null,"protocol":null,"pid":87243,"status":"_","ss":3}]}
まだ、本番環境に投入していないですが、もうそろそろ投入予定です。
投入してみて、運用実績ができたらまた報告します。
2015/06/30 本番に投入して様子見中