Votre application envoie probablement des paquets à un numéro de port UDP ou TCP spécifique ou à une adresse IP spécifique.
Vous pouvez donc utiliser quelque chose comme TCPdump pour capturer ce trafic.
TCPdump ne vous donne pas les statistiques en temps réel que vous désirez mais vous pouvez alimenter sa sortie à quelque chose qui fait (j'essaierai de mettre à jour cette réponse avec une réponse plus tard).
Mise à jour:
$ sudo tcpdump -i eth1 -l -e -n | ./netbps
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 96 bytes
11:36:53 2143.33 Bps
11:37:03 1995.99 Bps
11:37:13 2008.35 Bps
11:37:23 1999.97 Bps
11:37:33 2083.32 Bps
131 packets captured
131 packets received by filter
0 packets dropped by kernel
J'ai interrompu cela après une minute en appuyant sur Ctrl + C.
Vous devez ajouter une expression de filtre appropriée à la fin de la tcpdump
commande pour inclure uniquement le trafic généré par votre application (par exemple port 123
)
Le programme netbps
est le suivant:
#!/usr/bin/perl
use strict;
use warnings;
use Time::HiRes;
my $reporting_interval = 10.0; # seconds
my $bytes_this_interval = 0;
my $start_time = [Time::HiRes::gettimeofday()];
STDOUT->autoflush(1);
while (<>) {
if (/ length (\d+):/) {
$bytes_this_interval += $1;
my $elapsed_seconds = Time::HiRes::tv_interval($start_time);
if ($elapsed_seconds > $reporting_interval) {
my $bps = $bytes_this_interval / $elapsed_seconds;
printf "%02d:%02d:%02d %10.2f Bps\n", (localtime())[2,1,0],$bps;
$start_time = [Time::HiRes::gettimeofday()];
$bytes_this_interval = 0;
}
}
}
C'est juste un exemple, ajustez au goût.
vnstat -tr
Utilisation comme ci-dessous du même dossier:
Pour vérifier le packer par interface:
./netpps.sh eth0
Pour vérifier la vitesse par interface:
./netspeed.sh eth0
Mesurer les paquets par seconde sur une interface netpps.sh comme nom de fichier
Mesurer la bande passante réseau sur une interface netspeed.sh comme nom de fichier
Veuillez consulter ce site pour plus d'informations http://xmodulo.com/measure-packets-per-second-throughput-high-speed-network-interface.html
la source
Plus facile à utiliser et plus facile à contrôler la sortie et à rediriger vers un fichier pour une journalisation continue:
Vient probablement avec la plupart des distributions Linux, et peut être installé avec brew sur mac
la source
Je pense que vous pouvez utiliser l'interface proc pour obtenir les informations dont vous avez besoin. J'ai créé ce petit script shell appelé rt_traf.sh:
Cela imprimera les octets d'entrée et de sortie séparés par un onglet. Les octets multipliés par 8 vous donneront des bits / seconde puis divisés par 10 ^ 6 vous donneront des mégabits / seconde. Bien sûr, vous pouvez l'ajouter au script shell pour formater la sortie comme vous le souhaitez. Vous pouvez appeler cela avec le PID de votre application comme ça
./rt_traf.sh <PID>
qui vous donnera une lecture instantanée de votre application depuis le démarrage. Pour regarder les statistiques en temps réel par seconde, vous pouvez encapsuler le script shell dans la commande watch:le
-n
paramètre peut être ajusté jusqu'au dixième de seconde. Pour faire un calcul au fil du temps, je ferais quelque chose comme ceci:Encore une fois, les calculs peuvent être ajustés pour la taille / le temps dont vous avez besoin. Ce n'est pas la solution la plus élégante ou emballée sous film rétractable mais elle devrait fonctionner à la rigueur.
la source
/proc/<pid>/net/netstat
renvoie les mêmes données queproc/net/netstat
, ie. vous obtenez les mêmes données pour tous les processus.Je devais juste mesurer la quantité de trafic mysql entrant et sortant sur un ancien système où perl ne fonctionnait pas correctement, donc je n'ai pas pu résister à l'écriture de quelques lignes de awk qui servent le même objectif de mesurer le trafic total vu par tcpdump:
Et si vous préférez les monolignes, en voici une pour vous:
la source
else
instruction doit être supprimée, sinon les lignes seront ignorées etsum
ne seront pas précises.tcpdump -l -e -n port 3306 | awk '{t=substr($1,0,8);n=substr($9,0,length($9)-1);if(t!=pt){print t,sum;sum=0;};sum+=n;pt=t;}
Chaque application peut être effectuée avec une règle de pare-feu utilisant xtables et une modification de ce qui suit.
Cela ne répond pas à la question "par application" mais seulement à la question "par interface".
Vous trouverez ci-dessous un script qui fonctionne sur la plupart des routeurs Linux embarqués tels que ceux compatibles Ubiquiti et OpenWRT et obtient ses détails depuis / proc / net / dev.
(Et facile à changer en paquets, etc.)
Copiez ce qui précède dans votre presse-papiers, puis dans une session de terminal sur votre routeur:
puis: Ctrl + V (ou clic droit / Coller)
puis: Ctrl + D
Vous pouvez également le coller dans un bloc-notes, puis répétez simplement ce qui précède si vous avez besoin de le modifier - tous les routeurs intégrés n'ont pas d'éditeur! Assurez-vous de tout copier du # en haut au fait; au fond.
L'exemple netpps ci-dessus est un excellent BTW - mais tous les périphériques n'ont pas de système de fichiers monté / sys. Vous devrez peut-être également remplacer / bin / bash par / bin / sh ou vice versa.
Source: https://gist.github.com/dagelf/ab2bad26ce96fa8d79b0834cd8cab549
la source