最近、業務案件でLibratoを使っています。
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とちまちまダッシュボードを作っていたのですが、いい加減辛くなって、ダッシュボードまわり・アラートまわりをコード化しました。
使い方
サブコマンドが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のアラート部分も一応コード化してました。
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の各種ダッシュボードもコード化できるのでしょうが、やるモチベーションは今のところないですね…