Libratoをコード化しました

最近、業務案件でLibratoを使っています。

f:id:winebarrel:20150817001920p:plain

Libratoはメトリクス収集のSaaSで、メトリクスの収集とアラートの設定・通知ができます。 たぶんDatadogとかが競合になるんじゃないでしょうか。

Datadogほど多機能ではないですが、「グラフを書く」「グラフを並べてダッシュボード(Space)」を作る」「閾値を超える・下がる等でアラートを投げる(emal・hipchat・slack・SNS…etc)」「AWS・HerokuなどとのIntegration」と基本的な機能はそろっています。

有名な事例だとTreasure DataがLibratoを使っていたみたいです(いまはDatadogなのかな・・?)

なんでDatadogじゃないの?

ずばりお値段です。

Datadogは$15/ホストの課金ですが、Libratoはメトリクスごとの課金になります。解像度を下げるとさらに安く。

dstatの主要メトリクスだけを取るとすると、60〜300sの解像度でホストあたり$1〜$2とかなりお安くなります。

参考: fluentd+dstat+libratoでサーバのメトリクスを可視化する - Qiita

あとホストごとじゃなくて、単体でサービスメトリクスを取りたいことが結構あるので、その辺もLibratoの課金体系にマッチするかなと。

コード化

AWSのインテグレーションなどを使うと適当にダッシュボード作ってくれるのですが、自前のメトリクスは自分でダッシュボードを作る必要があります。

ホストごとに「CPU使用率」「メモリ使用率」「ディスク使用率」…etcとちまちまダッシュボードを作っていたのですが、いい加減辛くなって、ダッシュボードまわり・アラートまわりをコード化しました。

github.com

使い方

サブコマンドがalert service(通知先) space(ダッシュボード)とあって、以下のような感じで使います。

$ lbrt space export space.rb
$ lbrt space apply space.rb --dry-run
$ lbrt space apply space.rb

他のCodenize.toolsのようなMakefile的なファイルは特にありません。

ダッシュボード

ダッシュボードのDSLは以下のようになります。

space "My Space1" do
  chart "chart1" do
    type "stacked"
    stream do
      metric "login-delay"
      type "gauge"
      source "*"
      group_function "average"
      summary_function "average"
    end
  end
end

chartを増やしていけば、ダッシュボードにグラフが追加されます。

アラート

alert "alert1" do
  description "My Alert1"
  attributes "runbook_url"=>"http://example.com"
  active true
  rearm_seconds 600
  rearm_per_signal false

  condition do
    type "below"
    metric_name "login-delay"
    source "foo.bar.com"
    threshold 1.0
    summary_function "sum"
  end

  service "mail", "my email"
end

service "mail", "my email" do
  settings "addresses"=>"sugawara@example.com"
end

service "slack", "my slack" do
  settings "url"=>"https://hooks.slack.com/services/..."
end

serviceはアラートの通知先です。HipChat・Slack・Amazon SNS・Zapierなどのメジャーどころはそろっています。

個人的にTwillioがなかったのが残念だったのですが、Amazon SNSさえ使えればLambda経由でどうとでもできますね。

所感

シンプルさ故なのでしょうが、ダッシュボードをコード化できたのは大変うれしいです。 Zabbixもいつかコード化してやろうとはもくろんでいたのですが、なんか夢で終わりそうな気がしてます。

まだすごく使い込んでいるわけではないのですが、今のところ大きく困るところはないのでしばらく使い続けてみようと思ってます。

どうぞご利用ください。

ところでDatadogのアラートもコード化していました

barkdogというツールを作ってDatadogのアラート部分も一応コード化してました。

github.com

monitor "Check load avg", :type=>"metric alert" do
  query "avg(last_5m):avg:ddstat.load_avg.1m{host:i-XXXXXXXX} > 1"
  message "@winebarrel@example.net"
  options do
    notify_no_data true
    no_data_timeframe 2
    notify_audit true
    silenced({})
  end
end

ちょうがんばればDatadogの各種ダッシュボードもコード化できるのでしょうが、やるモチベーションは今のところないですね…