普段、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-statsdはPuma.stats
から取得したメトリクスをStatsDサーバーに送る。Pumaのプラグインなので、以下のようにconfig/puma.rb
に指定する。
plugin :statsd
そして、起動時に環境変数STATSD_HOST
でStatsDサーバーのホストを指定する。DogStatsDを使う場合、datadog-agentのホストを指定すればいい。
これで、PumaのメトリクスがDatadogに送られるようになる。