PumaのメトリクスをDatadogに送る

普段、Datadogを使ってシステムを監視している。AWSの各サービスはCloudWatch metricsを通してDatadogから監視できるんだけど、今回はRailsアプリケーションサーバーであるPumaをDatadogから監視できるようにする。

DogStatsD

DatadogのIntegrationにPumaはないため、カスタムメトリクスを送ることになる。DogStatsDを使うと簡単にカスタムメトリクスを送ることができる。DogStatsDはdatadog-agentに同梱されており、受け取ったカスタムメトリクスをDatadogに転送する。また、StatsDと同じプロトコルを実装しているため、StatsDクライアントはDogStatsDを通してDatadogにメトリクスを送ることができる。

Pumaのメトリクス

PumaはPuma.statsから以下のようなメトリクスを取得することができる。

  • backlog: スレッドによる処理を待つコネクション数
  • running: 実行中のスレッド数
  • pool_capacity: 現在サーバーが取得できるリクエスト数
  • max_threads: 最大スレッド数

puma-plugin-statsd

puma-plugin-statsdPuma.statsから取得したメトリクスをStatsDサーバーに送る。Pumaのプラグインなので、以下のようにconfig/puma.rbに指定する。

plugin :statsd

そして、起動時に環境変数STATSD_HOSTでStatsDサーバーのホストを指定する。DogStatsDを使う場合、datadog-agentのホストを指定すればいい。

これで、PumaのメトリクスがDatadogに送られるようになる。