Como medir a transferência de dados em uma interface de rede relacionada a um usuário específico?

2

Eu tenho um servidor Ubuntu e estou interessado em medir a quantidade de dados sendo transferidos (dentro e fora) através de uma interface de rede, por um usuário específico . Como faço isso?

N.B. Eu sei como medir a transferência total de dados da máquina inteira. Quero restringir meu monitoramento a um usuário específico.

    
por jl6 10.01.2012 / 23:30

2 respostas

3

Você pode usar as regras do iptables para fazer isso. Aqui estão alguns comandos que controlam todo o tráfego para um usuário com UID = 1000

iptables -I OUTPUT -m owner --uid-owner 1000 -j CONNMARK --set-mark 1
iptables -I INPUT -m mark --mark 1
iptables -I INPUT -j CONNMARK --restore-mark

Você pode visualizar os contadores com iptables -nvL . O número de bytes é o segundo campo.
Para o tráfego de entrada, você vai querer olhar para a linha em INPUT que tem mark match 0x1 no final. Para o tráfego de saída, será a linha com CONNMARK set 0x1 no final.

Detalhes:

iptables -I OUTPUT -m owner --uid-owner 1000 -j CONNMARK --set-mark 1

Isso diz ao iptables para definir a marca de firewall 1 em todo o tráfego de saída do usuário com uid = 1000.

iptables -I INPUT -j CONNMARK --restore-mark

Isso diz ao iptables para usar o rastreamento de conexão para descobrir quais pacotes de entrada estão associados aos pacotes de saída e restaurar quaisquer marcas de firewall para o fluxo (ou seja, aquelas que definimos a marca acima).

iptables -I INPUT -m mark --mark 1

Isto diz ao iptables para combinar qualquer pacote de entrada que tenha a marca de firewall 1 . Nós não fazemos nada com eles, apenas usamos para incrementar os contadores.

    
por 11.01.2012 / 01:29
0

A única maneira de conseguir isso é escrever seu próprio script System Tap. Eu fiz algo similar para o monitoramento do Zabbix . O script no link não acompanha os dados por usuário, mas mostra o conceito básico.

    
por 10.01.2012 / 23:38

Tags