Datadog SSL証明書期限監視 一括登録方法

Datadog

 DatadogのSynthetic API Testを利用してSSL証明書監視を始めようとしたが、登録サイト数は500以上。手動でひとつずつは現実的ではない。csvファイルでのインポート対応が無いか営業さんに確認してみたが、提供していないとのこと。公式ページを見ると、APIで登録できると。苦手ですね。。。ただ500個手動登録よりはるかに楽だろう!という思いでやってみました。

  1. API Keyの取得
    • Datadogの管理コンソールにログイン
    • 左メニューの中の「Integrations」-「APIs」を選択
    • 「API Keys」を展開して「New API Key」に任意の名前を入力して作成
    • Key欄に記載されている文字列を控える
  2. Application Keyの取得
    • Datadogの管理コンソールにログイン
    • 左メニューの中の「Integrations」-「APIs」を選択
    • 「Application Keys have moved to the Teams page」を選択
    • 「New Key」に任意の名前を入力して作成
    • Key情報を控える(※誤って閉じた場合は該当項目にカーソルを当てると右のほうにメモマークが出て、押すとKey情報がコピーできます
  3. スクリプトを動かす準備
    • CentOSサーバ
    • シェルスクリプトでcurlを実行
    • ディレクトリ(環境に合わせてどうぞ):/usr/local/tool/datadog/ssl-cert/
    • 登録するURL一覧(1行1URL):/usr/local/tool/datadog/ssl-cert/sitelist.txt
    • スクリプト(中身は以下):/usr/local/tool/datadog/ssl-cert/monitor-add.sh
  4. スクリプトの中身
    • 素人なのでエラー処理とか無いです。。。すいません
#!/bin/sh

## デフォルト定義
APIKEY=`1でメモした文字列`
APPKEY=`2でメモした文字列`
FILE=/usr/local/tool/datadog/ssl-cert/sitelist.txt

## API連携
cat ${FILE} | while read line;
do
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
    {
      "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": [
        "env:ssl\",\"env:test\"
      ],
      "locations": [
        "aws:ap-northeast-1"
      ],
      "message": "",
      "name": "${line}",
      "type": "api"
    }
EOF

 以前の記事で紹介した設定内容を自動で入れるAPIとなります。一応各項目の補足を下記に記載しておきますが、詳細は公式ページを参照ください。

項目とりあえずの値意味
tick_every86400監視間隔、左記だと1日
assertions
– target
0何日前でアラートにするか(「前」は”operator”: “isInMoreThan”)
私の環境は期限が切れる前に気づくための通知を別の仕組みでしているので、完全に期限が切れたタイミングでアラートにしてます
host${line}監視対象のURL(例:google.com)が、/usr/local/tool/datadog/ssl-cert/sitelist.txtのファイルから1行ずつ抽出されます
tagsenv:ssl,env:testグループ定義みたいなもの。先はSSLグループとtestグループに紐づけたという感じ
locationsaws:ap-northeast-1どこから監視するか、左記だと東京リージョン
name${line}監視名。私の環境は監視するサイト名と同じにしてます

 通知なども含めたければ項目を追加すれば可能となります。私の環境では事前検知の通知方法をもっとカスタマイズしたかったため、monitorで行っております。(monitorは何個作っても月額費用に影響ない※たぶん)その内容はまたの機会で公開したいと思います。

 今回は、大量のURL設定を一括設定するには、ということを記事にさせていただきました。単純なスクリプトですが誰かに活用してもらえたらうれしいです。

コメント