Como monitorar a largura de banda da rede por usuário no servidor Ubuntu?

12

Eu tenho alguns usuários de shell em um servidor com 300 GB de transferência mensal de dados. Como posso monitorar o uso da largura de banda por usuário?

Pedram
fonte
isso é possível? Parece que, teoricamente, seria mais complicado do que vale a pena, porque tecnicamente é necessário que cada processo usando a Internet identifique quem o está executando e depois descubra o uso combinado da largura de banda. Algum motivo específico que você deseja monitorar por usuário, além dos usuários de shell que possui? Como com 300GB de dados mensais de entrada / saída, parece improvável que você supere esse valor: /
Thomas Ward
Deve ser possível; caso contrário, como os ISPs limitam a largura de banda por usuário?
djeikyb
@EvilPhoenix Quero monitorar o uso por usuário. 300 GB não é muito para um servidor com pelo menos 20 usuários que usam esse servidor como servidor proxy.
Pedram
1
Parece que você tem uma ótima resposta prática de Kees Cook, mas se você ainda está procurando métodos, gostaria de saber se formular a pergunta de maneira diferente poderia ajudar. Eu encontrei este guia pesquisando "como largura de banda do usuário limite para linux": faqs.org/docs/Linux-HOWTO/Bandwidth-Limiting-HOWTO.html
djeikyb

Respostas:

13

Como root, você pode pelo menos medir o tráfego de saída por usuário usando o módulo "proprietário" do iptables. Se todos os usuários que você deseja monitorar estiverem /root/list-of-users.txt, você poderá:

for login in $(cat /root/list-of-users.txt);
do
    iptables -N out_user_$login
    iptables -A OUTPUT -m owner --uid-owner $(id -u $login) -j out_user_$login
done

E as contagens de pacotes e bytes para o tráfego de saída de cada usuário são visíveis:

iptables -L OUTPUT -n -v | grep out_

Isso poderia ser estendido ainda mais com o CONNMARK para rastrear o lado de entrada também.

Kees Cook
fonte
O problema é que, se você está usando o INPUT, você pode usar o mesmo método para INPUT.
Pedram
1
O proprietário do pacote não é conhecido pelos pacotes recebidos, porque, da perspectiva do kernel, ele veio de fora da máquina. O CONNMARK pode ser usado para vincular pacotes nos fluxos TCP ao seu originador, etc., mas não tenho um exemplo prático disso.
precisa
7

Acabei de encontrar o NetHogs :

O NetHogs é uma pequena ferramenta 'net top'. Em vez de dividir o tráfego por protocolo ou sub-rede, como a maioria das ferramentas, agrupa a largura de banda por processo.

insira a descrição da imagem aqui

Isso deve permitir que você rastreie a largura de banda por nome de usuário. Pode ainda precisar de mais algumas ferramentas para registrar as informações e adicionar tudo, mas é um bom começo sem usar diretamente o iptables.

djeikyb
fonte
Também pode ser iniciado no modo para resumir o tráfego: sudo nethogs -v 3 eth0(ou pressione mvárias vezes depois de começar a alternar entre os modos). Combine com tmuxa execução persistente (mesmo se sua sshsessão travar).
tanius 31/03
6

Você pode usar o Cacti

O Cacti é uma interface completa do RRDTool, que armazena todas as informações necessárias para criar gráficos e preenchê-los com dados em um banco de dados MySQL. O frontend é completamente orientado para PHP. Além de poder manter gráficos, fontes de dados e arquivos Round Robin em um banco de dados, os cactos lidam com a coleta de dados. Também há suporte SNMP para aqueles usados ​​na criação de gráficos de tráfego com o MRTG.

Ou vnStat

O vnStat é um monitor de tráfego de rede baseado em console para Linux e BSD que mantém um registro do tráfego de rede para as interfaces selecionadas. Ele usa as estatísticas da interface de rede fornecidas pelo kernel como fonte de informação. Isso significa que o vnStat não estará realmente captando tráfego e também garante o uso leve dos recursos do sistema.

Ambos são ótimos.

sebikul
fonte
2
Obrigado, mas eu já vi os dois e parece que eles não fornecem monitoramento por usuário. Quero monitorar o uso por usuário.
Pedram
5

Eu parecia um pouco e não encontrei um pacote abrangente de GUI que faça o que você deseja. Espero que exista e alguém possa postar sobre isso aqui eventualmente.

Eu não sou realmente um cara de rede, mas pelo que li, entre muitas outras coisas, netstate iptablesdevo fazer pela contabilidade de usuários com base em ip / host, o que as acctferramentas fizeram para a contabilidade de processos do sistema. Esse link cyberciti.biz pode definir o caminho de você desenvolver um sistema com estas ferramentas:

http://www.cyberciti.biz/faq/linux-configuring-ip-traffic-accounting/

djeikyb
fonte
Obrigado, mas como você disse que eles são usados ​​para contabilidade de usuário com base em IP.Tenho algum usuário de shell que pode usar o servidor em locais diferentes, especialmente em um departamento universitário com o mesmo endereço IP (atrás de um NAT). procurando uma solução de contabilidade baseada no usuário, se possível.
Pedram
netstat -emostra os usuários do shell, permitindo vincular ip / host ao nome de usuário.
djeikyb