Настройка SNMP для получение данных S.M.A.R.T.

Дата: 28/05/2014
Тема: Linux

S.M.A.R.T. (от англ. self-monitoring, analysis and reporting technology — технология самоконтроля, анализа и отчётности) — технология оценки состояния жёсткого диска встроенной аппаратурой самодиагностики, а также механизм предсказания времени выхода его из строя.

 

Ставим пакет smartmontools

#apt-get install smartmontools
#smartctl -a /dev/sda
smartctl 5.41 2011-06-09 r3365 [x86_64-linux-3.11.0-20-generic] (local build)
Copyright (C) 2002-11 by Bruce Allen, http://smartmontools.sourceforge.net

=== START OF INFORMATION SECTION ===
Model Family:     Seagate Barracuda 7200.7 and 7200.7 Plus
Device Model:     ST3120022A
Serial Number:    5JS0E07Z
Firmware Version: 3.06
User Capacity:    120.034.123.776 bytes [120 GB]
Sector Size:      512 bytes logical/physical
Device is:        In smartctl database [for details use: -P show]
ATA Version is:   6
ATA Standard is:  ATA/ATAPI-6 T13 1410D revision 2
Local Time is:    Mon May 26 21:59:24 2014 EEST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled
....
SMART Attributes Data Structure revision number: 10
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
.....
  7 Seek_Error_Rate         0x000f   089   060   030    Pre-fail  Always       -       886804289
  9 Power_On_Hours          0x0032   074   074   000    Old_age   Always       -       22790
 10 Spin_Retry_Count        0x0013   100   100   097    Pre-fail  Always       -       0
 12 Power_Cycle_Count       0x0032   096   096   020    Old_age   Always       -       4388
194 Temperature_Celsius     0x0022   042   050   000    Old_age   Always       -       37
195 Hardware_ECC_Recovered  0x001a   062   057   000    Old_age   Always       -       104312508
197 Current_Pending_Sector  0x0012   100   100   000    Old_age   Always       -       0
198 Offline_Uncorrectable   0x0010   100   100   000    Old_age   Offline      -       0
199 UDMA_CRC_Error_Count    0x003e   200   164   000    Old_age   Always       -       255
200 Multi_Zone_Error_Rate   0x0000   100   253   000    Old_age   Offline      -       0
202 Data_Address_Mark_Errs  0x0032   100   253   000    Old_age   Always       -       0
.....

Для получения S.M.A.R.T. нужны права root, у службы snmpd таких прав нет, поэтому создадим скрипт, который будет собирать данные S.M.A.R.T. в файл.

#touch /etc/snmp/getsmart.sh
#nano /etc/snmp/getsmart.sh

содержимое файла

#!/bin/sh
for drive in /dev/sd?; 
do
	device=`basename $drive`
    /usr/sbin/smartctl -a -n idle $drive > /tmp/smart_$device
done

Выставляем права на выполнение

#chmod +x /etc/snmp/getsmart.sh

теперь можно добавить скрипт в крон

#nano /etc/crontab

добавить в конец файла такую запись

*/5 * * * *	root	/etc/snmp/getsmart.sh

Cкрипт для извлечения параметров S.M.A.R.T. для SNMPD

#touch /etc/snmp/attrsmart.sh
#nano /etc/snmp/attrsmart.sh

содержимое файла

#!/bin/sh
for smartlog in $(ls /tmp/smart*); 
do
    case "$1" in
        -temp )
ATTR=`cat $smartlog | /bin/grep 'Temperature_Celsius' | /usr/bin/awk '{ print $10; }'`         
        ;;
        -reloc )
ATTR=`cat $smartlog | /bin/grep 'Reallocated_Sector_Ct' | /usr/bin/awk '{ print $10; }'`
        ;;	
        -pendsec )
ATTR=`cat $smartlog | /bin/grep 'Current_Pending_Sector' | /usr/bin/awk '{ print $10; }'`
        ;;	
        -rawerror )
ATTR=`cat $smartlog | /bin/grep 'Raw_Read_Error_Rate' | /usr/bin/awk '{ print $10; }'`
        ;;
        -seekerror )
ATTR=`cat $smartlog | /bin/grep 'Seek_Error_Rate' | /usr/bin/awk '{ print $10; }'`
        ;;	
        -device )
ATTR=`echo $smartlog | grep -Eo '.{3}$'`
        ;;			
        *)
ATTR=`cat $smartlog | grep "Device Model" | awk '{ print $3,$4 }'`
        ;;
    esac 
	echo $ATTR 
done

Выставляем права на выполнение

#chmod +x /etc/snmp/attrsmart.sh

скрипт выводит только самые необходимые параметры S.M.A.R.T.

теперь добавляем вызов скрипта в конец файла /etc/snmp/snmpd.conf

#nano /etc/snmp/snmpd.conf

одна строка для каждого параметра

extend "model" /etc/snmp/attrsmart.sh
extend "device" /etc/snmp/attrsmart.sh -device
extend "temperature" /etc/snmp/attrsmart.sh -temp
extend "relocseccount" /etc/snmp/attrsmart.sh -reloc
extend "rawreaderror" /etc/snmp/attrsmart.sh -rawerror
extend "seekerrorrate" /etc/snmp/attrsmart.sh -seekerror

перезапускаем службу snmpd

#service snmpd restart

и проверяем

snmpwalk -c server104_ubuntu -v 2c localhost NET-SNMP-EXTEND-MIB::nsExtendObjects
NET-SNMP-EXTEND-MIB::nsExtendNumEntries.0 = INTEGER: 7
NET-SNMP-EXTEND-MIB::nsExtendCommand."model" = STRING: /etc/snmp/attrsmart.sh
NET-SNMP-EXTEND-MIB::nsExtendCommand."device" = STRING: /etc/snmp/attrsmart.sh
NET-SNMP-EXTEND-MIB::nsExtendCommand."temperature" = STRING: /etc/snmp/attrsmart.sh
NET-SNMP-EXTEND-MIB::nsExtendCommand."rawreaderror" = STRING: /etc/snmp/attrsmart.sh
NET-SNMP-EXTEND-MIB::nsExtendCommand."relocseccount" = STRING: /etc/snmp/attrsmart.sh
NET-SNMP-EXTEND-MIB::nsExtendCommand."seekerrorrate" = STRING: /etc/snmp/attrsmart.sh
NET-SNMP-EXTEND-MIB::nsExtendArgs."model" = STRING:
NET-SNMP-EXTEND-MIB::nsExtendArgs."device" = STRING: -device
NET-SNMP-EXTEND-MIB::nsExtendArgs."temperature" = STRING: -temp
.....
NET-SNMP-EXTEND-MIB::nsExtendOutLine."seekerrorrate".1 = STRING: 0
NET-SNMP-EXTEND-MIB::nsExtendOutLine."seekerrorrate".2 = STRING: 713406629

Теперь можно использовать snmp для мониторинга S.M.A.R.T.



Это статья "Домашняя страничка Andy"
http://andy.od.ua

URL этой статьи: http://andy.od.ua/news_49.html

Яндекс.Метрика