The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"mini_snmpd - SNMP сервер в минималистичном исполнении"
Отправлено gentoouser, 30-Сен-08 17:16 
может быть велосипед, жду критики и предложений - но я делаю вот так (далее почему именно так):
цель: отдавать по снмп данные по трафику со всем интерфейсов (более 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 0

3) описываем интерфейсы в снмп
для етого в 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

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
  Введите код, изображенный на картинке: КОД
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру