share facebook facebook twitter menu hatena pocket slack

2017.06.12 MON

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

川原 洋平

WRITTEN BY 川原 洋平

あれから一年半

mruby で Datadog API Client を作ってみた - ようへいの日々精進XP
追記 github.com mgem-list にも取り込んで頂いた。 mgem-list に取り込んでいただくには mgem-list を fork して mruby-xxxx.gem ファイルを以下のように作成して Pull Request を送る。 name: mruby-datadog description: Datadog API Client. author: Yohei Kawah...

inokara.hateblo.jp

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

inokappa/mruby-datadog
Contribute to mruby-datadog development by creating an account on GitHub.

github.com

目指したもの

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

DataDog/dogapi-rb
dogapi-rb - Ruby client for Datadog's API

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 に続く。

元記事はこちら

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

cloudpack

cloudpackは、Amazon EC2やAmazon S3をはじめとするAWSの各種プロダクトを利用する際の、導入・設計から運用保守を含んだフルマネージドのサービスを提供し、バックアップや24時間365日の監視/障害対応、技術的な問い合わせに対するサポートなどを行っております。
AWS上のインフラ構築およびAWSを活用したシステム開発など、案件のご相談はcloudpack.jpよりご連絡ください。