Copyright © 2011 Basho Technologies, Inc.
Authors: Scott Lystig Fritchie (scott@basho.com).
sysmon_handler is an Erlang/OTP application that manages the event messages
that can be generated by the Erlang virtual machine's system_monitor BIF
(Built-In Function). These messages can notify a central data-gathering process
about the following events:
The problem with system_monitor events is that there isn't a mechanism within
the Erlang virtual machine that limits the rate at which the events are
generated. A busy VM can easily create many hundreds of these messages per
second. Some kind of rate-limiting filter is required to avoid further
overloading a system that may already be overloaded.
This app will use two processes for system_monitor message handling.
gen_server process to provide a rate-limiting filter. gen_event server to allow flexible, user-defined functions to
respond to system_monitor events that pass through the first stage
filter. The Erlang/OTP documentation clearly states that only one process can receive
system_monitor messages. But using the sysmon_handler OTP app, if multiple
parties are interested in receiving system_monitor events, each party can add
an event handler to the sysmon_handler event handler.
The following events can be sent from the sysmon_handler
filtering/rate-limiting process (a.k.a. sysmon_handler_filter) to the event
handler process (a.k.a. sysmon_handler).
{monitor, pid(), atom(), term()} ... These are
system_monitor messages as they are received verbatim by the
sysmon_handler_filter process. See the reference documentation for
erlang:system_monitor/2 for details. {suppressed, proc_events | port_events, Num::integer()} ... These
messages inform your event handler that Num events of a certain type
(proc_events or port_events) were suppressed in the last second
(i.e. their arrival rate exceeded the configured rate limit). The event handler process in this application uses the registered name
sysmon_handler. To add your handler, use something like:
gen_event:add_sup_handler(sysmon_handler, yourModuleName,
YourInitialArgs).
gen_event:add_sup_handler/3
for API details. See the example event handler module in the source
repository, src/sysmon_handler_example_handler.erl, for example usage.
Generated by EDoc