DatadogでSynthetic監視を大量に追加して、それをMonitor側でチマチマ全部の通知設定をやる。めっちゃ時間かかります!なので、スクリプトでAPI叩いて自動で登録する仕組みを作ってみました。
構成
- サーバ
- OS:centOS7
- ディレクトリ
- /usr/local/tool/datadog/ssl-cert
- /usr/local/tool/datadog/ssl-cert/_temp/
- /usr/local/tool/datadog/ssl-cert/add-history/
- ファイル
- sitelist.txt
- 監視したいURL(1行1URLで記載しておく)
- group.txt
- 登録する監視項目に紐づけるタグをあらかじめ指定しておく
- URL毎に変更したい場合は、ここを編集して、sitelistを別で用意する
- add-result.txt
- Syntheticで監視登録した内容を一時保存するファイル
- add-result2.txt
- Monitorで登録した内容を一時保存するファイル
- 今後のために用意しただけなので動作の上では不要
- id-yyyymmdd
- public-id(datadog上で管理するための一意のID)とURLを紐づけたものを保存するファイル
- 今後のために用意しただけなので動作の上では不要
- sitelist.txt
- 監視設定概要
- Synthetic
- 監視間隔:1日
- 監視内容:証明書期限
- アラート:期限切れ時
- 通知:無し
- 監視リージョン:AWS(tokyo)
- Monitor
- アラートタイミング:4320時間未満(3日未満)
- 通知:watcher@piteki.comへメール送信
- Synthetic
事前準備ファイル
sitelist.txt(以下はサンプル)
www.google.com
www.yahoo.co.jp
test.org
group.txt(以下はサンプル)
## group setting
## - 以下のコメント情報を参考にし追加するグループを下記に記入
group=\"env:ssl\",\"env:japan\",\"env:aws\",\"env:wild\"
# ,\"env:japan\"
# ,\"env:america\"
# ,\"env:aws\"
# ,\"env:gcp\"
# ,\"env:wild\"
実行スクリプト
/usr/local/tool/datadog/ssl-cert/kanshi-add.sh
#!/bin/sh
## README
## * 利用方法
## - sitelist.txt に監視したいURLを1行1URLで記載
## - group.txt に所属させるグループ情報を記載
## - 本scriptを実行
## デフォルト定義
APIKEY=aaaabbbbccccddddeeeeffffgggghhhh
APPKEY=1111222233334444555566667777888899990000
TEMP_FILE=/usr/local/tool/datadog/ssl-cert/_temp/add-result.txt
TEMP_FILE2=/usr/local/tool/datadog/ssl-cert/_temp/add-result2.txt
ADD_FILE=/usr/local/tool/datadog/ssl-cert/add-history/id-`date +%Y%m%d`
FILE=/usr/local/tool/datadog/ssl-cert/sitelist.txt
## group setting の読み込み
. /usr/local/tool/datadog/ssl-cert/group.txt
## API連携コマンド
cat ${FILE} | while read line;
do
## synthetics tests 登録API
curl -X POST "https://api.datadoghq.com/api/v1/synthetics/tests" \
-H "Content-Type: application/json" \
-H "DD-API-KEY: ${APIKEY}" \
-H "DD-APPLICATION-KEY: ${APPKEY}" \
-d @- << EOF > ${TEMP_FILE}
{
"options": {
"tick_every": 86400,
"monitor_options": {
"renotify_interval": 0,
"notify_no_data": false,
"new_host_delay": 300,
"include_tags": true,
"locked": false,
"notify_audit": false
}
},
"config": {
"configVariables": [],
"assertions": [
{
"operator": "isInMoreThan",
"type": "certificate",
"target": 0
}
],
"request": {
"port": 443,
"host": "${line}"
}
},
"subtype": "ssl",
"tags": [
${group}
],
"locations": [
"aws:ap-northeast-1"
],
"message": "",
"name": "${line}",
"type": "api"
}
EOF
## 実行結果からpublic_idを抽出
public_id=`cat ${TEMP_FILE} | awk -F ":" '{print $3}' | awk -F "\"" '{print $2}'`
## host名とpublic_idを紐づけたファイルの生成
echo ${public_id} ${line} >> ${ADD_FILE}
## monitor 登録API
curl -X POST "https://api.datadoghq.com/api/v1/monitor" \
-H "Content-Type: application/json" \
-H "DD-API-KEY: ${APIKEY}" \
-H "DD-APPLICATION-KEY: ${APPKEY}" \
-d @- << EOF > ${TEMP_FILE2}
{
"restricted_roles": null,
"tags": [],
"deleted": null,
"query": "min(last_1d):min:synthetics.ssl.time_to_expiry{check_id:${public_id}} < 4320",
"message": "{{#is_alert}} 証明書期限が残り3日前となりました。 {{/is_alert}}\n{{#is_alert_recovery}}証明書が更新され残り期限が延長されました。{{/is_alert_recovery}}\n\n@watcher@piteki.com",
"matching_downtimes": [],
"multi": false,
"name": "証明書監視 ${line} 有効期限3日前",
"priority": null,
"overall_state": "Alert",
"type": "query alert",
"options": {
"notify_audit": false,
"locked": false,
"timeout_h": 0,
"silenced": {},
"include_tags": false,
"no_data_timeframe": null,
"require_full_window": false,
"new_host_delay": 300,
"notify_no_data": false,
"renotify_interval": 0,
"escalation_message": "",
"thresholds": {
"critical": 4320
}
}
}
EOF
done
コメント