From: Яровой Константин <classic@ip-elite.net.>
Newsgroups: email
Date: Mon, 14 Mar 2007 14:31:37 +0000 (UTC)
Subject: Отрисовка температуры процессора под FreeBSD
Наша задача - отрисовать температуру процессора в зависимости от времени.
Что будем использовать?
Для отрисовки: rrdtool (/usr/ports/net/rrdtool)
Для снятия температуры под FreeBSD: (/usr/ports/sysutils/mbmon)
Писать на графиках будем по-русски, поэтому внимательно читаем статью на
ОпенНЕТЕ: http://www.opennet.ru/tips/info/1366.shtml
Я на маршрутизаторах прикручиваю русский к rrdtool по той статье так:
1. cd /usr/ports/net/rrdtool
2. make fetch; make extract
3. cd work/rrdtool-xxx/src/
4. Вношу изменения в файлы rrd_afm.h, rrd_afm.c по статье
5. cd ../../..
6. make install
Всё, rrdtool собрана на русском.
Теперь определимся с тем, как именно будем снимать температуру. Mbmon помойму
единственная тулзовина, которая в консоли адекватно пишет её.
TEMP0 - температура материнской платы
TEMP1 - температура процессора !!
FAN0 - температура кулера на процессоре
VC0 - напряжение в ядре процессора
V33 - текущее напряжение эталона в 3.3 Вольта
V50P - текущее напряжение эталона в 5 Вольт
V12P - текущее напряжение эталона в 12 Вольт
Конечно, у вас могут не показываться некоторые параметры, у меня вот нет
показаний с кулера, бывает на роутерах не показывается температура матери или
даже проца.
Для нас важно значение переменной TEMP1. А как вы понимаете, если мы собираемся
каждую минуту собирать циферки температуры проца, то это должны быть именно
циферки, причём циферка должна быть одна - численное значение температуры,
можно в формате INT, можно FLOAT (с запятой).
Это несложно получить:
mbmon -c 1 -r | grep TEMP1 | awk '{ print $3 }'
И мы получим число вот-такое вот: 39.0
Далее, как сами понимаете, нужно написать скрипт который будет снимать значения,
рисовать через rrdtool, причём за день, неделю, месяц, год.. Потом мы его пихнём
в cron и он будет производить свои манипуляции.
Скрипт выдался следующим:
#!/usr/local/bin/bash
# Путь к исполнимому файлу rrdtool
RRDTOOL=/usr/local/bin/rrdtool
# Путь к базе, в которой храниться температура
DATABASE=/usr/local/rrd/space-temperature.rrd
# Периодичность поступления данных в базу (сек) - соответственно должен быть настроен CRON
PERIOD=60
# Команда для получения текущей температуры процессора
SENSOR=`/usr/local/bin/mbmon -c 1 -r | grep TEMP1 | awk '{ print $3 }'`
# Путь к папке, в которой будут лежать изображения с графиками зависимости
IMAGE_PATH=/usr/local/www/htdocs/admin/temp/png
# Горизонтальная надпись в заголовке графика
TITLE_TEXT='Температура CPU'
# Горизонтальная надпись в легенде под графиком
UNDER_TEXT='Статистика температуры'
# Нижняя и верхняя границы отображения температуры на графике
TEMP_MIN=20
TEMP_MAX=30
# ========= ШАГ 1. Запись в базу данных полученных значений температуры ======
# Проверяем, присутствует ли вообще база для температуры. Если нет - создаём
if ! [ -f $DATABASE ]
then
$RRDTOOL create $DATABASE -s $PERIOD DS:temperature:GAUGE:600:10:80
RRA:AVERAGE:0.5:1:576
RRA:AVERAGE:0.5:6:672
RRA:AVERAGE:0.5:24:732
RRA:AVERAGE:0.5:144:1460
fi
# Функция для построения зависимости температуры от времени
function DRAW_GRAPHIC
{
# Определяем время, во сколько генерируется график
NOW_HOUR=`date +%H`
NOW_MIN=`date +%M`
NOW_SEC=`date +%S`
# На основе параметра 2, переданного функции вычисляем какой комментарий написать
case $2 in
day)
TIME_TEXT="за последние 24 часа"
;;
week)
TIME_TEXT="за последнюю неделю"
;;
month)
TIME_TEXT="за последний месяц"
;;
year)
TIME_TEXT="за последний год"
;;
esac
# ========= ШАГ 2. Отрисовка графиков зависимости температуры от времени ========
DRAW_GRAPHIC 'temp_d.png' 'day'
DRAW_GRAPHIC 'temp_w.png' 'week'
DRAW_GRAPHIC 'temp_m.png' 'month'
DRAW_GRAPHIC 'temp_y.png' 'year'
# ===============================================================================
Скрипт написан на BASH. Что делает: для начала вы настаиваете всё как написано
в комментариях, потом он сгребает температуру, проверяет есть ли уже RRD база
для температуры (если напримере запустили первый раз - он её сам создаст)..,
всовывает новую температуру в архив RRD базы, ну и отрисовывает PNG рисуночки
температуры и кладёт в нужную папочку.
Получили инфу про созданные 4 PNGшки.
Если скриптик материться - ну что ж, разбирайтесь..
man rrdtool, man rrdupdate, man rrdgraph и т.д...
Рекомендую сразу в скрипте указывать директорию для складывания PNG - ту,
которая находиться в рамках вашего web сервера. Для чего? Чтобы сразу и смотреть
через веб на странице статистике температурку.
Как красиво это выглядит, судите сами - я старался оттюнить вывод rrdgraph
как можно лучше.
Далее так сказать возникла проблемка у меня! Дело в том, что это результаты
отрисовки только с 1 роутера. А как же на других? Ну конечно можно поднимать
веб-сервер, и заходить туда смотреть на каждый роутер в отдельности - но это
гемморой в чистом виде. Намного лучше просто запускать скрипт на каждом роутере,
а рисуночки копировать на главный роутер по scp к примеру.
Предлагаю просто поднять mbmon,rrdtool на всех роутерах. Скрипт запускать,
внеся нужные настройки. После чего сгенерить ssh открытый ключ:
ssh-keygen -t rsa
Ответить Enterom на все вопросы и получить в /root/.ssh/id_rsa.pub. В этом
файлике открытый ключ вашего хоста. Зачем он? Чтобы потом переместить строку
из этого файла в файл ~/.ssh/authorized_hosts на главный сервак.
Конечно я написал "~/.ssh", где ~ - это указание на папку юзера, под которым
будете копировать. Просто сделайте adduser и заведите юзера sshcopy например.
Когда это сделано, на всех серваках, где собирается температурка в cron пропиши-
те запуск скрипта каждую минуту с таким кодом: