The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Отрисовка температуры процессора под FreeBSD (freebsd cpu monitor rrdtool)


<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>
Ключевые слова: 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 в нужной папке для каждого сервачка с которого снимается температуру и смотрите на здоровье!

<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>

Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, mechanix (??), 12:59, 17/03/2007 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    во как люди без cacti мучаются...
     
  • 1.2, sk (??), 10:41, 19/03/2007 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Хороший пример, спасибо!

    cacti для своих задач, и слишком громоздкий зверек...
    я бы сказал, "а люди с какти мучаются.." ;)

     
  • 1.3, nightowl (ok), 16:50, 05/06/2007 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А зачем вот по scp ? нельзя чтоль SNMP настроить на машинах ? и опрашивать по SNMP их ?
     
     
  • 2.5, Constantine A. Yarovoy (?), 07:53, 08/07/2007 [^] [^^] [^^^] [ответить]  
  • +/
    Огласите номер в иерархии SNMP-MIB для температуры :)
     
     
  • 3.13, SK (?), 17:39, 09/06/2008 [^] [^^] [^^^] [ответить]  
  • +/
    exec'и например ?
     
  • 2.7, cj_nik (??), 12:17, 10/09/2007 [^] [^^] [^^^] [ответить]  
  • +/
    Мда искал неделю... так ни к чему и не пришёл, наверно плохо искал :(
     

  • 1.6, dj_gans (?), 23:33, 21/08/2007 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    спасибо, здорово. после небольшой переделки под свои нужды отличная, знате ли, виещь получилась. еще раз спасибо аффтару
     
  • 1.8, ans (??), 01:29, 24/09/2007 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    из мана..
    In the case of "xmbmon", Temp0,1,2 are depicted with legends
    "MB", "CPU", "chip", respectively.

    wrk# mbmon -c 1 -r
    TEMP0 : 25.0
    TEMP1 : 32.0
    TEMP2 : 34.0

    На основе выше написанного делаю вывод :)
    Думаю температура CPU, не TEMP0.

     
     
  • 2.9, Constantine A. Yarovoy (?), 01:41, 10/11/2007 [^] [^^] [^^^] [ответить]  
  • +/
    Все слышали товарища ANS ? )) Принять к сведению!
    Действительно в статье я перепутал TEMP0 и TEMP1.

    TEMP0 - мать.
    TEMP1 - проц.

    И мой вам совет - измерять и рисовать температуру процессора этим способом есть смысл
    только на серверных платформах с исключительно грамотно реализованной системой датчиков. К примеру Intel Server Board 75**. На простых штатных тазах вы получите с гарантией в 70 % данные с погрешностью.

    Также есть один недостаток. В процессе работы mbmon (у меня mbmon-205_3) иногда (но все же!) зависает и висит в top'e на 90% ) Так что либо найдите более вменяемое решение касательно какой тулзовиной снимать данные, либо извратитесь и попробуйте cron'om каждый час делать killall -KILL mbmon.

    Я предлагаю как альтернативу моей статье, несколько изменить саму логику снятия температуры.
    Куда более практично измерять температуру в серверной, я считаю.

    Для этого подойдут термометры Poseidon, которые я использую сейчас.
    http://www.hwgroup.cz/products/poseidon/poseidon_1140_en.html
    или для России вот:
    http://www.actidata.ru/?id=167

    Они умеют отдавать по SNMP. Хорошо следят за кондиционированием помещения. Не раз фиксировали летом сбои кондиционера ))

     

  • 1.10, ans (ok), 08:14, 10/01/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Спасибо Константин ;)
    Только сейчас сделал, я нашёл ещё не большой косяк ;)
    у меня графики...
    1) Названия Дней недели
    2) Названия Месяцев
    пишутся по Английски..
    Так и должно быть или я где то в исходниках ошибся ? :)
     
     
  • 2.11, Constantine A. Yarovoy (?), 09:10, 10/01/2008 [^] [^^] [^^^] [ответить]  
  • +/

    >1) Названия Дней недели
    >2) Названия Месяцев
    >пишутся по Английски..
    >Так и должно быть или я где то в исходниках ошибся ?

    Цитирую документацию :
    --------
    If you want to alter the generated text to another language, use the
    LC_TIME environment variable to set the locale you prefer prior to calling
    the graph function.
    -------

    соответственно присвойте переменной окружения LC_TIME значение ru_RU:
    # export LC_TIME=ru_RU или # setenv LC_TIME ru_RU

    Наши друзья китайцы на своих форумах настолько настрадались с выводом графиков на своем родном языке, что предлагают даже:

    export LC_ALL=ru_RU
    export LANG=ru_RU
    export LANGUAGE=ru_RU
    export LC_CTYPE=ru_RU
    export LC_TIME=ru_RU

    Так что поиграйтесь с переменными.

     
     
  • 3.12, ans (ok), 09:15, 10/01/2008 [^] [^^] [^^^] [ответить]  
  • +/
    Оперативно ;)
    Спасибо ;)
     

  • 1.14, ssh911 (?), 18:56, 10/04/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Это несложно получить:
    >
    >        mbmon -c 1 -r | grep TEMP1 | awk '{ print $3 }'

    Можно и так:
    mbmon -c1 -T 2

     
  • 1.15, Kirgudu (?), 14:45, 16/08/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Нужно
    function DRAW_GRAPHIC заменить на DRAW_GRAPHIC

    А
    #!/usr/local/bin/bash

    заменить на #!/bin/sh

     
     
  • 2.16, Kirgudu (?), 14:47, 16/08/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Блин, на DRAW_GRAPHIC()
     

    игнорирование участников | лог модерирования

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру