Итак, хочется рисовать графики mrtg температур cpu и hdd. Имеем например два сервера, один собирает и отрисовывает статистику, другой отдаёт свои данные.
Начнём с того, что на сервере, назовём его monitoring, нужно поставить mrtg и настроить apache или другой http сервер. На втором сервере, с которого мы будем собирать статистику нужно поставить snmpd.
С температурой cpu всё достаточно просто, достаточно чтобы был загружен модуль coretemp, речь идёт о debian и ему подобных системах, и поставить например sensors. Добиваемся примерно вот такого вывода при команде sensors:
coretemp-isa-0000
Adapter: ISA adapter
Core 0: +44.0°C (high = +86.0°C, crit = +100.0°C)
coretemp-isa-0001
Adapter: ISA adapter
Core 1: +45.0°C (high = +86.0°C, crit = +100.0°C)
Теперь, если у нас запущен демон snmpd можно попробывать сделать вот так:
snmpwalk -v1 -c public localhost .1.3.6.1.4.1.2021.13.16.5.1.3.1
Вывод будет примерно таким:
LM-SENSORS-MIB::lmMiscSensorsValue.1 = Gauge32: 45000
Чтобы snmpd смотрел не только на localhost, нужно отредактировать файл /etc/default/snmpd. Если убрать от туда 127.0.0.1, то snmpd будет висеть на всех интерфейсах.
Пробуем с monitoring сервера получить такую же информацию:
snmpwalk -v1 -c public адрес_сервера .1.3.6.1.4.1.2021.13.16.5.1.3.1
Сделаем конфиг для mrtg. У меня все конфиги для mrtg хранятся в /etc/mrtg/, а из /etc/mrtg.cfg инклудятся.
и сохраним его в /etc/mrtg/cpu.cfg
Обращаю внимание на строку:
Target[cpu]: (.1.3.6.1.4.1.2021.13.16.5.1.3.1&.1.3.6.1.4.1.2021.13.16.5.1.3.2:public@address_server)/1000
Здесь берётся два значения .1.3.6.1.4.1.2021.13.16.5.1.3.1 и .1.3.6.1.4.1.2021.13.16.5.1.3.2, разделяются & и делятся на 1000.
Добавляем в /etc/mrtg.cfg
Include: /etc/mrtg/cpu.cfg
Создадим html страницу:
indexmaker /etc/mrtg/cpu.cfg —output=/var/www/mrtg/cpu.html
WorkDir: /var/www/mrtg
Target[cpu]: (.1.3.6.1.4.1.2021.13.16.5.1.3.1&.1.3.6.1.4.1.2021.13.16.5.1.3.2:public@<strong>address_server</strong>)/1000
MaxBytes[cpu]: 110
MaxBytes2[cpu]: 110
Title[cpu]: CPU Core 1 and CPU Core 2
Options[cpu]: integer, gauge, nopercent, growright
YLegend[cpu]: temperature, C
ShortLegend[cpu]: C
Legend1[cpu]: CPU Core 1 temp, C
Legend2[cpu]: CPU Core 2 temp, C
LegendI[cpu]: CPU Core 1 temp, C
LegendO[cpu]: CPU Core 2 temp, C
XSize[cpu]: 600
YSize[cpu]: 160
PageTop[cpu]: <H1>Monitoring cpu</H1> <br/>
C hddtemp я сделал несколько сложнее:
Добавляем строки в конфиг /etc/snmp/snmpd.conf
rocommunity public
exec hddtemp "/usr/sbin/hddtemp -n /dev/sda"
Перезапускаем snmpd /etc/init.d/snmpd restart
Конфиг mrtg:
WorkDir: /var/www/mrtg/
Target[hddtemp]: `/etc/mrtg/scripts/hdd.sh`
MaxBytes[hddtemp]: 110
MaxBytes2[hddtemp]: 110
Title[hddtemp]: HDD 1 and HDD 2
Options[hddtemp]: integer, gauge, nopercent, growright
YLegend[hddtemp]: hddtempature, C
ShortLegend[hddtemp]: C
Legend1[hddtemp]: HDD 1 temp, C
Legend2[hddtemp]: HDD 2 temp, C
LegendI[hddtemp]: HDD 1 temp, C
LegendO[hddtemp]: HDD 2 temp, C
XSize[hddtemp]: 600
YSize[hddtemp]: 160
PageTop[hddtemp]: <H1>Monitoring hdd</H1> <br/>
Скрипт /etc/mrtg/scripts/hdd.sh:
#!/bin/bash TEMP=`/usr/bin/snmpwalk -v1 -c public localhost .1.3.6.1.4.1.2021.8.1.101.1 | awk '{print substr($4,2,length($4)-5)}'`.00 echo $TEMP echo 0
Вот и всё, теперь можно следить за температурами серверов, дабы избежать перегревов и наглядно видеть изменение температуры в зависимости от нагрузки на сервер.