Мониторинг нагрузки на устройства — это одна из самый востребованных задач IT бизнеса. Если вы не знаете насколько напрягаются ваши железки, то не сможете ни предугадать поломки, ни спрогнозировать расширение парка устройств. В этой статье расскажу как узнать объёмы трафика на Linux системах без каких-либо дополнительных программ.
В прошлых статьях писал о том, что работаю в хостинговой компании MouseDC.ru. На наших серверах мы собираем статистику сразу по большому количеству показателей. Один из них — нагрузка на сеть. Легче всего получить эти значения прямо от системы.
К примеру, чтобы узнать сколько было исходящего трафика с момента последнего перезапуска сервера, просто почитайте файл:
/sys/class/net/интерфейс/statistics/tx_bytes
А для входящего трафика используйте файл:
/sys/class/net/интерфейс/statistics/rx_bytes
Но замените «интерфейс» на название вашего внешнего интерфейса. К примеру, «eth0». Его можно узнать через ifconfig (в свойствах будет стоять внешний ip адрес).
Как можно догадаться из названий файлов, значение в них — это количество байт переданной/полученной информации. Если периодически записывать эти значения, высчитывать разницу и делить на количество прошедших секунд с последней записи, то можно узнать среднюю скорость передачи данных. Так мы и составляет различные красивые графики по нагрузкам.
Если же нужно получить мгновенное значение, то можно набрать статистику за неболшой период времени. К примеру, за 10 секунд. Делать это можно с помощью скрипта. Для исходящего трафика:
outFile=’/sys/class/net/интерфейс/statistics/tx_bytes’; out1=`cat $outFile`; sleep 10s; out2=`cat $outFile`; echo $((($out2-$out1)/10240));
Для входящего трафика:
inFile=’/sys/class/net/интерфейс/statistics/rx_bytes’; in1=`cat $inFile`; sleep 10s; in2=`cat $inFile`; echo $((($in2-$in1)/10240));
Скрипт считывает значение файла, ждёт 10 секунд, считывает значение снова, делит разницу на 10 (чтобы получить значение за 1 секунду) и 1024 (чтобы получить килобайты). Получается среднее количество килобайт в секунду. Если у вашего сервера достаточно маленькая нагрузка, то результат команды может быть ноль. Потому что bash умеет выдавать только целочисленные результаты арифметических операций: что меньше единицы, то считается за ноль.