2019年に Synthetics が実装されたので、お金があるひとはそっちつかったほうがいいです。
Synthetics最高です。
以下は歴史的なメモとして残しておきますが、2020年現在、ゴミだといえます。
前置き
- Datadogではいろいろなサービス用のintegrationが用意されているが、残念ながら外からHTTP/HTTPSで接続してのモニタリングができるようなintegrationはない。
- 外部のサーバからHTTP/HTTPSでの接続を行い、その結果をDatadogのカスタムメトリクスに投げ込み、その状態をモニタリングすればよい、という天の声を得た。
- 幸い、監視したいとおもったシステムにはWebサーバが稼働しているリージョンとは別リージョンに管理用のサーバが存在していた。
やったこと
- ターゲットURLへの接続ステータスをカスタムメトリクスに投げ込むスクリプトをEC2(Linux)上に設置
- 上記スクリプトをcronで定期実行する設定
- DDのdashboardで、カスタムメトリクスを表示(Query Valueを使用)
作成したスクリプト
urlcheck.sh
#!/bin/sh
API_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX # DDのIntegrations->APIsでAPIキー調べてね
URLLISTFILE=/path/to/urllist.txt # ターゲットURLを並べただけのリストファイル
# main
LINE=1
IFS=$'\n'
for URL in $( cat $URLLISTFILE );
do
echo $URL | egrep -v '^#' > /dev/null
if [ $? -eq 0 ];then
RES=`curl -k -s $URL -o /dev/null -w "%{http_code}\n"`
if [ $RES -eq "200" ]; then
is_code_200=1
else
is_code_200=0
fi
# DDへ投げ込み
currenttime=$(date +%s)
curl -s -X POST -H "Content-type: application/json" \
-d "{ \"series\" :
[{\"metric\":\"urlcheck.httpstatus$LINE\",
\"points\":[[$currenttime, $is_code_200]],
\"type\":\"gauge\",
\"host\":\"oreno-ec2\",
\"tags\":[\"hostname:oreno-ec2\", \"region:us-east-1\"]}
]
}" \
"https://app.datadoghq.com/api/v1/series?api_key=$API_KEY"
LINE=$(( LINE + 1 ))
fi
done
urllist.txtサンプル
# ターゲットURL一覧
http://hittodayoo.com/
https://anone.hitomine.com/monitoring.php
Datadog上での使い方
- リストファイルの上から順番に urlcheck.httpstatus1,2,3…というメトリクスにステータス200の場合1,それ以外の場合0が入るので、それを使用
- 筆者の場合はQuery Valueを使い、全メトリクスのステータスを足し算した値が対象サイト数よりも少ない場合、どれかのURLで障害が発生しているという意味でバックグラウンドを赤にするというウィジェットを表示させてみた