collectd-unixsock(5): Documented the PUTNOTIF command.
[collectd.git] / src / collectd-unixsock.pod
1 =head1 NAME
2
3 collectd-unixsock - Documentation of collectd's C<unixsock plugin>
4
5 =head1 SYNOPSIS
6
7   # See collectd.conf(5)
8   LoadPlugin unixsock
9   # ...
10   <Plugin unixsock>
11     SocketFile "/path/to/socket"
12     SocketGroup "collectd"
13     SocketPerms "0770"
14   </Plugin>
15
16 =head1 DESCRIPTION
17
18 The C<unixsock plugin> opens an UNIX-socket over which one can interact with
19 the daemon. This can be used to use the values collected by collectd in other
20 applications, such as monitoring, or submit externally collected values to
21 collectd.
22
23 This plugin is used by L<collectd-nagios(1)> to check if some value is in a
24 certain range and exit with a Nagios-compatible exit code.
25
26 =head1 COMMANDS
27
28 Upon start the C<unixsock plugin> opens a UNIX-socket and waits for
29 connections. Once a connection is established the client can send commands to
30 the daemon which it will answer, if it understand them.
31
32 The following commands are implemented:
33
34 =over 4
35
36 =item B<GETVAL> I<Identifier>
37
38 If the value identified by I<Identifier> (see below) is found the complete
39 value-list is returned. The response is a space separated list of
40 name-value-pairs:
41
42 I<num> I<name>B<=>I<value>[ I<name>B<=>I<value>[ ...]]
43
44 If I<num> is less then zero, an error occurred. Otherwise it contains the
45 number of values that follow. Each value is of the form I<name>B<=>I<value>.
46 Counter-values are converted to a rate, e.E<nbsp>g. bytes per second.
47 Undefined values are returned as B<NaN>.
48
49 Example:
50   -> | GETVAL myhost/cpu-0/cpu-user
51   <- | 1 value=1.260000e+00
52
53 =item B<LISTVAL>
54
55 Returns a list of the values available in the value cache together with the
56 time of the last update, so that querying applications can issue a B<GETVAL>
57 command for the values that have changed.
58
59 The first line's status number is the number of identifiers returned or less
60 than zero if an error occurred. Each of the following lines contains the
61 update time as an epoch value and the identifier, separated by a space.
62
63 Example:
64   -> | LISTVAL
65   <- | 69 Values found
66   <- | 1182204284 leeloo/cpu-0/cpu-idle
67   <- | 1182204284 leeloo/cpu-0/cpu-nice
68   <- | 1182204284 leeloo/cpu-0/cpu-system
69   <- | 1182204284 leeloo/cpu-0/cpu-user
70   ...
71
72 =item B<PUTVAL> I<Identifier> [I<OptionList>] I<Valuelist>
73
74 Submits one or more values (identified by I<Identifier>, see below) to the
75 daemon which will dispatch it to all it's write-plugins.
76
77 An I<Identifier> is of the form
78 C<I<host>B</>I<plugin>B<->I<instance>B</>I<type>B<->I<instance>> with both
79 I<instance>-parts being optional. If they're omitted the hyphen must be
80 omitted, too.
81
82 The I<OptionList> is an optional list of I<Options>, where each option if a
83 key-value-pair. A list of currently understood options can be found below, all
84 other options will be ignored.
85
86 I<Valuelist> is a colon-separated list of the time and the values, each either
87 an integer if the data-source is a counter, of a double if the data-source if
88 of type "gauge". You can submit an undefined gauge-value by using B<U>. When
89 submitting B<U> to a counter the behavior is undefined. The time is given as
90 epoch (i.E<nbsp>e. standard UNIX time).
91
92 You can mix options and values, but the order is important: Options only
93 effect following values, so specifying an option as last field is allowed, but
94 useless. Also, an option applies to B<all> following values, so you don't need
95 to re-set an option over and over again.
96
97 The currently defined B<Options> are:
98
99 =over 4
100
101 =item B<interval=>I<seconds>
102
103 Gives the interval in which the data identified by I<Identifier> is being
104 collected.
105
106 =back
107
108 Please note that this is the same format as used in the B<exec plugin>, see
109 L<collectd-exec(5)>.
110
111 Example:
112   -> | PUTVAL testhost/interface/if_octets-test0 interval=10 1179574444:123:456
113   <- | 0 Success
114
115 =item B<PUTNOTIF> [I<OptionList>] B<message=>I<Message>
116
117 Submits a notification to the daemon which will then dispatch it to all plugins
118 which have registered for receiving notifications. 
119
120 The B<PUTNOTIF> if followed by a list of options which further describe the
121 notification. The B<message> option is special in that it will consume the rest
122 of the line as its value. The B<message>, B<severity>, and B<time> options are
123 mandatory.
124
125 Valid options are:
126
127 =over 4
128
129 =item B<message=>I<Message> (B<REQUIRED>)
130
131 Sets the message of the notification. This is the message that will be made
132 accessible to the user, so it should contain some useful information. This
133 option must be the last option because the rest of the line will be its value,
134 even if there are spaces and equal-signs following it! This option is
135 mandatory.
136
137 =item B<severity=failure>|B<warning>|B<okay> (B<REQUIRED>)
138
139 Sets the severity of the notification. This option is mandatory.
140
141 =item B<time=>I<Time> (B<REQUIRED>)
142
143 Sets the time of the notification. The time is given as "epoch", i.E<nbsp>e. as
144 seconds since January 1st, 1970, 00:00:00. This option is mandatory.
145
146 =item B<host=>I<Hostname>
147
148 =item B<plugin=>I<Plugin>
149
150 =item B<plugin_instance=>I<Plugin-Instance>
151
152 =item B<type=>I<Type>
153
154 =item B<type_instance=>I<Type-Instance>
155
156 These "associative" options establish a relation between this notification and
157 collected performance data. This connection is purely informal, i.E<nbsp>e. the
158 daemon itself doesn't do anything with this information. However, websites or
159 GUIs may use this information to place notifications near the affected graph or
160 table. All the options are optional, but B<plugin_instance> without B<plugin>
161 or B<type_instance> without B<type> doesn't make much sense and should be
162 avoided.
163
164 =back
165
166 Example:
167   -> | PUTNOTIF type=temperature severity=warning time=1201094702 message=The roof is on fire!
168   <- | 0 Success
169
170 =back
171
172 =head2 Identifiers
173
174 Value or value-lists are identified in a uniform fashion:
175
176 I<Hostname>/I<Plugin>/I<Type>
177
178 Where I<Plugin> and I<Type> are both either of type "I<Name>" or
179 "I<Name>-I<Instance>". This sounds more complicated than it is, so here are
180 some examples:
181
182   myhost/cpu-0/cpu-user
183   myhost/load/load
184   myhost/memory/memory-used
185   myhost/disk-sda/disk_octets
186
187 =head2 Return values
188
189 Unless otherwise noted the plugin answers with a line of the following form:
190
191 I<Num> I<Message>
192
193 If I<Num> is zero the message indicates success, if I<Num> is non-zero the
194 message indicates failure. I<Message> is a human-readable string that describes
195 the return value further.
196
197 Commands that return values may use I<Num> to return the number of values that
198 follow, such as the B<GETVAL> command. These commands usually return a negative
199 value on failure and never return zero.
200
201 =head1 ABSTRACTION LAYER
202
203 Shipped with the sourcecode comes the Perl-Module L<Collectd::Unixsock> which
204 provides an abstraction layer over the actual socket connection. It can be
205 found in the directory F<contrib/PerlLib>. If you want to use Perl to
206 communicate with the daemon, you're encouraged to use and expand this module.
207
208 =head1 SEE ALSO
209
210 L<collectd(1)>,
211 L<collectd.conf(5)>,
212 L<collectd-nagios(1)>,
213 L<unix(7)>
214
215 =head1 AUTHOR
216
217 Florian Forster E<lt>octo@verplant.orgE<gt>
218
219 =cut