SYMON(8)

NAME
symon - system monitor

SYNOPSIS
symon [-dtuv] [-f filename]

DESCRIPTION
symon 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(8) for further processing.

symon has been designed to inflict minimal performance and security impact on the system it monitors. symux(8) 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 instances in a LAN.

By default, symon will drop privileges and chroot(2) to home of the _symon user. This behaviour is not strictly needed for the cpu, mem, mbuf, disk debug and interface probes as these will work even when symon is started as nobody.

The options:

-d  Stop symon from becoming a daemon and show debug information on stdout.

-f filename
    Read configuration from filename instead of /etc/symon.conf.

-t  Test configuration file and exit.

-u  By default symon will chroot(2) into _symon user home directory. The -u disables this behaviour.

-v  Show version information.

CONFIGURATION
symon obtains configuration data from /etc/symon.conf. The configuration file contains monitor stanzas that define what resources should be monitored and to which symux(8) the information should be streamed to.

Multiple monitor statements are allowed. Whitespace, newlines and text behind '#' are ignored. The format in BNF:

    monitor-rule = "monitor" "{" resources "}" [every]
                   "stream" ["from" host] ["to"] host [ port ]
    resources    = resource [ version ] ["(" argument ")"]
                   [ ","|" " resources ]
    resource     = "cpu" | "cpuiow" | "debug" | "df" | "flukso" |
                   "if" | "io" | "load" | "mbuf" | "mem" | "pf" |
                   "pfq" | "proc" | "sensor" | "smart" | "time" |
                   "wg"
    version      = number
    argument     = number | name
    every        = "every" time
    time         = "second" | number "seconds"
    host         = ip4addr | ip6addr | hostname
    port         = [ "port" | "," ] portnumber

Note that symux(8) data files default to receiving data every 5 seconds. Adjusting the monitoring interval will also require adjusting the associated symux(8) datafile(s).

The pf probe will return data that is collected for the loginterface set in /etc/pf.conf(5).

The Linux io, df, and smart probes support device names via id, label, path and uuid.

The FreeBSD io, df, and smart probes support gpt names, ufs names, ufs ids and paths.

The OpenBSD io probe supports device uuids.

EXAMPLE
Here is an example OpenBSD symon.conf that monitors cpu, memory, pf, interfaces xl0/de0/lo0/wi0, disks wd[0-3]/cd[0-1], debug variables debug0 to debug19 and streams that information to localhost on port 2100.

    monitor { cpu(0),  mem, pf, if(xl0), if(de0),
    	  if(lo0), if(wi0), io(wd0), io(wd1),
    	  io(wd2), io(wd3), io(cd0), io(cd1),
    	  io(ccd0), df(sd0a), df(sd0d), df(sd0e),
    	  debug, proc(httpd) } stream to 127.0.0.1 2100

EXAMPLE
Here is an example Linux symon.conf that monitors cpu including iowait, memory, load, interface eth0, io and df for a set of disks every 5 seconds. Smart data is to be collected every 60 seconds. Disks in the smart and io statements are identified using ids, filesystem volumes in df using labels.
    monitor { smart(ata-Hitachi_HDS722020ALA330_JK1130ABABABAB),
              smart(ata-Hitachi_HDS722020ALA330_JK1130ACACACAC),
            } every 60 seconds stream to 192.168.0.2 port 2100
    monitor { cpuiow(0), cpuiow(1), mem, if(eth0),
              io(ata-Hitachi_HDS722020ALA330_JK1130ABABABAB),
              io(ata-Hitachi_HDS722020ALA330_JK1130ACACACAC),
              df(data_1),
              df(data_2),
              df(data_3),
              df(home),
              df(var),
              load
            } stream to 192.168.0.2 port 2100

SIGNALS

SIGHUP
    Causes symon to read /etc/symon.conf. symon will keep the old configuration if errors occured during parsing of the configuration file. Note that the chroot(2) may cause resources to become unattainable, most notably the configuration file itself.

FILES

/var/run/symon.pid
    Contains the program id of the symon daemon.

/etc/symon.conf
    symon system wide configuration file.

BUGS
Every monitored resource mentioned /etc/symon.conf gets queried. Mentioning, for example, cpu(0) twice for different muxes will result in two distinct cpu(0) measurement actions.

The proc module is too simple: memory shared between two instances of the same process is simply counted twice.

symon does not check whether all resources mentioned in /etc/symon.conf exist.

AUTHOR
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, Tim Kuijsten, Constantine A. Murenin, J. Martin Petersen, Fredrik Soderblom, Harm Schotanus and Martin van der Werff. Valeriy Leshchinskiy maintains a windows symon client at https://github.com/ValHazelwood/SymonClient .

SEE ALSO
symux(8)