Linux. Как узнать объёмы трафика сервера

Мониторинг нагрузки на устройства — это одна из самый востребованных задач 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 умеет выдавать только целочисленные результаты арифметических операций: что меньше единицы, то считается за ноль.



2020-06-29T14:50:56
Интернет