Merge branch 'collectd-5.4'
[collectd.git] / src / collectd-exec.pod
index fee83fb..10f9f61 100644 (file)
@@ -1,3 +1,5 @@
+=encoding UTF-8
+
 =head1 NAME
 
 collectd-exec - Documentation of collectd's C<exec plugin>
@@ -11,22 +13,20 @@ collectd-exec - Documentation of collectd's C<exec plugin>
     Exec "myuser:mygroup" "myprog"
     Exec "otheruser" "/path/to/another/binary" "arg0" "arg1"
     NotificationExec "user" "/usr/lib/collectd/exec/handle_notification"
-    NagiosExec "nagios:nagios" "/usr/lib/nagios/plugins/check_something"
   </Plugin>
 
 =head1 DESCRIPTION
 
-The C<exec plugin> forks of an executable either to receive values, to dispatch
-notifications to the outside world or to be able to use Nagios plugins. The
-syntax of the configuration is explained in L<collectd.conf(5)> but summarized
-in the above synopsis.
+The C<exec plugin> forks of an executable either to receive values or to
+dispatch notifications to the outside world. The syntax of the configuration is
+explained in L<collectd.conf(5)> but summarized in the above synopsis.
 
 If you want/need better performance or more functionality you should take a
 long look at the C<perl plugin>, L<collectd-perl(5)>.
 
 =head1 EXECUTABLE TYPES
 
-There are currently three types of executables that can be executed by the
+There are currently two types of executables that can be executed by the
 C<exec plugin>:
 
 =over 4
@@ -57,17 +57,6 @@ run at once if multiple notifications are received.
 See L<NOTIFICATION DATA FORMAT> below for a description of the data passed to
 these programs.
 
-=item C<NagiosExec>
-
-The executable is treated as a Nagios plugin. That means that the first line
-printed to C<STDOUT> by this program is used as the text of a notification and
-the severity of the notification depends on the exit status of the executable
-only.
-
-For information on how to write Nagios plugins please refer to the Nagios
-documentation. If a plugin works with Nagios but not with collectd please
-complain on the collectd mailing list instead.
-
 =back
 
 =head1 EXEC DATA FORMAT
@@ -77,14 +66,14 @@ format is as follows:
 
 =over 4
 
-=item
+=item Comments
 
 Each line beginning with a C<#> (hash mark) is ignored.
 
-=item
+=item B<PUTVAL> I<Identifier> [I<OptionList>] I<Valuelist>
 
-Other lines must consist of an I<Identifier>, an optional I<Option-List> and a
-I<Value-List>, separated by a spaces. A description of these two parts follows:
+Submits one or more values (identified by I<Identifier>, see below) to the
+daemon which will dispatch it to all it's write-plugins.
 
 An I<Identifier> is of the form
 C<I<host>B</>I<plugin>B<->I<instance>B</>I<type>B<->I<instance>> with both
@@ -96,12 +85,13 @@ plugin within collectd. I<type> identifies the type and number of values
 data-sets is available in the B<types.db> file. See L<types.db(5)> for a
 description of the format of this file.
 
-The I<OptionList> is an optional list of I<Options>, where each option if a
+The I<OptionList> is an optional list of I<Options>, where each option is a
 key-value-pair. A list of currently understood options can be found below, all
-other options will be ignored.
+other options will be ignored. Values that contain spaces must be quoted with
+double quotes.
 
 I<Valuelist> is a colon-separated list of the time and the values, each either
-an integer if the data-source is a counter, of a double if the data-source if
+an integer if the data-source is a counter, or a double if the data-source is
 of type "gauge". You can submit an undefined gauge-value by using B<U>. When
 submitting B<U> to a counter the behavior is undefined. The time is given as
 epoch (i.E<nbsp>e. standard UNIX time).
@@ -128,11 +118,77 @@ case you're confused.
 
 Since examples usually let one understand a lot better, here are some:
 
-  leeloo/cpu-0/cpu-idle N:2299366
-  alice/interface/if_octets-eth0 interval=10 1180647081:421465:479194
+  PUTVAL leeloo/cpu-0/cpu-idle N:2299366
+  PUTVAL alice/interface/if_octets-eth0 interval=10 1180647081:421465:479194
+
+=item B<PUTNOTIF> [I<OptionList>] B<message=>I<Message>
+
+Submits a notification to the daemon which will then dispatch it to all plugins
+which have registered for receiving notifications. 
+
+The B<PUTNOTIF> if followed by a list of options which further describe the
+notification. The B<message> option is special in that it will consume the rest
+of the line as its value. The B<message>, B<severity>, and B<time> options are
+mandatory.
+
+Valid options are:
+
+=over 4
+
+=item B<message=>I<Message> (B<REQUIRED>)
+
+Sets the message of the notification. This is the message that will be made
+accessible to the user, so it should contain some useful information. As with
+all options: If the message includes spaces, it must be quoted with double
+quotes. This option is mandatory.
+
+=item B<severity=failure>|B<warning>|B<okay> (B<REQUIRED>)
+
+Sets the severity of the notification. This option is mandatory.
+
+=item B<time=>I<Time> (B<REQUIRED>)
+
+Sets the time of the notification. The time is given as "epoch", i.E<nbsp>e. as
+seconds since January 1st, 1970, 00:00:00. This option is mandatory.
+
+=item B<host=>I<Hostname>
+
+=item B<plugin=>I<Plugin>
+
+=item B<plugin_instance=>I<Plugin-Instance>
+
+=item B<type=>I<Type>
+
+=item B<type_instance=>I<Type-Instance>
+
+These "associative" options establish a relation between this notification and
+collected performance data. This connection is purely informal, i.E<nbsp>e. the
+daemon itself doesn't do anything with this information. However, websites or
+GUIs may use this information to place notifications near the affected graph or
+table. All the options are optional, but B<plugin_instance> without B<plugin>
+or B<type_instance> without B<type> doesn't make much sense and should be
+avoided.
+
+=item B<type:key=>I<value>
+
+Sets user defined meta information. The B<type> key is a single character
+defining the type of the meta information.
+
+The current supported types are:
+
+=over 8
+
+=item B<s> A string passed as-is.
+
+=back
 
 =back
 
+=back
+
+Please note that this is the same format as used in the B<unixsock plugin>, see
+L<collectd-unixsock(5)>.
+
 When collectd exits it sends a B<SIGTERM> to all still running
 child-processes upon which they have to quit.
 
@@ -142,17 +198,19 @@ The notification executables receive values rather than providing them. In
 fact, after the program is started C<STDOUT> is connected to C</dev/null>.
 
 The data is passed to the executables over C<STDIN> in a format very similar to
-HTTP-headers: There is one line per field. Every line consists of a field name,
-ended by a colon, and the associated value until end-of-line. The input is
-ended by two newlines immediately following another.
+HTTP: At first there is a "header" with one line per field. Every line consists
+of a field name, ended by a colon, and the associated value until end-of-line.
+The "header" is ended by two newlines immediately following another,
+i.e. an empty line. The rest, basically the "body", is the message of the
+notification.
 
 The following is an example notification passed to a program:
 
   Severity: FAILURE
-  Time: 1200928930
+  Time: 1200928930.515
   Host: myhost.mydomain.org
-  Message: This is a test notification to demonstrate the format
-  <newline>
+  \n
+  This is a test notification to demonstrate the format
 
 The following header files are currently used. Please note, however, that you
 should ignore unknown header files to be as forward-compatible as possible.
@@ -165,19 +223,60 @@ Severity of the notification. May either be B<FAILURE>, B<WARNING>, or B<OKAY>.
 
 =item B<Time>
 
-The time in epoch, i.E<nbsp>e. as seconds since 1970-01-01 00:00:00 UTC.
+The time in epoch, i.e. as seconds since 1970-01-01 00:00:00 UTC. The value
+currently has millisecond precision (i.e. three decimal places), but scripts
+should accept arbitrary numbers of decimal places, including no decimal places.
 
 =item B<Host>
 
-Name of the host concerned.
+=item B<Plugin>
 
-=item B<Message>
+=item B<PluginInstance>
 
-Message of the notification. This message should be made accessible to the
-user somehow.
+=item B<Type>
+
+=item B<TypeInstance>
+
+Identification of the performance data this notification is associated with.
+All of these fields are optional because notifications do not B<need> to be
+associated with a certain value.
 
 =back
 
+=head1 ENVIRONMENT
+
+The following environment variables are set by the plugin before calling
+I<exec>:
+
+=over 4
+
+=item COLLECTD_INTERVAL
+
+Value of the global interval setting.
+
+=item COLLECTD_HOSTNAME
+
+Hostname used by I<collectd> to dispatch local values.
+
+=back
+
+=head1 USING NAGIOS PLUGINS
+
+Though the interface is far from perfect, there are tons of plugins for Nagios.
+You can use these plugins with collectd by using a simple transition layer,
+C<exec-nagios.px>, which is shipped with the collectd distribution in the
+C<contrib/> directory. It is a simple Perl script that comes with embedded
+documentation. To see it, run the following command:
+
+  perldoc exec-nagios.px
+
+This script expects a configuration file, C<exec-nagios.conf>. You can find an
+example in the C<contrib/> directory, too.
+
+Even a simple mechanism to submit "performance data" to collectd is
+implemented. If you need a more sophisticated setup, please rewrite the plugin
+to make use of collectd's more powerful interface.
+
 =head1 CAVEATS
 
 =over 4
@@ -187,6 +286,14 @@ user somehow.
 The user, the binary is executed as, may not have root privileges, i.E<nbsp>e.
 must have an UID that is non-zero. This is for your own good.
 
+=item
+
+Early versions of the plugin did not use a command but treated all lines as if
+they were arguments to the I<PUTVAL> command. When the I<PUTNOTIF> command was
+implemented, this behavior was kept for lines which start with an unknown
+command for backwards compatibility. This compatibility code has been removed
+in I<collectdE<nbsp>5>.
+
 =back
 
 =head1 SEE ALSO
@@ -199,6 +306,6 @@ L<fork(2)>, L<exec(3)>
 
 =head1 AUTHOR
 
-Florian Forster E<lt>octo@verplant.orgE<gt>
+Florian Forster E<lt>octo@collectd.orgE<gt>
 
 =cut