顧客のdnsサーバの調子が悪い様子。それを監視し、自分たちの判断材料にするために利用
単発script
$ cat /path/to/dnsspeed.sh
# !/bin/bash
# dns lookup speedを計測する
#
# $ bash this.sh ドメイン dnsサーバ
# $ bash this.sh example.com 8.8.8.8
#
# @param (string)[domain] e.g. example.com *required
# @param (string)<dns server> e.g. 8.8.8.8 default: none
#
# @return (int) 成功したら msec の値が返る
if [[ -z $1 ]]; then
echo "dns解決を試すドメインが引数で来ていません。必須です。"
exit 2
else
DOMAIN=$1
fi
if [[ -z $2 ]]; then
DNSSERVER=
else
# dig @8.8.8.8 example.com の形にする
DNSSERVER=@$2
fi
if MYTIME=$((time dig $DNSSERVER $DOMAIN +trace) 2>&1 ) ; then
# 成功したらかかった時間をmsecで返す(timeコマンドから取り出し)
echo $MYTIME | sed -e "s/.*real//" | sed -e "s/user.*//" | sed -e "s/[ms\.]//g"
exit 0
else
# timeout/failは0が返る
echo 0
exit 1
fi
zabbix UserParameter
$ cat dnsspeed.conf
################################################################
# dns lookup speed measuring tool
################################################################
#
# dig コマンドを使ってdns lookup にかかった時間を計測
# 結果がmsecで帰ります。timeoutなら0。
# How to use
# Item:
# type:Zabbix agent
# dnsspeed[domain,<dns server>]
# dnsspeed[example.com]
# dnsspeed[example.com,8.8.8.8]
#
# @param dns lookup したいdomain
# @param dns lookup に使いたいdns server
# @return かかった時間, timeout/failの場合は0
UserParameter=dnsspeed[*],[ -z "$1" ] && echo "Please specity a target domain." || bash /path/to/dnsspeed.sh $1 $2
zabbix trigger
3分dns解決できなければ鳴らす
0=失敗なので0を検知する
{dnsspeed[example.com].avg(3m)}=0
で、青いラインのdns serverが揺れてることがわかったという話。