Datadogのモニタの一括登録などをしてみた

テスト環境で手動登録したやつをexport(json)してほかのorganizationにimportしてみた備忘録です。
同僚のpythonできる方がなんか作ってくれたのをapikeyを引数にする感じに改造してみました。


```python:単体のモニタをimportするスクリプト
# -*- coding: utf-8 -*-
# Make sure you replace the API and/or APP key below
# with the ones for your account
'''
Usage：

    python .\import_monitor.py --apikey "apikey" --appkey "appkey" [template.json]

'''
from datadog import initialize, api
import json
import sys
import argparse

parser = argparse.ArgumentParser()

parser.add_argument('--apikey', action='store', help="optional") 
parser.add_argument('--appkey', action='store', help="optional") 
parser.add_argument("jsonfile", help="please set me")
args = parser.parse_args() 

apikey = args.apikey
appkey = args.appkey
jsonfile = args.jsonfile

options = {
    'api_key':apikey,
    'app_key':appkey
}

initialize(**options)

#arg conf
argvs = sys.argv
argc = len(argvs)

# Create a new monitor
if (argc != 6):
    print('bad')
    quit()

f = open(jsonfile, "r")
data = json.load(f)
api.Monitor.create(
    type = data["type"],
    query = data["query"],
    name = data["name"],
    message = data["message"],
    tags = data["tags"],
    options = data["options"]
)
```

```shell-session:一括処理
$ ls -1 ./path_to_file/*.json > jsonfiles.txt
$ cat jsonfiles.txt | while read line
> do
> python import_monitor.py --apikey "apikey" --appkey "appkey" "$line"
> done
```
更新はid指定するだけで大体同じ感じでした。
あと、スケジュールダウンタイムとかも。モニタの画面からできるのであんま需要なさそうですかね。


```
$ cat schedule_downtime_all.py 
from datadog import initialize, api
import time
import argparse
parser = argparse.ArgumentParser()

parser.add_argument('--apikey', action='store', help="optional") 
parser.add_argument('--appkey', action='store', help="optional") 
parser.add_argument('--start', action='store', help="optional") 
parser.add_argument('--end', action='store', help="optional") 
parser.add_argument('--orgname', action='store', help="optional") 
parser.add_argument('--notifies', action='store', help="optional")

args = parser.parse_args() 

apikey = args.apikey
appkey = args.appkey

options = {
    'api_key':apikey,
    'app_key':appkey
}

initialize(**options)

# set vars from options(timezone=Asia/Tokyo).
start_ts = args.start
end_ts = args.end
org_name = args.orgname
notifies = args.notifies
message = "%s mainte schedule created. %s" % (org_name, notifies)
timezone = 'Asia/Tokyo'

# Schedule downtime
api.Downtime.create(
    scope='*',
    start=start_ts,
    end=end_ts,
    message=message,
    timezone=timezone
)

$ python schedule_downtime_all.py --apikey "apikey" --appkey "appkey" \
 --start "$(date +%s --date '2018-08-03 20:00')" --end "$(date +%s --date '2018-08-04 20:00')" \
 --orgname "Test" --notifies "@mailaddr1 @mailaddr2"
```
dogコマンドで一括muteする場合は以下のような感じでendない永遠ミュートに。  

```
dog --config ~/.dogrc_hoge monitor mute_all | jq '.'
```
なんかpipでdatadogいれるとdogコマンドが入っていました。
http://htnosm.hatenablog.com/entry/2017/03/15/090000
ただまあスケジュールダウンタイム登録はtimezone指定できなかったりオプション足らない感じでした。（のでpythonスクリプト一応つくった）

引数よりos.environとかつかったほうがいいんすかね。（よくわかっていない）
https://note.nkmk.me/python-os-environ-getenv/

参考：
https://docs.datadoghq.com/api/?lang=python#monitors
https://qiita.com/stkdev/items/e262dada7b68ea91aa0c
https://qiita.com/dodo5522/items/6ec2b6d83287add6c185
http://www.yamamo10.jp/yamamoto/comp/Python/dictionary/index.php
https://www.sejuku.net/blog/40791
http://htnosm.hatenablog.com/entry/2017/03/24/090000
https://docs.datadoghq.com/ja/guides/monitors/#%E9%81%B8%E6%8A%9E%E3%81%97%E3%81%9Fmonitor%E3%82%92%E8%A8%AD%E5%AE%9A%E5%A4%89%E6%9B%B4%E3%81%99%E3%82%8B