|
Ключевые слова: freebsd, cpu, monitor, rrdtool, (найти похожие документы)
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.dev/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 помойму единственная тулзовина, которая в консоли адекватно пишет её. К примеру: [root@drag-dsl /root]# mbmon -c 1 -r TEMP0 : 39.0 TEMP1 : 28.0 TEMP2 : 0.0 FAN0 : 0 FAN1 : 0 FAN2 : 0 VC0 : +1.71 VC1 : +0.00 V33 : +3.34 V50P : +4.74 V12P : +11.72 V12N : +0.00 V50N : +0.00 Что мы получили? 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 $RRDTOOL update $DATABASE N:$SENSOR # ============================================================================ # Функция для построения зависимости температуры от времени 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 $RRDTOOL graph $IMAGE_PATH/$1 \ -s -1$2 \ -e now \ -a PNG \ -v 'градусы Цельсия' \ -t "$TITLE_TEXT [$HOSTNAME] - $TIME_TEXT" \ -l $TEMP_MIN \ -u $TEMP_MAX \ -r \ -E \ -i \ -R light \ --zoom 1.2 \ -w 500 \ -h 150 \ DEF:temperature=$DATABASE:temperature:AVERAGE \ LINE2:temperature#33cc33:"$UNDER_TEXT" \ GPRINT:temperature:MIN:'Мин\:%2.lf' \ GPRINT:temperature:MAX:'Макс\:%2.lf' \ GPRINT:temperature:AVERAGE:'Средняя\:%4.1lf' \ GPRINT:temperature:LAST:'Текущая\:%2.lf \n' \ COMMENT:"Данные сняты \: $NOW_HOUR\:$NOW_MIN\:$NOW_SEC \n" } # ========= ШАГ 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 рисуночки температуры и кладёт в нужную папочку. Запустите его, если всё хорошо, на вывод полезет: [root@space /root/scripts]# ./temperature.sh 597x243 597x243 597x243 597x243 Получили инфу про созданные 4 PNGшки. Если скриптик материться - ну что ж, разбирайтесь.. man rrdtool, man rrdupdate, man rrdgraph и т.д... Рекомендую сразу в скрипте указывать директорию для складывания PNG - ту, которая находиться в рамках вашего web сервера. Для чего? Чтобы сразу и смотреть через веб на странице статистике температурку. Примерный вид таблицы статистики такой: <html> <head> <meta charset='koi8-r'> <title> RRD графики температуры : Маршрутизатор БЛА-БЛА</title> </head> <body bgcolor='#ccddcc'> <h2> <font face='Arial'> Температура процессора @ маршрутизатор БЛА-БЛА </font> </h2> <img src='png/temp_d.png'> <br> <img src='png/temp_w.png'> <br> <img src='png/temp_m.png'> <br> <img src='png/temp_y.png'> </body> </html> Как видите, рисунки лежат в папочке png. Как красиво это выглядит, судите сами - я старался оттюнить вывод rrdgraph как можно лучше. Далее так сказать возникла проблемка у меня! Дело в том, что это результаты отрисовки только с 1 роутера. А как же на других? Ну конечно можно поднимать веб-сервер, и заходить туда смотреть на каждый роутер в отдельности - но это гемморой в чистом виде. Намного лучше просто запускать скрипт на каждом роутере, а рисуночки копировать на главный роутер по scp к примеру. Предлагаю просто поднять mbmon,rrdtool на всех роутерах. Скрипт запускать, внеся нужные настройки. После чего сгенерить ssh открытый ключ: ssh-keygen -t rsa Ответить Enterom на все вопросы и получить в /root/.ssh/id_rsa.pub. В этом файлике открытый ключ вашего хоста. Зачем он? Чтобы потом переместить строку из этого файла в файл ~/.ssh/authorized_hosts на главный сервак. Конечно я написал "~/.ssh", где ~ - это указание на папку юзера, под которым будете копировать. Просто сделайте adduser и заведите юзера sshcopy например. Когда это сделано, на всех серваках, где собирается температурка в cron пропиши- те запуск скрипта каждую минуту с таким кодом: scp /root/temperature/* sshcopy@your-main-server.com:/usr/local/www/htdocs/temp_from_router_X Теперь на главном серваке создайте идентичный index.html в нужной папке для каждого сервачка с которого снимается температуру и смотрите на здоровье!
|
Обсуждение | [ Линейный режим | Показать все | RSS ] |
|
Добавить комментарий |
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |