наблюдать за счётчиками интерфейсов в Linux
О! awk работает, проблема в том, что grep буфферизирует вывод. Делаю grep --line-buffered eth1, как написано в man, но это не помогает.
можно брать данные из /proc/net/dev
( 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.
Задачу хуманизирования цифр я пожалуй оставлю решать другим.
ебаца врот
проблема, кстати, не в grep, а в netstat
Да, скорее всего.
ну в 2.6 можно и из
/sys/class/net/eth0/statistics/rx_bytes
/sys/class/net/eth0/statistics/tx_bytes
ну в 2.6 можно и изА пакеты в секунду там есть? Да, и не факт, что скрипт, получающий информацию из нескольких источников будет проще, чем тот, который получает информацию из одного.
/sys/class/net/eth0/statistics/rx_bytes
/sys/class/net/eth0/statistics/tx_bytes
а нафига ядру нужно рассчитывать такую статистику?
это правило должно применяться до всех правил 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
соответственно.
Я понял. Но мне кажется, что написать скрипт обрабытывающий несколько источников данных сложнее, чем тот что я уже привёл.
> а нафига ядру нужно рассчитывать такую статистику?
Ядру? Ядру не нужно.
я не знаток awk, но почему ему не пофиг на буферизацию?
Этот вариант не годится по двум причинам. 1) У меня нет рута на этой машине. 2) Если бы был, то я не стал бы вводить дополнительные правила файрволла только для того, что бы иногда смотреть статистику. Дополнительные правила - дополнительные CPU ресурсы на каждый пакет.
Ему пофиг, не пофиг мне . Я хочу чтобы каждую секунду печаталась строчка.
если netstat запускается раз в секунду, то между запусками буфер сбрасывается, или как?
Нет, запускается netstat -c.
О, ну можно попробовать мейнтейнеру дистрибутива патч послать для netstat.
а почему, собственно, netstat? попробуй ifstat, например. мб и iftop поможет.
Нет, таких.
если глазками смотреть то есть такая вот красивая програмулинаПолезная вещь, но для других случаев. Мне удобнее построчечные принты, потому что так я вижу на экране историю за последние несколько десятков секунд. Обычно оно у меня висит в терминале на другом десктопе, и в случае чего-то странного я переключаюсь на него и вижу что происходит сейчас и что происходило только-что.
http://ethstatus.calle69.net/graphic/screenshots.html
Оставить комментарий
sergey_m
Задача весьма простая. Хочу чтобы мне в терминал сыпалось по одной строчке в секунду, в которой говорилось, что за последнюю секунду через интерфейс вошло столько-то пакетов/байт и вышло столько-то.Начал решать задачу с netstat, и дошел до вот такой конструкции, которая показывает абсолютное значение пакетов (с байтами пока решил воздержаться):
netstat -ic | grep eth1
Теперь бы превратить абсолютные значения в дельты. Начал писать программку на awk, но она не работает. Начал упрощать и обнаружил, что вот такая программка на awk тоже не работает - '{ print $4 $5 }'. Конечно могу начать писать программку на perl, но перед этим решил спросить совета у форума. Может быть есть более прямые способы решения этой задачи?