Pumaとメトリクス

WebサーバーとしてPumaを使用している場合の以下についてまとめておく

  • 監視の観点
  • メトリクスの収集方法

監視の観点

  • Pumaの動作するサーバーに問題が起きていないか
  • Pumaに問題が起きていないか

Pumaの動作するサーバーに問題が起きていないか

ホストマシンの以下の指標をみておく

  • CPU
    • sar
  • メモリ
    • vmstat
  • ネットワーク

観点: メモリを使いすぎていないか?

  • メモリ容量の上限値を超える場合はworker数減らすかメモリ上限を上げるなどの検討をする

Pumaに問題が起きていないか

監視上の観点とPuma.statsで提供される情報から、指標として使用するとよさそうなものをピックアップしてみる

観点: 必要なプロセスやスレッドが正常に動作しているか?

  • puma.workers: 起動中のワーカー数
  • puma.running: 起動中のスレッド数

  • 設定値通りにプロセスやスレッドが起動しているかを確認する

観点: リクエストに対して受け入れ可能な状態にあるか?

  • puma.backlog: キューにあるリクエストの待ち行列の数
  • puma.pool_capacity: スレッドプール中の使用可能なスレッド数

  • backlogが常にある一定以上存在し続けている場合は、workerを増やしてリクエストの待ち行列を減らす

  • pool_capacityのスレッド数が常に0に値の場合は、workerあたりのthread数を増やすか、worker数を増やす

DatadogでPumaのメトリクスを収集する

puma-plugin-statsdgemを使用し、ddagentのカスタムメトリクスとして追加する方法で収集してみた。

※ ddagentがインストールされていてかつ起動されることが前提

Gemfileに以下を追記

...
gem 'puma-plugin-statsd'
...

config/puma.rbに以下を追記

...
plugin :statsd
...

動作環境の環境変数として以下を追加する

STATSD_HOST=127.0.0.1

ddagentのintegrationでもPumaのメトリクスを収集できるようなので、こちらを使った方がよさそう

参考

https://speakerdeck.com/s4ichi/metorikusuke-shi-hua-karashi-meru-rails-uebusabafalsetiyuningu-kaigi-on-rails-2021 https://blog.naoty.dev/373/