То, что Zypher говорил о rrdtool (и обо всем, что использует его как бэкэнд - MRTG, Cacti и т. Д.), Вероятно, правильно. RRDTool разработан как «усредненный» инструмент анализа исторических тенденций. Он усредняет и хранит счетчики с неуклонными приращениями, увеличивающимися с течением времени.
Это, однако, настраивается путем установки RRA по желанию. Однако я признаюсь, что ничего не знал об их настройке, и лично мне никогда не удавалось получить их за пределами моего стандартного набора (15 минут, 8 часов, 1 неделя, 1 месяц, 1 год). Я бы порекомендовал изучить настройку RRA, чтобы рассчитывать на ежедневный ввод данных и передавать его в счетчик пропускной способности от netstat. Вы получите очень хорошие исторические данные и понимание ваших моделей использования.
Чтобы ответить на текущую проблему, убедитесь, что вы не превышаете дневной лимит пропускной способности; Я бы порекомендовал получать счетчики netstat ежедневно для рассматриваемого интерфейса. Вы можете сравнить вчерашний трафик в момент времени t с сегодняшними счетчиками в момент времени t и узнать, сколько было передано. Простого сценария с плоским хранилищем текстовых файлов предыдущего значения, вероятно, будет достаточно. После этого вы можете отключить интерфейс, если обнаружите превышение пропускной способности или проконтролировать его в течение дня и уведомить администратора, если вы приближаетесь к своему пределу.
Чтобы получить входные байты в системе OSX, вы можете использовать следующий набор команд:
netstat -ib | grep -e "$INTERFACE" -m 1 | awk '{print $7}'
И наоборот, вывод можно получить с помощью:
netstat -ib | grep -e "$INTERFACE" -m 1 | awk '{print $10}'
Вы можете вставить соответствующие счетчики в плоский файл, хранящийся где-то и сравнить его с:
#!/bin/bash
set -e # exit if any error occurs
previous_days_bytes_xferred=`cat $flatfile_storage`
todays_bytes_xferred=`netstat -ib | grep -e "$INTERFACE" -m 1 | awk '{print $10}'`
if [ $((todays_bytes_xferred - previous_days_bytes_xferred)) -gt $threshold ]; then
DO SOME STUFF
fi
echo $todays_bytes_xferred > $flatfile_storage
Просто настройте обработку netstat в соответствии с вашей системой (поскольку я знаю, что вы не используете OSX).