もりはやメモφ(・ω・ )

ITとか読書感想文とか

DatadogのCLIツール dogshell でサイトメンテ前後で Synthetic をミュートする

Datadogには、 dogshell と呼ばれるCLIツールがあります。 この dog コマンドを利用して特定のMonitorを mute -> unmute したメモです。 利用したのは dog 0.41.0 です。

docs.datadoghq.com

Why

背景を簡単に書いておくと、ウェブサイトで夜間メンテを行うケースで、これまでは事前に Downtime をスケジュール設定していました。 しかし、メンテナンスを発動するための仕組みは別途あり、ときどき Datadog 側を忘れてしまうことがありました。

そのため、メンテナンス発動の仕組みの中でAPIなりCLIなりで対象の Datadog Montior をMuteすることで、Downtime設定忘れによる不要なアラートを防ぎたいと考えました。

How

dog monitor show_all

MuteしたいMonitorのIDを show_allgrep で取得します。 今回は外形監視のSyntheics が対象でした。

$ dog monitor show_all | grep Synthe
10599998    xxxxxxxxxxxxxxxxxx synthetics alert
10599999    yyyyyyyyyyyyyyyyy synthetics alert

dog monitor mute

Muteは以下のようにします。成功すればリターン0です。

$ dog monitor mute 10599998

ちなみにすでにMute済みのMonitorに対して実行すると、ちゃんとエラーになります。

bash-3.2$ dog monitor mute 10599998
ERROR: synthetics alert "[Synthetics] Test on xxxxxxxxxxxxxxxxx" is already muted

Webからみても、Muteマークが付与されていることを確認できます。

f:id:morihaya:20210430124810p:plain
Muted Datadog Monitor

dog monitor unmute

Unmuteも同様、かと思ったのですがトラップが一つありました。 --all_scopes オプションを付与しないと、Unmuteされない問題がありました。

$ dog monitor unmute 10599998 --all_scopes

--all_scopes オプションを付与しないと、Mute済みにもかかわらず以下のエラーが出ます。GitHubのIssueで教えてくれた @therve 氏に感謝します。

bash-3.2$ dog monitor unmute 10599998
ERROR: synthetics alert "[Synthetics] Test on xxxxxxxxxxxxxxxxx" is already unmuted on

Setup

dogshell のインストールは pip で簡単に行えますが、一応メモを残しておきます。

$ pip install datadog

今日(2021-04-30)の最新は 0.41.0 でした。

bash-3.2$ dog --version
dog 0.41.0

helpコマンドを見れば、大体の利用方法はわかります。 もちろんドキュメントにも目を通すべきでしょう。

bash-3.2$ dog --help
usage: dog [-h] [--config CONFIG] [--api-key API_KEY]
           [--application-key APP_KEY] [--pretty] [--raw] [--timeout TIMEOUT]
           [-v]
           {comment,search,metric,tag,event,monitor,timeboard,dashboard,screenboard,dashboard_list,host,downtime,service_check,service_level_objective}
           ...

Interact with the Datadog API

optional arguments:
  -h, --help            show this help message and exit
  --config CONFIG       location of your dogrc file (default ~/.dogrc)
                        (default: /Users/hayashi_yukiya/.dogrc)
  --api-key API_KEY     your API key, from
                        https://app.datadoghq.com/account/settings#api. You
                        can also set the environment variables DATADOG_API_KEY
                        or DD_API_KEY (default: None)
  --application-key APP_KEY
                        your Application key, from
                        https://app.datadoghq.com/account/settings#api. You
                        can also set the environment variables DATADOG_APP_KEY
                        or DD_APP_KEY (default: None)
  --pretty              pretty-print output (suitable for human consumption,
                        less useful for scripting) (default: None)
  --raw                 raw JSON as returned by the HTTP service (default:
                        None)
  --timeout TIMEOUT     time to wait in seconds before timing out an API call
                        (default 10) (default: 10)
  -v, --version         Dog API version

Modes:
  {comment,search,metric,tag,event,monitor,timeboard,dashboard,screenboard,dashboard_list,host,downtime,service_check,service_level_objective}
    comment             Post, update, and delete comments.
    search              search datadog
    metric              Post metrics.
    tag                 View and modify host tags.
    event               Post events, get event details, and view the event
                        stream.
    monitor             Create, edit, and delete monitors
    timeboard           Create, edit, and delete timeboards
    dashboard           Create, edit, and delete dashboards
    screenboard         Create, edit, and delete screenboards.
    dashboard_list      Create, edit, and delete dashboard lists
    host                Mute, unmute hosts
    downtime            Create, edit, and delete downtimes
    service_check       Perform service checks
    service_level_objective
                        Create, edit, and delete service level objectives
bash-3.2$

初回実行時に、APIキー用のファイルを作るように求められるので、作ります。

bash-3.2$ dog monitor show_all
/Users/morihaya/.dogrc does not exist. Would you like to create it? [Y/n]

作ると以下のようなファイルです。

bash-3.2$ cat ~/.dogrc
[Connection]
apikey = hogehoge
appkey = fugafuga

dogshell は基本的な操作を行えるようなので、CIやCDの中でAPIをPythonなどで叩くまでもないケースで重宝しそうですね。