ようへいの日々精進XP

よかろうもん

あれから一年半、mruby の Datadog Client をほぼ作り直した

あれから一年半

inokara.hateblo.jp

何もしていなかったわけではないけど、ほぼ放置していた mruby-datadog を作り直しました。

github.com

目指したもの

オフィシャルの Ruby クライアント。

github.com

実装はともかく、メソッド名や引数についてはオフィシャルの Ruby クライアントの極力寄せていくのがポリシー。

サポートされている API

全てのメソッドを網羅出来てはいませんが、以下の API をサポートとしています。

引き続き、自分のスキルで実装出来るレベルでサポートする API は追加していく予定です。

example

リポジトリの example にもアップしているけど、以下のようなコードで Datadog を操作出来ます。

config = {
  :api_key => "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  :app_key => "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"
}

#
# Monitors
#
dog = Datadog::Monitors.new(config)
res = dog.get_all_monitors
p res.length
res = dog.get_all_monitors(tags: "host:vagrant-ubuntu-trusty-64")
p res.length
res.each do |monitor|
  p monitor
end
puts dog.get_monitor(1234567)

options = {
  'notify_no_data' => true,
  'no_data_timeframe' => 20
}
tags = ['app:webserver', 'frontend']
puts dog.monitor("metric alert", \
            "avg(last_1h):sum:system.net.bytes_rcvd{host:host0} > 100", \
            :name => "Bytes received on host1", \
            :message => "We may need to add web hosts if this is consistently high.", \
            :tags => tags, \
            :options => options)

puts dog.monitor("metric alert", \
          "avg(last_1h):sum:system.net.bytes_rcvd{host:host1} > 100")

puts dog.update_monitor(1234567, "metric alert", \
            "avg(last_1h):sum:system.net.bytes_rcvd{host:host1} > 100")

puts dog.delete_monitor(1234567)
puts dog.get_monitor(1234567)

puts dog.mute_monitor(1234567)
puts dog.unmute_monitor(1234567)

puts dog.mute_monitors
puts dog.unmute_monitors

#
# Metrics
#
dog = Datadog::Metrics.new(config)
puts "response: #{dog.emit_points("mruby.test", 50, :host => "foo.bar.com")}"
points = [[Time.now.to_i, 1], [Time.now.to_i + 10, 10], [Time.now.to_i + 20, 20]]
puts "response: #{dog.emit_points("mruby.test2", points, :host => "foo.bar.com")}"

from = Time.now.to_i - 3600
to = Time.now.to_i
query = 'system.cpu.idle{*}by{host}'
puts dog.get_points(query, from, to)

#
# Search
#
dog = Datadog::Search.new(config)
dog.search("host:vagrant-ubuntu-trusty-64")

Datadog Agent をインストール出来ないような環境(ってあるのか解らないけど)等で動くアプリケーションのメトリクス収集等に使えるかなあ。

以上

mruby-datadog の簡単な紹介でした。

ということで、mruby-datadog を利用した mchihuahua に続く。