NTTドコモ様_dカーシェア
NTTドコモ様_dカーシェア
2012.10.04

サーバーの負荷を手軽に確認するシェルスクリプトを作ってみた。

卓司

こんにちは。卓司です。

前回、特定のファイルを一つのディレクトリに移動させる、という内容のシェルスクリプトの記事を書いたところ、ありがたい事にTwitterにて大変、参考となるご意見が寄せられました。この場を借りてお礼を言わせて頂きます。ありがとうございました。未熟ではありますが、今後ともシェルスクリプトについて書かせて頂きたいと思っていますので、お気づきの点などございましたらご指摘頂ければ嬉しいです。

さて、今回はlinuxサーバの負荷(ロードアベレージ)を確認するシェルスクリプトについて書いていこうかと思います。

1. 経緯

監視ツールを用いればサーバの負荷を確認する事なんて簡単な事だと思うのですが、『そんな大がかりなもの入れないでサーバの負荷だけ監視したい。』という時ありませんか?

そんな時は以下のシェルスクリプトを定時で実行し、linuxサーバの負荷を監視する事ができます。

2. 作成したシェルスクリプト

作成したシェルスクリプトは以下の通りです。

#/bin/sh
################################################################################
## ファイル名: checkLoadAverage.sh                                            ##
##  処理内容 : load averageを確認して指定の閾値以上の場合メールを送信する処理 ##
################################################################################

# load averageの閾値
val=50.00

###############################
# load averageを確認する関数
###############################
check_load_average(){
  # コマンド実行
  la=`top -b -n 1 | grep "load average" | awk '{print $12 $13 $14}'`
  IFS=','
  set -- $la

  # 1分間のload average確認
  diff1=`echo "$val < $1" | bc`
  if [ $diff1 -eq 1 ]; then
    echo "1分間のload averageが[$1]になっていて閾値[$val]を超えてます。"
  fi

  # 10分間のload average確認
  diff2=`echo "$val < $2" | bc`
  if [ $diff2 -eq 1 ]; then
    echo "10分間のload averageが[$2]になっていて閾値[$val]を超えてます。"
  fi

  # 15分間のload average確認
  diff3=`echo "$val < $3" | bc`
  if [ $diff3 -eq 1 ]; then
    echo "15分間のload averageが[$3]になっていて閾値[$val]を超えてます。"
  fi
}

# load averageを確認する関数
check_load_average 

exit

【注意点】

・各echo部分はメール送信などに変更してご利用いただくと便利です。

・シェルスクリプトは作成したら実行権限を付与してください。

3. 作成したシェルスクリプト

上記で作成したシェルスクリプトを定時で実行するため、cronに設定します。

cronへの設定例は以下の通りです。

    1. “ctontab -e”コマンドを実行
crontab -e
    1. cron定義
# check load average
* * * * * 作成したシェルスクリプトのフルパス

※viエディタによるファイル編集になりますのでわからない方はこちらを参考にしてみてください。

これで1分毎に対象linuxサーバの負荷を確認するよう設定が完了しました。

4. まとめ

上記のシェルスクリプトの設定でlinuxサーバの負荷だけの確認であれば、監視ツールを導入しないで1分毎の負荷の確認ができます。

監視ツールを入れるの面倒だけどサーバの負荷は確認したいとお考えの方は是非使ってみてください。

メールコマンドはソースががさばってしまうため割愛しましたが、次のブログからなるべく簡潔にまとめた状態で載せていけたらと思ってます。

補足ではありますが、本スクリプト作成中にtopコマンドをawkで区切る辺りがとても楽しかったです。