純規の暇人趣味ブログ

手を突っ込んで足を洗う

S.M.A.R.TのRaw Valueを取得するMuninプラグインを作った

      2015/08/27    HimaJyun

全国のマイクラ鯖缶のみなさんこんにちは
サーバのリソース監視、しっかりやってまっか~?

マイクラ鯖は建てるのが簡単な点も相まって、(言ったら悪いけど)技術的に未熟な方々が建ててる鯖も多いです。
いえいえ、悪い事ではありませんよ、みなさん最初は初心者なんですから。
かく言う僕も、ビジネス鯖缶の人達から見れば大した事無いかもしれませんし

閑話休題(←最近覚えた)、そのリソース監視で良く使われるMunin
これのプラグインを自作してみたので公開しようと思います。

SMARTのRawValueを取得したい!!

はい、実にイーズウィーな感じです。
Munin付属のプラグイン使いましょう、はい。
とはなりません、残念……

Muninに付属されているプラグインは、閾値などしか取得する事が出来ません。
こんな感じでね。
smart_raw-value_munin-plugin-001

RawValueじゃないと行けない理由

これがどうマズいかと言うと、
みなさん「Current Pending Sector Count」とか、「Reallocated Sector Count」ってご存知ない?

あら、そう……
そうですわねぇ……

前者が「代替処理保留中のセクタ数」、聞いたことある感じでしょ?
そんでもって、後者が「代替処理済みセクタの数」

そうです、真っ先に異常が現れてぶっ壊れていく所です。
そうでありながら、哀しい事に……?

これらのセクタの数が増えても閾値以下なら異常だと検出されません。
これがどういう事かと言うと、
2~3日で急激に代替処理待ちセクタが増えてても閾値以下なら気付かない、気付けないと言う事です。

どうせだから、RawValueを全て取得したい

S.M.A.R.Tを取得するのはとても簡単です、そう、Unixならね。
smartctlを使えば良いのです。
例えば、Ubuntuでの例ですが

  1. sudo apt-get install smartmontools
  2. sudo smartctl -a /dev/sda

これで良いです、これだけでS.M.A.R.Tが取得できます。
鯖の詳細はあまり晒したくないので載せませんけど、簡単に取得できます。

さて、あとはこれをMuninで処理させるだけです。

Muninプラグインを作る

実に簡単です。
ぶっちゃけると、MinecraftBukkitのプラグインを作るより簡単です。

ここで紹介してしまうと長くなるのでしませんけど、とにかく簡単です。
興味のある方は少しググってみて下さい。

とにかく、既定のフォーマットで文字を出力してやれば後はMuninがやってくれます。

と、言う訳で早朝4時頃に思い立って作り始めて、朝ご飯の頃合いには完成しました。

出来上がったプラグイン

うちの鯖でダウソとかさせても余裕で耐えられるんでしょうけど……
ボクはケチで鯖負荷増えるのは嫌なのでGitHubとやらに上げてみました

勝手にダウンロードしてお好きな様に使って下さい。
https://github.com/HimaJyun/Munin-Raw-Value

とりあえず、コードを読みたいとか言う変人は以下をどうぞ。
お世辞にも良いとは言えませんけどご自由に。

#!/bin/bash
#
# ## Munin for plug-ins to get the Raw_value of SMART
# by HimaJyun(https://jyn.jp/)
#
# Config
# [smart_raw_value_*]
# user root
#
#%# family=auto
#%# capabilities=autoconf suggest
LANG=C
smartctl=$(which smartctl)
device=`echo "${0##*/}" | sed s/smart_raw_value_//g`

if [ "$1" = "autoconf" ]; then
    if [ -x "$smartctl" ]; then
        echo yes
        exit 0
    else
        echo "no (smartctl is not exist.)"
        exit 1
    fi
fi

smart_out=`"${smartctl}" -a /dev/"${device}" -d auto | grep -s -e '^  [0-9]' -e '^ [0-9]' -e '^[0-9]' | sed -r -e 's/^ +//g' -e 's/ +/ /g'`
row=`echo "${smart_out}" | wc -l`

for ((i=0; i < $row; i++)); do
    smart_name[i]=`echo "${smart_out}" | sed -n $((${i}+1))p | awk '{print $2}'`
    smart_value[i]=`echo "${smart_out}" | sed -n $((${i}+1))p | awk '{print $10}'`
done

if [ "$1" = "config" ]; then
  echo "graph_title S.M.A.R.T Raw_Values of ${device}"
  echo 'graph_args --base 1000 -l 0'
  echo 'graph_vlabel S.M.A.R.T Raw Value'
  echo 'graph_category disk'
  echo 'graph_info Please be careful on the value of the Reallocated_Sector_Ct and Current_Pending_Sector.'

  for ((i=0; i < $row; i++)); do
    echo "${smart_name[i]}.label ${smart_name[i]}"
    echo "${smart_name[i]}.info ${smart_value[i]}"
  done
  exit 0
fi

for ((i=0; i < $row; i++)); do
    echo "${smart_name[i]}.value ${smart_value[i]}"
done

 

プラグインの使い方

  1. まずはsmartctlをインストールして下さい
  2. 次に、このプラグインをお好きな方法で取得して下さい
  3. 設定しましょう?

smartctlのインストール

Debian系であれば「apt-get install smartmontools」を実行して下さい。
「-d auto」が使えるバージョンが好ましいです。(使えないバージョンでの動作は確認してません。)

プラグインを入手

GitHubからダウンロードするのが定石でしょう。
もちろん、上のコードをコピペしても良いですよ。

その場合、ファイル名は「smart_raw_value_」にして下さい(拡張子不要)

設定しましょう?

まずは、ダウンロードしたプラグインを既定のディレクトリへ移動させるべきです。

sudo mv /ダウソディレクトリ/smart_raw_value_ /usr/share/munin/plugins/smart_raw_value_

きっと、こんな感じ?
次に、パーミッションを他のファイルと合わせておきましょう。

sudo chmod 755 /usr/share/munin/plugins/smart_raw_value_

これで良いはずです。
最後に、プラグインのシンボリックリンクを張ります。

sudo ln -s /usr/share/munin/plugins/smart_raw_value_ /etc/munin/plugins/smart_raw_value_[device]

[devaice]の項目ですが、読んで字の如く、デバイス名(パス?)にして下さい
所謂、sdaとかsdbって奴。

「smart_raw_value_sda」
こうかな?

これで本当の最後。。。
お好きなエディタで/etc/munin/plugin-conf.d/munin-nodeを開いて、以下の設定を追記!!

[smart_raw_value_*]
user root

これで完了です。
きっと、アレな感じのグラフが出来上がるでしょう。

こんな感じで表示されます。

smart_raw-value_munin-plugin-002

このプラグインの弱点ですが、稼働時間(Power_On_Hours)が長くなれば長くなるほど、グラフが見づらくなってきます。
僕はとにかくRawValueを取得したかったので、これで良しとしています。

もし、それが気に入らないのであれば、ご自分でPower_On_Hoursは除外する様に改造してみてね。

 - サーバ運営 ,