最近書いた Datadog にメトリクスを送りつけるツール

日頃インフラメトリクスの監視には Datadog を使っています。最近せっかくなのでインフラ以外の色々も Datadog で監視したくなったので、メトリクス中継用のツールを2個ほど作りました。せっかくなので紹介します。

SendGrid2Datadog (SendGrid events)

github.com

メール配信サービスである SendGrid のイベントを Datadog 上で監視できるようにするやつです。

いまどのくらいメールが送られているかというのをパッと確認できるようにしたいと思い作りました。インフラメトリクスが置いてあるダッシュボードにこのグラフを同居させてあるため、DB 負荷が上がった時にも効率よく確認することができます。

SendGrid2Datadog 自体は Heroku 上で動作しています。

実装

SendGrid2Datadog は小さな Web アプリケーション (Ruby + Sinatra) として実装されてます。SendGrid にはメール送信や送信失敗のイベントごとに Webhook を投げる機能があるため、それを受けて都度 Datadog にイベント発生を送信するようにしています。 Datadog への送信は Dogstatsd を使っています。

Spotdog (EC2 Spot Instance History)

github.com

AWS EC2 には価格変動型のスポットインスタンスというのがあります。このスポットインスタンスの価格推移を Datadog 上で監視できるようにするやつです。

この価格推移グラフ、一応 Management Console にログインすれば見れるのですがまあ面倒です。複数インスタンスタイプの一覧表示とかできません。

f:id:dtan4:20151018175512p:plain

なので、Datadog 上で見られるように、自分の好きなようにグラフを組めるように Spotdog を作りました。上の図にあるようにオンデマンド価格を閾値として表示できるため便利です。オンデマンド価格を超えたらアラート飛ばすとかももちろん可能です。

惜しいのは、値が小数点第二位までしか表示できないことでしょうか(グラフ上は反映されてる)。c4.xlarge あたりだと小数点第三位での動きが多いのでそのへん確認できないのはつらいです。まあグラフでだいたいの推移を確認できるのでよいでしょうか。

Spotdog も Heroku 上で動作しています。ただ、こいつは後述するようにコマンドラインツールなので Heroku Scheduler で10分おきに叩くようにしています。

実装

Spotdog は Rubyコマンドラインツールです。Docker image もあります (quay.io/dtan4/spotdog)。インスタンスタイプや期間を指定すると、AWS の API を叩いてそのあいだの価格推移を取得し、ひとまとめに Datadog へ送信します。 Datadog への送信は Datadog API を使っています。

おわりに

今回は取得するメトリクスの性質が違うこともあって、全く別々に実装しました。Fluentd 噛ますようにするとスマートになるかな?とは思ったのですが普段 Fluentd 使ってないのでスクラッチでサッと実装した次第です。