From 31bedc08221fedb380f84f07da887d492054c843 Mon Sep 17 00:00:00 2001 From: Nye Liu Date: Wed, 26 Oct 2016 14:08:34 -0700 Subject: [PATCH 01/11] Hardcode tc path so we can run the script as non-root --- plugins/network/tc_ | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/network/tc_ b/plugins/network/tc_ index 7b29c7f7..cacfbf1b 100755 --- a/plugins/network/tc_ +++ b/plugins/network/tc_ @@ -16,7 +16,7 @@ DEVICE=${0##*/tc_} mytc() { - tc -s class show dev $1 | tr "\n" "|" | sed "s/ \+/ /g" | sed "s/ |/|/g" | sed "s/| /|/g" | sed "s/||/\n/g" | sed "s/|/ /g" | tr ":" "_" | grep -v -i sfq | sort -n + /sbin/tc -s class show dev $1 | tr "\n" "|" | sed "s/ \+/ /g" | sed "s/ |/|/g" | sed "s/| /|/g" | sed "s/||/\n/g" | sed "s/|/ /g" | tr ":" "_" | grep -v -i sfq | sort -n } case $1 in From afe87e904e7a78d7a994969ece91c2c8c02bd7b1 Mon Sep 17 00:00:00 2001 From: Nye Liu Date: Wed, 26 Oct 2016 14:10:46 -0700 Subject: [PATCH 02/11] Cosmetic whitespace uniformity --- plugins/network/tc_ | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/plugins/network/tc_ b/plugins/network/tc_ index cacfbf1b..0d21c6cf 100755 --- a/plugins/network/tc_ +++ b/plugins/network/tc_ @@ -37,16 +37,15 @@ case $1 in gsub(/^ +/,"",a[1]); if (($2 > 0) || ($10 > 0)) print a[1]; }' /proc/net/dev -# egrep '^ *(eth|tap|bond|wlan|ath|ra|sw)[0-9]+:' /proc/net/dev | cut -f1 -d: | sed 's/ //g' +# egrep '^ *(eth|tap|bond|wlan|ath|ra|sw)[0-9]+:' /proc/net/dev | cut -f1 -d: | sed 's/ //g' fi exit 0 ;; config) - echo "graph_order `mytc $DEVICE | awk '{ print $2 "_" $3 }' | tr "\n" " "`" echo "graph_title $DEVICE TC traffic" - echo 'graph_args --base 1000' - echo 'graph_vlabel bits per ${graph_period}' + echo 'graph_args --base 1000' + echo 'graph_vlabel bits per ${graph_period}' echo 'graph_category network' echo "graph_info This graph shows the TC classes traffic of the $DEVICE network interface. Please note that the traffic is shown in bits per second, not bytes." From 234a753fea82ce16827a2f85af10f3d990ae3f08 Mon Sep 17 00:00:00 2001 From: Nye Liu Date: Wed, 26 Oct 2016 14:12:00 -0700 Subject: [PATCH 03/11] Make awk script more readable --- plugins/network/tc_ | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/plugins/network/tc_ b/plugins/network/tc_ index 0d21c6cf..c912c89d 100755 --- a/plugins/network/tc_ +++ b/plugins/network/tc_ @@ -48,8 +48,21 @@ case $1 in echo 'graph_vlabel bits per ${graph_period}' echo 'graph_category network' echo "graph_info This graph shows the TC classes traffic of the $DEVICE network interface. Please note that the traffic is shown in bits per second, not bytes." - - mytc $DEVICE | tr "_" " " | awk '{ print $2 "_" $3 "_" $4 ".label " $2 "/" $3 ":" $4 "\n" $2 "_" $3 "_" $4 ".type DERIVE\n" $2 "_" $3 "_" $4 ".min 0\n" $2 "_" $3 "_" $4 ".cdef " $2 "_" $3 "_" $4 ",8,*" }' + + # the root(s) + mytc $DEVICE | grep -v " parent " | tr "_" " " | awk '{ + print $2 "_" $3 "_" $4 ".label " $2 "/" $3 ":" $4; + print $2 "_" $3 "_" $4 ".type DERIVE"; + print $2 "_" $3 "_" $4 ".min 0"; + print $2 "_" $3 "_" $4 ".cdef " $2 "_" $3 "_" $4 ",8,*"; + }' + # the child(s) + mytc $DEVICE | grep " parent " | tr "_" " " | awk '{ + print $2 "_" $3 "_" $4 ".label " $2 "/" $3 ":" $4; + print $2 "_" $3 "_" $4 ".type DERIVE"; + print $2 "_" $3 "_" $4 ".min 0"; + print $2 "_" $3 "_" $4 ".cdef " $2 "_" $3 "_" $4 ",8,*"; + }' exit 0 ;; esac From 3dd825dd62601a15bb9d685def8c5dd9653728d8 Mon Sep 17 00:00:00 2001 From: Nye Liu Date: Wed, 26 Oct 2016 14:14:26 -0700 Subject: [PATCH 04/11] Output fields of tc can vary, possibly causing corrupted data to be gathered. Look specifically for the "bytes" keyword --- plugins/network/tc_ | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/plugins/network/tc_ b/plugins/network/tc_ index c912c89d..77000c4e 100755 --- a/plugins/network/tc_ +++ b/plugins/network/tc_ @@ -68,9 +68,15 @@ case $1 in esac # the root(s) -mytc $DEVICE | grep -v " parent " | awk "{ print \$2 \"_\" \$3 \".value \" \$14}" +mytc $DEVICE | grep -v " parent " | awk '{ + split(substr($0, match($0, /[0-9]+ [Bb]ytes/)), a, " "); + print $2 "_" $3 ".value " a[1]; +}' # the child(s) -mytc $DEVICE | grep " parent " | awk "{ print \$2 \"_\" \$3 \".value \" \$19}" +mytc $DEVICE | grep " parent " | awk '{ + split(substr($0, match($0, /[0-9]+ [Bb]ytes/)), a, " "); + print $2 "_" $3 ".value " a[1]; +}' exit 0 From 13f9ba7a6159b940b396d157eb2c372dd35cc980 Mon Sep 17 00:00:00 2001 From: Nye Liu Date: Wed, 26 Oct 2016 14:15:48 -0700 Subject: [PATCH 05/11] Area stack children --- plugins/network/tc_ | 2 ++ 1 file changed, 2 insertions(+) diff --git a/plugins/network/tc_ b/plugins/network/tc_ index 77000c4e..a870bf3c 100755 --- a/plugins/network/tc_ +++ b/plugins/network/tc_ @@ -56,12 +56,14 @@ case $1 in print $2 "_" $3 "_" $4 ".min 0"; print $2 "_" $3 "_" $4 ".cdef " $2 "_" $3 "_" $4 ",8,*"; }' + # TODO: only AREASTACK things with no children # the child(s) mytc $DEVICE | grep " parent " | tr "_" " " | awk '{ print $2 "_" $3 "_" $4 ".label " $2 "/" $3 ":" $4; print $2 "_" $3 "_" $4 ".type DERIVE"; print $2 "_" $3 "_" $4 ".min 0"; print $2 "_" $3 "_" $4 ".cdef " $2 "_" $3 "_" $4 ",8,*"; + print $2 "_" $3 "_" $4 ".draw AREASTACK"; }' exit 0 ;; From 2d13d2a50d7c4367186996e5dce4bd600b8e59d6 Mon Sep 17 00:00:00 2001 From: Nye Liu Date: Sat, 5 Nov 2016 14:51:14 -0700 Subject: [PATCH 06/11] Add documentation and example graphs for the tc_ plugin --- plugins/network/example-graphs/tc_-day.png | Bin 0 -> 27195 bytes plugins/network/example-graphs/tc_-week.png | Bin 0 -> 41662 bytes plugins/network/tc_.pod | 44 ++++++++++++++++++++ 3 files changed, 44 insertions(+) create mode 100644 plugins/network/example-graphs/tc_-day.png create mode 100644 plugins/network/example-graphs/tc_-week.png create mode 100644 plugins/network/tc_.pod diff --git a/plugins/network/example-graphs/tc_-day.png b/plugins/network/example-graphs/tc_-day.png new file mode 100644 index 0000000000000000000000000000000000000000..6607b71db60be7f119a17cd693d47a0efe57dd2c GIT binary patch literal 27195 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 literal 0 HcmV?d00001 diff --git a/plugins/network/example-graphs/tc_-week.png b/plugins/network/example-graphs/tc_-week.png new file mode 100644 index 0000000000000000000000000000000000000000..50557672ea50a73ad21e964e50d486cf5d77c6b4 GIT binary patch literal 41662 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 literal 0 HcmV?d00001 diff --git a/plugins/network/tc_.pod b/plugins/network/tc_.pod new file mode 100644 index 00000000..be5fc5a9 --- /dev/null +++ b/plugins/network/tc_.pod @@ -0,0 +1,44 @@ +#!/usr/bin/perl -w + +=pod + +=encoding UTF-8 + +=head1 NAME + +tc_ - Plugin to monitor traffic control queue class bandwidth usage + +=head1 APPLICABLE SYSTEMS + +Linux 2.5.40+, 2.6.x, 3.x, 4.x + +=head1 CONFIGURATION + +None needed. + +=head1 INTERPRETATION + +Traffic control is the name given to the sets of queuing systems and mechanisms by which packets are received and transmitted on a router. This includes deciding which (and whether) packets to accept at what rate on the input of an interface and determining which packets to transmit in what order at what rate on the output of an interface. + +This plugin monitors the bandwidth used by each queue class. The root class will draw as a single line, whereas children will be drawn in a stacked graph. Complex hierarchies which have more than the root and its direct children are not fully supported and may not render correctly. + +=head1 SEE ALSO + +"man tc" and "tc -s class show dev " to get more information about tc and to see the format of the statistics being parsed. + +=head1 MAGIC MARKERS + + #%# family=manual + #%# capabilities=autoconf + +=head1 AUTHORS + +Steve Schnepp , +Samuel Smith , +Nye Liu + +=head1 LICENSE + +GPLv2 or later + +=cut From 6cb9ba170fc66979ffd46990e19d645daaefd8a1 Mon Sep 17 00:00:00 2001 From: Nye Liu Date: Sat, 5 Nov 2016 14:52:03 -0700 Subject: [PATCH 07/11] Cleanup suggested by maintainer * family should be auto, not manual * Combine multiple sed scripts into a single script * Double quote sh variable dereferences * Don't use deprecated backquotes --- plugins/network/tc_ | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/plugins/network/tc_ b/plugins/network/tc_ index a870bf3c..3b373434 100755 --- a/plugins/network/tc_ +++ b/plugins/network/tc_ @@ -9,17 +9,17 @@ # Magic markers (optional - used by munin-config and some installation # scripts): # -#%# family=manual +#%# family=auto #%# capabilities=autoconf suggest DEVICE=${0##*/tc_} mytc() { - /sbin/tc -s class show dev $1 | tr "\n" "|" | sed "s/ \+/ /g" | sed "s/ |/|/g" | sed "s/| /|/g" | sed "s/||/\n/g" | sed "s/|/ /g" | tr ":" "_" | grep -v -i sfq | sort -n + /sbin/tc -s class show dev "$1" | tr "\n" "|" | sed -e "s/ \+/ /g; s/ |/|/g; s/| /|/g; s/||/\n/g; s/|/ /g" | tr ":" "_" | grep -v -i sfq | sort -n } -case $1 in +case "$1" in autoconf) if [ -r /proc/net/dev ]; then echo yes @@ -36,13 +36,11 @@ case $1 in split($0, a, /: */); gsub(/^ +/,"",a[1]); if (($2 > 0) || ($10 > 0)) print a[1]; }' /proc/net/dev - -# egrep '^ *(eth|tap|bond|wlan|ath|ra|sw)[0-9]+:' /proc/net/dev | cut -f1 -d: | sed 's/ //g' fi exit 0 ;; config) - echo "graph_order `mytc $DEVICE | awk '{ print $2 "_" $3 }' | tr "\n" " "`" + echo "graph_order $(mytc "$DEVICE" | awk '{ print $2 "_" $3 }' | tr "\n" " ")" echo "graph_title $DEVICE TC traffic" echo 'graph_args --base 1000' echo 'graph_vlabel bits per ${graph_period}' @@ -50,7 +48,7 @@ case $1 in echo "graph_info This graph shows the TC classes traffic of the $DEVICE network interface. Please note that the traffic is shown in bits per second, not bytes." # the root(s) - mytc $DEVICE | grep -v " parent " | tr "_" " " | awk '{ + mytc "$DEVICE" | grep -v " parent " | tr "_" " " | awk '{ print $2 "_" $3 "_" $4 ".label " $2 "/" $3 ":" $4; print $2 "_" $3 "_" $4 ".type DERIVE"; print $2 "_" $3 "_" $4 ".min 0"; @@ -58,7 +56,7 @@ case $1 in }' # TODO: only AREASTACK things with no children # the child(s) - mytc $DEVICE | grep " parent " | tr "_" " " | awk '{ + mytc "$DEVICE" | grep " parent " | tr "_" " " | awk '{ print $2 "_" $3 "_" $4 ".label " $2 "/" $3 ":" $4; print $2 "_" $3 "_" $4 ".type DERIVE"; print $2 "_" $3 "_" $4 ".min 0"; @@ -70,13 +68,13 @@ case $1 in esac # the root(s) -mytc $DEVICE | grep -v " parent " | awk '{ +mytc "$DEVICE" | grep -v " parent " | awk '{ split(substr($0, match($0, /[0-9]+ [Bb]ytes/)), a, " "); print $2 "_" $3 ".value " a[1]; }' # the child(s) -mytc $DEVICE | grep " parent " | awk '{ +mytc "$DEVICE" | grep " parent " | awk '{ split(substr($0, match($0, /[0-9]+ [Bb]ytes/)), a, " "); print $2 "_" $3 ".value " a[1]; }' From fd25056ffd6aa3eb23a9a30315b5a311b4e45038 Mon Sep 17 00:00:00 2001 From: Nye Liu Date: Sat, 5 Nov 2016 14:57:45 -0700 Subject: [PATCH 08/11] Set family to auto in tc_.pod as well --- plugins/network/tc_.pod | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/network/tc_.pod b/plugins/network/tc_.pod index be5fc5a9..74821bd9 100644 --- a/plugins/network/tc_.pod +++ b/plugins/network/tc_.pod @@ -28,7 +28,7 @@ This plugin monitors the bandwidth used by each queue class. The root class will =head1 MAGIC MARKERS - #%# family=manual + #%# family=auto #%# capabilities=autoconf =head1 AUTHORS From c4e03516ce5ae3bb5eb59bdd3f86197f62c7eafe Mon Sep 17 00:00:00 2001 From: Nye Liu Date: Sat, 5 Nov 2016 14:58:49 -0700 Subject: [PATCH 09/11] Forgot the suggest tag --- plugins/network/tc_.pod | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/network/tc_.pod b/plugins/network/tc_.pod index 74821bd9..70058d8c 100644 --- a/plugins/network/tc_.pod +++ b/plugins/network/tc_.pod @@ -29,7 +29,7 @@ This plugin monitors the bandwidth used by each queue class. The root class will =head1 MAGIC MARKERS #%# family=auto - #%# capabilities=autoconf + #%# capabilities=autoconf suggest =head1 AUTHORS From 49b79ca228f3a0d71ed3603162c5b23b8679ef80 Mon Sep 17 00:00:00 2001 From: Nye Liu Date: Sat, 5 Nov 2016 21:08:01 -0700 Subject: [PATCH 10/11] Embed tc_ pod documentation into the plugin itself --- plugins/network/tc_.pod | 44 ----------------------------------------- 1 file changed, 44 deletions(-) delete mode 100644 plugins/network/tc_.pod diff --git a/plugins/network/tc_.pod b/plugins/network/tc_.pod deleted file mode 100644 index 70058d8c..00000000 --- a/plugins/network/tc_.pod +++ /dev/null @@ -1,44 +0,0 @@ -#!/usr/bin/perl -w - -=pod - -=encoding UTF-8 - -=head1 NAME - -tc_ - Plugin to monitor traffic control queue class bandwidth usage - -=head1 APPLICABLE SYSTEMS - -Linux 2.5.40+, 2.6.x, 3.x, 4.x - -=head1 CONFIGURATION - -None needed. - -=head1 INTERPRETATION - -Traffic control is the name given to the sets of queuing systems and mechanisms by which packets are received and transmitted on a router. This includes deciding which (and whether) packets to accept at what rate on the input of an interface and determining which packets to transmit in what order at what rate on the output of an interface. - -This plugin monitors the bandwidth used by each queue class. The root class will draw as a single line, whereas children will be drawn in a stacked graph. Complex hierarchies which have more than the root and its direct children are not fully supported and may not render correctly. - -=head1 SEE ALSO - -"man tc" and "tc -s class show dev " to get more information about tc and to see the format of the statistics being parsed. - -=head1 MAGIC MARKERS - - #%# family=auto - #%# capabilities=autoconf suggest - -=head1 AUTHORS - -Steve Schnepp , -Samuel Smith , -Nye Liu - -=head1 LICENSE - -GPLv2 or later - -=cut From 21572e11a5d35e6a33e3744bbca91745f76b214e Mon Sep 17 00:00:00 2001 From: Nye Liu Date: Wed, 16 Nov 2016 18:25:53 -0800 Subject: [PATCH 11/11] Add the documentation in to the script. Should have gone with previous commit. --- plugins/network/tc_ | 51 +++++++++++++++++++++++++++++++++++---------- 1 file changed, 40 insertions(+), 11 deletions(-) diff --git a/plugins/network/tc_ b/plugins/network/tc_ index 3b373434..9933edd2 100755 --- a/plugins/network/tc_ +++ b/plugins/network/tc_ @@ -1,17 +1,46 @@ #!/bin/sh # -*- sh -*- -# -# This plugin is based on the if_ plugin. -# -# Parameters -# None -# -# Magic markers (optional - used by munin-config and some installation -# scripts): -# -#%# family=auto -#%# capabilities=autoconf suggest +: << =cut + +=pod + +=encoding UTF-8 + +=head1 NAME + +tc_ - Plugin to monitor traffic control queue class bandwidth usage + +=head1 CONFIGURATION + +None needed. + +=head1 INTERPRETATION + +Traffic control is the name given to the sets of queuing systems and mechanisms by which packets are received and transmitted on a router. This includes deciding which (and whether) packets to accept at what rate on the input of an interface and determining which packets to transmit in what order at what rate on the output of an interface. + +This plugin monitors the bandwidth used by each queue class. The root class will draw as a single line, whereas children will be drawn in a stacked graph. Complex hierarchies which have more than the root and its direct children are not fully supported and may not render correctly. + +=head1 SEE ALSO + +"man tc" and "tc -s class show dev " to get more information about tc and to see the format of the statistics being parsed. + +=head1 MAGIC MARKERS + + #%# family=auto + #%# capabilities=autoconf suggest + +=head1 AUTHORS + +Steve Schnepp , +Samuel Smith , +Nye Liu + +=head1 LICENSE + +GPLv2 or later + +=cut DEVICE=${0##*/tc_}