Содержание

Настройка мониторинга температуры с помощью cacti.

Дано:

Схема подключения датчика 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

Визуализировать показания можно двумя вариантами:


Создание графика температуры с помощью 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 ListAdd
В поле 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 ListAdd
Создаю новый график.
В Поле 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): Максимум:<HR>	GPRINT		MAX

Ссылки:
http://mysyura.in.ua/nastroyka-monitoringa-temperatury-v-servernoj/
http://habrahabr.ru/post/55780/#habracut
http://www.lissyara.su/articles/freebsd/programms/mrtg+digitemp/
http://www.unix.ck.ua/content/monitoring-temperatury-s-pomoshchyu-rrdtool
http://blog.marvins.ru/avtomatizaciya/rrdtool-generaciya-grafika-s-pomoshhyu-rrdcgi.html
http://marvins.ru/avtomatizaciya/temperaturnyj-datchik-ds18s20-chast-2.html http://www.kusto.com.ru/temperature