====== Настройка мониторинга температуры с помощью cacti. ====== Дано: * Сервер с com портом под управлением FreeBSD. * Датчики температуры DS18В20. Схема подключения датчика DS1820 На этой схеме: Два диода Шотки 1N5818\\ Стабилитрон 1N5228 3.9 V\\ Стабилитрон 1N5234 6.2 V\\ Резистор 1.5 кО 9 -pin’овый разъем ( для подключения к Com — порту материнской платы ) При данной реализации схемы мы используем всего 2 провода для подключения датчика (земля и питание закорочены), что уменьшает количество используемых датчиков и максимальную длину кабеля, по данным из интернета — такая схема может вытягивать 10датчиков на длине 60м. Собственно мне больше и не нужно ===== Установка и настройка Digitemp. ===== Для сбора информации с датчиков использую программа Digitemp Установка # cd /usr/src # wget https://github.com/bcl/digitemp/archive/v3.7.1.tar.gz # tar -xzvf v3.7.1.tar.gz После разархивирования появится папка /usr/src/digitemp-3.7.1 #cd digitemp-3.7.1 #gmake ds9097 После компиляции в папке появится исполняемый файл digitemp_DS9097.\\ Проверяю: # ./digitemp_DS9097 Программа выведет встроенный Help. Всё ОК. Создаю рабочую папку программы . #mkdir /usr/local/etc/digitemp/ #cp digitemp_DS9097 /usr/local/etc/digitemp/digitemp #cd /usr/local/etc/digitemp Как обнаружил позже, программа есть в портах # cd /usr/ports/misc/digitemp/ # make install clean # rehash В конце установки инсталлятор выдаст предупреждение. NOTE: on FreeBSD Digitemp should use /dev/cuau* serial devices, so if running as non-root user, please tune your devfs rules or add running user to "dialer" group which is the default owner of /dev/cuau* devices ! Контроллер присоединён к COM1, выполняем его инициализацию. # ./digitemp -i -s /dev/cuau0 Будет выведена информация о найденных датчиках и создан файл конфигурации .digitemprc примерно следующего содержания. Ключ -i указывает создать конфигурационный файл (файл создастся в директории откуда была запущена команда, имя файла .digitemprc): TTY /dev/cuau0 READ_TIME 1000 LOG_TYPE 1 LOG_FORMAT "%b %d %H:%M:%S Sensor %s C: %.2C F: %.2F" CNT_FORMAT "%b %d %H:%M:%S Sensor %s #%n %C" HUM_FORMAT "%b %d %H:%M:%S Sensor %s C: %.2C F: %.2F H: %h%%" SENSORS 2 ROM 0 0x28 0xFF 0x95 0x5C 0x4C 0x04 0x00 0x56 ROM 1 0x28 0xFF 0xE7 0x17 0x4A 0x04 0x00 0x1D. Программа нашла два датчика. Нумерация датчиков начинается с нуля. Снимаю показания. # /usr/local/etc/digitemp/digitemp -a -s /dev/cuau0 DigiTemp v3.5.0 Copyright 1996-2007 by Brian C. Lane GNU Public License v2.0 - http://www.digitemp.com 14.06 26.94 43.56 # /usr/local/etc/digitemp/digitemp -a -c /usr/local/etc/digitemp/.digitemprc_orig DigiTemp v3.5.0 Copyright 1996-2007 by Brian C. Lane GNU Public License v2.0 - http://www.digitemp.com Apr 06 16:43:26 Sensor 0 C: 14.75 F: 58.55 Apr 06 16:43:27 Sensor 1 C: 27.12 F: 80.83 Можно меняя ключи коммандной строки выборочно опрашивать датчики # /usr/local/etc/digitemp/digitemp -t 0 -q -o "%.C" -c /usr/local/etc/digitemp/.digitemprc 15 Я изменил стоку в файле конфигурации\\ **LOG_FORMAT "%b %d %H:%M:%S Sensor %s C: %.2C F: %.2F"** на **LOG_FORMAT "%.2C"** # /usr/local/etc/digitemp/digitemp -t 0 -q -c /usr/local/etc/digitemp/.digitemprc 14.56 -------------------------------------------------------------------------------- Визуализировать показания можно двумя вариантами: * — с помощью rrdtool рисовать графики по показаниям * — передавать данные о температуре по SNMP в Cacti -------------------------------------------------------------------------------- ===== Создание графика температуры с помощью Cacti ===== ==== 1. Настройка SNMP ==== Скрипт который снимает показания с датчика температуры и выдает ее в stdout для первого датчика cat /scripts/checktemp #!/bin/sh /usr/local/etc/digitemp/digitemp -t 0 -q -c /usr/local/etc/digitemp/.digitemprc | tail -n 1 для второго датчика cat /scripts/checktemp2 #!/bin/sh /usr/local/etc/digitemp/digitemp -t 1 -q -c /usr/local/etc/digitemp/.digitemprc | tail -n 1 Для того чтобы SNMP знал откуда брать температуру и в какой oid выкладывать значения. Нужно в файл **/usr/local/share/snmp/snmpd.conf** добовить такую строчку: extend .1.3.6.1.4.1.2021.2000.1 temp0 /scripts/checktemp - для первого датчика extend .1.3.6.1.4.1.2021.2000.2 temp0 /scripts/checktemp2 - для второго датчика и т.д. Перезапускаю SNMP # /usr/local/etc/rc.d/snmpd restart Проверяем выдаются ли наши значения по запросу: # snmpwalk -v1 -c public 10.xxx.xxx.xxx .1.3.6.1.4.1.2021.2000.1 UCD-SNMP-MIB::ucdavis.2000.1.1.0 = INTEGER: 1 UCD-SNMP-MIB::ucdavis.2000.1.2.1.2.5.116.101.109.112.48 = STRING: "/scripts/checktemp" UCD-SNMP-MIB::ucdavis.2000.1.2.1.3.5.116.101.109.112.48 = "" UCD-SNMP-MIB::ucdavis.2000.1.2.1.4.5.116.101.109.112.48 = "" UCD-SNMP-MIB::ucdavis.2000.1.2.1.5.5.116.101.109.112.48 = INTEGER: 5 UCD-SNMP-MIB::ucdavis.2000.1.2.1.6.5.116.101.109.112.48 = INTEGER: 1 UCD-SNMP-MIB::ucdavis.2000.1.2.1.7.5.116.101.109.112.48 = INTEGER: 1 UCD-SNMP-MIB::ucdavis.2000.1.2.1.20.5.116.101.109.112.48 = INTEGER: 4 UCD-SNMP-MIB::ucdavis.2000.1.2.1.21.5.116.101.109.112.48 = INTEGER: 1 UCD-SNMP-MIB::ucdavis.2000.1.3.1.1.5.116.101.109.112.48 = STRING: "13.31" UCD-SNMP-MIB::ucdavis.2000.1.3.1.2.5.116.101.109.112.48 = STRING: "13.31" UCD-SNMP-MIB::ucdavis.2000.1.3.1.3.5.116.101.109.112.48 = INTEGER: 1 UCD-SNMP-MIB::ucdavis.2000.1.3.1.4.5.116.101.109.112.48 = INTEGER: 0 UCD-SNMP-MIB::ucdavis.2000.1.4.1.2.5.116.101.109.112.48.1 = STRING: "13.31" В последней строке и есть температура. ==== 2. Настройка cacti. ==== Захожу в **Data Templates** Раздел - **Data Templates**\\ Поле **Name** - SNMP - OID Температура Раздел **Data Source**\\ Поле **Name** - |host_description| -\\ Поле **Data Input Method** - Get SNMP Data\\ Поле **Associated RRA's** - оставляю без изменений.\\ Поле **Step** - 300\\ Поле **Data Source Active** - помечаю галочкой.\\ Раздел **Data Source Item [snmp_oid]**\\ Поле **Internal Data Source Name** - snmp_oid\\ Поле **Minimum Value ('U' for No Minimum)** - -40\\ Поле **Maximum Value ('U' for No Maximum)** - 100\\ Поле **Data Source Type** - GUAGE\\ Поле **Heartbeat** - 600 Раздел **Custom Data [data input: Get SNMP Data]**\\ Поле **OID** - отмечаю галочкой\\ Поле **SNMP Community** - xxxxxxx_ro\\ Поле **SNMP IP Address** - т.к. digitemp и cacti запущены на одной машине, то 127.0.0.1\\ Поле **SNMP Port** - 161\\ Поле **SNMP Version (1, 2, or 3)** - 1 Остальные поля без изменений. Захожу в настройки хоста, жму **Data Source List** -> **Add**\\ В поле **Selected Data Template** выбираю - **SNMP - OID Температура**\\ В поле **Host** - выбираю свой сервер В разделе **Supplemental Data Template Data**\\ Поле **Name** - |host_description| - улица\\ Поле **OID** - .1.3.6.1.4.1.2021.2000.1.4.1.2.5.116.101.109.112.48.1 Зачение для поля OID получаются следующим образом: extend .1.3.6.1.4.1.2021.2000.1 temp0 /scripts/checktemp\\ +\\ UCD-SNMP-MIB::ucdavis.2000.1.4.1.2.5.116.101.109.112.48.1 = STRING: "13.31"\\ =\\ .1.3.6.1.4.1.2021.2000.1.4.1.2.5.116.101.109.112.48.1 Далее Захожу в настройки хоста, жму **Graph List** -> **Add**\\ Создаю новый график.\\ В Поле **Title** пишу название графика и жму save\\ После чего в разделе **Graph Items** создаю сам график. Graph Item Data Source Graph Item Type CF Type Item Color Item # 1 (snmp_oid): Улица LINE2 AVERAGE 00FF00 Item # 2 (snmp_oid): Сейчас: GPRINT LAST Item # 3 (snmp_oid): Минимум: GPRINT MIN Item # 4 (snmp_oid): Максимум: