наблюдать за счётчиками интерфейсов в Linux

sergey_m

Задача весьма простая. Хочу чтобы мне в терминал сыпалось по одной строчке в секунду, в которой говорилось, что за последнюю секунду через интерфейс вошло столько-то пакетов/байт и вышло столько-то.
Начал решать задачу с netstat, и дошел до вот такой конструкции, которая показывает абсолютное значение пакетов (с байтами пока решил воздержаться):
netstat -ic | grep eth1
Теперь бы превратить абсолютные значения в дельты. Начал писать программку на awk, но она не работает. Начал упрощать и обнаружил, что вот такая программка на awk тоже не работает - '{ print $4 $5 }'. Конечно могу начать писать программку на perl, но перед этим решил спросить совета у форума. Может быть есть более прямые способы решения этой задачи?

sergey_m

О! awk работает, проблема в том, что grep буфферизирует вывод. Делаю grep --line-buffered eth1, как написано в man, но это не помогает.

Chupa

можно брать данные из /proc/net/dev

sergey_m

Да! Вот она, победа:

( while (true); do cat /proc/net/dev | tr ':' ' '; sleep 1; done) | awk '{ if($0~/eth1/) { print ($2 - old2$3 - old3":", ($10 - old10 ($11 - old11); old2 = $2; old3 = $3; old10 = $10; old11 = $11}; };'

В линуксе всё через ж^H/proc.

sergey_m

Задачу хуманизирования цифр я пожалуй оставлю решать другим.

janlynn

ебаца врот

Chupa

> проблема в том, что grep буфферизирует вывод
проблема, кстати, не в grep, а в netstat

sergey_m

> проблема, кстати, не в grep, а в netstat
Да, скорее всего.

vall

>В линуксе всё через ж^H/proc.
ну в 2.6 можно и из
/sys/class/net/eth0/statistics/rx_bytes
/sys/class/net/eth0/statistics/tx_bytes

sergey_m

ну в 2.6 можно и из
/sys/class/net/eth0/statistics/rx_bytes
/sys/class/net/eth0/statistics/tx_bytes
А пакеты в секунду там есть? Да, и не факт, что скрипт, получающий информацию из нескольких источников будет проще, чем тот, который получает информацию из одного.

vall

нет, это просто те же самые счётчики интерфейса, но по одному числу на файл.
а нафига ядру нужно рассчитывать такую статистику?

fuliganka

вот ещё вариант: (всё в итоге тоже берётся из /proc, но так имхо удобнее):
это правило должно применяться до всех правил netfilter:
iptables -t mangle -A PREROUTING -i <eth> -J LOG --log-prefix _in
а это - после всех правил netfilter:
iptables -t nat -A POSTROUTING -o <eth> -J LOG --log-prefix _out
и потом всё доставать из сислога. или использовать действие ULOG.
или ваще использовать просто ACCEPT,
а потом снимать статистику с помощью
iptables -t mangle -L -v
iptables -t nat -L -v
соответственно.

sergey_m

> нет, это просто те же самые счётчики интерфейса, но по одному числу на файл.
Я понял. Но мне кажется, что написать скрипт обрабытывающий несколько источников данных сложнее, чем тот что я уже привёл.
> а нафига ядру нужно рассчитывать такую статистику?
Ядру? Ядру не нужно.

Marinavo_0507

я не знаток awk, но почему ему не пофиг на буферизацию?

sergey_m

Этот вариант не годится по двум причинам. 1) У меня нет рута на этой машине. 2) Если бы был, то я не стал бы вводить дополнительные правила файрволла только для того, что бы иногда смотреть статистику. Дополнительные правила - дополнительные CPU ресурсы на каждый пакет.

sergey_m

> я не знаток awk, но почему ему не пофиг на буферизацию?
Ему пофиг, не пофиг мне . Я хочу чтобы каждую секунду печаталась строчка.

Marinavo_0507

ничего не понял
если netstat запускается раз в секунду, то между запусками буфер сбрасывается, или как?

sergey_m

Нет, запускается netstat -c.

Marinavo_0507

О, ну можно попробовать мейнтейнеру дистрибутива патч послать для netstat.

fuliganka

а почему, собственно, netstat? попробуй ifstat, например. мб и iftop поможет.

sergey_m

> а почему, собственно, netstat? попробуй ifstat, например. мб и iftop поможет.
Нет, таких.

sergey_m

если глазками смотреть то есть такая вот красивая програмулина
http://ethstatus.calle69.net/graphic/screenshots.html
Полезная вещь, но для других случаев. Мне удобнее построчечные принты, потому что так я вижу на экране историю за последние несколько десятков секунд. Обычно оно у меня висит в терминале на другом десктопе, и в случае чего-то странного я переключаюсь на него и вижу что происходит сейчас и что происходило только-что.

fuliganka

и заиметь, я так понимаю, низзя?
http://www.ex-parrot.com/~pdw/iftop/
http://gael.roualland.free.fr/ifstat/
Оставить комментарий
Имя или ник:
Комментарий: