Как известно, повышенная температура жестких дисков или её резкое изменение могут привести к преждевременному выходу их из строя, так что будет совершенно не лишним её мониторить. Тем более, если сервер стоит за много сотен километров, в помещении, куда люди заходят очень редко, а значит некому обратить внимание на то, что вентиляторы охлаждения в сервере не выполняют свои функции по тем или иным причинам.
И так, у нас имеется сервер на FreeBSD
root@bubu[Sun 8:04]/>uname -a FreeBSD bubu.bubu 8.2-RELEASE FreeBSD 8.2-RELEASE #0: Wed Apr 20 14:20:30 EEST 2011
Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript
:/usr/obj/usr/src/sys/BUBU2 amd64
В нем установлено пара HDD:
root@bubu[Sun 8:05]/>atacontrol list ATA channel 2: Master: no device present Slave: no device present ATA channel 3: Master: ad6 SATA revision 2.x Slave: no device present ATA channel 4: Master: ad8 SATA revision 2.x Slave: no device present ATA channel 5: Master: no device present Slave: no device present ATA channel 6: Master: no device present Slave: no device present
MRTG уже установлена и используется для контроля температуры процессора. Нам остается лишь каким либо образом узнавать у наших HDD их текущую температуру, и отдавать эти данные в MRTG для отрисовывания графиков.
И тут на помощь нам приходит технология S.M.A.R.T. (self-monitoring, analysis and reporting technology — технология диагностики жесткого диска с помощью встроенных программ самодиагностики), ведь один из SMART-атрибутов как раз и содержит необходимую нам информацию о текущей температуре винчестера. Осталось найти возможность получать эти атрибуты.
Решение было найдено в портах - пакет smartmontools, который, согласно описания «содержит две утилиты (smartctl и smartd) для контроля и мониторинга дисковой системы использующей технологию S.M.A.R.T. встроенную в современные ATA (IDE) и SCSI диски…», как раз, что нам и требовалось .
Приступаем к установке:
cd /usr/ports/sysutils/smartmontools && make install clean
И после сообщения об удачной установке
smartmontools has been installed
видим также небольшую подсказку об использовании
To check the status of drives, use the following: /usr/local/sbin/smartctl -a /dev/ad0 for first ATA drive /usr/local/sbin/smartctl -a /dev/da0 for first SCSI drive To include drive health information in your daily status reports, add a line like the following to /etc/periodic.conf: daily_status_smart_devices="/dev/ad0 /dev/da0" substituting the appropriate device names for your SMART-capable disks. To enable drive monitoring, you can use /usr/local/sbin/smartd. A sample configuration file has been installed as /usr/local/etc/smartd.conf.sample Copy this file to /usr/local/etc/smartd.conf and edit appropriately To have smartd start at boot echo 'smartd_enable="YES"' >> /etc/rc.conf
Первым делом включаем (на всякий случай, даже если он был ранее включен) смарт для имеющихся HDD:
/usr/local/sbin/smartctl -s on /dev/ad6 /usr/local/sbin/smartctl -s on /dev/ad8
и посмотрим температуру
root@bubu[Sun 8:06]/>smartctl -a /dev/ad6 | grep Temperature_Celsius 194 Temperature_Celsius 0x0002 222 222 000 Old_age Always - 27 (Min/Max 11/41)
Итак, температуру мы узнать можем, значит пора приступать к тому, что бы научить MRTG получать эти данные. И для этого мы напишем небольшой скриптик, в который будем передавать в параметрах запуска какой из HDD нам в данный момент интересен, а на выходе будем получать его текущую температуру, модель и емкость. Мой скрипт выглядит так:
root@bubu[Sun 8:06]/>cat /usr/local/etc/mrtg/script/hdd_temp #!/bin/sh # Этому скрипту в качестве первого параметра передаётся имя устройства, # данные о котором необходимо получить # Если имя устройства передано if [ ! -z ${1} ]; then ADDR=${1} /usr/local/sbin/smartctl -a -s on /dev/$ADDR | grep 194| grep Temp | awk -F " " '{print $10}' echo 0 #echo HDD /usr/local/sbin/smartctl -a -s on /dev/$ADDR | grep Device | grep Model /usr/local/sbin/smartctl -a -s on /dev/$ADDR | grep Capacity: fi
И сохранен, как видите, в папке /usr/local/etc/mrtg/script под именем hdd-temp (не забудьте сделать его исполняемым), после чего остается лишь прописать в конфиге самой MRTG его вызов:
root@bubu[Sun 8:06]/>cat /usr/local/etc/mrtg/mrtg.cfg | grep ad6 Title[ad6]: HDD ad6 Temperature (Celsius) PageTop[ad6]: HDD ad6 Temperature (Celsius) Target[ad6]: `/usr/local/etc/mrtg/script/hdd_temp ad6` ShortLegend[ad6]: degree (C) MaxBytes[ad6]: 2000 Options[ad6]: nopercent,gauge,unknaszero,avgpeak,growright,pngdate,nobanner LegendO[ad6]: LegendI[ad6]: ad60 Temperature (Celsius) YLegend[ad6]: ad60 Temperature (Celsius) XSize[ad6]: 600 YSize[ad6]: 125
Аналогично прописан и второй жесткий диск:
root@bubu[Sun 8:06]/>cat /usr/local/etc/mrtg/mrtg.cfg | grep ad8 Title[ad8]: HDD ad8 Temperature (Celsius) PageTop[ad8]: HDD ad8 Temperature (Celsius) Target[ad8]: `/usr/local/etc/mrtg/script/hdd_temp ad8` ShortLegend[ad8]: degree (C) MaxBytes[ad8]: 2000 Options[ad8]: nopercent,gauge,unknaszero,avgpeak,growright,pngdate,nobanner LegendO[ad8]: LegendI[ad8]: ad80 Temperature (Celsius) YLegend[ad8]: ad80 Temperature (Celsius) XSize[ad8]: 600 YSize[ad8]: 125
Именно так я получил графики для статьи «О температуре в машинных залах в двух разных датацентрах.»
|
Подробнее...