回線速度をZabbixでモニターする

背景

最近、自宅のケーブルテレビ回線を増速しました。ただ、ネットで調べると増速しても回線品質が悪いとなかなかの評判なので、実効速度をモニターしてあまりに遅いようなら光回線とか検討しようかなーと思い、Zabbixでダウンロードの速度を計測することにしました。

自宅のマンションが無料で8Mbpsのケーブルテレビ回線を使えるから使っていたんですが、8Mbpsだと下りは1〜7.5Mbps、上りは100kbpsぐらいで結構ストレスがたまります。2000円弱で30Mbpsにできるそうなので試してみようかなと。その上は4000円弱で160Mbpsだそうで、それなら光にした方がいいかなーというところです。

Zabbixで回線速度をモニターする

外部チェックスクリプトの作成

curl -w "%{speed_download}"

#!/bin/bash

SINGLE_DL_TIMEOUT=7
ZABBIX_TIMEOUT=30

FILES_TO_DOWNLOAD=()
FILES_TO_DOWNLOAD+=(http://www.gomplayer.jp/img/sample/mp4_h264_aac.mp4)
FILES_TO_DOWNLOAD+=(http://www.gomplayer.jp/img/sample/mp4_mpeg4_aac.mp4)
FILES_TO_DOWNLOAD+=(http://ec.nikkeibp.co.jp/nsp/dl/05405/05405_08.zip)
FILES_TO_DOWNLOAD+=(http://ec.nikkeibp.co.jp/nsp/dl/05405/05405_13.zip)
FILES_TO_DOWNLOAD+=(http://wwwjp.kodak.com/JP/images/ja/digital/cameras/dc120/image031.tif)
FILES_TO_DOWNLOAD+=(http://www.sharp.co.jp/galileo/guide/movie/sample/sample2_k.mpg)
FILES_TO_DOWNLOAD+=(http://homepage1.nifty.com/trust-system/SAMPLE_koriyama.LZH)

############################

cnt=0
sum=0

dl_num=$(expr \( ${ZABBIX_TIMEOUT} - 1 \) / ${SINGLE_DL_TIMEOUT})

function calc {
  if [ ${cnt} -gt 0 ]; then
    expr ${sum} / ${cnt} 2>/dev/null
  else
    echo 0
  fi
  exit
}

trap calc EXIT

files_to_process=()
while [ ${#files_to_process[@]} -lt ${dl_num} ] && [ ${#files_to_process[@]} -lt ${#FILES_TO_DOWNLOAD[@]} ]; do
  index=$((RANDOM % ${#FILES_TO_DOWNLOAD[@]}))
  file=${FILES_TO_DOWNLOAD[${index}]}
  echo "${files_to_process[@]}" | grep "${file}" > /dev/null
  if [ $? -eq 0 ]; then
    continue;
  fi
  files_to_process+=(${file})
done

for file in ${files_to_process[@]}; do
  speed_Bps=$(curl -kL -m ${SINGLE_DL_TIMEOUT} "${file}" -o /dev/null -w "%{speed_download}" 2>/dev/null)
  speed_bps=$(expr ${speed_Bps%.*} \* 8)
  if [ $speed_bps -gt 0 ]; then
     sum=$(expr ${sum} + ${speed_bps})
     cnt=$(expr ${cnt} + 1)
  fi
done

Zabbixでアイテムを設定

f:id:miyataro32:20171011022519p:plain