MRTG и CentOS 5. Использование скриптов для сбора статистики.
Мне потребовалось собирать базовую статистику с Linux-сервера работающего под управлением CentOS 5.3
Т.к. ничего особенного от статистики я не хотел, только простые графики некоторых переменных, я выбрал MRTG. Про то что это такое, рассказывать смысла нет, в Интернет по данному вопросу полно материалов.
Установить MRTG из rmp-пакета очень просто: yum install mrtg.
Собирать статистику предполагалось используя snmp. Поэтому на машине с которой требуется собирать статистику требуется проинсталировать snmpd.
#yum install snmpd
Теперь настроим /etc/snmpd.conf
Я разрешил читать из всего дерева, вот что у меня получилось:
#cat /etc/snmp/snmpd.conf | more
syslocation Someplace Verhnyaya street billding 3 ats 1
syscontact Kudryavtsev Ignat i.kudryavtsev@somemail.ru +79627277780
com2sec mrtg 127.0.0.1/32 CommunityKey #Разрешать запросы только для 127.0.0.1 с ключем CommunityKey
group MyROGroup v2c mrtg
view all included .1 80
access MyROGroup »» any noauth exact all none none
Добавляем опцию для snmpd, что бы заводился только на localhost, т.е. демон слушает только на 127.0.0.1, причем на нестандартном порте 1161.
# cat /etc/sysconfig/snmpd.options
# snmpd command line options
# OPTIONS=»-Lsd -Lf /dev/null -p /var/run/snmpd.pid -a»
OPTIONS=«127.0.0.1:1161»
Теперь можно попробывать создать конфигурацию mrtg, она создается посредствам утилиты cfgmaker:
Более подробно о ключах читайте в man cfgmaker
cfgmaker –snmp-options=:1161::::2c –global ‘WorkDir: /var/www/mrtg’ CommunityKey@127.0.0.1 –global ‘Options[_]: bits,growright’ > /etc/mrtg/mrtg.cfg
Объяснение команды: Отправлять запросы на порт 1161 используя версию snmp 2c, с ключем CommunityKey по адресу , директория для вывода логов и графиков /var/www/mrtg’ , рисовать графики по битам в правую сторону. В директории /etc/mrtg/ где лежит файл конфигурации по-умочанию будет перезаписан файл mrtg.cfg
В MRTG есть дополнительных скрипты, которые используя данные ключей cfgmaker, попытаются получить информацию о сетевых интерфейсах хоста 127.0.0.1 и добавить необходимые строчки в конфигурацию.
Теперь нужно добаваить запуск скрипта mrtg с конфигурацией mrtg.cfg что бы он собирал новые значения и рисовал новые точки на графиках:
crontab –e
Добавим запуск скрипта раз в 5 минут:
0,5,10,15,20,25,30,35,40,45,50,55 * * * * env LANG=C mrtg /etc/mrtg/mrtg.cfg –logging /var/log/mrtg.log
сохраняем.
Но увы статиска собираться не будет, в CentOS 5 появилась проблема с распознаванием кодировки
скритом mrtg значений которые ему передаются, в результате работы библиотеки snmp в perl:
для записи в конфигурации вида:
Target[127.0.0.1_5]: 1.3.6.1.2.1.25.3.3.1.2.768&1.3.6.1.2.1.25.3.3.1.2.771:CommunityKey@127.0.0.1:1161::::2c
MaxBytes[127.0.0.1_5]: 100
YLegend[127.0.0.1_5]: CPU LOAD
Options[127.0.0.1_5]: growright, integer, gauge
Title[127.0.0.1_5]: CPU LOAD
PageTop[127.0.0.1_5]: <H1>CPU LOAD</H1>
Ничего собираться не будет, более того, в логах будут одни нули.На графиках пусто. В CentOS 5.3 по-умолчанию ставиться версия 2.14.5
Пробывал последнюю стабильную версию mrtg-2.16.2.zip, не помогло.
Поэтому я решил использовать внешние скрипты, результаты работы которых передаются в mrtg, затем отрисовываются графики.
Пример:
Что бы снимать статистику загрузки двух ядер процессора, памяти, дисков и сетевых интерфейсов
я создал следующие записи, в которые результаты передаются через скрипты:
#WAN INTERFACE
Target[127.0.0.1_6]: `/mrtgscripts/intETH1`
MaxBytes[127.0.0.1_6]: 12500000
Title[127.0.0.1_6]: Traffic Analysis for Internet Interface (ip.ad.dr.es)
PageTop[127.0.0.1_6]: <H1>INTERNET INTERFACE UTILIZATION</H1>
YLegend[127.0.0.1_6]: Bytes\sec
ShortLegend[127.0.0.1_6]: Bytes
LegendI[127.0.0.1_6]: INTERFACE Utilization RX (Bytes) 
LegendO[127.0.0.1_6]: INTERFACE Utilization TX(Bytes) 
Options[127.0.0.1_6]: gauge, nopercent
#LAN INTERFACE
Target[127.0.0.1_7]: `/mrtgscripts/intETH0`
MaxBytes[127.0.0.1_7]: 12500000
Title[127.0.0.1_7]: Traffic Analysis for LAN Interface (ip.ad.dr.es)
PageTop[127.0.0.1_7]: <H1>LAN INTERFACE UTILIZATION</H1>
ShortLegend[127.0.0.1_7]: Bytes
YLegend[127.0.0.1_7]: Bytes\sec
LegendI[127.0.0.1_7]: INTERFACE Utilization RX (Bytes) 
LegendO[127.0.0.1_7]: INTERFACE Utilization TX(Bytes) 
Options[127.0.0.1_7]: gauge, nopercent
#CPU LOAD
Target[127.0.0.1_5]:`/mrtgscripts/cpu_load.sh cpu`
MaxBytes[127.0.0.1_5]: 100
YLegend[127.0.0.1_5]: CPU LOAD
Options[127.0.0.1_5]: gauge, nopercent
Title[127.0.0.1_5]: CPU LOAD
PageTop[127.0.0.1_5]: <H1>CPU LOAD</H1>
AbsMax[127.0.0.1_5]: 100
ShortLegend[127.0.0.1_5]: %
LegendI[127.0.0.1_5]: CPU Utilization Core 1 (percentage) 
LegendO[127.0.0.1_5]: CPU Utilization Core 2(percentage) 
#MEMORY USAGE
Target[127.0.0.1_8]:`/mrtgscripts/memory.sh`
MaxBytes[127.0.0.1_8]: 2001
YLegend[127.0.0.1_8]: Memory Usage
Options[127.0.0.1_8]: gauge, nopercent
Title[127.0.0.1_8]: MEMORY USAGE
PageTop[127.0.0.1_8]: <H1>MEMORY USAGE</H1>
AbsMax[127.0.0.1_8]: 2001
ShortLegend[127.0.0.1_8]: MegaBytes
LegendI[127.0.0.1_8]: Memry Free(Mbytes) 
LegendO[127.0.0.1_8]: Memory Used(Mbytes) 
#DISK USAGE
Target[127.0.0.1_9]: `/mrtgscripts/disk_usage.sh`
MaxBytes[127.0.0.1_9]: 72
YLegend[127.0.0.1_9]: Disk Usage
Options[127.0.0.1_9]: gauge, nopercent
Title[127.0.0.1_9]: DISK USAGE
PageTop[127.0.0.1_9]: <H1>DISK USAGE</H1>
AbsMax[127.0.0.1_9]: 72
ShortLegend[127.0.0.1_9]: GBytes
LegendI[127.0.0.1_9]: DISK FREE (Gbytes) 
LegendO[127.0.0.1_9]: DISK USED(Gbytes) 
Привожу примеры скриптов:
# cat /mrtgscripts/cpu_load.sh
NAME=$1
echo `snmpwalk -Osn -c CommunityKey -v 2c 127.0.0.1:1161 1.3.6.1.2.1.25.3.3.1.2.769 | cut -d ‘ ‘ -f 4`
echo `snmpwalk -Osn -c CommunityKey -v 2c 127.0.0.1:1161 1.3.6.1.2.1.25.3.3.1.2.771 | cut -d ‘ ‘ -f 4`
echo `/bin/date +%s`
echo $NAME
# cat /mrtgscripts/disk_usage.sh
echo `df -h | awk ‘/sda3/ {print $3}’ | sed «s/G//»`
echo `df -h | awk ‘/sda3/ {print $4}’ | sed «s/G//»`
echo `snmpwalk -Osn -c CommunityKey -v 2c 127.0.0.1:1161 sysUptime | cut -d ‘ ‘ -f 5`
echo DiskUsage
# cat /mrtgscripts/memory.sh
echo `free -m | awk ‘/Mem/ {print $4}’`
echo `free -m | awk ‘/Mem/ {print $3}’`
echo `snmpwalk -Osn -c CommunityKey -v 2c 127.0.0.1:1161 sysUptime | cut -d ‘ ‘ -f 5`
echo MemoryUsage
# cat /mrtgscripts/intETH0
#LAN INTERFACE
LASTRX=`cat ./RXeth0~`
NEWRX=`snmpwalk -Osn -c CommunityKey -v 2c 127.0.0.1:1161 ifHCInOctets.3 | cut -d ‘ ‘ -f 4`
SCOPERX=`expr $NEWRX — $LASTRX`
SPEEDRX=`expr $SCOPERX / 300`
let $SPEEDRX
echo $SPEEDRX
echo $NEWRX > ./RXeth0~
LASTTX=`cat ./TXeth0~`
NEWTX=`snmpwalk -Osn -c CommunityKey -v 2c 127.0.0.1:1161 ifHCOutOctets.3 | cut -d ‘ ‘ -f 4`
SCOPETX=`expr $NEWTX — $LASTTX`
SPEEDTX=`expr $SCOPETX / 300`
let $SPEEDTX
echo $SPEEDTX
echo $NEWTX > ./TXeth0~
echo `snmpwalk -Osn -c CommunityKey -v 2c 127.0.0.1:1161 sysUptime | cut -d ‘ ‘ -f 5`
echo eth1-INTERNET
# cat /mrtgscripts/intETH1
#WAN INTERFACE
LASTRX=`cat ./RXeth1~`
NEWRX=`snmpwalk -Osn –c CommunityKey -v 2c 127.0.0.1:1161 ifHCInOctets.2 | cut -d ‘ ‘ -f 4`
SCOPERX=`expr $NEWRX — $LASTRX`
SPEEDRX=`expr $SCOPERX / 300`
let $SPEEDRX
echo $SPEEDRX
echo $NEWRX > ./RXeth1~
LASTTX=`cat ./TXeth1~`
NEWTX=`snmpwalk -Osn -c CommunityKey -v 2c 127.0.0.1:1161 ifHCOutOctets.2 | cut -d ‘ ‘ -f 4`
SCOPETX=`expr $NEWTX — $LASTTX`
SPEEDTX=`expr $SCOPETX / 300`
let $SPEEDTX
echo $SPEEDTX
echo $NEWTX > ./TXeth1~
echo `snmpwalk -Osn -c CommunityKey -v 2c 127.0.0.1:1161 sysUptime | cut -d ‘ ‘ -f 5`
echo eth1-INTERNET
Теперь осталось создать индексный файл что бы все графики были на одной странице:
indexmaker /etc/mrtg/mrtg.cfg >/var/www/mrtg/index.html
Создаст файл, где будут графики всех переменных.
Предпологается что установлен web-сервер apache, а рабочая директория /var/www/mrtg/
Не забудьте изменить файл /etc/httpd/conf.d/mrtg.conf для доступа с нужных ip.
Должно получиться нечто похожее:
В следующей статье я приведу как использовать MRTG для снятия статистики с VoIP оборудования CISCO.
Ссылки:
Официальный сайт проекта MRTG
Похожие материалы: