dns lookup에 소요된 시간 기록 및 모니터링

고객의 dns 서버의 상태가 나쁜 모습. 그것을 모니터링하고 자신의 판단 재료로 만들기 위해 사용

단발 스크립트


$ 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가 흔들리는 것을 알았다는 이야기.

좋은 웹페이지 즐겨찾기