Bagaimana cara memonitor bandwidth jaringan per pengguna di server Ubuntu?

12

Saya memiliki beberapa pengguna shell di server dengan 300GB transfer data bulanan. Bagaimana saya bisa memonitor penggunaan bandwidth per pengguna?

Pedram
sumber
Apakah ini mungkin? Tampaknya, secara teori, itu akan lebih merepotkan daripada nilainya, karena Anda secara teknis harus memiliki setiap proses menggunakan internet mengidentifikasi siapa yang menjalankannya, kemudian mencari tahu penggunaan bandwidth gabungan. Adakah alasan khusus yang ingin Anda pantau per pengguna selain dari pengguna shell yang Anda miliki? Karena dengan 300GB data masuk / keluar bulanan, tampaknya tidak mungkin Anda akan melebihi jumlah itu: /
Thomas Ward
Itu harus mungkin, kalau tidak, bagaimana ISP membatasi bandwidth per pengguna?
djeikyb
@ EvilPhoenix Saya ingin memantau penggunaan per pengguna.300GB tidak banyak untuk server dengan setidaknya 20 pengguna yang menggunakan server ini sebagai server proxy.
Pedram
1
Sepertinya Anda memiliki jawaban praktis yang bagus dari Kees Cook, tetapi jika Anda masih mencari metode, saya ingin tahu apakah mengutarakan pertanyaan secara berbeda dapat membantu. Saya menemukan panduan ini googling "bagaimana membatasi bandwidth pengguna di linux": faqs.org/docs/Linux-HOWTO/Bandwidth-Limiting-HOWTO.html
djeikyb

Jawaban:

13

Sebagai root, Anda setidaknya bisa mengukur lalu lintas keluar berdasarkan per pengguna menggunakan modul "pemilik" dari iptables. Jika semua pengguna yang ingin Anda pantau ada di dalamnya /root/list-of-users.txt, Anda dapat melakukan:

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

Dan kemudian jumlah paket dan byte untuk lalu lintas keluar setiap pengguna terlihat:

iptables -L OUTPUT -n -v | grep out_

Ini dapat diperpanjang lebih jauh dengan CONNMARK untuk melacak sisi masuk juga.

Kees Cook
sumber
Terima kasih. Hebat. Saya melakukan ini. Tapi mengapa saya tidak bisa menggunakan metode yang sama untuk INPUT?
Pedram
1
Pemilik paket tidak dikenal untuk paket yang masuk karena dari sudut pandang kernel, itu berasal dari luar mesin. CONNMARK dapat digunakan untuk mengikat paket-paket dalam aliran TCP ke pencetusnya, dll, tetapi saya tidak memiliki contoh yang baik untuk hal ini.
Kees Cook
7

Saya baru saja menemukan NetHogs :

NetHogs adalah alat 'net top' kecil. Alih-alih memecah lalu lintas per protokol atau per subnet, seperti kebanyakan alat lakukan, itu mengelompokkan bandwidth dengan proses.

masukkan deskripsi gambar di sini

Ini seharusnya memungkinkan Anda melacak bandwidth berdasarkan nama pengguna. Mungkin masih membutuhkan alat pasangan lain untuk mencatat info dan menambahkan semuanya, tapi ini awal yang baik tanpa langsung menggunakan iptables.

djeikyb
sumber
Itu juga dapat dimulai dalam mode untuk meringkas lalu lintas: sudo nethogs -v 3 eth0(atau tekan mberulang kali setelah mulai menelusuri mode). Kombinasikan dengan tmuxuntuk terus berjalan (bahkan jika sshsesi Anda macet).
tanius
6

Anda bisa menggunakan Cacti

Cacti adalah frontend lengkap untuk RRDTool, Cacti menyimpan semua informasi yang diperlukan untuk membuat grafik dan mengisinya dengan data dalam database MySQL. Frontend sepenuhnya didorong oleh PHP. Seiring dengan mampu mempertahankan Grafik, Sumber Data, dan Arsip Round Robin dalam database, kaktus menangani pengumpulan data. Ada juga dukungan SNMP bagi mereka yang digunakan untuk membuat grafik lalu lintas dengan MRTG.

Atau vnStat

vnStat adalah monitor lalu lintas jaringan berbasis konsol untuk Linux dan BSD yang menyimpan log lalu lintas jaringan untuk antarmuka yang dipilih. Ia menggunakan statistik antarmuka jaringan yang disediakan oleh kernel sebagai sumber informasi. Ini berarti vnStat tidak akan mengendus lalu lintas apa pun dan juga memastikan penggunaan sumber daya sistem yang ringan.

Keduanya hebat.

sebikul
sumber
2
Terima kasih tapi saya sudah melihat keduanya dan sepertinya tidak ada yang menyediakan per pemantauan pengguna. Saya ingin memantau penggunaan per pengguna.
Pedram
5

Saya terlihat sedikit, dan saya belum menemukan paket gui komprehensif yang melakukan apa yang Anda inginkan. Semoga ada dan seseorang akan mempostingnya di sini pada akhirnya

Saya sebenarnya bukan orang yang berjejaring, tetapi dari apa yang saya baca, di antara banyak hal lain netstatdan iptablesseharusnya saya lakukan untuk akuntansi pengguna berbasis ip / host, apa yang dilakukan acctalat untuk akuntansi proses sistem. Tautan cyberciti.biz ini memungkinkan Anda untuk mengembangkan sistem dengan alat-alat ini:

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

djeikyb
sumber
Terima kasih, tetapi seperti yang Anda katakan mereka digunakan untuk akuntansi pengguna berbasis ip. Saya memiliki beberapa pengguna shell yang dapat menggunakan server di lokasi yang berbeda, khususnya di departemen universitas dengan alamat ip yang sama (di belakang NAT). Jadi saya mencari solusi akuntansi berbasis pengguna, Jika memungkinkan.
Pedram
netstat -emenunjukkan pengguna shell, memungkinkan Anda menautkan ip / host ke nama pengguna.
djeikyb