Merge pull request #385 from ccin2p3/libvirt-plugin-instance
authorPierre-Yves Ritschard <pyr@spootnik.org>
Tue, 29 Jul 2014 08:29:06 +0000 (10:29 +0200)
committerPierre-Yves Ritschard <pyr@spootnik.org>
Tue, 29 Jul 2014 08:29:06 +0000 (10:29 +0200)
libvirt plugin: Add "PluginInstanceFormat" option.

1  2 
src/collectd.conf.in
src/collectd.conf.pod

diff --combined src/collectd.conf.in
@@@ -52,7 -52,6 +52,7 @@@
  
  @LOAD_PLUGIN_SYSLOG@LoadPlugin syslog
  @LOAD_PLUGIN_LOGFILE@LoadPlugin logfile
 +@LOAD_PLUGIN_LOG_LOGSTASH@LoadPlugin log_logstash
  
  #<Plugin logfile>
  #     LogLevel @DEFAULT_LOG_LEVEL@
  #     PrintSeverity false
  #</Plugin>
  
 +#<Plugin log_logstash>
 +#     LogLevel @DEFAULT_LOG_LEVEL@
 +#     File "@localstatedir@/log/@PACKAGE_NAME@.json.log"
 +#</Plugin>
 +
  #<Plugin syslog>
  #     LogLevel @DEFAULT_LOG_LEVEL@
  #</Plugin>
@@@ -85,7 -79,6 +85,7 @@@
  #@BUILD_PLUGIN_APACHE_TRUE@LoadPlugin apache
  #@BUILD_PLUGIN_APCUPS_TRUE@LoadPlugin apcups
  #@BUILD_PLUGIN_APPLE_SENSORS_TRUE@LoadPlugin apple_sensors
 +#@BUILD_PLUGIN_AQUAERO_TRUE@LoadPlugin aquaero
  #@BUILD_PLUGIN_ASCENT_TRUE@LoadPlugin ascent
  #@BUILD_PLUGIN_BATTERY_TRUE@LoadPlugin battery
  #@BUILD_PLUGIN_BIND_TRUE@LoadPlugin bind
  @LOAD_PLUGIN_RRDTOOL@LoadPlugin rrdtool
  #@BUILD_PLUGIN_SENSORS_TRUE@LoadPlugin sensors
  #@BUILD_PLUGIN_SERIAL_TRUE@LoadPlugin serial
 +#@BUILD_PLUGIN_SIGROK_TRUE@LoadPlugin sigrok
  #@BUILD_PLUGIN_SNMP_TRUE@LoadPlugin snmp
 +#@BUILD_PLUGIN_STATSD_TRUE@LoadPlugin statsd
  #@BUILD_PLUGIN_SWAP_TRUE@LoadPlugin swap
  #@BUILD_PLUGIN_TABLE_TRUE@LoadPlugin table
  #@BUILD_PLUGIN_TAIL_TRUE@LoadPlugin tail
  # ription of those options is available in the collectd.conf(5) manual page. #
  ##############################################################################
  
 -#<Plugin "aggregation">
 +#<Plugin aggregation>
  #  <Aggregation>
  #    #Host "unspecified"
  #    Plugin "cpu"
  #  </Aggregation>
  #</Plugin>
  
 -#<Plugin "amqp">
 +#<Plugin amqp>
  #  <Publish "name">
  #    Host "localhost"
  #    Port "5672"
  #     ReportSeconds true
  #</Plugin>
  
 +#<Plugin aquaero>
 +#     Device ""
 +#</Plugin>
 +
  #<Plugin ascent>
  #     URL "http://localhost/ascent/status/"
  #     User "www-user"
  #     CACert "/etc/ssl/ca.crt"
  #</Plugin>
  
 -#<Plugin "bind">
 +#<Plugin bind>
  #  URL "http://localhost:8053/"
  #  ParseTime       false
  #  OpCodes         true
  #  </View>
  #</Plugin>
  
 +#<Plugin cgroup>
 +#  CGroup "libvirt"
 +#  IgnoreSelected false
 +#</Plugin>
 +
 +#<Plugin cpu>
 +#  ReportActive false
 +#  ReportByCpu true
 +#  ValuesPercentage false
 +#</Plugin>
 +#
  #<Plugin csv>
  #     DataDir "@localstatedir@/lib/@PACKAGE_NAME@/csv"
  #     StoreRates false
  #  </URL>
  #</Plugin>
  
 -#<Plugin "curl_xml">
 +#<Plugin curl_xml>
  #  <URL "http://localhost/stats.xml">
  #    Host "my_host"
  #    Instance "some_instance"
  #     ReportByDevice false
  #     ReportReserved false
  #     ReportInodes false
 +#     ValuesAbsolute true
 +#     ValuesPercentage false
  #</Plugin>
  
  #<Plugin disk>
  #     Disk "/^[hs]d[a-f][0-9]?$/"
  #     IgnoreSelected false
 +#     UseBSDName false
 +#     UdevNameAttr "DEVNAME"
  #</Plugin>
  
  #<Plugin dns>
  #     </Directory>
  #</Plugin>
  
 -#<Plugin "gmond">
 +#<Plugin gmond>
  #  MCReceiveFrom "239.2.11.71" "8649"
  #  <Metric "swap_total">
  #    Type "swap"
  #     IgnoreSelected true
  #</Plugin>
  
 -#<Plugin "java">
 +#<Plugin java>
  #     JVMArg "-verbose:jni"
  #     JVMArg "-Djava.class.path=@prefix@/share/collectd/java/collectd-api.jar"
  #
  #     IgnoreSelected false
  #     HostnameFormat name
  #     InterfaceFormat name
+ #     PluginInstanceFormat name
  #</Plugin>
  
 +#<Plugin load>
 +#        ReportRelative true
 +#</Plugin>
 +
  #<Plugin lpar>
  #     CpuPoolStats   false
  #     ReportBySerial false
  #     </Instance>
  #</Plugin>
  
 +#<Plugin memory>
 +#     ValuesAbsolute true
 +#     ValuesPercentage false
 +#</Plugin>
 +
  #<Plugin modbus>
  #     <Data "data_name">
  #             RegisterBase 1234
  #     IgnoreSelected false
  #</Plugin>
  
 +#<Plugin sigrok>
 +#  LogLevel 3
 +#  <Device "AC Voltage">
 +#    Driver "fluke-dmm"
 +#    MinimumInterval 10
 +#    Conn "/dev/ttyUSB2"
 +#  </Device>
 +#  <Device "Sound Level">
 +#    Driver "cem-dt-885x"
 +#    Conn "/dev/ttyUSB1"
 +#  </Device>
 +#</Plugin>
 +
  #<Plugin snmp>
  #   <Data "powerplus_voltge_input">
  #       Type "voltage"
  #   </Host>
  #</Plugin>
  
 -#<Plugin "swap">
 +#<Plugin statsd>
 +#  Host "::"
 +#  Port "8125"
 +#  DeleteCounters false
 +#  DeleteTimers   false
 +#  DeleteGauges   false
 +#  DeleteSets     false
 +#  TimerPercentile 90.0
 +#</Plugin>
 +
 +#<Plugin swap>
  #     ReportByDevice false
  #     ReportBytes true
 +#     ValuesAbsolute true
 +#     ValuesPercentage false
  #</Plugin>
  
 -#<Plugin "table">
 +#<Plugin table>
  #     <Table "/proc/slabinfo">
  #             Instance "slabinfo"
  #             Separator " "
  #     </Table>
  #</Plugin>
  
 -#<Plugin "tail">
 +#<Plugin tail>
  #  <File "/var/log/exim4/mainlog">
  #    Instance "exim"
 +#    Interval 60
  #    <Match>
  #      Regex "S=([1-9][0-9]*)"
  #      DSType "CounterAdd"
  #  </File>
  #</Plugin>
  
 -#<Plugin "tail_csv">
 +#<Plugin tail_csv>
  #   <Metric "dropped">
  #       Type "percent"
  #       Instance "dropped"
  #  <Node "example">
  #    Host "localhost"
  #    Port "2003"
 -#    Protocol "udp"
 +#    Protocol "tcp"
  #    LogSendErrors true
  #    Prefix "collectd"
  #    Postfix "collectd"
  #             VerifyPeer true
  #             VerifyHost true
  #             CACert "/etc/ssl/ca.crt"
 +#             CAPath "/etc/ssl/certs/"
 +#             ClientKey "/etc/ssl/client.pem"
 +#             ClientCert "/etc/ssl/client.crt"
 +#             ClientKeyPass "secret"
 +#             SSLVersion "TLSv1"
  #             Format "Command"
  #             StoreRates false
  #     </URL>
  #             Protocol UDP
  #             StoreRates true
  #             AlwaysAppendDS false
 +#             TTLFactor 2.0
  #     </Node>
  #     Tag "foobar"
 +#       Attribute "foo" "bar"
  #</Plugin>
  
  ##############################################################################
  ##############################################################################
  
  #@BUILD_PLUGIN_THRESHOLD_TRUE@LoadPlugin "threshold"
 -#<Plugin "threshold">
 +#<Plugin threshold>
  #  <Type "foo">
  #    WarningMin    0.00
  #    WarningMax 1000.00
diff --combined src/collectd.conf.pod
@@@ -9,14 -9,14 +9,14 @@@ collectd.conf - Configuration for the s
    BaseDir "/path/to/data/"
    PIDFile "/path/to/pidfile/collectd.pid"
    Server  "123.123.123.123" 12345
 -  
 +
    LoadPlugin cpu
    LoadPlugin load
 -  
 +
    <LoadPlugin df>
      Interval 3600
    </LoadPlugin>
 -  
 +
    LoadPlugin ping
    <Plugin ping>
      Host "example.org"
@@@ -341,10 -341,10 +341,10 @@@ The full example configuration looks li
     <Aggregation>
       Plugin "cpu"
       Type "cpu"
 -     
 +
       GroupBy "Host"
       GroupBy "TypeInstance"
 -     
 +
       CalculateSum true
       CalculateAverage true
     </Aggregation>
@@@ -420,13 -420,13 +420,13 @@@ The following example calculates the av
       Plugin "cpu"
       PluginInstance "/[0,2,4,6,8]$/"
       Type "cpu"
 -     
 +
       SetPlugin "cpu"
       SetPluginInstance "even-%{aggregation}"
 -     
 +
       GroupBy "Host"
       GroupBy "TypeInstance"
 -     
 +
       CalculateAverage true
     </Aggregation>
   </Plugin>
@@@ -495,7 -495,7 +495,7 @@@ possibly filtering or messages
   #   GraphitePrefix "collectd."
   #   GraphiteEscapeChar "_"
     </Publish>
 -   
 +
     # Receive values from an AMQP broker
     <Subscribe "some_name">
       Host "localhost"
       Exchange "amq.fanout"
   #   ExchangeType "fanout"
   #   Queue "queue_name"
 + #   QueueDurable false
 + #   QueueAutoDelete true
   #   RoutingKey "collectd.#"
     </Subscribe>
   </Plugin>
@@@ -560,23 -558,9 +560,23 @@@ be bound to this exchange
  
  =item B<Queue> I<Queue> (Subscribe only)
  
 -Configures the I<queue> name to subscribe to. If no queue name was configures
 +Configures the I<queue> name to subscribe to. If no queue name was configured
  explicitly, a unique queue name will be created by the broker.
  
 +=item B<QueueDurable> B<true>|B<false> (Subscribe only)
 +
 +Defines if the I<queue> subscribed to is durable (saved to persistent storage)
 +or transient (will disappear if the AMQP broker is restarted). Defaults to
 +"false".
 +
 +This option should be used in conjunction with the I<Persistent> option on the
 +publish side.
 +
 +=item B<QueueAutoDelete> B<true>|B<false> (Subscribe only)
 +
 +Defines if the I<queue> subscribed to will be deleted once the last consumer
 +unsubscribes. Defaults to "true".
 +
  =item B<RoutingKey> I<Key>
  
  In I<Publish> blocks, this configures the routing key to set on all outgoing
@@@ -746,29 -730,6 +746,29 @@@ default for backwards compatibility, th
  
  =back
  
 +=head2 Plugin C<aquaero>
 +
 +This plugin collects the value of the available sensors in an
 +I<AquaeroE<nbsp>5> board. AquaeroE<nbsp>5 is a water-cooling controller board,
 +manufactured by Aqua Computer GmbH L<http://www.aquacomputer.de/>, with a USB2
 +connection for monitoring and configuration. The board can handle multiple
 +temperature sensors, fans, water pumps and water level sensors and adjust the
 +output settings such as fan voltage or power used by the water pump based on
 +the available inputs using a configurable controller included in the board.
 +This plugin collects all the available inputs as well as some of the output
 +values chosen by this controller. The plugin is based on the I<libaquaero5>
 +library provided by I<aquatools-ng>.
 +
 +=over 4
 +
 +=item B<Device> I<DevicePath>
 +
 +Device path of the AquaeroE<nbsp>5's USB HID (human interface device), usually
 +in the form C</dev/usb/hiddevX>. If this option is no set the plugin will try
 +to auto-detect the Aquaero 5 USB device based on vendor-ID and product-ID.
 +
 +=back
 +
  =head2 Plugin C<ascent>
  
  This plugin collects information about an Ascent server, a free server for the
@@@ -838,17 -799,17 +838,17 @@@ Synopsis
     ParseTime       false
     OpCodes         true
     QTypes          true
 - 
 +
     ServerStats     true
     ZoneMaintStats  true
     ResolverStats   false
     MemoryStats     true
 - 
 +
     <View "_default">
       QTypes        true
       ResolverStats true
       CacheRRSets   true
 - 
 +
       Zone "127.in-addr.arpa/IN"
     </View>
   </Plugin>
@@@ -989,31 -950,6 +989,31 @@@ at all, B<all> cgroups are selected
  
  =back
  
 +=head2 Plugin C<cpu>
 +
 +The I<CPU plugin> collects CPU usage metrics.
 +
 +The following configuration options are available:
 +
 +=over 4
 +
 +=item B<ReportActive> B<false>|B<true>
 +
 +Reports non-idle CPU usage as the "active" value. Defaults to false.
 +
 +=item B<ReportByCpu> B<false>|B<true>
 +
 +When true reports usage for all cores. When false, reports cpu usage
 +aggregated over all cores.
 +Defaults to true.
 +
 +=item B<ValuesPercentage> B<false>|B<true>
 +
 +When true report percentage usage instead of tick values. Defaults to false.
 +
 +=back
 +
 +
  =head2 Plugin C<cpufreq>
  
  This plugin doesn't have any options. It reads
@@@ -1087,10 -1023,6 +1087,10 @@@ Username to use if authorization is req
  
  Password to use if authorization is required to read the page.
  
 +=item B<Digest> B<true>|B<false>
 +
 +Enable HTTP digest authentication.
 +
  =item B<VerifyPeer> B<true>|B<false>
  
  Enable or disable peer SSL certificate verification. See
@@@ -1140,15 -1072,13 +1140,15 @@@ is set to B<true>, B<Match> blocks are 
  
  =head2 Plugin C<curl_json>
  
 -The B<curl_json plugin> uses B<libcurl> (L<http://curl.haxx.se/>) and
 -B<libyajl> (L<http://www.lloydforge.org/projects/yajl/>) to retrieve JSON data
 -via cURL. This can be used to collect values from CouchDB documents (which are
 -stored JSON notation), for example.
 +The B<curl_json plugin> collects values from JSON data to be parsed by
 +B<libyajl> (L<http://www.lloydforge.org/projects/yajl/>) retrieved via
 +either B<libcurl> (L<http://curl.haxx.se/>) or read directly from a
 +unix socket. The former can be used, for example, to collect values
 +from CouchDB documents (which are stored JSON notation), and the
 +latter to collect values from a uWSGI stats socket.
  
 -The following example will collect several values from the built-in `_stats'
 -runtime statistics module of CouchDB
 +The following example will collect several values from the built-in
 +C<_stats> runtime statistics module of I<CouchDB>
  (L<http://wiki.apache.org/couchdb/Runtime_Statistics>).
  
    <Plugin curl_json>
      </URL>
    </Plugin>
  
 -In the B<Plugin> block, there may be one or more B<URL> blocks, each defining
 -a URL to be fetched via HTTP (using libcurl) and one or more B<Key> blocks.
 -The B<Key> string argument must be in a path format, which is used to collect a
 -value from a JSON map object. If a path element of B<Key> is the
 -I<*>E<nbsp>wildcard, the values for all keys will be collectd.
 +This example will collect data directly from a I<uWSGI> "Stats Server" socket.
 +
 +  <Plugin curl_json>
 +    <Sock "/var/run/uwsgi.stats.sock">
 +      Instance "uwsgi"
 +      <Key "workers/*/requests">
 +        Type "http_requests"
 +      </Key>
 +
 +      <Key "workers/*/apps/*/requests">
 +        Type "http_requests"
 +      </Key>
 +    </Sock>
 +  </Plugin>
 +
 +In the B<Plugin> block, there may be one or more B<URL> blocks, each
 +defining a URL to be fetched via HTTP (using libcurl) or B<Sock>
 +blocks defining a unix socket to read JSON from directly.  Each of
 +these blocks may have one or more B<Key> blocks.
 +
 +The B<Key> string argument must be in a path format. Each component is
 +used to match the key from a JSON map or the index of an JSON
 +array. If a path component of a B<Key> is a I<*>E<nbsp>wildcard, the
 +values for all map keys or array indices will be collectd.
  
  The following options are valid within B<URL> blocks:
  
  Sets the plugin instance to I<Instance>.
  
  =item B<User> I<Name>
 +
  =item B<Password> I<Password>
 +
 +=item B<Digest> B<true>|B<false>
 +
  =item B<VerifyPeer> B<true>|B<false>
 +
  =item B<VerifyHost> B<true>|B<false>
 +
  =item B<CACert> I<file>
 +
  =item B<Header> I<Header>
 +
  =item B<Post> I<Body>
  
  These options behave exactly equivalent to the appropriate options of the
@@@ -1303,8 -1206,6 +1303,8 @@@ Examples
  
  =item B<Password> I<Password>
  
 +=item B<Digest> B<true>|B<false>
 +
  =item B<VerifyPeer> B<true>|B<false>
  
  =item B<VerifyHost> B<true>|B<false>
@@@ -1544,16 -1445,6 +1544,16 @@@ it should be able to handle integer an 
  
  There must be at least one B<ValuesFrom> option inside each B<Result> block.
  
 +=item B<MetadataFrom> [I<column0> I<column1> ...]
 +
 +Names the columns whose content is used as metadata for the data sets
 +that are dispatched to the daemon. 
 +
 +The actual data type in the columns is not that important. The plugin will
 +automatically cast the values to the right type if it know how to do that. So
 +it should be able to handle integer an floating point types, as well as strings
 +(if they include a number at the beginning).
 +
  =back
  
  =head3 B<Database> blocks
@@@ -1668,17 -1559,17 +1668,17 @@@ transfer agents and web caches
  
  =item B<ValuesAbsolute> B<true>|B<false>
  
 -Enables or disables reporting of free, used and used disk space in 1K-blocks. 
 -Defaults to true.
 +Enables or disables reporting of free and used disk space in 1K-blocks.
 +Defaults to B<true>.
  
 -=item B<ValuesPercentage> B<true>|B<false>
 +=item B<ValuesPercentage> B<false>|B<true>
  
 -Enables or disables reporting of free, used and used disk space in percentage.
 -Defaults to false.
 +Enables or disables reporting of free and used disk space in percentage.
 +Defaults to B<false>.
  
 -This is useful for deploying collectd on the cloud, where machines with
 -different disk size may exist. Then it is more practical to configure thresholds
 -based on relative disk size.
 +This is useful for deploying I<collectd> on the cloud, where machines with
 +different disk size may exist. Then it is more practical to configure
 +thresholds based on relative disk size.
  
  =back
  
@@@ -1714,20 -1605,6 +1714,20 @@@ collected. If at least one B<Disk> opti
  set to B<false>, B<only> matching disks will be collected. If B<IgnoreSelected>
  is set to B<true>, all disks are collected B<except> the ones matched.
  
 +=item B<UseBSDName> B<true>|B<false>
 +
 +Whether to use the device's "BSD Name", on MacE<nbsp>OSE<nbsp>X, instead of the
 +default major/minor numbers. Requires collectd to be built with Apple's
 +IOKitLib support.
 +
 +=item B<UdevNameAttr> I<Attribute>
 +
 +Attempt to override disk instance name with the value of a specified udev
 +attribute when built with B<libudev>.  If the attribute is not defined for the
 +given device, the default name is used. Example:
 +
 +  UdevNameAttr "DM_NAME"
 +
  =back
  
  =head2 Plugin C<dns>
@@@ -2276,27 -2153,16 +2276,35 @@@ setting B<name>
  B<address> means use the interface's mac address. This is useful since the
  interface path might change between reboots of a guest or across migrations.
  
+ =item B<PluginInstanceFormat> B<name|uuid>
+ When the libvirt plugin logs data, it sets the plugin_instance of the collected 
+ data according to this setting. The default is to use the guest name as provided 
+ by the hypervisor, which is equal to setting B<name>.
+ B<uuid> means use the guest's UUID.
  =back
  
 ++=head2 Plugin C<load>
 +
 +The I<Load plugin> collects the system load. These numbers give a rough overview
 +over the utilization of a machine. The system load is defined as the number of
 +runnable tasks in the run-queue and is provided by many operating systems as a
 +one, five or fifteen minute average.
 +
 +The following configuration options are available:
 +
 +=over 4
 +
 +=item B<ReportRelative> B<false>|B<true>
 +
 +When enabled, system load divided by number of available CPU cores is reported
 +for intervals 1 min, 5 min and 15 min. Defaults to false.
 +
 +=back
 +
 +
  =head2 Plugin C<logfile>
  
  =over 4
@@@ -2331,34 -2197,6 +2339,34 @@@ B<Note>: There is no need to notify th
  log file (e.E<nbsp>g. when rotating the logs). The plugin reopens the file
  for each line it writes.
  
 +=head2 Plugin C<log_logstash>
 +
 +The I<log logstash plugin> behaves like the logfile plugin but formats
 +messages as JSON events for logstash to parse and input.
 +
 +=over 4
 +
 +=item B<LogLevel> B<debug|info|notice|warning|err>
 +
 +Sets the log-level. If, for example, set to B<notice>, then all events with
 +severity B<notice>, B<warning>, or B<err> will be written to the logfile.
 +
 +Please note that B<debug> is only available if collectd has been compiled with
 +debugging support.
 +
 +=item B<File> I<File>
 +
 +Sets the file to write log messages to. The special strings B<stdout> and
 +B<stderr> can be used to write to the standard output and standard error
 +channels, respectively. This, of course, only makes much sense when I<collectd>
 +is running in foreground- or non-daemon-mode.
 +
 +=back
 +
 +B<Note>: There is no need to notify the daemon after moving or removing the
 +log file (e.E<nbsp>g. when rotating the logs). The plugin reopens the file
 +for each line it writes.
 +
  =head2 Plugin C<lpar>
  
  The I<LPAR plugin> reads CPU statistics of I<Logical Partitions>, a
@@@ -2532,7 -2370,7 +2540,7 @@@ B<Synopsis:
     ShowCPU true
     ShowCPUCores true
     ShowMemory true
 -   
 +
     ShowTemperatures true
     Temperature vddg
     Temperature vddq
     ShowPower true
     Power total0
     Power total1
 -   IgnoreSelectedPower true   
 +   IgnoreSelectedPower true
   </Plugin>
  
  The following options are valid inside the B<PluginE<nbsp>mic> block:
  
  =item B<ShowCPU> B<true>|B<false>
  
 -If enabled (the default) a sum of the CPU usage accross all cores is reported.
 +If enabled (the default) a sum of the CPU usage across all cores is reported.
  
  =item B<ShowCPUCores> B<true>|B<false>
  
@@@ -2598,7 -2436,7 +2606,7 @@@ Fan I
  
  =item fout
  
 -Fan Out 
 +Fan Out
  
  =item vccp
  
@@@ -2639,11 -2477,11 +2647,11 @@@ Known power names are
  
  =item total0
  
 -Total power utilization averaged over Time Window 0 (uWatts). 
 +Total power utilization averaged over Time Window 0 (uWatts).
  
  =item total1
  
 -Total power utilization averaged over Time Window 0 (uWatts). 
 +Total power utilization averaged over Time Window 0 (uWatts).
  
  =item inst
  
@@@ -2651,57 -2489,36 +2659,57 @@@ Instantaneous power (uWatts)
  
  =item imax
  
 -Max instantaneous power (uWatts). 
 +Max instantaneous power (uWatts).
  
  =item pcie
  
 -PCI-E connector power (uWatts). 
 +PCI-E connector power (uWatts).
  
  =item c2x3
  
 -2x3 connector power (uWatts). 
 +2x3 connector power (uWatts).
  
  =item c2x4
  
 -2x4 connector power (uWatts). 
 +2x4 connector power (uWatts).
  
  =item vccp
  
 -Core rail (uVolts). 
 +Core rail (uVolts).
  
  =item vddg
  
 -Uncore rail (uVolts). 
 +Uncore rail (uVolts).
  
  =item vddq
  
 -Memory subsystem rail (uVolts). 
 +Memory subsystem rail (uVolts).
  
  =back
  
  =back
  
 +=head2 Plugin C<memory>
 +
 +The I<memory plugin> provides the following configuration options:
 +
 +=over 4
 +
 +=item B<ValuesAbsolute> B<true>|B<false>
 +
 +Enables or disables reporting of physical memory usage in absolute numbers,
 +i.e. bytes. Defaults to B<true>.
 +
 +=item B<ValuesPercentage> B<false>|B<true>
 +
 +Enables or disables reporting of physical memory usage in percentages, e.g.
 +percent of physical memory used. Defaults to B<false>.
 +
 +This is useful for deploying I<collectd> in a heterogeneous environment in
 +which the sizes of physical memory vary.
 +
 +=back
 +
  =head2 Plugin C<modbus>
  
  The B<modbus plugin> connects to a Modbus "slave" via Modbus/TCP and reads
@@@ -2717,19 -2534,19 +2725,19 @@@ B<Synopsis:
     Type voltage
     Instance "input-1"
   </Data>
 - 
 +
   <Data "voltage-input-2">
     RegisterBase 2
     RegisterType float
     Type voltage
     Instance "input-2"
   </Data>
 - 
 +
   <Host "modbus.example.com">
     Address "192.168.0.42"
     Port    "502"
     Interval 60
 -   
 +
     <Slave 1>
       Instance "power-supply"
       Collect  "voltage-input-1"
@@@ -2962,7 -2779,7 +2970,7 @@@ Required capabilities are documented be
      User          "username"
      Password      "aef4Aebe"
      Interval      30
 -    
 +
      <WAFL>
        Interval 30
        GetNameCache   true
        GetBufferCache true
        GetInodeCache  true
      </WAFL>
 -    
 +
      <Disks>
        Interval 30
        GetBusy true
      </Disks>
 -    
 +
      <VolumePerf>
        Interval 30
        GetIO      "volume0"
        GetLatency "volume0"
        IgnoreSelectedLatency false
      </VolumePerf>
 -    
 +
      <VolumeUsage>
        Interval 30
        GetCapacity "vol0"
        GetSnapshot "vol3"
        IgnoreSelectedSnapshot false
      </VolumeUsage>
 -    
 +
      <Quota>
        Interval 60
      </Quota>
 -    
 +
      <Snapvault>
        Interval 30
      </Snapvault>
 -    
 +
      <System>
        Interval 30
        GetCPULoad     true
@@@ -3564,7 -3381,7 +3572,7 @@@ signature)
     # Export to an internal server
     # (demonstrates usage without additional options)
     Server "collectd.internal.tld"
 -   
 +
     # Export to an external server
     # (demonstrates usage with signature options)
     <Server "collectd.external.tld">
@@@ -5339,129 -5156,12 +5347,129 @@@ and all other sensors are collected
  
  =back
  
 +=head2 Plugin C<sigrok>
 +
 +The I<sigrok plugin> uses I<libsigrok> to retrieve measurements from any device
 +supported by the L<sigrok|http://sigrok.org/> project.
 +
 +B<Synopsis>
 +
 + <Plugin sigrok>
 +   LogLevel 3
 +   <Device "AC Voltage">
 +      Driver "fluke-dmm"
 +      MinimumInterval 10
 +      Conn "/dev/ttyUSB2"
 +   </Device>
 +   <Device "Sound Level">
 +      Driver "cem-dt-885x"
 +      Conn "/dev/ttyUSB1"
 +   </Device>
 + </Plugin>
 +
 +=over 4
 +
 +=item B<LogLevel> B<0-5>
 +
 +The I<sigrok> logging level to pass on to the I<collectd> log, as a number
 +between B<0> and B<5> (inclusive). These levels correspond to C<None>,
 +C<Errors>, C<Warnings>, C<Informational>, C<Debug >and C<Spew>, respectively.
 +The default is B<2> (C<Warnings>). The I<sigrok> log messages, regardless of
 +their level, are always submitted to I<collectd> at its INFO log level.
 +
 +=item E<lt>B<Device> I<Name>E<gt>
 +
 +A sigrok-supported device, uniquely identified by this section's options. The
 +I<Name> is passed to I<collectd> as the I<plugin instance>.
 +
 +=item B<Driver> I<DriverName>
 +
 +The sigrok driver to use for this device.
 +
 +=item B<Conn> I<ConnectionSpec>
 +
 +If the device cannot be auto-discovered, or more than one might be discovered
 +by the driver, I<ConnectionSpec> specifies the connection string to the device.
 +It can be of the form of a device path (e.g.E<nbsp>C</dev/ttyUSB2>), or, in
 +case of a non-serial USB-connected device, the USB I<VendorID>B<.>I<ProductID>
 +separated by a period (e.g.E<nbsp>C<0403.6001>). A USB device can also be
 +specified as I<Bus>B<.>I<Address> (e.g.E<nbsp>C<1.41>).
 +
 +=item B<SerialComm> I<SerialSpec>
 +
 +For serial devices with non-standard port settings, this option can be used
 +to specify them in a form understood by I<sigrok>, e.g.E<nbsp>C<9600/8n1>.
 +This should not be necessary; drivers know how to communicate with devices they
 +support.
 +
 +=item B<MinimumInterval> I<Seconds>
 +
 +Specifies the minimum time between measurement dispatches to I<collectd>, in
 +seconds. Since some I<sigrok> supported devices can acquire measurements many
 +times per second, it may be necessary to throttle these. For example, the
 +I<RRD plugin> cannot process writes more than once per second.
 +
 +The default B<MinimumInterval> is B<0>, meaning measurements received from the
 +device are always dispatched to I<collectd>. When throttled, unused
 +measurements are discarded.
 +
 +=back
 +
  =head2 Plugin C<snmp>
  
  Since the configuration of the C<snmp plugin> is a little more complicated than
  other plugins, its documentation has been moved to an own manpage,
  L<collectd-snmp(5)>. Please see there for details.
  
 +=head2 Plugin C<statsd>
 +
 +The I<statsd plugin> listens to a UDP socket, reads "events" in the statsd
 +protocol and dispatches rates or other aggregates of these numbers
 +periodically.
 +
 +The plugin implements the I<Counter>, I<Timer>, I<Gauge> and I<Set> types which
 +are dispatched as the I<collectd> types C<derive>, C<latency>, C<gauge> and
 +C<objects> respectively.
 +
 +The following configuration options are valid:
 +
 +=over 4
 +
 +=item B<Host> I<Host>
 +
 +Bind to the hostname / address I<Host>. By default, the plugin will bind to the
 +"any" address, i.e. accept packets sent to any of the hosts addresses.
 +
 +=item B<Port> I<Port>
 +
 +UDP port to listen to. This can be either a service name or a port number.
 +Defaults to C<8125>.
 +
 +=item B<DeleteCounters> B<false>|B<true>
 +
 +=item B<DeleteTimers> B<false>|B<true>
 +
 +=item B<DeleteGauges> B<false>|B<true>
 +
 +=item B<DeleteSets> B<false>|B<true>
 +
 +These options control what happens if metrics are not updated in an interval.
 +If set to B<False>, the default, metrics are dispatched unchanged, i.e. the
 +rate of counters and size of sets will be zero, timers report C<NaN> and gauges
 +are unchanged. If set to B<True>, the such metrics are not dispatched and
 +removed from the internal cache.
 +
 +=item B<TimerPercentile> I<Percent>
 +
 +Calculate and dispatch the configured percentile, i.e. compute the latency, so
 +that I<Percent> of all reported timers are smaller than or equal to the
 +computed latency. This is useful for cutting off the long tail latency, as it's
 +often done in I<Service Level Agreements> (SLAs).
 +
 +If not specified, no percentile is calculated / dispatched.
 +
 +=back
 +
  =head2 Plugin C<swap>
  
  The I<Swap plugin> collects information about used and available swap space. On
@@@ -5484,19 -5184,6 +5492,19 @@@ This option is only available if the I<
  When enabled, the I<swap I/O> is reported in bytes. When disabled, the default,
  I<swap I/O> is reported in pages. This option is available under Linux only.
  
 +=item B<ValuesAbsolute> B<true>|B<false>
 +
 +Enables or disables reporting of absolute swap metrics, i.e. number of I<bytes>
 +available and used. Defaults to B<true>.
 +
 +=item B<ValuesPercentage> B<false>|B<true>
 +
 +Enables or disables reporting of relative swap metrics, i.e. I<percent>
 +available and free. Defaults to B<false>.
 +
 +This is useful for deploying I<collectd> in a heterogeneous environment, where
 +swap sizes differ and you want to specify generic thresholds or similar.
 +
  =back
  
  =head2 Plugin C<syslog>
@@@ -5632,7 -5319,6 +5640,7 @@@ user using (extended) regular expressio
    <Plugin "tail">
      <File "/var/log/exim4/mainlog">
        Instance "exim"
 +      Interval 60
        <Match>
          Regex "S=([1-9][0-9]*)"
          DSType "CounterAdd"
@@@ -5659,9 -5345,6 +5667,9 @@@ This plugin instance is for all B<Match
  next B<Instance> option. This way you can extract several plugin instances from
  one logfile, handy when parsing syslog and the like.
  
 +The B<Interval> option allows you to define the length of time between reads. If
 +this is not set, the default Interval will be used.
 +
  Each B<Match> block has the following options to describe how the match should
  be performed:
  
@@@ -6249,7 -5932,7 +6257,7 @@@ Synopsis
     <Node "example">
       Host "localhost"
       Port "2003"
 -     Protocol "udp"
 +     Protocol "tcp"
       LogSendErrors true
       Prefix "collectd"
     </Node>
@@@ -6418,33 -6101,6 +6426,33 @@@ File that holds one or more SSL certifi
  possibly need this option. What CA certificates come bundled with C<libcurl>
  and are checked by default depends on the distribution you use.
  
 +=item B<CAPath> I<Directory>
 +
 +Directory holding one or more CA certificate files. You can use this if for
 +some reason all the needed CA certificates aren't in the same file and can't be
 +pointed to using the B<CACert> option. Requires C<libcurl> to be built against
 +OpenSSL.
 +
 +=item B<ClientKey> I<File>
 +
 +File that holds the private key in PEM format to be used for certificate-based
 +authentication.
 +
 +=item B<ClientCert> I<File>
 +
 +File that holds the SSL certificate to be used for certificate-based
 +authentication.
 +
 +=item B<ClientKeyPass> I<Password>
 +
 +Password required to load the private key in B<ClientKey>.
 +
 +=item B<SSLVersion> B<SSLv2>|B<SSLv3>|B<TLSv1>|B<TLSv1_0>|B<TLSv1_1>|B<TLSv1_2>
 +
 +Define which SSL protocol version must be used. By default C<libcurl> will
 +attempt to figure out the remote SSL protocol version. See
 +L<curl_easy_setopt(3)> for more details.
 +
  =item B<Format> B<Command>|B<JSON>
  
  Format of the output to generate. If set to B<Command>, will create output that
@@@ -6461,114 -6117,9 +6469,114 @@@ number
  
  =back
  
 +=head2 Plugin C<write_kafka>
 +
 +The I<write_kafka plugin> will send values to a I<Kafka> topic, a distributed
 +queue.
 +Synopsis:
 +
 + <Plugin "write_kafka">
 +   Property "metadata.broker.list" "broker1:9092,broker2:9092"
 +   <Topic "collectd">
 +     Format JSON
 +   </Topic>
 + </Plugin>
 +
 +The following options are understood by the I<write_kafka plugin>:
 +
 +=over 4
 +
 +=item E<lt>B<Topic> I<Name>E<gt>
 +
 +The plugin's configuration consists of one or more B<Topic> blocks. Each block
 +is given a unique I<Name> and specifies one kafka producer.
 +Inside the B<Topic> block, the following per-topic options are
 +understood:
 +
 +=over 4
 +
 +=item B<Property> I<String> I<String>
 +
 +Configure the named property for the current topic. Properties are
 +forwarded to the kafka producer library B<librdkafka>.
 +
 +=item B<Key> I<String>
 +
 +Use the specified string as a partioning key for the topic. Kafka breaks
 +topic into partitions and guarantees that for a given topology, the same
 +consumer will be used for a specific key. The special (case insensitive)
 +string B<Random> can be used to specify that an arbitrary partition should
 +be used.
 +
 +=item B<Format> B<Command>|B<JSON>|B<Graphite>
 +
 +Selects the format in which messages are sent to the broker. If set to
 +B<Command> (the default), values are sent as C<PUTVAL> commands which are
 +identical to the syntax used by the I<Exec> and I<UnixSock plugins>.
 +
 +If set to B<JSON>, the values are encoded in the I<JavaScript Object Notation>,
 +an easy and straight forward exchange format.
 +
 +If set to B<Graphite>, values are encoded in the I<Graphite> format, which is
 +"<metric> <value> <timestamp>\n".
 +
 +=item B<StoreRates> B<true>|B<false>
 +
 +Determines whether or not C<COUNTER>, C<DERIVE> and C<ABSOLUTE> data sources
 +are converted to a I<rate> (i.e. a C<GAUGE> value). If set to B<false> (the
 +default), no conversion is performed. Otherwise the conversion is performed
 +using the internal value cache.
 +
 +Please note that currently this option is only used if the B<Format> option has
 +been set to B<JSON>.
 +
 +=item B<GraphitePrefix> (B<Format>=I<Graphite> only)
 +
 +A prefix can be added in the metric name when outputting in the I<Graphite> format.
 +It's added before the I<Host> name.
 +Metric name will be "<prefix><host><postfix><plugin><type><name>"
 +
 +=item B<GraphitePostfix> (B<Format>=I<Graphite> only)
 +
 +A postfix can be added in the metric name when outputting in the I<Graphite> format.
 +It's added after the I<Host> name.
 +Metric name will be "<prefix><host><postfix><plugin><type><name>"
 +
 +=item B<GraphiteEscapeChar> (B<Format>=I<Graphite> only)
 +
 +Specify a character to replace dots (.) in the host part of the metric name.
 +In I<Graphite> metric name, dots are used as separators between different
 +metric parts (host, plugin, type).
 +Default is "_" (I<Underscore>).
 +
 +=item B<GraphiteSeparateInstances> B<false>|B<true>
 +
 +If set to B<true>, the plugin instance and type instance will be in their own
 +path component, for example C<host.cpu.0.cpu.idle>. If set to B<false> (the
 +default), the plugin and plugin instance (and likewise the type and type
 +instance) are put into one component, for example C<host.cpu-0.cpu-idle>.
 +
 +=item B<StoreRates> B<true>|B<false>
 +
 +If set to B<true> (the default), convert counter values to rates. If set to
 +B<false> counter values are stored as is, i.e. as an increasing integer number.
 +
 +This will be reflected in the C<ds_type> tag: If B<StoreRates> is enabled,
 +converted values will have "rate" appended to the data source type, e.g.
 +C<ds_type:derive:rate>.
 +
 +=back
 +
 +=item B<Property> I<String> I<String>
 +
 +Configure the kafka producer through properties, you almost always will
 +want to set B<metadata.broker.list> to your Kafka broker list.
 +
 +=back
 +
  =head2 Plugin C<write_riemann>
  
 -The I<write_riemann plugin> will send values to I<Riemann>, a powerfull stream
 +The I<write_riemann plugin> will send values to I<Riemann>, a powerful stream
  aggregation and monitoring system. The plugin sends I<Protobuf> encoded data to
  I<Riemann> using UDP packets.
  
@@@ -6584,7 -6135,6 +6592,7 @@@ Synopsis
       TTLFactor 2.0
     </Node>
     Tag "foobar"
 +   Attribute "foo" "bar"
   </Plugin>
  
  The following options are understood by the I<write_riemann plugin>:
@@@ -6638,17 -6188,6 +6646,17 @@@ interval is multiplied to set the TTL. 
  know exactly what you're doing, you should only increase this setting from its
  default value.
  
 +=item B<Notifications> B<false>|B<true>
 +
 +If set to B<true>, create riemann events for notifications. This is B<true>
 +by default. When processing thresholds from write_riemann, it might prove
 +useful to avoid getting notification events.
 +
 +=item B<CheckThresholds> B<false>|B<true>
 +
 +If set to B<true>, attach state to events based on thresholds defined
 +in the B<Threshold> plugin. Defaults to B<false>.
 +
  =back
  
  =item B<Tag> I<String>
  Add the given string as an additional tag to the metric being sent to
  I<Riemann>.
  
 +=item B<Attribute> I<String> I<String>
 +
 +Consider the two given strings to be the key and value of an additional
 +attribute for each metric being sent out to I<Riemann>.
 +
  =back
  
  =head1 THRESHOLD CONFIGURATION
@@@ -6695,7 -6229,7 +6703,7 @@@ When a value comes within range again o
  Here is a configuration example to get you started. Read below for more
  information.
  
 - <Threshold>
 + <Plugin threshold>
     <Type "foo">
       WarningMin    0.00
       WarningMax 1000.00
         </Type>
       </Plugin>
     </Host>
 - </Threshold>
 + </Plugin>
  
  There are basically two types of configuration statements: The C<Host>,
  C<Plugin>, and C<Type> blocks select the value for which a threshold should be
@@@ -7315,7 -6849,7 +7323,7 @@@ Example
     Max 100
     Satisfy "All"
   </Match>
 - 
 +
   # Match if the value of any data source is outside the range of 0 - 100.
   <Match "value">
     Min   0
@@@ -7497,7 -7031,7 +7505,7 @@@ Example
   <Target "replace">
     # Replace "example.net" with "example.com"
     Host "\\<example.net\\>" "example.com"
 - 
 +
     # Strip "www." from hostnames
     Host "\\<www\\." ""
   </Target>