Мониторинг сети Linux
Во многих случаях может понадобиться отследить нагрузку на сеть, посмотреть сколько данных передается и какие пользователи, программы или компьютеры занимают канал. Особенно часто такие задачи возникают перед системными администраторами, перед которыми стоит задача отслеживать работу сети целой компании. Но также это может быть полезно и обычным пользователям.
В этой статье мы рассмотрим как выполняется мониторинг сети Linux. Для этого можно использовать различные утилиты. Начиная от сетевых анализаторов, таких как Wireshark и tcpdump до более простых инструментов, таких как iptraf.
Как работает мониторинг сети?
Все данные, которые распространяются через интернет передаются в виде пакетов определенного размера. Данные разделяются на части определенного размера и из них составляются пакеты, которые будут отправлены в ядро системы а затем в сеть, где пройдут путь из многих компьютеров и маршрутизаторов пока достигнут цели. С помощью специального программного обеспечения мы можем отслеживать сколько пакетов и какого размера проходит через наш компьютер и неважно, были они созданы локальной программой или получены из сети.
Таким образом, очень просто можно узнать какая сейчас нагрузка на сеть, какие программы или сервисы создали пакеты, и даже что содержится в этих пакетах и что делает пользователь.
Мониторинг сети с помощью iptraf
iptraf — это одна из самых лучших программ для мониторинга сети в Linux. Она предоставляет очень удобный интерактивный интерфейс, с помощью которого можно наглядно увидеть всю необходимую информацию, причем достаточно подробно. Утилита не поставляется по умолчанию, но она достаточно популярна, поэтому вы можете установить ее из официальных репозиториев. Для этого в Ubuntu выполните команду:
А в CentOS / Red Hat выполните:
После установки утилиты для ее запуска просто наберите в терминале iptraf-ng:
Перед вами откроется интерактивный интерфейс на основе Ncurses, в котором необходимо выбрать нужное действие. Здесь доступны монитор пропускной способности сети, статистика по интерфейсу, статистика по сбоям и монитор локальной сети.
Обратите внимание на нижнюю часть окна, там отображается описание выбранного действия, а также находятся подсказки по горячим клавишам.Например, для просмотра сетевых соединений и статистики трафика для каждого из них выберите IP traffic moitor. Затем вам будет необходимо выбрать сетевой интерфейс, например, enp2s0:
Дальше вы увидите все IP адреса, с которыми сейчас выполняется взаимодействие. Здесь можно увидеть направление отправки пакетов, количество пакетов и общий объем переданных или полученных данных в байтах.
С помощью других пунктов меню можно посмотреть статистику по интерфейсу или статистику по работе локальной сети. Утилита даже может работать в неразборчивом режиме, чтобы собирать максимум данных про локальную сеть.
Также поддерживаются фильтры, которые позволяют отфильтровывать информацию только по определенному критерию. Например, чтобы создать фильтр откройте меню Filters, затем выберите IP. , а дальше Apply new filter:
Затем нужно указать имя фильтра:
На следующем этапе вы можете расписать нужные параметры фильтрации:
Чтобы применить фильтр нужно выбрать Apply filter и выбрать имя фильтра из списка:
Теперь в любом пункте статистики будет отображаться только та информация, которая подходит под созданный фильтр.
Мониторинг трафика Linux чаще всего выполняется администраторами именно с помощью этой утилиты. Видео про использование утилиты:
Мониторинг сети с помощью других утилит
Самая мощная программа для мониторинга сети — это iptraf. Она предоставляет всю необходимую для администраторов информацию. Но, кроме нее, существуют и другие продукты. Рассмотрим их более подробно.
1. iftop
Утилита имеет более простой интерфейс и отображает намного меньше информации. Она выводит ip адреса отправителя и получателя, а также количество переданных или полученных данных за несколько последних секунд:
Установить программу в Ubuntu можно командной:
Хотя здесь отображается информация по каждому соединению, программа не может идентифицировать программу, которая создает пакеты.
2. nload
nload — это очень простая утилита, которая отображает только скорость входящих и исходящих соединений. Это позволяет сделать примитивный анализ сети linux и определить нагрузку. Отображается текущая скорость, максимальная и минимальная скорость за период работы. Также данные о скорости выводятся в виде графика, поэтому вам будет достаточно беглого взгляда, чтобы понять что происходит.
Для установки программы в Ubuntu используйте команду:
3. nethogs
Nethogs — это достаточно интересная утилита для мониторинга сетей, которая выделяется среди других. С помощью нее можно посмотреть какой процесс создает тот или иной трафик. Здесь отображаются PID процессов и имена пользователей, отсортированные по занимаемой пропускной способности сети:
Программа, как и другие доступна из официальных репозиториев, поэтому у вас не возникнет проблем с установкой:
4. bmon
Утилита bmon позволяет отображать достаточно подробно статистику по каждому сетевому интерфейсу. Она работает похоже на nload и выводит график кроме текстовой информации:
Для установки программы выполните:
5. Vnstat
Vnstat отличается от всех инструментов, рассмотренных выше. Программа работает постоянно в фоновом режиме и собирает информацию об использовании сети в лог файл. Далее можно посмотреть какой была нагрузка за определенный период. Для установки утилиты выполните:
Далее необходимо запустить сервис, для этого выполните такую команду:
sudo systemctl start vnstat
Далее необходимо немного подождать, пока утилита соберет данные и можно просматривать статистику:
Здесь будет отображаться информация о нагрузке на сеть с указанием дат и периодов. Также вы можете посмотреть доступную информацию в реальном времени. Для этого используйте опцию -l:
Видео про использование и настройку vnstat:
6. bwm-ng
Это еще одна утилита, очень простая в использовании, которая позволяет следить за сетевой нагрузкой в режиме реального времени. Отображаются все доступные сетевые интерфейсы в системе:
Для установки утилиты выполните такую команду:
7. speedometer
Это еще один простой инструмент, который позволяет выполнить мониторинг сети и выводит данные в виде красивых графиков. Для установки программы выполните:
sudo pip install speedometer
Как видите, она есть в официальных репозиториев не всех дистрибутивов, зато вы можете установить программу из репозитория python.
speedometer -r enp2s0f0 -t enp2s0f0
Опция -r указывает интерфейс, с которого необходимо отображать количество полученных пакетов, а опция -t — отправленных.
8. netwatch
Netwatch — это небольшая утилита, которая входит в набор инструментов Netdiag и показывает сетевые соединения между локальной и удаленными системами, а также скорость, с которой будут передаваться данные. Для установки программы используйте:
9. ifstat
Утилита ifstat показывает пропускную способность сети, измеряя количество переданных и принятых пакетов. Вывод утилиты можно использовать и анализировать в других программах. Утилита не выводит информацию об ip адресах или других параметрах, а только скорость. Для установки используйте:
10. trafshow
Это утилита, очень похожа на iftop, которая отображает не только скорость передачи, но и сами соединения. Здесь выводится информация по соединениях, размеры пакетов и протокол. Для установки программы наберите:
sudo apt install trafshow
Осталось запустить программу:
Выводы
В этой статье мы рассмотрели команду Iptraf, а также еще несколько полезных утилит, с помощью которых можно выполнять мониторинг сети linux на сервере или домашнем компьютере. Некоторые из этих инструментов можно использовать даже в корпоративной среде. В качестве альтернативы вы можете использовать инструменты с веб-интерфейсом. Некоторые из них перечислены в статье системы мониторинга Linux. А какие инструменты мониторинга используете вы? Напишите в комментариях!
Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.
Мониторинг (измерение) потребляемого траффика в Linux
Однажды мне потребовалось измерить количество трафика, которое «пожирает» некоторое приложение. Один из способов такого измерения — это установить прокси. Но что, если не хочется ставить прокси-сервер. Мне вот не хотелось. В поисках других способов я сначала перерыл Хабр, потом интернет. Так как я в своё время потратил на это много времени, то сейчас я создаю эту заметку, чтобы у других такой проблемы не возникло.
ВАЖНО:
Этот метод работает, если мы знаем по какому адресу (адресам) обращается наше приложение, или же с какого/каких портов.
Пошаговая инструкция
1. iptraf
iptraf — это небольшая программа, которая умеет мониторить всю сетевую активность компьютера.
Исходники и бинарники можно загрузить с сайта iptraf.
В случае Ubuntu установить iptraf можно выполнив команду:
sudo apt-get install iptraf
2. Запускаем!
В терминале пишем: iptraf
3. Настраиваем
Надо включить логирование (иначе программа ограничиться выводом на экран). Делается это, очевидно, в разделе «Configure».
4. Запуск мониторинга
Уходим из настроек, жмём «IP traffic monitor» и выбираем путь к файлу, куда будем логировать сетевую активность.
После этого мы должны увидеть такую картину:
5. Анализ
Как я уже упоминал выше, нужно знать, по какому адресу/порту обращается наше приложение (трафик которого мы высчитываем).
Например, если мы хотим посчитать сколько трафика «стоит» час радио last.fm, мы должны определить следующее:
приложение last.fm обращается к адресам вроде таких:
195.24.* (last.fm не обращается к одному адресу, а обращается к диапазону адресов).
Чтобы вытащить из лога (который писался час) количество трафика, которое было съедено, я написал небольшую «программку» на java, которая этот трафик и считает:
package stat; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; /** * * @author http://habrahabr.ru/users/nucleotide/ */ public class Main < public static void main(String[] args) throws IOException < BufferedReader reader = new BufferedReader(new FileReader("/var/log/iptraf/ip_traffic")); String line; long count = 0; long traffic = 0; while ((line = reader.readLine()) != null) < count++; String s[] = line.split(" "); if (s.length < 12) < continue; >if (s[10].contains("195.24.") || s[12].contains("195.24.")) < //"from" and "to" traffic += new Long(s[7]); if(s.length>16) traffic += new Long(s[17]); > > System.out.println("Count: " + count + " lines"); System.out.println("Total: " + traffic + " bytes!"); System.out.println("Total: " + traffic / 1024 + " Kbytes!"); System.out.println("Total: " + traffic / (1024 * 1024) + " Mbytes!"); > >
Этот вариант хорошо работает, когда вы постоянно пишите логи, а потом уже надо «что-то там» измерить. Просто нужно написать/сконфигурировать парсер именно так, как необходимо в конкретной ситуации, и тогда можно получить все необходимые данные.
Возможно, это не лучший вариант (хоть и работающий). Есть множество других вариантов:
http://help.ubuntu.ru/.
http://iptraf.seul.org/2.7/filters.html
И так далее.