Hello again.
This annoyed me enough I spent some time looking at it, and I found the problem and solution.
Graphs are updated by this script: /var/db/rrd/updaterrd.sh
Within it, this is the section that updates the traffic/queue graphs:
# polling packets for interface wan pppoe0
/usr/bin/nice -n20 /usr/local/bin/rrdtool update /var/db/rrd/wan-packets.rrd N:`/sbin/pfctl -vvsI -i pppoe0 | awk '\
/In4\/Pass/ { b4pi = $4 };/Out4\/Pass/ { b4po = $4 };/In4\/Block/ { b4bi = $4 };/Out4\/Block/ { b4bo = $4 };\
/In6\/Pass/ { b6pi = $4 };/Out6\/Pass/ { b6po = $4 };/In6\/Block/ { b6bi = $4 };/Out6\/Block/ { b6bo = $4 };\
END {print b4pi ":" b4po ":" b4bi ":" b4bo ":" b6pi ":" b6po ":" b6bi ":" b6bo};'`
` pfctl -vsq -i pppoe0 | awk 'BEGIN {printf "/usr/bin/nice -n20 /usr/local/bin/rrdtool update /var/db/rrd/wan-queues.rrd " } { if (($1 == "queue") && ( $2 ~ /^q/ )) { dsname = dsname ":" $2 ; q=1; } else if (($4 == "bytes:") && ( q ==
1 ) ) { dsdata = dsdata ":" $5 ; q=0; } } END { dsname = substr(dsname,2); dsdata = substr(dsdata,2); printf "-t " dsname " N:" dsdata }' dsname="" dsdata=""`
` pfctl -vsq -i pppoe0 | awk 'BEGIN {printf "/usr/bin/nice -n20 /usr/local/bin/rrdtool update /var/db/rrd/wan-queuedrops.rrd " } { if (($1 == "queue") && ( $2 ~ /^q/ )) { dsname = dsname ":" $2 ; q=1; } else if (($4 == "bytes:") && (
q == 1 ) ) { dsdata = dsdata ":" $8 ; q=0; } } END { dsname = substr(dsname,2); dsdata = substr(dsdata,2); printf "-t " dsname " N:" dsdata }' dsname="" dsdata=""`
So to graph queues, we're running this command: pfctl -vsq -i pppoe0
If I run this on my pfSense, I get the following:
[2.4.2-RELEASE][admin@trogdor]/etc: pfctl -vsq -i pppoe0
queue Bulk on pppoe0 bandwidth 1Mb priority 0 qlimit 455 fairq( codel linkshare 20Mb )
[ pkts: 0 bytes: 0 dropped pkts: 0 bytes: 0 ]
[ qlength: 0/455 ]
queue Low on pppoe0 bandwidth 5Mb qlimit 256 fairq( codel default linkshare 20Mb )
[ pkts: 3032 bytes: 667799 dropped pkts: 0 bytes: 0 ]
[ qlength: 0/256 ]
queue Medium on pppoe0 bandwidth 10Mb priority 2 qlimit 256 fairq( codel linkshare 20Mb )
[ pkts: 2659 bytes: 895810 dropped pkts: 0 bytes: 0 ]
[ qlength: 0/256 ]
queue High on pppoe0 bandwidth 3.30Mb priority 3 qlimit 32 fairq( codel linkshare 20Mb )
[ pkts: 0 bytes: 0 dropped pkts: 0 bytes: 0 ]
[ qlength: 0/ 32 ]
queue VeryHigh on pppoe0 bandwidth 500Kb priority 4 qlimit 16 fairq( linkshare 20Mb )
[ pkts: 333 bytes: 27377 dropped pkts: 0 bytes: 0 ]
[ qlength: 0/ 16 ]
queue Priority on pppoe0 bandwidth 200Kb priority 7 qlimit 8 fairq( linkshare 20Mb )
[ pkts: 4 bytes: 176 dropped pkts: 0 bytes: 0 ]
[ qlength: 0/ 8 ]
Hmm, so that works just fine. Let's look at that sed line a bit closer: { if (($1 == "queue") && ( $2 ~ /^q/ ))
HANG ON A SECOND.
If the queue name doesn't begin with the letter q, my traffic is not going to be collected by this!
The simple fix: A traffic queue's name must start with the letter q
so I renamed my queues from Bulk, Low, Medium etc to qBulk, qLow, qMedium etc and I'm now getting lovely queue graphs.
This little quirk doesn't appear to be documented anywhere, and of course if you use the Wizard (as 99% of sensible, normal people will do) the queues are all created with q in front of their name.
I hope this helps someone in the future!