Измеряем температуру в Linux






Летняя жара даёт о себе знать не только увеличенным потреблением разнообразных прохладительных напитков, «приятно» пахнущих пассажиров маршрутного транспорта, но также и повышенной температурой внутри системных блоков. И если за техникой, находящейся постоянно под рукой, ещё можно следить, то с «пациентами», находящимися на некотором отдалении от вытянутой руки, всё несколько сложнее. Благо, на сегодняшний день, в Linux имеется всё необходимое для мониторинга температурного режима: начиная массой драйверов для работы непосредственно с железом, заканчивая front-endами, позволяющими очень красиво и наглядно в реальном режиме времени отслеживать данные, поступающие от датчиков на материнской плате, процессоре, жёстком диске.

Моя же задача оказалась куда более простой. Мне не нужно отслеживать всё в «realtime», вполне достаточно раз в сутки поглядывать на температурное самочувствие нескольких серверов, находящихся далеко от меня.


Установка и настройка lm-sensors

На самом деле способов «достучаться» до температурных датчиков из Linux существует достаточно много. Из всего многообразия мне приглянулся всем известный lm-sensors — набор драйверов, библиотек и утилит для мониторинга данных, поступающих с датчиков компьютера.

lm-sensors существует в репозитариях Ubuntu, так что установка, как обычно проста и не вызывает проблем:

$ sudo apt-get install lm-sensors

После успешной установки необходимо определить тип железа, установленного в вашей системе. Прежде, чем утилита sensors сможет получать данные от системы, должны быть загружены соответствующие модули ядра. К счастью, разработчики lm-sensors в определённой степени позаботились об обычных пользователях и разработали утилиту sensors-detect, позволяющую в режиме «мастера» определить тип имеющегося в вашей системе оборудования, а также список модулей ядра, которые необходимо загрузить. Итак, запускаем sensors-detect, соглашаемся на предложения о сканировании оборудования и в конечном итоге получаем список модулей ядра, необходимых для корректной работы lm-sensors:

$ sudo sensors-detect
# sensors-detect revision 5818 (2010-01-18 17:22:07 +0100)
# System: MSI MS-7369

This program will help you determine which kernel modules you need
to load to use lm_sensors most effectively. It is generally safe
and recommended to accept the default answers to all questions,
unless you know what you're doing.

Some south bridges, CPUs or memory controllers contain embedded sensors.
Do you want to scan for them? This is totally safe. (YES/no): yes

Перед тем, как sensors-detect завершит свою работу, она предложит добавить в /etc/modules имена модулей драйверов найденных устройств. У меня это выглядело так:

To load everything that is needed, add this to /etc/modules:
#----cut here----
# Chip drivers
w83627ehf
#----cut here----
If you have some drivers built into your kernel, the list above will
contain too many modules. Skip the appropriate ones!
Do you want to add these lines automatically to /etc/modules? (yes/NO)

В этом месте, думаю, лучше согласиться, чтобы нужные lm-sensors модули ядра автоматически загружались во время старта системы.

Теперь, чтобы не перезагружаться, можно попросить систему загрузить объявленные в /etc/modules, но ещё не загруженные модули ядра:

sudo /etc/init.d/module-init-tools start

Получение данных

Если настройка прошла успешно, ваше оборудование поддерживается и соответствующие модули ядра загружены, то дальше всё очень просто:

$ sensors
k8temp-pci-00c3
Adapter: PCI adapter
Core0 Temp: +26.0°C
Core0 Temp: +29.0°C
Core1 Temp: +40.0°C
Core1 Temp: +29.0°C

w83627dhg-isa-0a10
Adapter: ISA adapter
Vcore: +1.32 V (min = +0.00 V, max = +1.74 V)
in1: +0.78 V (min = +0.71 V, max = +1.78 V)
AVCC: +3.30 V (min = +1.63 V, max = +0.21 V) ALARM
VCC: +3.30 V (min = +3.78 V, max = +1.33 V) ALARM
in4: +0.97 V (min = +1.98 V, max = +1.78 V) ALARM
in5: +0.98 V (min = +1.94 V, max = +1.50 V) ALARM
in6: +1.10 V (min = +1.83 V, max = +1.51 V) ALARM
3VSB: +3.28 V (min = +3.31 V, max = +4.02 V) ALARM
Vbat: +3.04 V (min = +3.98 V, max = +1.65 V) ALARM
fan1: 0 RPM (min = 753 RPM, div = 128) ALARM
fan2: 2311 RPM (min = 753 RPM, div = 9)
fan3: 0 RPM (min = 1506 RPM, div = 128) ALARM
fan4: 0 RPM (min = 0 RPM, div = 128)
fan5: 0 RPM (min = 10546 RPM, div = 128) ALARM
temp1: +42.0°C (high = -18.0°C, hyst = +91.0°C) sensor = thermistor
temp2: +63.5°C (high = +65.0°C, hyst = +65.0°C) sensor = diode
temp3: +25.0°C (high = +80.0°C, hyst = +75.0°C) sensor = thermistor
cpu0_vid: +0.000 V

Выше показан вывод lm-sensors для двух адаптеров. k8temp-pci-00c3 — показывает температуру ядер процессора (модуль ядра k8temp «умеет» получать температуру от процессоров AMD Athlon64/FX и Opteron), в то время, как адаптер w83627dhg-isa-0a10 сообщает информацию, полученную с датчиков материнской платы.

Задание crontab

Как я уже говорил, наблюдать за температурным режимом серверов раз в сутки — для меня более, чем достаточно и поэтому я не буду (пока, во всяком случае) заморачиваться над построением графиков и тому подобными вещами, а просто буду просматривать почтовые сообщения, в которых и будет содержаться необходимая мне информация. Для отправки почтовых сообщений я пользуюсь удобным во многих отношениях Perl-скриптом sendEmail. Вот, как выглядит моё задание в crontab:




Измеряем температуру в Linux: 1 комментарий

Комментарии запрещены.