Предполагая, что вы можете идентифицировать клиентский сеанс по уникальному IP-адресу (только сеанс, им не всегда нужен этот IP-адрес), я бы порекомендовал использовать инструменты более низкого уровня, которые больше подходят для вашего приложения, в частности коллекторы NetFlow.
NetFlow измеряет TCP 'разговор' посредством записи IP src, dst и пропускной способности за интервал времени.Вы можете включить это в ядре Linux или непосредственно в сетевом оборудовании.Затем вам понадобится программа для сбора и хранения данных.
Если вы включили сбор данных NetFlow и можете идентифицировать сеансы по IP, вы можете сделать следующее:
- Записать время, идентификатор пользователя и его IP-адрес в начале сеанса
- Используя эти данные, вы можете затем запросить ваши журналы NetFlow и получить пропускную способность
Причина, по которой я предлагаю это вместо некоторыхРешение пользовательского пространства, которое может считать полученные байты (что вы, вероятно, могли бы сделать довольно легко), заключается в том, что библиотеки и ядро отбирают много данных.Ядро обрабатывает стек TCP (включая повторную отправку пропущенных пакетов), библиотеки обрабатывают рукопожатия / шифрование TLS, а также рукопожатие WebSocket.Все эти данные засчитываются в используемые пользователем данные.То, как пользователи используют приложение, будет влиять на то, сколько этих служебных данных будет отправлено (постоянно открывать / закрывать, а не оставлять открытыми)