[FIXED] Monitoring Not Showing Queue Traffic?
-
Hi,
I've got some queues setup for my traffic. That's all working fine, traffic goes in the right queues etc, I'm really pleased with how well it works.
This is what pftop -v queue shows me:
pfTop: Up Queue 1-6/6, View: queue, Cache: 10000 08:53:25 QUEUE BW SCH PRIO PKTS BYTES DROP_P DROP_B QLEN BORROW SUSPEN P/S B/S Bulk priq 0 0 0 0 0 0 0 0 Low priq 219206 25099892 0 0 0 3 460 Medium priq 2 890428 102133K 0 0 0 0 0 High priq 3 2169 321266 0 0 0 0.2 8 VeryHigh priq 5 12646 988551 0 0 0 0 0 Priority priq 7 1269 311483 0 0 0 0 0
However this is what the monitoring page is showing me:
There's no traffic at all, as far as it's concerned. I have do "Use RAM Disk" ticked - could this be the problem?
Other things like traffic stats etc show as I expect.Thanks.
-
Try 'pftop -s1 -v queue' (refreshes every 1 second)
or Status -> Queues
-
Yes, both of those show the correct information.
I just wondered why the monitoring wasn't working correctly - it's interesting (but only that, interesting, it doesn't matter) to go back and look how the pfSense box handled heavy load and what traffic went where.I wonder if I should submit a bug report?
Thanks!
-
@muppet:
…
I wonder if I should submit a bug report?
...Probably, but many details will be needed. You should start from a fresh install, document every change you makebup to the point where the problem occurs (and perhaps when it doesn't), then repeat this process so that the pfSense devs can reliably re-create your problem and quickly focus on fixing an obvious problem.
Good luck!
-
When adding queues, it is a good idea to reset the firewall state table, as existing connections won't be tagged yet, only new connections.
-
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!