Монитор температуры CPU

Примеры из жизни как развернуть и настроить систему мониторинга zabbix
Ответить
RomA
Сообщения: 358
Зарегистрирован: 05 авг 2008, 14:53
Контактная информация:

Монитор температуры CPU

Сообщение RomA »

До этого я писал как можно промониторить сервер, используя утилитку mbmon... но на деле она себя повела очень не красиво, данные постоянно куда то пропадали, в результате чего я продолжил изыскания в эту сторону. В этой статье я расскажу как более детально промониторить температуру процессора.
В ходе изысканий выяснилось что не все сервера понимают данную команду, впрочем как и mbmon не на всех серверах показывает данные. Ну так вот - для начала проверяем поддерживает ли наш сервер данную опцию

Код: Выделить всё

stat# kldload coretemp
stat# sysctl -a | grep temper
dev.cpu.0.temperature: 41.0C
dev.cpu.1.temperature: 34.0C
dev.cpu.2.temperature: 40.0C
dev.cpu.3.temperature: 43.0C
У меня сервер поддерживает (тут хочу сказать, что не все сервера поддерживают - например платформа RS120-E5/PA4 - поддерживает, а вот на платформе RS120-E3/PA4 не удалось получить такую информацию) и выдал более подробную информацию по температуре, в отличии от mbmon

Код: Выделить всё

stat# mbmon -c 1 -I
Temp.= 32.0, 46.0,  0.0; Rot.= 10000,    0,    0
Vcore = 2.16, 3.58; Volt. = 3.30, 5.54, 11.00,   1.54,  1.39
Гм... вообще ни одна температура не совпала... но ядру верится больше :-) да и информация полнее - с ней и будем работать. Но для начала надо как-то решить вопрос с загрузкой этого модуля при старте системы - сделать это можно двумя способами - загрузить через /boot/loader.conf или же пересобрать ядро... смотрю что за ядро у меня сейчас

Код: Выделить всё

stat# uname -a
FreeBSD stat.stniva.ru 8.1-RELEASE FreeBSD 8.1-RELEASE #0: Wed Aug 25 10:06:38 MSD 2010     roman@stat.stniva.ru:/usr/obj/usr/src/sys/GENERIC  amd64
Недавно я обновлял один из серверов, и на нем

Код: Выделить всё

www# uname -a
FreeBSD www.stniva.ru 8.1-RELEASE-p1 FreeBSD 8.1-RELEASE-p1 #0: Wed Nov 10 13:43:56 MSK 2010     roman@www.stniva.ru:/usr/src/sys/amd64/compile/www  amd64
Получается есть версия поновее... я не против обновить ядро, потому выбираю второй путь. Обновляю систему (этот шаг легко и без последствий можно пропустить)

Код: Выделить всё

stat# ./update.sh 
Parsing supfile "/root/cvsup/ports-supfile"
Connecting to cvsup.freebsd.org
Connected to cvsup.freebsd.org
Server software version: SNAP_16_1h
После обновления я переименовываю стандартное ядро в какое то понятное для меня имя, которое и буду в последствии редактировать

Код: Выделить всё

cd /usr/src/sys/amd64/conf
cp GENERIC stat
ee stat
Дальше я менял, добавлял, удалял что-то из ядра, как мне казалось, оптимизируя его

Код: Выделить всё

ident                 stat          #Имя ядра для наглядности
makeoptions      DEBUG=-g #Удалил - зафиг оно мне?
options              INET6       #Удалил - до этого еще не скоро дойдем
device               fdc           #Удалил - зачем мне флопик на сервере?
# дальше был раздел с сетевыми картами где я удалил все, оставив только ту, которая стоит в сервере - итак, удалил
# PCI Ethernet NICs that use the common MII bus controller code.
# NOTE: Be sure to keep the 'device miibus' line in order to use these NICs!
device<><------>ae<----><------># Attansic/Atheros L2 FastEthernet
device<><------>age<---><------># Attansic/Atheros L1 Gigabit Ethernet
device<><------>alc<---><------># Atheros AR8131/AR8132 Ethernet
device<><------>ale<---><------># Atheros AR8121/AR8113/AR8114 Ethernet
device<><------>bce<---><------># Broadcom BCM5706/BCM5708 Gigabit Ethernet
device<><------>bfe<---><------># Broadcom BCM440x 10/100 Ethernet
device<><------>dc<----><------># DEC/Intel 21143 and various workalikes
device<><------>et<----><------># Agere ET1310 10/100/Gigabit Ethernet
device<><------>fxp<---><------># Intel EtherExpress PRO/100B (82557, 82558)
device<><------>jme<---><------># JMicron JMC250 Gigabit/JMC260 Fast Ethernet
device<><------>lge<---><------># Level 1 LXT1001 gigabit Ethernet
device<><------>msk<---><------># Marvell/SysKonnect Yukon II Gigabit Ethernet
device<><------>nfe<---><------># nVidia nForce MCP on-board Ethernet
device<><------>nge<---><------># NatSemi DP83820 gigabit Ethernet
#device><------>nve<---><------># nVidia nForce MCP on-board Ethernet Networking
device<><------>pcn<---><------># AMD Am79C97x PCI 10/100 (precedence over 'le')
device<><------>re<----><------># RealTek 8139C+/8169/8169S/8110S
device<><------>rl<----><------># RealTek 8129/8139
device<><------>sf<----><------># Adaptec AIC-6915 (``Starfire'')
device<><------>sge<---><------># Silicon Integrated Systems SiS190/191
device<><------>sis<---><------># Silicon Integrated Systems SiS 900/SiS 7016
device<><------>sk<----><------># SysKonnect SK-984x & SK-982x gigabit Ethernet
device<><------>ste<---><------># Sundance ST201 (D-Link DFE-550TX)
device<><------>stge<--><------># Sundance/Tamarack TC9021 gigabit Ethernet
device<><------>tl<----><------># Texas Instruments ThunderLAN
device<><------>tx<----><------># SMC EtherPower II (83c170 ``EPIC'')
device<><------>vge<---><------># VIA VT612x gigabit Ethernet
device<><------>vr<----><------># VIA Rhine, Rhine II
device<><------>wb<----><------># Winbond W89C840F
device<><------>xl<----><------># 3Com 3c90x (``Boomerang'', ``Cyclone'')
# А так же удалил все ISA и Вайфай
# ISA Ethernet NICs.  pccard NICs included.
device<><------>cs<----><------># Crystal Semiconductor CS89x0 NIC
# 'device ed' requires 'device miibus'
device<><------>ed<----><------># NE[12]000, SMC Ultra, 3c503, DS8390 cards
device<><------>ex<----><------># Intel EtherExpress Pro/10 and Pro/10+
device<><------>ep<----><------># Etherlink III based cards
device<><------>fe<----><------># Fujitsu MB8696x based cards
device<><------>sn<----><------># SMC's 9000 series of Ethernet chips
device<><------>xe<----><------># Xircom pccard Ethernet

# Wireless NIC cards
device<><------>wlan<--><------># 802.11 support
options <------>IEEE80211_DEBUG># enable debug msgs
options <------>IEEE80211_AMPDU_AGE # age frames in AMPDU reorder q's
options <------>IEEE80211_SUPPORT_MESH<># enable 802.11s draft support
device<><------>wlan_wep<------># 802.11 WEP support
device<><------>wlan_ccmp<-----># 802.11 CCMP support
device<><------>wlan_tkip<-----># 802.11 TKIP support
device<><------>wlan_amrr<-----># AMRR transmit rate control algorithm
device<><------>an<----><------># Aironet 4500/4800 802.11 wireless NICs.
device<><------>ath<---><------># Atheros pci/cardbus NIC's
device<><------>ath_hal><------># pci/cardbus chip support
options <------>AH_SUPPORT_AR5416<-----># enable AR5416 tx/rx descriptors
device<><------>ath_rate_sample># SampleRate tx rate control for ath
device<><------>ral<---><------># Ralink Technology RT2500 wireless NICs.
device<><------>wi<----><------># WaveLAN/Intersil/Symbol 802.11 wireless NICs
#Ну и на последок удалил
# FireWire support
device<><------>firewire<------># FireWire bus code
#device><------>sbp<---><------># SCSI over FireWire (Requires scbus and da)
device<><------>fwe<---><------># Ethernet over FireWire (non-standard!)
device<><------>fwip<--><------># IP over FireWire (RFC 2734,3146)
device<><------>dcons<-><------># Dumb console driver
device<><------>dcons_crom<----># Configuration ROM for dcons
Конечно же это далеко не все, что можно выкинуть из ядра, освободив тем самым ресурсы системы, но я решил ограничиться этим - что нить ещё выкину в следующий раз, а пока мне надо решить тот вопрос, ради которого я суда вообще полез - добавление модуля ядра. Дабы не облажаться сначало я почитаю что это и как оно вписывается в ядро - иду в файл /usr/src/sys/amd64/conf/NOTES где поиском нахожу слово coretemp и вижу слудующее

Код: Выделить всё

#
# Temperature sensors:
#
# coretemp: on-die sensor on Intel Core and newer CPUs
# amdtemp: on-die sensor on AMD K8/K10/K11 CPUs
#
device<><------>coretemp
device<><------>amdtemp
ну тут вроде как все понятно описано, потому в конец своего ядра /usr/src/sys/amd64/conf/stat я добавляю следующие строки

Код: Выделить всё

# Temperature sensors:
device<><------>coretemp
после чего, находясь в директории где лежит мой файл ядра, делаю

Код: Выделить всё

stat# config stat 
Kernel build directory is ../compile/stat
Don't forget to do ``make cleandepend && make depend''
stat# cd ../compile/stat
stat# make  
Процесс пересборки ядра хорошо описан в справочнике на русском языке. Знаю что этот способ устарел, но пока что так было удобнее сделать. config - это команда которая конфигурирует файлы для сборки ядра, stat - это имя файла ядра, который я правил выше. Дальше он мне говорит что-то непонятное, что я игнорирую и перехожу к сборке ядра. Потом я устанавливаю собранное ядро и перегружаю сервере

Код: Выделить всё

make install
reboot
Вот то ядро, которое у меня в итоге получилось после редактирования
stat.txt
Файл ядра после редактирования
(6.98 КБ) 719 скачиваний
В после перезагрузки я увидел вот такое сообщение

Код: Выделить всё

stat# uname -a
FreeBSD stat.stniva.ru 8.1-RELEASE-p1 FreeBSD 8.1-RELEASE-p1 #0: Sat Nov 13 12:32:39 MSK 2010     roman@stat.stniva.ru:/usr/src/sys/amd64/compile/stat  amd64
Воо, ядро уже поновее... проверим как там наша опция

Код: Выделить всё

stat# sysctl -a | grep temper
dev.cpu.0.temperature: 41.0C
dev.cpu.1.temperature: 33.0C
dev.cpu.2.temperature: 40.0C
dev.cpu.3.temperature: 43.0C
Ура - все получилось.
Правда при обновлении системы, для того что бы это заработало вам опять прийдется пересобрать ядро, что вы почти наверняка забудите сделоать, потому есть другой способ - пропишите в файл /boot/loader.confстрочку следующего содержания coretemp_load="YES", тем самым разрешив подгружаться данному модулю при старте системы - результат будет тот же
теперь осталось прикрутить все это дело к zabbix и жить счастливо, мониторя температуру каждого камня :-)

Итак, все как всегда - в конец файла /usr/local/etc/zabbix/zabbix_agentd.conf добавляем

Код: Выделить всё

#####
# Temperatura yader CPU
#####
UserParameter=cpu.t1,/sbin/sysctl -a | grep dev.cpu.0.temperature | cut -f2 -d" " | cut -f1 -d"C"
UserParameter=cpu.t2,/sbin/sysctl -a | grep dev.cpu.1.temperature | cut -f2 -d" " | cut -f1 -d"C"
UserParameter=cpu.t3,/sbin/sysctl -a | grep dev.cpu.2.temperature | cut -f2 -d" " | cut -f1 -d"C"
UserParameter=cpu.t4,/sbin/sysctl -a | grep dev.cpu.3.temperature | cut -f2 -d" " | cut -f1 -d"C"
как обычно даем права

Код: Выделить всё

stat# chown root:zabbix /sbin/sysctl
stat# chmod 710 /sbin/sysctl
stat# chmod ug+s /sbin/sysctl
и перезапускаем агента

Код: Выделить всё

stat# /usr/local/etc/rc.d/zabbix_agentd stop
Stopping zabbix_agentd.
Waiting for PIDS: 1164 1176 1177 1178 1179 1180.

stat# /usr/local/etc/rc.d/zabbix_agentd start
Starting zabbix_agentd.
И идем в вебинтерфейс, где заводим новые элементы данных, ну или скачиваем новый шаблон :-)
templates_FreeBSD_v4.xml
Темплейт FreeBSD v4
(193.07 КБ) 775 скачиваний
Изменения относительно предыдущих:
1) элемент данных "Температура процессора" переименован в "Температура чего-то"
2) добавлены 4 новых элемента данных по числу ядер процессора
3) добавленно 4 новых тригера на эти элементы когда ядро нагреется более 60 градусов
4) тригер "нагрелся процессор" переименован в "что-то нагрелось"
5) Обновлен график "Температуры сервера"
6) тепер температура отображается не звёздочкой, как раньше (*С) а ноликом (°С)
Ответить