Я хотел бы отслеживать использование полосы пропускания моих серверов Linux, но есть одна загвоздка: трафик между моими двумя серверами не засчитывается против меня, только трафик в Интернет в целом. Однако мои серверы имеют только один сетевой интерфейс, и почти все, что я пробовал, измеряется отдельно для каждого интерфейса. Кто-нибудь знает об инструменте, который может генерировать графики пропускной способности, не считая при этом трафик в / из определенных диапазонов IP?
Бонусные баллы, если он генерирует файлы RRD (я уже могу легко их построить) и двойные бонусные баллы, если он работает с collectd (либо конфигурация стандартного collectd, либо плагин к нему).
Предполагая, что у вас нет доступа к восходящему маршрутизатору или коммутатору, который предоставляет такое же представление этих данных, которое видит ваш интернет-провайдер, вы можете использовать учет iptables для каждого хоста для подсчета байтов / пакетов, предназначенных для чего-либо, кроме вашего другого IP-адреса (или IP-адреса). range), а затем вставьте это в RRD самостоятельно.
РЕДАКТИРОВАТЬ
Например, вы можете использовать некоторые правила, подобные этим, в iptables для создания учета:
iptables -N ACCOUNT_IN
iptables -N ACCOUNT_OUT
iptables -I INPUT -j ACCOUNT_IN
iptables -I OUTPUT -j ACCOUNT_OUT
iptables -I ACCOUNT_IN -s ! 10.66.1.0/24
iptables -I ACCOUNT_OUT -d ! 10.66.1.0/24
Это создает две новые цепочки: ACCOUNT_IN и ACCOUNT_OUT. Затем я вставляю переходы к ним в верхней части цепочек INPUT и OUTPUT. Внутри каждой цепочки я добавляю правило без цели перехода для сопоставления на удаленных адресах - для ввода все, что не имеет адреса на моем локальном / 24 в качестве источника; для вывода все, что не имеет адреса на моем локальном / 24 в качестве пункта назначения. Затем пакеты возвращаются из этой цепочки обратно в ваши обычные цепочки INPUT / OUTPUT, так как нет правила перехода.
Чтобы проверить данные бухгалтерского учета:
# iptables -L ACCOUNT_IN -n -v
Chain ACCOUNT_IN (1 references)
pkts bytes target prot opt in out source destination
5 2138 all -- * * !10.66.1.0/24 0.0.0.0/0
# iptables -L ACCOUNT_OUT -n -v
Chain ACCOUNT_OUT (1 references)
pkts bytes target prot opt in out source destination
15 2846 all -- * * 0.0.0.0/0 !10.66.1.0/24
Оттуда вы можете вытащить эти счетчики пакетов / байтов и перейти к rrdupdate (я предполагаю, что вы в порядке с передачей данных в rrd, как вы сказали, что вы в порядке с извлечением данных из rrd. Если нет, этот вопрос, вероятно, уже задавался здесь).
Если вы хотите обнулять счетчики каждый раз, когда вы их читаете, передайте команду -Z (нулевой счетчик), чтобы обнулить счетчики байтов.
Если какой-либо из ваших хостов является маршрутизатором, вам также нужно будет вести учет в цепочке FORWARD - вы, вероятно, можете просто вставить переход к ACCOUNT_IN и ACCOUNT_OUT с вершины цепочки FORWARD, и все будет правильно, но я не думал об этом достаточно, чтобы быть на 100% уверенным, что это сработает
Ты можешь использовать пропускная способность. Он позволяет пропускать фильтр pcap, поэтому вы можете исключить трафик между вашими серверами.
Вы должны иметь возможность сделать это через IPTables. Однако я действительно сомневаюсь, что вы найдете какое-либо заранее написанное программное обеспечение, которое может это сделать. http://wiki.openvz.org/Traffic_accounting_with_iptables было бы хорошим началом для этого через IPTables.
Я предполагаю, что у вас нет доступа к коммутатору, на котором вы размещены, что делает большинство других предложений пока бесполезными.
Похоже, ты хочешь чего-то вроде ntop. Есть много других инструментов, но это, вероятно, самый быстрый способ получить то, что вы хотите. Он может собирать данные по сети и сообщать об этом или использовать другие входные данные, такие как Netflow и sFlow.
Я бы сделал это с помощью переключателя, поддерживающего Netflow. Инструменты Netflow не всегда бесплатны, но они должны делать то, что вы ищете.