LoginSignup
2
3

More than 5 years have passed since last update.

dns lookupにかかった時間を記録・監視する

Last updated at Posted at 2018-02-07

顧客の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が揺れてることがわかったという話。

2018-02-07_19h36_05.png

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3