Realtime bandwidth terminal graph visualization

=> Comment on Mastodon

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

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.

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

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 "#"

Proxy Information
Original URL
gemini://perso.pw/blog//articles/ttyplot-netstat-openbsd.gmi
Status Code
Success (20)
Meta
text/gemini
Capsule Response Time
170.944179 milliseconds
Gemini-to-HTML Time
1.919591 milliseconds

This content has been proxied by September (ba2dc).