Supermon consists of three distinct components (see Figure 1): (1) a loadable kernel module providing data, (2) a single node data server (mon), and (3) a data concentrator (Supermon) that composes samples from many nodes into a single data sample. The kernel module provides data samples through an entry in the Linux /proc filesystem. The single node server and data concentrator allow clients to retrieve data samples through TCP sockets. Clients that wish to use that data must connect to any of those components, and parse the data into their preferred format. All three components speak the same protocol, which is based on symbolic expressions (s-expressions) originally introduced as part of the LISP programming language.