LoginSignup
5
2

More than 5 years have passed since last update.

Datadog API をイイカンジに叩く為に Dogshell を使う

Last updated at Posted at 2018-08-22

まえがき

Datadog を運用していると、CLI でイイカンジにガッと API を叩きたいなーという気持ちになる時があります。
例えば、特定のメトリクスに依存している Monitor が存在しないかをさっくり調査したい、とか。
どうやら Datadog は Dogshell という CLI ツールを公式で用意してくれているようです、やりましたね! 使っていきましょう!

環境

$ python --version
Python 3.6.4
$ pip --version
pip 18.0

Python 2.7系 でも動いたので、バージョンはあまり気にしなくても良さそうです。

インストール

pip でいけます。

$ pip install datadog

色々出る。

$ dog -v
dog 0.22.0

やりましたね!!!

使う

Dogshell のユーザガイドを流し見すると、以下のコマンドが使えそうです。

dog metric
dog event
dog status_check
dog monitor
dog downtime
dog timeboard
dog screenboard
dog host
dog tag
dog search
dog comment

Datadog の画面を普段から見ている人なら、ふんふん、なるほど、と、何が出来そうかざっくり想像出来ると思います。

設定

早速使っていきたいところですが、 Dogshell を使うには API Key と Application Key などの Config 設定が必要です。
https://app.datadoghq.com/account/settings#api で API Key と Application Key を発行しておきましょう。
AWS CLI みたいに dog config 的な対話的な何かが用意されている気がするんですが、されていません( dog [--config CONFIG] というオプションは存在するようですが、こう、やっぱり対話的に全部のコンフィグを一発で設定したいですよね?)。
なので、ここはいきなりコマンドを叩きます。 put 系の操作を行って何か問題が起こっても嫌なので、参照系のコマンドを適当に先述のコマンド一覧から探しましょう。

$ dog metric --help
usage: dog metric [-h] {post} ...

optional arguments:
  -h, --help  show this help message and exit

Verbs:
  {post}
    post      Post metrics

post しかなくて駄目そう!!!!

$ dog event --help
usage: dog event [-h] {post,show,stream} ...

optional arguments:
  -h, --help          show this help message and exit

Verbs:
  {post,show,stream}
    post              Post events.
    show              Show event details.
    stream            Retrieve events from the Event Stream

show は良さげですね。適当に実行しましょう。すると、 ~/.dogrc が存在しない場合は対話的に Config を要求されます。
~/.dogrc に Config を作る為に、先述の API Key と Application Key を訊かれるので、入力しましょう。

$ dog event show foo
/Users/hieki/.dogrc does not exist. Would you like to create it? [Y/n] Y
What is your api key? (Get it here: https://app.datadoghq.com/account/settings#api)xxxxxxxxxxxxxxxxxxxx
What is your application key? (Generate one here: https://app.datadoghq.com/account/settings#api) xxxxxxxxxxxxxxxxxxxx
Wrote /Users/hieki/.dogrc

~/.dogrc は作成されましたが、 foo という event は存在しないので、怒られます。

ERROR: ERROR: No event matches that event_id.

config の設定はこれで :ok: です。

試してみる

ひとまず私が調査したかったのは、最近利用を停止することになった NewRelic のメトリクスを使っている Datadog Monitor が存在しないか、という点でした。 dog monitor コマンドを使えば良さそうな気配がありますね。help を見てみましょう。

$ dog monitor --help
usage: dog monitor [-h] [--string_ids]
                   {post,update,show,show_all,delete,mute_all,unmute_all,mute,unmute}
                   ...

optional arguments:
  -h, --help            show this help message and exit
  --string_ids          Represent monitor IDs as strings instead of ints in
                        JSON

Verbs:
  {post,update,show,show_all,delete,mute_all,unmute_all,mute,unmute}
    post                Create a monitor
    update              Update existing monitor
    show                Show a monitor definition
    show_all            Show a list of all monitors
    delete              Delete a monitor
    mute_all            Globally mute monitors (downtime over *)
    unmute_all          Globally unmute monitors (cancel downtime over *)
    mute                Mute a monitor
    unmute              Unmute a monitor

show_all!!! これこれ!!!! という気持ちになりますね。
そして mute_all というヤバそうなコマンドも見つけます。絶対に触りたくない。
というわけで show_all を叩きましょう。

$ dog monitor show_all
1111111 無です   無 {'notify_audit': False, 'locked': False, 'timeout_h': 0, 'silenced': {}, 'include_tags': False, 'no_data_timeframe': None, 'require_full_window': True, 'new_host_delay': 300, 'notify_no_data': False, 'renotify_interval': 0, 'escalation_message': '', 'thresholds': {'critical': 50000.0, 'warning': 5000.0}}   33733   sum(last_5m):avg:aws.events.invocations{*}.as_count() > 50000   query alert
2222222 無2です  無2    {'notify_audit': False, 'locked': False, 'timeout_h': 0, 'silenced': {}, 'include_tags': False, 'no_data_timeframe': None, 'require_full_window': True, 'new_host_delay': 300, 'notify_no_data': False, 'renotify_interval': 0, 'escalation_message': '', 'thresholds': {'critical': 50000.0, 'warning': 5000.0}}   33733   sum(last_5m):avg:aws.events.invocations{*}.as_count() > 50000   query alert

これは適当に作ったサンプルの Monitor ですが、こんな感じの乱雑なものがドバっと出てきます。目で読むのは厳しいので適当に grep したりしてめぼしいものを探しましょう。
今回は new_relic が含まれる Monitor なので、

$ dog monitor show_all | grep new_relic

$

という感じです。無さそうですね、オッケー、NewRelic 依存の Monitor は残って無さそうです:sunglasses:

あとがき

Dogshell には他にも色々なコマンドがあるので、 すべての機能を網羅することは出来ませんが、最低限の使い方をご紹介しました。
みなさんも Dogshell で良い Datadog ライフを満喫しましょう!

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2