Утилиты командной строки Linux. Мониторинг загрузки сетевого интерфейса
Одна из задач по сопровождению операционных систем семейства Linux, это мониторинг сетевого трафика. В рамках данной статьи описываются наиболее популярные утилит, которые можно использовать для мониторинга загрузки сетевого интерфейса в оперативном режиме через SSH. Эти утилиты выполняют измерение потока трафика через каждый из сетевых интерфейсов и измеряют скорость с которой были переданы данные, причем входящий и исходящий трафик показывается раздельно.
Некоторые из приведенных команд позволяют просматривать использование сети отдельными процессами, это позволяет определить, какой из процессов загружает сетевой интерфейс.
- загруженность целиком интерфейса (динамическое отображение) — nload, bmon, bwm-ng
- загруженность целиком интерфейса (только вывод статистики) — vnstat, dstat, collectl
- использование сети для каждого соеденения (per socket) — iftop, iptraf, trafshow
- использование сети по процессам — nethogs
NLoad — утилита командной строки, которая позволяет выполнять мониторинг входящего и исходящего трафика отдельно, а также отрисовка масштабируемых графиков загрузки сетевого интерфеса.
Пример отображения:
Установка NLoad
# fedora or centos $ yum install nload # ubuntu/debian $ apt-get install nload
BMon — это утилита похожая на nload, которая показывает нагрузку на трафик по всем сетевым интерфейсам в системе. Выходные данные также состоят из графика и раздела с детализацией на уровне пакетов. Bmon поддерживает множество опций и способен создавать отчеты в формате html.
Пример запуска:
Пример отображения:
Установка BMon
# fedora or centos $ yum install bmon # ubuntu or debian $ apt-get install bmon
Bwm-ng другой очень простой монитор нагрузки сети в реальном времени который сообщает сводку скорости на которую данные переносятся в и из всех доступных сетевых интерфейсов на системе.
Если размер консоли достаточно велик, bwm-ng также может рисовать гистограммы для трафика, используя режим вывода curses 2.
Пример запуска:
Пример отображения:
Установка bwm-ng
# fedora or centos $ yum install bwm-ng # ubuntu or debian $ apt-get install bwm-ng
Vnstat немного отличается от большинства других инструментов. Он фактически запускает фоновую службу/демон и постоянно записывает размер передачи данных. Далее его можно использовать для формирования отчета об истории использования сети.
Запуск vnstat без каких-либо опций просто покажет общий объем передачи данных, который имел место с момента запуска демона.
Для мониторинга использования полосы пропускания в режиме реального времени используйте опцию ‘- l ‘ (live mode). Затем он будет показывать общую пропускную способность, используемую входящими и исходящими данными, но очень точно без каких-либо внутренних подробностей о соединениях хоста или процессах.
Vnstat больше похож на инструмент для получения исторических отчетов о том, сколько пропускной способности используется каждый день или за последний месяц. Это не только инструмент для мониторинга сети в реальном времени.
Пример запуска:
# Создание БД для сбора статистики интерфейса $ vnstat --create -i eth0 # запуск сервиса $ service vnstat start # Мониторинг в реальном времени $ vnstat -l -i eth0
Пример отображения:
Установка vnstat
# fedora or centos $ yum install vnstat # ubuntu or debian $ apt-get install vnstat
Утилизация сетевого интерфейса
Расскажи мне, какой способ получить инфу по загрузке сетевого интерфейса в линупсе сейчас самый модный? Понятно, что можно самому считать RX/TX bytes и делить на время, но вдруг есть что-то менее убогое.
Просто мысль: как это делает утилита bmon?
А разве были модные способы? Ядро — это тебе не какой-то хипсторский фреймворк.
Помимо «считать вручную» есть pcap, но я не уверен, насколько он подходит к твоей задаче.
Понятно, что можно самому считать RX/TX bytes и делить на время, но вдруг есть что-то менее убогое.
овеянный годами способ — ставить snmpd и прикладом считывать требуемое с него. Всё прочее от лукавого.
А разве были модные способы? Ядро — это тебе не какой-то хипсторский фреймворк.
Вокруг ядра ещё куча юзерспейсных библиотек может быть. К тому же, в /sys и так куча шлака экспортируется, я бы не удивился если бы и это туда сунули.
Помимо «считать вручную» есть pcap, но я не уверен, насколько он подходит к твоей задаче.
Никак не подходит. Мне не нужно ловить трафик.
hateyoufeel ★★★★★ ( 26.02.18 23:12:33 MSK )
Последнее исправление: hateyoufeel 26.02.18 23:13:23 MSK (всего исправлений: 1)
Тем, что это копипаста из проекта в проект. Я ожидал, что кто-то сделает библиотеки с подобными функциями, но, похоже, упс.
через ioctl к интерфейсу, как написано в исходниках ifconfig
Только если в кошмарах. SNMP — это ад, который нужно выставлять в музее в назидание потомкам в качестве примера того, как делать НЕ НАДО.
через ioctl к интерфейсу, как написано в исходниках ifconfig
ifconfig же не мониторит загрузку (bandwidth), только tx и rx. Но я понял. Хотя проще это через /proc или /sys читать.
в системе нет данных по загрузке, ее можете сами посчитать по скорости рх тх в секунду или минуту, так делают все утилиты
netdata умеет например. Пожалуй вполне модно, будет.
Только если в кошмарах. SNMP — это ад, который нужно выставлять в музее в назидание потомкам в качестве примера того, как делать НЕ НАДО.
сколько системо-зависимых решений уже предложили в треде ? штук 5 если не ошибаюсь. Вы уверенны что они все (или хотя-бы одно из них) гарантированно работает не только на «убунточке» ? 🙂 и останется хотя-бы 3-4 года. А если вдруг понадобится BSD..
SNMP конечно не фонтан. Только этот «не фонтан» стандартизован. Ужасают ASN.1 MiB DER/BER ? что поделать, это так исторически сложилось, так мониторят сети.
Если только дергать статистику. С производительностью у AF_PACKET очень большие проблемы даже с RX_RING и fanout.
сколько системо-зависимых решений уже предложили в треде ? штук 5 если не ошибаюсь. Вы уверенны что они все (или хотя-бы одно из них) гарантированно работает не только на «убунточке» ? 🙂 и останется хотя-бы 3-4 года. А если вдруг понадобится BSD..
Деды страдали и ты страдай?
В итоге, запилил чтение данных из /sys/class/net/$interface/statistics. Вопрос закрыт.