URLのステータスコードをチェックするmunin 自作プラグイン


ことのはじまり

muninのプラグインで指定された、URLのhttpステータスコードを返すプラグインって無いかなー?って探していたのですが結局なかったので自作してみようと試みて、はや一週間・・・・。いろいろなサイトを参考にしましたが、詳しくは、muninのページへというのが多くでリンクをたどるとすべて英語だったのでかなり苦戦した結果・・・できた・・いや、中途半端な気もするけど、できたよお。。ってことでソースを公開したいと思います。記述してよくわからんことがあったので、とりあえず入れてみました的な部分が多いのですが、好きになおしてくださいませ。

ソース

チェックしたいURLはいっぱいあり、それごとに、プラグインを作成するのも、なんかかっこわるかったので、ワイルドカードプライグインっぽい形で作ってみました。

  • /usr/share/munin/plugins/url_status_

# cat /usr/share/munin/plugins/url_status_                                                             
#!/bin/sh                                                                                                                              

#%# family=auto
#%# capabilities=autoconf suggest

_url=`basename $0 | sed 's/^url_status_//g' | sed 's/--/\//g'`

if [ "$1" = "autoconf" ]; then

  _CNT=`rpm -qa | grep -i "^curl" | grep -v grep | wc -l`

  if [ $_CNT -eq 0 ]; then
    echo no
  else
    echo yes
  fi

  exit 0

fi

if [ "$1" = "config" ]; then
  STAT_WARNING=300
  STAT_CRITICAL=400
  echo "graph_title URL Status ${_url}"  
  echo 'graph_args --base 1000 -l 0' 
  echo 'graph_vlabel status_code' 
  echo 'graph_category http_status' 
  echo 'graph_info http status code.' 

  echo 'http_status.label status' # value
  echo 'http_status.draw AREA' # (AREA or STACK or LINE2)
  echo "http_status.warning $STAT_WARNING"
  echo "http_status.critical $STAT_CRITICAL"
  echo 'http_status.info http status.' 

  exit 0
fi

_wait=1
_retry=3
_err_cnt=0

  for X in `seq ${_retry}`; do
    _htstat=`curl -k -LI ${_url} -o /dev/null -w '%{http_code}' -s `

    sleep ${_wait}

    if [ "$_htstat" -gt "400" ] ; then
      _err_cnt=`expr ${_err_cnt} + 1` 
    else
      if [ "$_htstat" -eq "000" ] ; then
        _htstat=999
        _err_cnt=`expr ${_err_cnt} + 1` 
      fi
    fi

  done

  echo -n "http_status.value "
  echo $_htstat 

exit 0

利用方法

前述の通り、ワイルドカードプラグインっぽいことをやっております。たとえば、http://www.google.co.jp/intl/ja/about のhttpステータス監視をしたい場合は、以下な感じでエイリアスをはってくれればと思います。

# cd /etc/munin/plugins
# ln -s /usr/share/munin/plugins/url_status_ url_status_www.google.co.jp--intl--ja--about

なんか、/をファイル名に使うのが、若干面倒臭かったため、/の部分に関しては--にするようにしました。
なので
http://www.google.co.jp/intl/ja/about

www.google.co.jp--intl--ja--about
になるイメージですね。

シンボリックリンクを張り終わったら、munin-nodeを再起動します。

# /etc/init.d/munin-node restart

あ、とりあえず動くか確認してみましょうか・・・うまくいっている感じっす

# munin-run url_status_www.google.co.jp--intl--ja--about
----
http_status.value 200