Merge branch 'collectd-4.0' into collectd-4.1
[collectd.git] / src / collectd-snmp.pod
1 =head1 NAME
2
3 collectd-snmp - Documentation of collectd's C<snmp plugin>
4
5 =head1 SYNOPSIS
6
7   LoadPlugin snmp
8   # ...
9   <Plugin snmp>
10     <Data "powerplus_voltge_input">
11       Type "voltage"
12       Table false
13       Instance "input_line1"
14       Values "SNMPv2-SMI::enterprises.6050.5.4.1.1.2.1"
15     </Data>
16     <Data "hr_users">
17       Type "users"
18       Table false
19       Instance ""
20       Values "HOST-RESOURCES-MIB::hrSystemNumUsers.0"
21     </Data>
22     <Data "std_traffic">
23       Type "if_octets"
24       Table true
25       Instance "IF-MIB::ifDescr"
26       Values "IF-MIB::ifInOctets" "IF-MIB::ifOutOctets"
27     </Data>
28
29     <Host "some.switch.mydomain.org">
30       Address "192.168.0.2"
31       Version 1
32       Community "community_string"
33       Collect "std_traffic"
34       Inverval 120
35     </Host>
36     <Host "some.server.mydomain.org">
37       Address "192.168.0.42"
38       Version 2
39       Community "another_string"
40       Collect "std_traffic" "hr_users"
41     </Host>
42     <Host "some.ups.mydomain.org">
43       Address "192.168.0.3"
44       Version 1
45       Community "more_communities"
46       Collect "powerplus_voltge_input"
47       Interval 300
48     </Host>
49   </Plugin>
50
51 =head1 DESCRIPTION
52
53 The C<snmp plugin> queries other hosts using SNMP, the simple network
54 management protocol, and translates the value it receives to collectd's
55 internal format and dispatches them. Depending on the write plugins you have
56 loaded they may be written to disk or submitted to another instance or
57 whatever you configured.
58
59 Because querying a host via SNMP may produce a timeout multiple threads are
60 used to query hosts in parallel. Depending on the number of hosts between one
61 and ten threads are used.
62
63 =head1 CONFIGURATION
64
65 Since the aim of the C<snmp plugin> is to provide a generic interface to SNMP,
66 it's configuration is not trivial and may take some time.
67
68 There are two types of blocks that can be contained in the
69 C<E<lt>PluginE<nbsp>snmpE<gt>> block: B<Data> and B<Host>:
70
71 =head2 The B<Data> block
72
73 The B<Data> block defines a list of values or a table of values that are to be
74 queried. The following options can be set:
75
76 =over 4
77
78 =item B<Type> I<type>
79
80 collectd's type that is to be used, e.E<nbsp>g. "if_octets" for interface
81 traffic or "users" for a user count. The types are read from the B<TypesDB>
82 (see L<collectd.conf(5)>), so you may want to check for which types are
83 defined.
84
85 =item B<Table> I<true|false>
86
87 Define if this is a single list of values or a table of values. The difference
88 is the following:
89
90 When B<Table> is set to B<false>, the OIDs given to B<Values> (see below) are
91 queried using the C<GET> SNMP command (see L<snmpget(1)>) and transmitted to
92 collectd. B<One> value list is dispatched and, eventually, one file will be
93 written.
94
95 When B<Table> is set to B<true>, the OIDs given to B<Values> (see below) are
96 queried using the C<GETNEXT> SNMP command until the subtree is left. After all
97 the lists (think: all columns of the table) have been read B<several> values
98 sets will be dispatches and, eventually, several files will be written. If you
99 configure a B<Type> (see above) which needs more than one data source (for
100 example C<if_octets> which needs C<rx> and C<tx>) you will need to specify more
101 than one (two, in the example case) OIDs with the B<Values> option. This has
102 nothing to do with the B<Table> setting.
103
104 For example, if you want to query the number of users on a system, you can use
105 C<HOST-RESOURCES-MIB::hrSystemNumUsers.0>. This is one value and belongs to one
106 value list, therefore B<Table> must be set to B<false>. Please note that, in
107 this case, you have to include the sequence number (zero in this case) in the
108 OID.
109
110 Counter example: If you want to query the interface table provided by the
111 C<IF-MIB>, e.E<nbsp>g. the bytes transmitted. There are potentially many
112 interfaces, so you will want to set B<Table> to B<true>. Because the
113 C<if_octets> type needs two values, received and transmitted bytes, you need to
114 specify two OIDs in the B<Values> setting, in this case likely
115 C<IF-MIB::ifHCInOctets> and C<IF-MIB::ifHCOutOctets>. But, this is because of
116 the B<Type> setting, not the B<Table> setting.
117
118 Since the semantic of B<Instance> and B<Values> depends on this setting you
119 need to set it before setting them. Doing vice verse will result in undefined
120 behavior.
121
122 =item B<Instance> I<Instance>
123
124 Sets the type-instance of the values that are dispatched. The meaning of this
125 setting depends on whether B<Table> is set to I<true> or I<false>:
126
127 If B<Table> is set to I<true>, I<Instance> is interpreted as an SNMP-prefix
128 that will return a list of strings. Those strings are then used as the actual
129 type-instance. An example would be the C<IF-MIB::ifDescr> subtree.
130 L<variables(5)> from the SNMP distribution describes the format of OIDs.
131
132 If B<Table> is set to I<false> the actual string configured for I<Instance> is
133 copied into the value-list. In this case I<Instance> may be empty, i.E<nbsp>e.
134 "".
135
136 =item B<Values> I<OID> [I<OID> ...]
137
138 Configures the values to be queried from the SNMP host. The meaning slightly
139 changes with the B<Table> setting. L<variables(5)> from the SNMP distribution
140 describes the format of OIDs.
141
142 If B<Table> is set to I<true>, each I<OID> must be the prefix of all the
143 values to query, e.E<nbsp>g. C<IF-MIB::ifInOctets> for all the counters of
144 incoming traffic. This subtree is walked (using C<GETNEXT>) until a value from
145 outside the subtree is returned.
146
147 If B<Table> is set to I<false>, each I<OID> must be the OID of exactly one
148 value, e.E<nbsp>g. C<IF-MIB::ifInOctets.3> for the third counter of incoming
149 traffic.
150
151 =back
152
153 =head2 The Host block
154
155 The B<Host> block defines which hosts to query, which SNMP community and
156 version to use and which of the defined B<Data> to query.
157
158 The argument passed to the B<Host> block is used as the hostname in the data
159 stored by collectd.
160
161 =over 4
162
163 =item B<Address> I<IP-Address>|I<Hostname>
164
165 Set the address to connect to.
166
167 =item B<Version> B<1>|B<2>
168
169 Set the SNMP version to use. When giving B<2> version 2c is actually used.
170 Version 3 is not supported by this plugin.
171
172 =item B<Community> I<Community>
173
174 Pass I<Community> to the host.
175
176 =item B<Collect> I<Data> [I<Data> ...]
177
178 Defines which values to collect. I<Data> refers to one of the B<Data> block
179 above. Since the config file is read top-down you need to define the data
180 before using it here.
181
182 =item B<Interval> I<Seconds>
183
184 Collect data from this host every I<Seconds> seconds. This value needs to be a
185 multiple of the global B<Interval> setting and, if it is not, will be rounded
186 B<down> to one and a warning is logged in this case. So if your global
187 B<Interval> is set to I<10> and you configure I<25> here, it's rounded down to
188 I<20>. By default the global B<Interval> setting will be used.
189
190 This option is meant for devices with not much CPU power, e.E<nbsp>g. network
191 equipment such as switches, embedded devices, rack monitoring systems and so
192 on. Since the B<Step> of generated RRD files depends on this setting it's
193 wise to select a reasonable value once and never change it.
194
195 =back
196
197 =head1 SEE ALSO
198
199 L<collectd(1)>,
200 L<collectd.conf(5)>,
201 L<snmpget(1)>,
202 L<snmpgetnext(1)>,
203 L<variables(5)>,
204 L<unix(7)>
205
206 =head1 AUTHOR
207
208 Florian Forster E<lt>octo@verplant.orgE<gt>
209
210 =cut