Страница 1 из 1

Где ошибка в расчётах - октеты в мегабиты?

Добавлено: 2016-04-05 0:00:19
Alex Keda
такой вот скрипт:

Код: Выделить всё

first_gptel=`snmpget -v2c -c $comm 192.168.0.1 IF-MIB::ifHCInOctets.607 | awk '{print $4}'`
sleep 10
second_gptel=`snmpget -v2c -c $comm 192.168.0.1 IF-MIB::ifHCInOctets.607 | awk '{print $4}'`
#first_gptel=`snmpget -v2c -c $comm 192.168.0.1 IF-MIB::ifOutOctets.607 | awk '{print $4}'`
#sleep 10
#second_gptel=`snmpget -v2c -c $comm 192.168.0.1 IF-MIB::ifOutOctets.607 | awk '{print $4}'`

# считаем разницу, сколько октeтов (байт) прошло за 10 секунд
uplink_1=`let $second_gptel - $first_gptel`
# сколько байт прошло за секунду
u_bits=`let $uplink_1 / 10`
u_Mbits=`let $u_bits / 1048576`
цифры полчаются примерно в 10 раз меньше, чем реальные ... может в 8 ...
незнаю. но тупо поделить на 10 или 8 - не интересно. инетересно понять где я ошибся

Где ошибка в расчётах - октеты в мегабиты?

Добавлено: 2016-04-05 0:25:52
FreeBSP
ну ты ж сам пишешь сначала правильно
>> # сколько байт прошло за секунду
а переменную непавильно обзываешь
>> u_bits=`let $uplink_1 / 10`
реально бит в 8 раз больше прошло

Где ошибка в расчётах - октеты в мегабиты?

Добавлено: 2016-04-05 1:22:02
Alex Keda
ага... мегаБИТ жеж
значит надо полученное число на восемь помножить.
а лучше, наверное, снимать за восемь секунд, и делить сразу на 1024*1024 = 1048576

всем спасибо за внимание =)

Где ошибка в расчётах - октеты в мегабиты?

Добавлено: 2016-04-05 6:45:59
Neus
Alex Keda писал(а):ага... мегаБИТ жеж
значит надо полученное число на восемь помножить.
а лучше, наверное, снимать за восемь секунд, и делить сразу на 1024*1024 = 1048576

всем спасибо за внимание =)
не лучше, так семантика операции теряется.
потом будешь чесать репу "и чего я тут считаю..."

Где ошибка в расчётах - октеты в мегабиты?

Добавлено: 2016-04-05 11:08:27
Alex Keda
может кому понадобится - дёргает загрузку интерфейсов по убыванию.
вызываю из предыущего, по реультату его работы - большая или нет нагрузка на аплинке

Код: Выделить всё

manager# cat juniper.show.interfaces.traff.sh
#!/bin/sh

comm="private-or-public"
host=${1-"192.168.0.1"}
limit=150

# имя железки с которой работаем
sysName=`snmpwalk -v2c -c $comm $host SNMPv2-MIB::sysName.0 | awk '{print $4}'`

# директория временных файлов
tmp="`mktemp -d`"
# отправляемое/выводимое сообщение
msg="$tmp/msg.txt"

# перебираем мибы - вход/выход
#ifInOctets ifOutOctets
for way in In Out
do
        MIB="if${way}Octets"
        # снимаем 1 показание с интерфейсов
        snmpwalk -v2c -c $comm $host IF-MIB::$MIB | awk -F "$MIB." '{print $2}' | awk '{print $1" "$4}' |
        {
        while read index octets
        do
                # сохраняем значение траффика
                echo $octets > $tmp/1.$MIB.$index.txt
        done
        }
        # ждём 10 секунд
        sleep 10
        # снимаем 2 показание с интерфейсов
        snmpwalk -v2c -c $comm $host IF-MIB::$MIB | awk -F "$MIB." '{print $2}' | awk '{print $1" "$4}' |
        {
        while read index octets
        do
                # если трафф больше нуля - сохраняем его (чтоб не обсчитывать интерфейсы с нулями)
                if [ $octets -gt 0 ]
                then
                        # сохраняем значение траффика
                        echo $octets > $tmp/2.$MIB.$index.txt

                        # сразу считаем скорость, в отдельный файл
                        first_count=`cat $tmp/1.$MIB.$index.txt`
                        octets=`let $octets - $first_count`
                        # делим на число секунд, получаем Байт/с
                        Bps=`let $octets / 10`
                        # умножаем на 8 - получаем Бит/с
                        bps=`let $Bps \* 8`
                        # делим на 1024*1024 - МегаБиты
                        Mbits=`let $bps / 1048576`

                        # сохраняем в общий список скорость и имя интерфейса
                        if [ $Mbits != 0 ]
                        then
                                descr=`snmpget -v2c -c $comm $host IF-MIB::ifDescr.$index | awk -F 'STRING:' '{print $2}'`
                                echo $Mbits $descr >> $tmp/$MIB.txt
                        fi
                fi
        done
        }
        # формируем шапку сообщения
        echo "$sysName: top interfaces, $way" >> $msg
        # сортируем статистику, дописываем в файл
        cat $tmp/$MIB.txt | sort -n -r | head -10 | 
        {
        while read speed interface
        do
                echo "$interface        => $speed Mbit/s" >> $msg
        done
        }

        # пустая строка
        echo "" >> $msg
done

# выводим сообщение
cat $msg

rm -rf $tmp
пример выхлопа:

Код: Выделить всё

manager# sh juniper.show.interfaces.traff.sh 
ex2200-0.host-food.ru: top interfaces, In
ge-0/0/10       => 112 Mbit/s
ge-0/1/3        => 87 Mbit/s
ge-0/1/0        => 51 Mbit/s
ge-0/0/20       => 21 Mbit/s
ge-0/0/0        => 15 Mbit/s
ge-0/0/18       => 8 Mbit/s
ge-0/0/2        => 6 Mbit/s
ge-0/0/7        => 5 Mbit/s
ge-0/0/30       => 5 Mbit/s
ge-0/0/33       => 1 Mbit/s

ex2200-0.host-food.ru: top interfaces, Out
ge-0/1/0        => 294 Mbit/s
ge-0/1/3        => 12 Mbit/s
ge-0/0/18       => 10 Mbit/s
ge-0/0/30       => 5 Mbit/s
ge-0/0/20       => 2 Mbit/s
ge-0/0/7        => 1 Mbit/s
ge-0/0/21       => 1 Mbit/s
ge-0/0/10       => 1 Mbit/s


Где ошибка в расчётах - октеты в мегабиты?

Добавлено: 2016-04-06 14:35:48
Alex Keda
заменил в скрипте

Код: Выделить всё

MIB="if${way}Octets"
на

Код: Выделить всё

MIB="ifHC${way}Octets"
поскольку первые 32 битные, и при большом потоке бывает обнулится успевают за 10 секунд.
вторые - соответственно 64 бита, с ними такой проблемы пока не наблюдал

Где ошибка в расчётах - октеты в мегабиты?

Добавлено: 2016-04-06 15:47:31
Neus
))
на канале 10гбит лет так через 435 обнулятся