Mit Hilfe von gather lassen sich Systemstatistiken aufzeichnen und im nachhinein abfragen. Im FreeBSD-Portbaum findet man gather unter sysutils/gather:
# cd /usr/ports/sysutils/gather && make install clean
Nun müssen in der /etc/crontab folgende Einträge gemacht werden. Damit werden alle fünf Minuten die Daten gespeichert und automatisch nach sieben Tagen gelöscht:
*/5 * * * * root /usr/local/bin/gather collect
18 0 * * * root /usr/local/bin/gather expire 7
Nun kann abgefragt werden, welche Daten aufgezeichnet werden:
# gather show utils
-----------------------------------------------------------------------
name cmd desc
-----------------------------------------------------------------------
df /bin/df df output
fstat /usr/bin/fstat fstat output
netstat-La /usr/bin/netstat -Lna netstat listening socket statistics
netstat-a /usr/bin/netstat -na netstat socket statistics
netstat-i /usr/bin/netstat -ni netstat interface statistics
netstat-m /usr/bin/netstat -m netstat mbuf statistics
netstat-rs /usr/bin/netstat -rs netstat routing statistics
netstat-s /usr/bin/netstat -s netstat system wide statistics
nfsstat /usr/bin/nfsstat nfsstat output
ps /bin/ps auxww processes statistics
sockstat /usr/bin/sockstat sockstat output
sysctl /sbin/sysctl -a sysctl variables
top /usr/bin/top -d1 -b 100 top output
uptime /usr/bin/uptime system uptime
vmstat /usr/bin/vmstat vmstat output
vmstat-i /usr/bin/vmstat -ai vmstat interrupts statistics
vmstat-m /usr/bin/vmstat -m vmstat kernel malloc(9) statistics
vmstat-z /usr/bin/vmstat -z vmstat kernel uma(9) statistics
Möchte man abfragen wie der System-Load am 12. November 2010 zwischen 2:00 und 3:00 war, kann folgender Befehl verwendet werden:
# gather show -t '2010-11-12/02' grep '.*' uptime
2010-11-12/02/00: 2:00AM up 120 days, 9:50, 0 users, load averages: 2.31, 1.92, 1.42
2010-11-12/02/05: 2:05AM up 120 days, 9:55, 0 users, load averages: 0.84, 1.27, 1.27
2010-11-12/02/10: 2:10AM up 120 days, 10 hrs, 0 users, load averages: 0.86, 0.97, 1.11
2010-11-12/02/15: 2:15AM up 120 days, 10:05, 0 users, load averages: 4.51, 2.75, 1.83
2010-11-12/02/20: 2:20AM up 120 days, 10:10, 0 users, load averages: 4.36, 3.54, 2.45
2010-11-12/02/25: 2:25AM up 120 days, 10:15, 0 users, load averages: 4.15, 3.99, 2.99
2010-11-12/02/30: 2:30AM up 120 days, 10:20, 0 users, load averages: 4.43, 4.20, 3.37
2010-11-12/02/35: 2:35AM up 120 days, 10:25, 0 users, load averages: 3.30, 3.88, 3.47
2010-11-12/02/40: 2:40AM up 120 days, 10:30, 0 users, load averages: 0.95, 1.98, 2.69
2010-11-12/02/45: 2:45AM up 120 days, 10:35, 0 users, load averages: 1.25, 1.24, 2.11
2010-11-12/02/50: 2:50AM up 120 days, 10:40, 0 users, load averages: 0.93, 1.02, 1.74
2010-11-12/02/55: 2:55AM up 120 days, 10:45, 0 users, load averages: 1.06, 1.04, 1.54
Auch können nur bestimmte Zeilen von den aufgezeichneten Daten angezeigt werden. Im folgenden Beispiel wird jeweils nur die Zeile mit den offenen Dateien innerhalb des angegebenen Zeitfensters aus den aufgezeichneten sysctl-Variablen angezeigt:
# gather show -t '2010-11-13/1--2010-11-13/2' grep '^kern.openfiles:' sysctl
2010-11-13/01/00: kern.openfiles: 255
2010-11-13/01/05: kern.openfiles: 259
2010-11-13/01/10: kern.openfiles: 261
2010-11-13/01/15: kern.openfiles: 261
2010-11-13/01/20: kern.openfiles: 264
2010-11-13/01/25: kern.openfiles: 261
2010-11-13/01/30: kern.openfiles: 261
2010-11-13/01/35: kern.openfiles: 270
2010-11-13/01/40: kern.openfiles: 308
2010-11-13/01/45: kern.openfiles: 311
2010-11-13/01/50: kern.openfiles: 296
2010-11-13/01/55: kern.openfiles: 308
2010-11-13/02/00: kern.openfiles: 311
2010-11-13/02/05: kern.openfiles: 306
2010-11-13/02/10: kern.openfiles: 282
2010-11-13/02/15: kern.openfiles: 265
2010-11-13/02/20: kern.openfiles: 269
2010-11-13/02/25: kern.openfiles: 301
2010-11-13/02/30: kern.openfiles: 311
2010-11-13/02/35: kern.openfiles: 294
2010-11-13/02/40: kern.openfiles: 311
2010-11-13/02/45: kern.openfiles: 311
2010-11-13/02/50: kern.openfiles: 309
2010-11-13/02/55: kern.openfiles: 294
Auch können die Anzahl gefunden Zeilen ausgegeben werden. Möchte man wissen wieviele offene Sockets der www-Benutzer hatte, kann folgender Befehl verwendet werden:
# gather show -t '2010-11-09' grep -c '^www\s' sockstat
2010-11-09/00/00: 32
2010-11-09/00/05: 32
2010-11-09/00/10: 35
2010-11-09/00/15: 35
2010-11-09/00/20: 34
2010-11-09/00/25: 34
[...]
2010-11-09/23/30: 32
2010-11-09/23/35: 32
2010-11-09/23/40: 32
2010-11-09/23/45: 32
2010-11-09/23/50: 32
2010-11-09/23/55: 32
Mehr Informationen zu gather findet man in der Manpage gather(1).