S.M.A.R.TのRaw Valueを取得するMuninプラグインを作った
2015/08/27
全国のマイクラ鯖缶のみなさんこんにちは
サーバのリソース監視、しっかりやってまっか~?
マイクラ鯖は建てるのが簡単な点も相まって、(言ったら悪いけど)技術的に未熟な方々が建ててる鯖も多いです。
いえいえ、悪い事ではありませんよ、みなさん最初は初心者なんですから。
かく言う僕も、ビジネス鯖缶の人達から見れば大した事無いかもしれませんし
閑話休題(←最近覚えた)、そのリソース監視で良く使われるMunin
これのプラグインを自作してみたので公開しようと思います。
スポンサーリンク
SMARTのRawValueを取得したい!!
はい、実にイーズウィーな感じです。
Munin付属のプラグイン使いましょう、はい。
とはなりません、残念……
Muninに付属されているプラグインは、閾値などしか取得する事が出来ません。
こんな感じでね。
RawValueじゃないと行けない理由
これがどうマズいかと言うと、
みなさん「Current Pending Sector Count」とか、「Reallocated Sector Count」ってご存知ない?
あら、そう……
そうですわねぇ……
前者が「代替処理保留中のセクタ数」、聞いたことある感じでしょ?
そんでもって、後者が「代替処理済みセクタの数」
そうです、真っ先に異常が現れてぶっ壊れていく所です。
そうでありながら、哀しい事に……?
これらのセクタの数が増えても閾値以下なら異常だと検出されません。
これがどういう事かと言うと、
2~3日で急激に代替処理待ちセクタが増えてても閾値以下なら気付かない、気付けないと言う事です。
どうせだから、RawValueを全て取得したい
S.M.A.R.Tを取得するのはとても簡単です、そう、Unixならね。
smartctlを使えば良いのです。
例えば、Ubuntuでの例ですが
- sudo apt-get install smartmontools
- 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
プラグインの使い方
- まずはsmartctlをインストールして下さい
- 次に、このプラグインをお好きな方法で取得して下さい
- 設定しましょう?
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
これで完了です。
きっと、アレな感じのグラフが出来上がるでしょう。
こんな感じで表示されます。
このプラグインの弱点ですが、稼働時間(Power_On_Hours)が長くなれば長くなるほど、グラフが見づらくなってきます。
僕はとにかくRawValueを取得したかったので、これで良しとしています。
もし、それが気に入らないのであれば、ご自分でPower_On_Hoursは除外する様に改造してみてね。