Вышла (http://freshmeat.net/projects/minisnmpd/?branch_id=75988&rel...) первая полнофункциональная версия программы mini_snmpd (http://members.aon.at/linuxfreak/linux/mini_snmpd.html). Объем архива программы всего 28 Кб. В mini_snmpd реализована поддержка SNMP протокола версий 1 и 2c, например, поддерживаются операции get/getnext/getbulk, аутентификация по строке имени "community", допустима работа только в режиме чтения, имеется возможность отдачи системной статистики, касающейся состояния CPU, памяти, диска и сетевых интерфейсов.Программа нацелена на использование в маломощных системах с ограниченными дисковыми и процессорными ресурсами (по заявлению разработчика mini_snmpd потребляет в 10 раз меньше ОЗУ по сравнению с net-snmp). Тем не менее, функциональности mini_snmpd вполне достаточно, для работы совместно с большинством популярных систем мониторинга.
URL: http://freshmeat.net/projects/minisnmpd/?branch_id=75988&rel...
Новость: http://www.opennet.me/opennews/art.shtml?num=18152
Спрошу про net-snmp:
На роутере есть несколько gre интерфесов, так вот, если один из них, например gre1 положить, а потом снова поднять, индекс в snmp у него увеличивается, т.е. если был 4, станет, например 11. Статистика в кактусе, естественно уплывет.
Как на роутере жёстко привязать имена интерфейсов к номерам snmp ?
>Спрошу про net-snmp:
>На роутере есть несколько gre интерфесов, так вот, если один из них,
>например gre1 положить, а потом снова поднять, индекс в snmp у
>него увеличивается, т.е. если был 4, станет, например 11. Статистика в
>кактусе, естественно уплывет.
>Как на роутере жёстко привязать имена интерфейсов к номерам snmp ?Каждый раз придется номер индекса вычислять по символьной маске. В mrtg, например, для такого преобразования нужно указать \имя_интерфейса:комьюнити@сервер (\ppp0:public@gw.test.ru)
может быть велосипед, жду критики и предложений - но я делаю вот так (далее почему именно так):
цель: отдавать по снмп данные по трафику со всем интерфейсов (более 100 вланов)1) выбираем данные по трафику
после работы с снмп пришел к выводу что заставить его не менять индекс интерфейса проблемматично - далее снимал данные с фаервола (минус - много ненужных правил)
теперь собираю из /proc/net/dev. Сразу оговарюсь почему программа спит и выбор идет 2 раза - все дело в том что трафик считается покругу (32 бита), и при превышении предела 4294967296 байт секунду на конец минуты счетчик уже пойдет 2й круг
ну и пускаем по крону с интервалом в 1 минуту#!/bin/bash
sleep 28
IFS="
"
i=0
statfile=(`cat /proc/net/dev | grep "[0-9]:"`)
while true
do
if [ ${statfile[$i]} ]
then
line=`echo ${statfile[$i]}| sed 's/:/ /g'`
interface=`echo $line | awk {'print $1'}`
indata1=`echo $line | awk {'print $2'}`
outdata1=`echo $line | awk {'print $10'}`
# if [ ! -f /etc/snmp/scr/db/$interface ]
# then echo "0 0 0 0" > /etc/snmp/scr/db/$interface
# fi
intline=`cat /etc/snmp/scr/db/$interface`
indata0=`echo $intline | awk {'print $2'}`
outdata0=`echo $intline | awk {'print $4'}`if [ $indata0 -le $indata1 ]
then indata=`expr $indata1 - $indata0`
else indata=`expr 4294967296 - $indata0 + $indata1`
fi
if [ $outdata0 -le $outdata1 ]
then outdata=`expr $outdata1 - $outdata0`
else outdata=`expr 4294967296 - $outdata0 + $outdata1`
fi
outline[$i]=`echo "$indata $indata1 $outdata $outdata1"`
i=`expr $i + 1`
else
break
fi
done
sleep 30
i=0
statfile=(`cat /proc/net/dev | grep "[0-9]:"`)
while true
do
if [ ${statfile[$i]} ]
then
line=`echo ${statfile[$i]}| sed 's/:/ /g'`
interface=`echo $line | awk {'print $1'}`
indata1=`echo $line | awk {'print $2'}`
outdata1=`echo $line | awk {'print $10'}`
indata=`echo ${outline[$i]}| awk {'print $1'} `
indata0=`echo ${outline[$i]}| awk {'print $2'} `
outdata=`echo ${outline[$i]}| awk {'print $3'} `
outdata0=`echo ${outline[$i]}| awk {'print $4'} `
if [ $indata0 -le $indata1 ]
then indata=`expr $indata + $indata1 - $indata0`
else indata=`expr 4294967296 - $indata0 + $indata1 + $indata`
fi
if [ $outdata0 -le $outdata1 ]
then outdata=`expr $outdata + $outdata1 - $outdata0`
else outdata=`expr 4294967296 - $outdata0 + $outdata1 + $outdata`
fi
echo "$indata $indata1 $outdata $outdata1" > /etc/snmp/scr/db/$interface
i=`expr $i + 1`
else
break
fi
done
exit 0
2) бросаем данные в снмп
- в качестве параметра быдем отдовать название интерфейсы#!/bin/bash
ARGS=1;
intline=`cat /etc/snmp/scr/db/$1`
indata=`echo $intline | awk {'print $1'}`
outdata=`echo $intline | awk {'print $3'}`
echo "$indata $outdata"
exit 03) описываем интерфейсы в снмп
для етого в snmpd.conf придется описать нужные интерфейсы
exec eth0 /etc/snmp/scr/net_stat_cat eth0 # 1
exec eth1 /etc/snmp/scr/net_stat_cat eth1 # 2
exec eth2 /etc/snmp/scr/net_stat_cat eth2 # 3
и т.д4) и в удаленном месте дергаем
разбираем кладем в rrd - вобщем что кому надо/usr/local/bin/snmpget -v1 -c public IP extOutput.1
/usr/local/bin/snmpget -v1 -c public IP extOutput.2
/usr/local/bin/snmpget -v1 -c public IP extOutput.3
grep "4294967296 байт секунду"| sed 's/секунду/минуту/g'
Никак. Снимать нужно по именам интерфейсам, а не по номерам.
а я считаю это большой проблемой
у меня крутиться vpn сервер pptp на 1000 абонентов
1) net-snmp не удаляет индекс старого интерфейса
2) индекс ppp интерфейсов приближается к бесконечностивозникшие проблемы:
1) cacti отваливается по timeout, так с учётом не удалившихся индексов в snmp (если его не перезапускать) могут накопиться сотни тысяч записей О ЯКОБЫ СУЩЕСТВУЮЩИХ ИНТЕРФЕЙСАХ
2) mrtg начитает ужасно долго собирать статистику если указать сбор по имени интерфейса или ip адресу (не по индексу) и при этом генерить много трафика, так в таком случаи он сначала запрашивает информацию О ВСЕХ сотнях тысяч интерфейсов
>В настоящее время поддерживается только платформа Linux, пользователям BSD систем рекомендуется обратить внимание на проект bsnmpd.Begemot идет в базовой поставке с FreeBSD