|
|
| |
SYMUX(8) |
FreeBSD System Manager's Manual |
SYMUX(8) |
symux —
symon stream multiplexer
symux |
[-dltv ] [-f
filename] |
symon(8) is
a lightweight system monitor that measures cpu, load, filesystem, interface,
disk, memory, pf, pf queues, mbuf, proc and sensor statistics every 5 seconds.
This information is then spooled to symux for further
processing.
symon(8)
has been designed to inflict minimal performance and security impact on the
system it monitors. symux has performance impact
proportional to the amount of streams it needs to manage. Ideally
symux should live on a different system and collect
data from several
symon(8)
instances in a LAN. symux stores the incoming
streams in .rrd files and distributes the information to connected
listeners. Listeners can connect to symux on a tcp
port and receive incoming
symon(8)
transmissions decoded into ascii.
symux needs no specific privileges besides
being able to open it's ports and the rrd files. It should be run as
nobody.
The options:
-d
- Stop
symux from becoming a daemon and show debug
information on stdout. Use this setting to find hosts or specific
statistics that do get sent, but are ignored due to configuration.
-f
filename
- Read configuration from filename instead of
/etc/symux.conf.
-l
- List rrd files found in active configuration.
-t
- Test configuration file and exit.
-v
- Show version.
symux obtains configuration data from
/etc/symux.conf. The configuration file contains one
mux stanza that defines on what host address and port
symux should listen to for incoming monitored data.
There is a source section for every host that is to be monitored. The source
section defines what data to accept and where to write that data to. In the
case that a source is of another address family than the mux stanza, i.e.
source = ipv6 with mux = ipv4, a listen port of the sources' family is opened
using the unspecified address. Whitespace, newlines and text behind '#' are
ignored. The format in BNF:
stmt = mux-stmt | source-stmt
mux-stmt = "mux" host [ port ]
host = ip4addr | ip6addr | hostname
port = [ "port" | "," ] portnumber
source-stmt = "source" host "{"
accept-stmts
[ write-stmts ]
[ datadir-stmt ] "}"
accept-stmts = accept-stmt [accept-stmts]
accept-stmt = "accept" "{" resources "}"
resources = resource [ version ] ["(" argument ")"]
[ ","|" " resources ]
resource = "cpu" | "cpuiow" | "debug" | "df" | "flukso" |
"if" | "io" | "load" | "mbuf" | "mem" | "pf" |
"pfq" | "proc" | "sensor" | "smart"
version = number
argument = number | interfacename | diskname
datadir-stmt = "datadir" dirname
write-stmts = write-stmt [write-stmts]
write-stmt = "write" resource "in" filename
Note that
- port
- in the mux-stmt specifies the port-number for both
the udp port (incoming
symon(8)
traffic) and the tcp port for incoming listeners.
- version
- is needed to distinguish between the same type of information (i.e.
io ) coming from different versions of OpenBSD. If
no version number is supplied, the latest will be assumed.
- datadir
- will guess filenames for all accepted streams. write
statements always take precendence over a datadir
statement.
Here is an example symux.conf that listens to udp port
2100 on lo0, and accepts cpu, memory, pf, interfaces xl0/de0/lo0/wi0, disks
wd[0-3]/cd[0-1], disk free blocks of three partition streams from a
symon(8)
on localhost. symux will also listen on tcp port 2100
for incoming listeners.
mux 127.0.0.1 2100
source 127.0.0.1 {
accept { cpu(0), mem, pf,
if(xl0), if(de0),
if(lo0), if(wi0),
io(wd0), io(wd1), io(wd2),
io(wd3), io(cd0), io(cd1),
df(sd0a), df(sd0d), df(sd0e) }
datadir "/var/www/symon/rrds/localhost"
}
symux offers received
symon(8)
data to other programs via tcp. An example of a listener session:
nexus:~/project/symon$ telnet 10.0.0.1 2100
Trying 10.0.0.1...
Connected to 10.0.0.1.
Escape character is '^]'.
10.0.0.1;mem::1077662160:7630848:53850112:469417984:0:25600;cpu:0:
1077662160:0.00:0.00:0.30:0.20:99.50;io:wd0:1077662160:2074:12759:
0:30736384:131780608;
10.0.0.2;mbuf::1077658247:138:74:0:0:41:0:23:0:90:360:868352:25:0:
0:0;pf::1077658247:700930123:535398451:0:352:1107229:706391:119833
9:4:0:0:2:3:29:4109383:83291:83262:980325:0:1:6:0:0;mem::107765824
7:79155200:131956736:391430144:0:536739840;cpu:0:1077658247:0.50:0
552:0;if:lo0:1077658247:147104:147104:45868177:45868177:0:0:0:0:0:
0;if:xl0:1077658247:284267:452077:150620236:273265863:372:89478:0:
0:0:0;if:de0:1077658247:1813721:1197722:729054136:568900227:101:2:
0:0:198:0;
^]
telnet> close
Connection closed.
The format is symon-version :
symon-host-ip : stream-name :
stream-argument : timestamp :
data
Data formats:
- cpu
- Time spent in ( user, nice, system, interrupt, idle ). Total time is 100,
data is offered with precision 2.
- cpuiow
- Time spent in ( user, nice, system, interrupt, idle, iowait ). Total time
is 100, data is offered with precision 2.
- debug
- Kernel variables debug0 to debug19. ( debug0 : ... : debug19 ). Values are
32 bit unsigned integers.
- df
- Disk free statistics ( blocks : bfree : bavail : files : ffree :
syncwrites : asyncwrites ). Values are 64 bit unsigned integers.
- load
- Load averages for the last 1, 5, and 15 minutes ( load1, load5, load15 ).
Data is offered with prec ision 2 and a maximum of 655.
- if
- Alias for if2. See below.
- if1
- Pre OpenBSD 4.3 interface counters ( packets_in, packets_out, bytes_in,
bytes_out, multicasts_in, multicasts_out, errors_in, errors_out,
collisions, drops ). Values are 32 bit unsigned integers.
- if2
- Interface counters ( ipackets, opackets, ibytes, obytes, imcasts, omcasts,
ierrors, oerrors, collisions, drops ). Values are 64 bit unsigned
integers.
- io
- Alias for io2. See below.
- io1
- Pre OpenBSD 3.5 io/disk counters ( total_transfers, total_seeks,
total_bytes ). Values are 64 bit unsigned integers.
- io2
- Io/disk counters ( rxfer, wxfer, seeks, rbytes, wbytes). Values are 64 bit
unsigned integers.
- mbuf
- Mbuf statistics ( totmbufs : mt_data : mt_oobdata : mt_control : mt_header
: mt_ftable : mt_soname : mt_soopts : pgused : pgtotal : totmem : totpct :
m_drops : m_wait : m_drain ).
- mem
- Alias for mem2. See below.
- mem1
- Pre symon 2.78 memory counters ( real_active, real_total, free, swap_used,
swap_total ). All values are in bytes rounded to page boundaries. Values
are 32 bit unsigned integers.
- mem2
- Memory in ( real_active, real_total, free, swap_used, swap_total ). All
values are in bytes rounded to page boundaries. Values are 64 bit unsigned
integers.
- pf
- Packet filter statistics ( bytes_v4_in : bytes_v4_out : bytes_v6_in :
bytes_v6_out : packets_v4_in_pass : packets_v4_in_drop :
packets_v4_out_pass : packets_v4_out_drop : packets_v6_in_pass :
packets_v6_in_drop : packets_v6_out_pass : packets_v6_out_drop :
states_entries : states_searches : states_inserts : states_removals :
counters_match : counters_badoffset : counters_fragment : counters_short :
counters_normalize : counters_memory ). Values are 64 bit unsigned
integers.
- pfq
- pf/altq queue statistics ( sent_bytes : sent_packets : drop_bytes :
drop_packets ). Values are 64 bit unsigned integers.
- proc
- Process statistics ( number : uticks : sticks : iticks : cpusec : cpupct :
procsz : rsssz ).
- sensor
- Single sensor measurement offered with 7.6 precision. Value depends on
sensor type.
- smart
- SMART attributes ( read_error_rate: reallocated_sectors: spin_retries:
air_flow_temp: temperature: reallocations: current_pending:
uncorrectables: soft_read_error_rate: g_sense_error_rate: temperature2:
free_fall_protection ). Values depend on drive model and may change
between models.
- flukso
- Average pwr sensor value offered with 7.6 precision. Value is a moving
average and will depend on the number of measurements seen in a particular
symon interval.
- SIGHUP
- Causes
symux to read
/etc/symux.conf or the file specified by the
-f flag. symux will keep
the old configuration if errors occured during parsing of the
configuration file.
- /var/run/symux.pid
- Contains the program id of the
symux daemon.
- /etc/symux.conf
symux system wide configuration file.
symux supports symon(8) clients that send
- pre OpenBSD 3.5 disk statistics.
- These streams should be identified as io1(<disk>) instead of
io(<disk>) in /etc/symux.conf. Also note
that symon(8) measures io1 or io2 depending on whether it was compiled on
a host that supports version 1 or 2. The rrd datastructures of these
streams differ and there is no easy way to change an io1 rrd into an io2
rrd.
- pre symon 2.78 mem/if statistics.
- These streams should be identified as if1(<interface>) and mem1() in
/etc/symux.conf. symon versions 2.78 and up will
always report if2 and mem2 statistics. The rrd files for the old and new
probes are identical and need not be changed.
symux will output what version of
information it is offered by symon(8)s on the network when started with the
-d flag.
symux writes incoming data to rrd files "in
process". An rrdupdate on a somewhat stale rrdfile -- with the last data
from quite some time in the past -- is a very expensive operation. This can
cause symux to lockup while rrdupdate is updating the
rrd file. symux will be unresponsive during this
process.
Willem Dijkstra <wpd@xs4all.nl>. Daniel Hartmeier helped to port to
big-endian architectures. Matthew Gream helped to port symon to other BSD
platforms.
Port contributors: Marc Balmer, Tito Dal Canton, Matthew Gream,
Daniel Hartmeier, Lars Kotthoff, Constantine A. Murenin, J. Martin Petersen,
Fredrik Soderblom, Harm Schotanus and Martin van der Werff.
Visit the GSP FreeBSD Man Page Interface. Output converted with ManDoc. |