[SOLVED] vnstat и статистика

Последнее время vnstat несет какую то чушь:
vnstat -i ppp0
Database updated: Mon Dec 7 23:00:01 2009
ppp0
received: 32.49 GB (57.5%)
transmitted: 24.05 GB (42.5%)
total: 56.54 GB
rx | tx | total
-----------------------+------------+-----------
yesterday 4.06 GB | 4.00 GB | 8.06 GB
today 4.04 GB | 3.91 MB | 4.05 GB
-----------------------+------------+-----------
estimated 4.18 GB | 3 MB | 4.19 GB

vnstat -i ppp0 -m

ppp0 / monthly

month rx | tx | total
-------------------------+--------------+--------------------------------------
Nov '09 20.31 GB | 16.04 GB | 36.35 GB %%%%%%%%%%%%::::::::::
Dec '09 12.18 GB | 8.02 GB | 20.20 GB %%%%%%%:::::
-------------------------+--------------+--------------------------------------
estimated 54.25 GB | 35.72 GB | 89.97 GB

В прошлом месяце около 700 Mb, в этом где-то 250Mb, откуда появились гигабайты? Подключение через usb-modem в режиме EDGE, 3G у нас не рулит. У провайдера статистика нормальная. Ядро 2.6.31-r6. Физически не проскочили бы почти 90 Gb за два месяца. Единственное, что делал, обновил ядро в этом месяце с 2.6.30 на 2.6.31

Если правильно помню, то

Если правильно помню, то лишний трафик появляется при неожиданном исчезновении сетевого интерфейса, т.е. надо сначала останавливать сбор статистики, а потом уже опускать интерфейс.

это реализуется в скриптах

это реализуется в скриптах if-up, if-down. сам так у себя на серваке делал. инет 3G от Би.

В общем решение проблемы было

В общем решение проблемы было в следующем:
в /etc/vnstat.conf указан дефолтный bandwidth для всех интерфейсов в Мегабитах
Строчку раскомментировать
MaxBWeth0 8 (у меня так)
Можно добавить другие интерфейсы
MaxBWppp0 5 (и здесь подобрал)

vnstat выполняет /proc/net/dev по расписанию. Там пишется, сколько байт по каждому интерфейсу набежало. Пишется абсолютное значение - старт - 0, дальше увеличение, пока интерфейс работает. Дабы вычислить изменение, за какой-то период времени, vnstat запоминает последнее посчитанное значение и при следующем запуске смотрит на разницу.
4ГБ добавляются после реконнекта. Сценарий проблемы:
- все работает, vnstat считает байты (пусть последнее посчитанное им значение - 100КБ)
- в какой-то момент соединение обрывается и восстанавливается, счетчики в /proc/net/dev сбрасываются в 0
- допустим в момент когда снова скачано 20КБ запускается vnstat и пробует посчитать разницу. Разница = 20КБ - 100КБ = -80КБ, но поскольку делает он это в беззнаковых переменных, то -80 превращаются в что-то большое и положительное (близкое к 4ГБ)
А теперь самое интересное: vnstat пробует защитится от подобных неприятностей. Способ очень простой - посмотреть не превышает ли полученое число некоторое теоретически возможное для данного интерфейса значение.
Теоретически возможный объем vnstat считает так:
maxtransfer=maxbandwith/8*interval*1.1
подставить значения по умолчанию и посмотрим что получится:
maxbandwidth - 100Mbit, interval - 5min (300sec), умножение на 1.1, согласно коментария в коде, - для гарантии (to be on the safe side)
maxtransfer=100/8*300*1.1 = 4125МБ
а пик который вылазит при реконекте - меньше-равен 4096МБ - то есть легально пролазит при настройках по умолчанию.
В общем проблема решилась, на данный момент счетчик выдает логичные результаты.

буду честен, я не знаю, почему у меня все работает

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".