symux.8 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338
  1. .\" -*- nroff -*-
  2. .\"
  3. .\" Copyright (c) 2001-2005 Willem Dijkstra
  4. .\" All rights reserved.
  5. .\"
  6. .\" Redistribution and use in source and binary forms, with or without
  7. .\" modification, are permitted provided that the following conditions
  8. .\" are met:
  9. .\"
  10. .\" - Redistributions of source code must retain the above copyright
  11. .\" notice, this list of conditions and the following disclaimer.
  12. .\" - Redistributions in binary form must reproduce the above
  13. .\" copyright notice, this list of conditions and the following
  14. .\" disclaimer in the documentation and/or other materials provided
  15. .\" with the distribution.
  16. .\"
  17. .\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  18. .\" "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  19. .\" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
  20. .\" FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
  21. .\" COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
  22. .\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
  23. .\" BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  24. .\" LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  25. .\" CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  26. .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
  27. .\" ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  28. .\" POSSIBILITY OF SUCH DAMAGE.
  29. .\"
  30. .Dd August 8, 2004
  31. .Dt SYMUX 8
  32. .Os
  33. .Sh NAME
  34. .Nm symux
  35. .Nd symon stream multiplexer
  36. .Sh SYNOPSIS
  37. .Nm
  38. .Op Fl vd
  39. .Op Fl f Ar filename
  40. .Pp
  41. .Sh DESCRIPTION
  42. .Xr symon 8
  43. is a lightweight system monitor that measures cpu, memory, mbuf, debug,
  44. process, interface and disk statistics every 5 seconds. This information
  45. is then spooled to
  46. .Nm
  47. for further processing.
  48. .Pp
  49. .Xr symon 8
  50. has been designed to inflict minimal performance and security impact on
  51. the system it monitors.
  52. .Nm
  53. has performance impact proportional to the amount of streams it needs to
  54. manage. Ideally
  55. .Nm
  56. should live on a different system and collect data from several
  57. .Xr symon 8
  58. instances in a LAN.
  59. .Nm
  60. stores the incoming streams in .rrd files and distributes the
  61. information to connected listeners. Listeners can connect to
  62. .Nm
  63. on a tcp port and receive incoming
  64. .Xr symon 8
  65. transmissions decoded into ascii.
  66. .Lp
  67. .Nm
  68. needs no specific privileges besides being able to open it's ports and
  69. the rrd files. It should be run as
  70. .Ar "nobody" .
  71. .Lp
  72. The options:
  73. .Bl -tag -width Ds
  74. .It Fl v
  75. Show version.
  76. .It Fl d
  77. Stop
  78. .Nm
  79. from becoming a daemon and show debug information on stdout. Use this setting
  80. to find hosts or specific statistics that do get sent, but are ignored due to
  81. configuration.
  82. .It Fl f Ar filename
  83. Read configuration from
  84. .Ar filename
  85. instead of
  86. .Pa /etc/symux.conf .
  87. .El
  88. .Sh CONFIGURATION
  89. .Nm
  90. obtains configuration data from
  91. .Pa /etc/symux.conf .
  92. The configuration file contains one mux stanza that defines on what host
  93. address and port
  94. .Nm
  95. should listen to for incoming monitored data. There is a source section
  96. for every host that is to be monitored. The source section defines what
  97. data to accept and where to write that data to. In the case that a
  98. source is of another address family than the mux stanza, i.e. source =
  99. ipv6 with mux = ipv4, a listen port of the sources' family is opened
  100. using the unspecified address. Whitespace, newlines and text behind '#'
  101. are ignored. The format in BNF:
  102. .Pp
  103. .nf
  104. stmt = mux-stmt | source-stmt
  105. mux-stmt = "mux" host [ port ]
  106. host = ip4addr | ip6addr | hostname
  107. port = [ "port" | "," ] portnumber
  108. source-stmt = "source" host "{"
  109. accept-stmts
  110. [ write-stmts ]
  111. [ datadir-stmt ] "}"
  112. accept-stmts = accept-stmt [accept-stmts]
  113. accept-stmt = "accept" "{" resources "}"
  114. resources = resource version ["(" argument ")"]
  115. [ ","|" " resources ]
  116. resource = "cpu" | "mem" | "if" | "io" | "pf" | "pfq" |
  117. "debug" | "proc" | "mbuf" | "sensor" | "df"
  118. version = "" | number
  119. argument = number | interfacename | diskname
  120. datadir-stmt = "datadir" dirname
  121. write-stmts = write-stmt [write-stmts]
  122. write-stmt = "write" resource "in" filename
  123. .fi
  124. .Pp
  125. Note that
  126. .Bl -tag -width Ds
  127. .It Va port
  128. in the
  129. .Va mux-stmt
  130. specifies the port-number for both the udp port (incoming
  131. .Xr symon 8
  132. traffic) and the tcp port for incoming listeners.
  133. .It Va version
  134. is needed to distinguish between the same type of information (i.e.
  135. .Va io
  136. ) coming from different versions of OpenBSD. If no version number is
  137. supplied, the latest will be assumed.
  138. .It Va datadir
  139. will guess filenames for all accepted streams.
  140. .Va write
  141. statements always take precendence over a
  142. .Va datadir
  143. statement.
  144. .El
  145. .Sh EXAMPLE
  146. Here is an example
  147. .Ar symux.conf
  148. that listens to udp port 2100 on lo0, and accepts cpu, memory, pf,
  149. interfaces xl0/de0/lo0/wi0, disks wd[0-3]/cd[0-1], disk free blocks
  150. of three partition streams from a
  151. .Xr symon 8
  152. on localhost.
  153. .Nm
  154. will also listen on tcp port 2100 for incoming listeners.
  155. .Pp
  156. .nf
  157. mux 127.0.0.1 2100
  158. source 127.0.0.1 {
  159. accept { cpu(0), mem, pf,
  160. if(xl0), if(de0),
  161. if(lo0), if(wi0),
  162. io(wd0), io(wd1), io(wd2),
  163. io(wd3), io(cd0), io(cd1),
  164. df(sd0a), df(sd0d), df(sd0e) }
  165. datadir "/var/www/symon/rrds/localhost"
  166. }
  167. .fi
  168. .Sh LISTENERS
  169. .Nm
  170. offers received
  171. .Xr symon 8
  172. data to other programs via tcp. An example of a listener session:
  173. .Pp
  174. .nf
  175. nexus:~/project/symon$ telnet 10.0.0.1 2100
  176. Trying 10.0.0.1...
  177. Connected to 10.0.0.1.
  178. Escape character is '^]'.
  179. 10.0.0.1;mem::1077662160:7630848:53850112:469417984:0:25600;cpu:0:
  180. 1077662160:0.00:0.00:0.30:0.20:99.50;io:wd0:1077662160:2074:12759:
  181. 0:30736384:131780608;
  182. 10.0.0.2;mbuf::1077658247:138:74:0:0:41:0:23:0:90:360:868352:25:0:
  183. 0:0;pf::1077658247:700930123:535398451:0:352:1107229:706391:119833
  184. 9:4:0:0:2:3:29:4109383:83291:83262:980325:0:1:6:0:0;mem::107765824
  185. 7:79155200:131956736:391430144:0:536739840;cpu:0:1077658247:0.50:0
  186. .00:0.00:0.90:98.60;proc:httpd:1077658247:9:216:172:8:3:0.00:14999
  187. 552:0;if:lo0:1077658247:147104:147104:45868177:45868177:0:0:0:0:0:
  188. 0;if:xl0:1077658247:284267:452077:150620236:273265863:372:89478:0:
  189. 0:0:0;if:de0:1077658247:1813721:1197722:729054136:568900227:101:2:
  190. 0:0:198:0;
  191. ^]
  192. telnet> close
  193. Connection closed.
  194. .fi
  195. .Lp
  196. The format is
  197. .Va symon-version
  198. :
  199. .Va symon-host-ip
  200. :
  201. .Va stream-name
  202. :
  203. .Va stream-argument
  204. :
  205. .Va timestamp
  206. :
  207. .Va data
  208. .Lp
  209. Data formats:
  210. .Bl -tag -width Ds
  211. .It cpu
  212. Time spent in ( user, nice, system, interrupt, idle ). Total time is 100, data
  213. is offered with precision 2.
  214. .It mem
  215. Memory in ( real_active, real_total, free, swap_used, swap_total ). All values
  216. are in bytes rounded of to page boundaries. Values are 32 bit unsigned integers.
  217. .It if
  218. Interface counters ( packets_in, packets_out, bytes_in, bytes_out,
  219. multicasts_in, multicasts_out, errors_in, errors_out, collisions, drops
  220. ). Values are 32 bit unsigned integers.
  221. .It io
  222. Alias for io2. See below.
  223. .It io1
  224. Pre OpenBSD 3.5 io/disk counters ( total_transfers, total_seeks, total_bytes
  225. ). Values are 64 bit unsigned integers.
  226. .It io2
  227. Io/disk counters ( total_rxfer, total_wxfer, total_seeks, total_rbytes,
  228. total_wbytes). Values are 64 bit unsigned integers.
  229. .It pf
  230. Packet filter statistics ( bytes_v4_in : bytes_v4_out : bytes_v6_in :
  231. bytes_v6_out : packets_v4_in_pass : packets_v4_in_drop : packets_v4_out_pass :
  232. packets_v4_out_drop : packets_v6_in_pass : packets_v6_in_drop :
  233. packets_v6_out_pass : packets_v6_out_drop : states_entries : states_searches :
  234. states_inserts : states_removals : counters_match : counters_badoffset :
  235. counters_fragment : counters_short : counters_normalize : counters_memory
  236. ). Values are 64 bit unsigned integers.
  237. .It debug
  238. Kernel variables debug0 to debug19. ( debug0 : ... : debug19 ). Values are 32
  239. bit unsigned integers.
  240. .It proc
  241. Process statistics ( number : uticks : sticks : iticks : cpusec : cpupct :
  242. procsz : rsssz ).
  243. .It mbuf
  244. Mbuf statistics ( totmbufs : mt_data : mt_oobdata : mt_control :
  245. mt_header : mt_ftable : mt_soname : mt_soopts : pgused : pgtotal :
  246. totmem : totpct : m_drops : m_wait : m_drain ).
  247. .It sensor
  248. Single sensor measurement offered with 7.6 precision. Value depends on sensor
  249. type.
  250. .It pfq
  251. pf/altq queue statistics ( sent_bytes : sent_packets : drop_bytes :
  252. drop_packets ). Values are 64 bit unsigned integers.
  253. .It df
  254. Disk free statistics ( blocks : bfree : bavail : files :
  255. ffree : synwrites : asyncwrites). Values are 64 bit unsigned integers.
  256. .El
  257. .Sh SIGNALS
  258. .Bl -tag -width Ds
  259. .It SIGHUP
  260. Causes
  261. .Nm
  262. to read
  263. .Pa /etc/symux.conf
  264. or the file specified by the
  265. .Fl f
  266. flag.
  267. .Nm
  268. will keep the old configuration if errors occured during parsing of the
  269. configuration file.
  270. .El
  271. .Sh FILES
  272. .Bl -tag -width Ds
  273. .It Pa /var/run/symux.pid
  274. Contains the program id of the
  275. .Nm
  276. daemon.
  277. .It Pa /etc/symux.conf
  278. .Nm
  279. system wide configuration file.
  280. .El
  281. .Sh LEGACY FORMATS
  282. .Nm
  283. supports symon(8) clients that send pre OpenBSD 3.5 disk
  284. statistics. These streams should be identified as io1(<disk>) instead of
  285. io(<disk>) in
  286. .Pa /etc/symux.conf.
  287. Note that symon(8) measures io1 or io2 depending on whether it was
  288. compiled on a host that supports version 1 or 2.
  289. .Pp
  290. Because the structure of the incoming data has changed, the rrd files
  291. concerning io need to change as well:
  292. .Bl -tag -width Ds
  293. .It Upgrading symux only
  294. Move all
  295. .Pa io_<disk>.rrd
  296. files to
  297. .Pa io1_<disk>.rrd.
  298. Change the
  299. .Nm
  300. configuration file to accept and write io1.
  301. .Pp
  302. .It Upgrading hosts to OpenBSD 3.5 and updating symon(8)
  303. create new
  304. .Pa io_<disk>.rrd
  305. files using c_smrrds.sh for the upgraded host. Both symon(8) and
  306. .Nm
  307. configuration files can be left untouched as their io statements will
  308. now default to io2.
  309. .El
  310. .Pp
  311. .Nm
  312. will output what version of information it is offered by symon(8)s on
  313. the network when started with the
  314. .Va -d
  315. flag.
  316. .Pp
  317. Note that although an io1 can be translated into an io2 using rrdtool
  318. dump - vi dump - rrdtool restore, this is not recommended.
  319. .Sh BUGS
  320. .Nm
  321. writes incoming data to rrd files "in process". An rrdupdate on a somewhat
  322. stale rrdfile -- with the last data from quite some time in the past -- is a
  323. very expensive operation. This can cause
  324. .Nm
  325. to lockup while rrdupdate is updating the rrd file.
  326. .Nm
  327. will be unresponsive during this process.
  328. .Sh AUTHOR
  329. Willem Dijkstra <wpd@xs4all.nl>. Daniel Hartmeier helped to port to big-endian
  330. architectures. Matthew Gream helped to port symon to other BSD platforms.
  331. Port contributors: Marc Balmer, Matthew Gream, Daniel Hartmeier, J. Martin
  332. Petersen, Fredrik Soderblom and Harm Schotanus.
  333. .Sh SEE ALSO
  334. .Xr symon 8