>> HOME >> FC5 MENU >> MRTG サーバー監視システム 3 (HDD S.M.A.R.T 温度センサ)
障害の兆候を見逃さないために、NET-SNMP と MRTG を利用してサーバーの状況を外部から監視できるようにします。
今回は、HDD S.M.A.R.T 温度センサ の値を監視します。
smartsuite は、ATA や SCSI ハードディスクドライブに組み込まれた、Self-Monitoring, Analysis and Reporting Tecnology System(S.M.A.R.T) を実行して、ストレージデバイスの制御や監視を行います。その smartsuite から、ハードディスクの温度を取得し、SNMP にて監視し、MRTGを用いてグラフを自動生成するようにします。
※ 当サイトと同様に Fedora をインストールされた場合は、smartsuite は既にインストールされています。

1. S.M.A.R.T システムサービスの起動と自動起動設定
1 ) S.M.A.R.T システムサービスの起動
2 ) S.M.A.R.T システムサービスの自動起動設定
2. S.M.A.R.T 情報の取得
1 ) smartsuite コマンドを使用し、S.M.A.R.T 情報を取得
3. NET-SNMP 監視手続き
1 ) ハードディスクの温度を取得するスクリプトの作成
2 ) NET-SNMP 設定ファイル /etc/snmp/snmpd.conf の編集
3 ) NET-SNMP 再起動
4 ) MRTG 設定ファイル /etc/mrtg/mrtg.cfg の編集
4. MRTG の監視ページ作成
1 ) MRTG の監視ページ作成実行
2 ) MRTG のインデックスページ作成
1. S.M.A.R.T システムサービスの起動と自動起動設定
1 ) S.M.A.R.T システムサービスの起動
[root@linux ~]# service smartd start 
smartd を起動中:                                           [  OK  ]
2 ) S.M.A.R.T システムサービスの自動起動設定
[root@linux ~]# chkconfig smartd on 
[root@linux ~]# chkconfig --list smartd 
smartd          0:off   1:off   2:on    3:on    4:on    5:on    6:off
2. S.M.A.R.T 情報の取得
1 ) smartctl コマンドを使用し、S.M.A.R.T 情報を取得
[root@linux ~]# smartctl -a /dev/hda 
smartctl version 5.36 [i686-redhat-linux-gnu] Copyright (C) 2002-6 Bruce Allen
Home page is http://smartmontools.sourceforge.net/

=== START OF INFORMATION SECTION ===
Model Family:     Western Digital Caviar family
Device Model:     WDC WD400BB-00DKA0
Serial Number:    WD-WMAHL4043476
Firmware Version: 77.07W77
User Capacity:    40,020,664,320 bytes
Device is:        In smartctl database [for details use: -P show]
ATA Version is:   6
ATA Standard is:  Exact ATA specification draft version not indicated
Local Time is:    Fri Jul  7 23:58:04 2006 JST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED

General SMART Values:
Offline data collection status:  (0x84) Offline data collection activity
                                        was suspended by an interrupting command from host.
                                        Auto Offline Data Collection: Enabled.
Self-test execution status:      (   0) The previous self-test routine completed
                                        without error or no self-test has ever
                                        been run.
Total time to complete Offline
data collection:                 (1182) seconds.
Offline data collection
capabilities:                    (0x79) SMART execute Offline immediate.
                                        No Auto Offline data collection support.
                                        Suspend Offline collection upon new
                                        command.
                                        Offline surface scan supported.
                                        Self-test supported.
                                        Conveyance Self-test supported.
                                        Selective Self-test supported.
SMART capabilities:            (0x0003) Saves SMART data before entering
                                        power-saving mode.
                                        Supports SMART auto save timer.
Error logging capability:        (0x01) Error logging supported.
                                        No General Purpose Logging support.
Short self-test routine
recommended polling time:        (   2) minutes.
Extended self-test routine
recommended polling time:        (  24) minutes.
Conveyance self-test routine
recommended polling time:        (   5) minutes.

SMART Attributes Data Structure revision number: 16
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x000b   200   200   051    Pre-fail  Always       -       0
  3 Spin_Up_Time            0x0007   096   089   021    Pre-fail  Always       -       1700
  4 Start_Stop_Count        0x0032   100   100   040    Old_age   Always       -       64
  5 Reallocated_Sector_Ct   0x0033   200   200   140    Pre-fail  Always       -       0
  7 Seek_Error_Rate         0x000b   100   253   051    Pre-fail  Always       -       0
  9 Power_On_Hours          0x0032   076   076   000    Old_age   Always       -       18134
 10 Spin_Retry_Count        0x0013   100   253   051    Pre-fail  Always       -       0
 11 Calibration_Retry_Count 0x0013   100   253   051    Pre-fail  Always       -       0
 12 Power_Cycle_Count       0x0032   100   100   000    Old_age   Always       -       49
# HDD温度情報
194 Temperature_Celsius     0x0022   107   253   000    Old_age   Always       -       36
196 Reallocated_Event_Count 0x0032   200   200   000    Old_age   Always       -       0
197 Current_Pending_Sector  0x0012   200   200   000    Old_age   Always       -       0
198 Offline_Uncorrectable   0x0012   200   200   000    Old_age   Always       -       0
199 UDMA_CRC_Error_Count    0x000a   200   253   000    Old_age   Always       -       263
200 Multi_Zone_Error_Rate   0x0009   200   085   051    Pre-fail  Offline      -       0

SMART Error Log Version: 1
No Errors Logged

SMART Self-test log structure revision number 1
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Extended offline    Completed without error       00%       454         -

SMART Selective self-test log data structure revision number 1
 SPAN  MIN_LBA  MAX_LBA  CURRENT_TEST_STATUS
    1        0        0  Not_testing
    2        0        0  Not_testing
    3        0        0  Not_testing
    4        0        0  Not_testing
    5        0        0  Not_testing
Selective self-test flags (0x0):
  After scanning selected spans, do NOT read-scan remainder of disk.
If Selective self-test is pending on power-up, resume after 0 minute delay.
3. NET-SNMP 監視手続き
1 ) ハードディスクの温度を取得するスクリプトの作成
S.M.A.R.T 情報の取得で表示された値のうち、取得すべき値は、"SMART Attributes Data Structure revision number: 16" の "ID#" が "194"。
この行を切り取り、温度の値である、最後の数字 ( 上では "36" ) を取得します。
[root@linux ~]# vi /usr/local/bin/hdtemp4mrtg 

#!/bin/sh

/usr/sbin/smartctl -a /dev/hda | /usr/bin/awk '{if($1=="194") print $10}'


[root@linux ~]# chmod +x /usr/local/bin/hdtemp4mrtg 
2 ) NET-SNMP 設定ファイル /etc/snmp/snmpd.conf の編集
[root@linux ~]# vi /etc/snmp/snmpd.conf 

# Other ideas:
#
# exec .1.3.6.1.4.1.2021.51 ps /bin/ps
# exec .1.3.6.1.4.1.2021.52 top /usr/local/bin/top
# exec .1.3.6.1.4.1.2021.53 mailq /usr/bin/mailq
exec .1.3.6.1.4.1.2021.53 sensors /usr/local/bin/sensor4mrtg
# 以下を追加
exec .1.3.6.1.4.1.2021.54 smart /usr/local/bin/hdtemp4mrtg
3 ) NET-SNMP 再起動
[root@linux ~]# service snmpd restart 
snmpd を停止中:                                            [  OK  ]
snmpd を起動中:                                            [  OK  ]
4 ) MRTG 設定ファイル /etc/mrtg/mrtg.cfg の編集
[root@linux ~]# vi /etc/mrtg/mrtg.cfg 

# 以下を全行追加
### HDD S.M.A.R.T Temperature ####
Target[hdtemp]: 1.3.6.1.4.1.2021.54.101.1&1.3.6.1.4.1.2021.54.101.1:public@192.168.1.11
MaxBytes[hdtemp]: 80
Options[hdtemp]: gauge, absolute, growright, nopercent, noinfo
YLegend[hdtemp]: Temperature ( ℃)
ShortLegend[hdtemp]: ℃
Legend1[hdtemp]: hda
Legend2[hdtemp]: hda
LegendI[hdtemp]: hda
LegendO[hdtemp]: hda
Title[hdtemp]: HDD S.M.A.R.T 温度
PageTop[hdtemp]: <H1>HDD S.M.A.R.T 温度</H1>
4. MRTG の監視ページ作成
1 ) MRTG の監視ページ作成実行
MRTG を実行し、MRTG による監視の閲覧ページを作成します。
MRTG は過去2回起動時のログを使用するため、初回起動から2回目までは必ず WARNING が出るので、MRTGの実行を3回行います。また、mrtg.cfg 修正後も、MRTGの実行を3回行う方がいいでしょう。
[root@linux ~]# mrtg /etc/mrtg/mrtg.cfg 
Rateup WARNING: /usr/bin/rateup Can't remove hdtemp.old updating log file
Rateup WARNING: /usr/bin/rateup Can't remove hdtemp.old updating log file

[root@linux ~]# mrtg /etc/mrtg/mrtg.cfg 
Rateup WARNING: /usr/bin/rateup Can't remove hdtemp.old updating log file

[root@linux ~]# mrtg /etc/mrtg/mrtg.cfg 
MRTG の各監視ページは以下に作成されます。
HDD S.M.A.R.T 温度
http://mountainbigroad.jp/mrtg/hdtemp.html
2 ) MRTG のインデックスページ作成
各監視画面を統合したような見出しページを、MRTG 検出結果格納先ディレクトリ(WorkDir)に作成します。
[root@linux ~]# indexmaker --columns=1 --title="サーバ監視システム" \
--addhead="<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=euc-jp\">" \
/etc/mrtg/mrtg.cfg > /var/www/mrtg/index.html