Title: Realtime bandwidth terminal graph visualization | |
Author: Solène | |
Date: 19 July 2019 | |
Tags: openbsd ttyplot | |
Description: | |
If for some reasons you want to visualize your bandwidth traffic on an | |
interface (in or out) in a terminal with a nice graph, here is a small | |
script | |
to do so, involving **ttyplot**, a nice software making graphics in a | |
terminal. | |
The following will works on OpenBSD. | |
You can install ttyplot by `pkg_add ttyplot` as root, ttyplot package | |
appeared | |
since OpenBSD 6.5. | |
For Linux, the [ttyplot official | |
website](https://github.com/tenox7/ttyplot) | |
contains tons of examples. | |
### Example | |
Output example while updating my packages: | |
IN Bandwidth in KB/s | |
↑ 1499.2 KB/s# | |
│ # | |
│ # | |
│ # | |
│ ## | |
│ ## | |
│ 1124.4 KB/s## | |
│ ## | |
│ ## | |
│ ## | |
│ ## | |
│ ## | |
│ 749.6 KB/s ## | |
│ ## | |
│ ## | |
│ ## | |
# | |
│ ## # # # # | |
## | |
│ ## # ### # ## # # # ## | |
## # # ## | |
│ 374.8 KB/s ## ## #### # # ## # # ### ## ## ### # | |
## ### # # # # ## # ## | |
│ ## ### ##### ########## ############# ### # ## | |
### ##### #### ## ## ###### ## ## | |
│ ## ### ##### ########## ############# ### #### | |
### ##### #### ## ## ## ###### ## ### | |
│ ## ### ##### ########## ############## ### #### | |
### ##### #### ## ## ######### ## #### | |
│ ## ### ##### ############################## | |
######### ##### #### ## ## ############ #### | |
│ ## ### | |
#################################################### #### ## | |
##################### | |
│ ## ### | |
#################################################### | |
############################# | |
└──────────────────────� | |
�───────────────────────� | |
��─────────────────────── | |
───────────────────────� | |
�──────→ | |
# last=422.0 min=1.3 max=1499.2 avg=352.8 KB/s | |
Fri Jul 19 08:30:25 2019 | |
github.com/tenox7/ttyplot 1.4 | |
In the following command, we will use **trunk0** with INBOUND traffic | |
as the | |
interface to monitor. | |
At the end of the article, there is a command for displaying both in | |
and out at | |
the same time, and also instructions for customizing to your need. | |
**Article update:** the following command is extremely long and | |
complicated, at | |
the end of the article you can find a shorter and more efficient | |
version, | |
removing most of the awk code. | |
You can copy/paste this command in your OpenBSD system shell, this will | |
produce | |
a graph of trunk0 inbound traffic. | |
{ while :; do netstat -i -b -n ; sleep 1 ; done } | awk | |
'BEGIN{old=-1} /^trunk0/ { if(!index($4,":") && old>=0) { print | |
($5-old)/1024 ; fflush ; old = $5 } if(old==-1) { old=$5 } }' | | |
ttyplot -t "IN Bandwidth in KB/s" -u "KB/s" -c "#" | |
The script will do an infinite loop doing `netstat -ibn` every second | |
and | |
sending that output to awk. | |
You can quit it with **Ctrl+C**. | |
## Explanations | |
Netstat output contains total bytes (in or out) since system has | |
started so awk | |
needs to remember last value and will display the difference between | |
two | |
output, avoiding first value because it would make a huge spike (aka | |
the total | |
network transfered since boot time). | |
If I decompose the awk script, this is a lot more readable. | |
Awk is very readable if you take care to format it properly as any | |
source code! | |
#!/bin/sh | |
{ while :; | |
do | |
netstat -i -b -n | |
sleep 1 | |
done | |
} | awk ' | |
BEGIN { | |
old=-1 | |
} | |
/^trunk0/ { | |
if(!index($4,":") && old>=0) { | |
print ($5-old)/1024 | |
fflush | |
old = $5 | |
} | |
if(old==-1) { | |
old = $5 | |
} | |
}' | ttyplot -t "IN Bandwidth in KB/s" -u "KB/s" -c "#" | |
### Customization | |
+ replace **trunk0** by your interface name | |
+ replace both instances of **$5** by **$6** for **OUT** traffic | |
+ replace **/1024** by **/1048576** for MB/s values | |
+ remove **/1024** for B/s values | |
+ replace 1 in **sleep 1** by another value if you want to have the | |
value every | |
n seconds | |
### IN/OUT version for both data on the same graph + simpler | |
Thanks to leot on IRC, netstat can be used in a lot more efficient way | |
and remove all the awk parsing! | |
ttyplot supports having two graphs at the same time, one being in | |
opposite color. | |
netstat -b -w 1 -I trunk0 | awk 'NR>3 { print $1/1024; print | |
$2/1024; fflush }' | ttyplot -2 -t "IN/OUT Bandwidth in KB/s" -u "KB/s" | |
-c "#" |