Merge remote-tracking branch 'origin/pr/488'
authorMarc Fournier <marc.fournier@camptocamp.com>
Sun, 26 Oct 2014 18:45:02 +0000 (19:45 +0100)
committerMarc Fournier <marc.fournier@camptocamp.com>
Sun, 26 Oct 2014 18:45:02 +0000 (19:45 +0100)
1  2 
src/collectd.conf.in
src/collectd.conf.pod
src/tcpconns.c

diff --combined src/collectd.conf.in
  #AutoLoadPlugin false
  
  #----------------------------------------------------------------------------#
 +# When enabled, internal statistics are collected, using "collectd" as the   #
 +# plugin name.                                                               #
 +# Disabled by default.                                                       #
 +#----------------------------------------------------------------------------#
 +#CollectInternalStats false
 +
 +#----------------------------------------------------------------------------#
  # Interval at which to query values. This may be overwritten on a per-plugin #
  # base by using the 'Interval' option of the LoadPlugin block:               #
  #   <LoadPlugin foo>                                                         #
  #----------------------------------------------------------------------------#
  #Interval     10
  
 -#Timeout      2
 -#ReadThreads  5
 -#WriteThreads 5
 +#MaxReadInterval 86400
 +#Timeout         2
 +#ReadThreads     5
 +#WriteThreads    5
  
  # Limit the size of the write queue. Default is no limit. Setting up a limit is
  # recommended for servers handling a high volume of traffic.
@@@ -60,7 -52,6 +60,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>
@@@ -95,7 -81,6 +95,7 @@@
  #@BUILD_PLUGIN_APPLE_SENSORS_TRUE@LoadPlugin apple_sensors
  #@BUILD_PLUGIN_AQUAERO_TRUE@LoadPlugin aquaero
  #@BUILD_PLUGIN_ASCENT_TRUE@LoadPlugin ascent
 +#@BUILD_PLUGIN_BAROMETER_TRUE@LoadPlugin barometer
  #@BUILD_PLUGIN_BATTERY_TRUE@LoadPlugin battery
  #@BUILD_PLUGIN_BIND_TRUE@LoadPlugin bind
  #@BUILD_PLUGIN_CONNTRACK_TRUE@LoadPlugin conntrack
  #@BUILD_PLUGIN_DF_TRUE@LoadPlugin df
  #@BUILD_PLUGIN_DISK_TRUE@LoadPlugin disk
  #@BUILD_PLUGIN_DNS_TRUE@LoadPlugin dns
 +#@BUILD_PLUGIN_DRBD_TRUE@LoadPlugin drbd
  #@BUILD_PLUGIN_EMAIL_TRUE@LoadPlugin email
  #@BUILD_PLUGIN_ENTROPY_TRUE@LoadPlugin entropy
  #@BUILD_PLUGIN_ETHSTAT_TRUE@LoadPlugin ethstat
  #@BUILD_PLUGIN_IPVS_TRUE@LoadPlugin ipvs
  #@BUILD_PLUGIN_IRQ_TRUE@LoadPlugin irq
  #@BUILD_PLUGIN_JAVA_TRUE@LoadPlugin java
 -#@BUILD_PLUGIN_LIBVIRT_TRUE@LoadPlugin libvirt
  @BUILD_PLUGIN_LOAD_TRUE@@BUILD_PLUGIN_LOAD_TRUE@LoadPlugin load
  #@BUILD_PLUGIN_LPAR_TRUE@LoadPlugin lpar
  #@BUILD_PLUGIN_LVM_TRUE@LoadPlugin lvm
  #@BUILD_PLUGIN_UUID_TRUE@LoadPlugin uuid
  #@BUILD_PLUGIN_VARNISH_TRUE@LoadPlugin varnish
  #@BUILD_PLUGIN_MIC_TRUE@LoadPlugin mic
 +#@BUILD_PLUGIN_VIRT_TRUE@LoadPlugin virt
  #@BUILD_PLUGIN_VMEM_TRUE@LoadPlugin vmem
  #@BUILD_PLUGIN_VSERVER_TRUE@LoadPlugin vserver
  #@BUILD_PLUGIN_WIRELESS_TRUE@LoadPlugin wireless
  #@BUILD_PLUGIN_WRITE_GRAPHITE_TRUE@LoadPlugin write_graphite
  #@BUILD_PLUGIN_WRITE_HTTP_TRUE@LoadPlugin write_http
 +#@BUILD_PLUGIN_WRITE_KAFKA_TRUE@LoadPlugin write_kafka
  #@BUILD_PLUGIN_WRITE_MONGODB_TRUE@LoadPlugin write_mongodb
  #@BUILD_PLUGIN_WRITE_REDIS_TRUE@LoadPlugin write_redis
  #@BUILD_PLUGIN_WRITE_RIEMANN_TRUE@LoadPlugin write_riemann
 +#@BUILD_PLUGIN_WRITE_TSDB_TRUE@LoadPlugin write_tsdb
  #@BUILD_PLUGIN_XMMS_TRUE@LoadPlugin xmms
  #@BUILD_PLUGIN_ZFS_ARC_TRUE@LoadPlugin zfs_arc
  
  # 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"
  #     CACert "/etc/ssl/ca.crt"
  #</Plugin>
  
 +#<Plugin "barometer">
 +#   Device            "/dev/i2c-0";
 +#   Oversampling      512
 +#   PressureOffset    0.0
 +#   TemperatureOffset 0.0
 +#   Normalization     2
 +#   Altitude          238.0
 +#   TemperatureSensor "myserver/onewire-F10FCA000800/temperature"
 +#</Plugin>
 +
 +#<Plugin "battery">
 +#  ValuesPercentage false
 +#  ReportDegraded
 +#</Plugin>
 +
  #<Plugin "bind">
  #  URL "http://localhost:8053/"
  #  ParseTime       false
  #  </View>
  #</Plugin>
  
 +#<Plugin cgroups>
 +#  CGroup "libvirt"
 +#  IgnoreSelected false
 +#</Plugin>
 +
 +#<Plugin cpu>
 +#  ReportByCpu true
 +#  ReportByState true
 +#  ValuesPercentage false
 +#</Plugin>
 +#
  #<Plugin csv>
  #     DataDir "@localstatedir@/lib/@PACKAGE_NAME@/csv"
  #     StoreRates false
  #    URL "http://finance.google.com/finance?q=NYSE%3AAMD"
  #    User "foo"
  #    Password "bar"
 +#    Digest false
 +#    VerifyPeer true
 +#    VerifyHost true
 +#    CACert "/path/to/ca.crt"
 +#    Header "X-Custom-Header: foobar"
 +#    Post "foo=bar"
 +#
  #    MeasureResponseTime false
 +#    MeasureResponseCode false
  #    <Match>
  #      Regex "<span +class=\"pr\"[^>]*> *([0-9]*\\.[0-9]+) *</span>"
  #      DSType "GaugeAverage"
  #  </URL>
  #</Plugin>
  
 -#<Plugin "curl_xml">
 +#<Plugin curl_xml>
  #  <URL "http://localhost/stats.xml">
  #    Host "my_host"
  #    Instance "some_instance"
  #    User "collectd"
  #    Password "thaiNg0I"
 +#    Digest false
  #    VerifyPeer true
  #    VerifyHost true
  #    CACert "/path/to/ca.crt"
 +#    Header "X-Custom-Header: foobar"
 +#    Post "foo=bar"
  #
  #    <XPath "table[@id=\"magic_level\"]/tr">
  #      Type "magic_level"
  #     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"
  #
  #     </Plugin>
  #</Plugin>
  
 -#<Plugin libvirt>
 -#     Connection "xen:///"
 -#     RefreshInterval 60
 -#     Domain "name"
 -#     BlockDevice "name:device"
 -#     InterfaceDevice "name:device"
 -#     IgnoreSelected false
 -#     HostnameFormat name
 -#     InterfaceFormat name
 +#<Plugin load>
 +#        ReportRelative true
  #</Plugin>
  
  #<Plugin lpar>
  #     </Instance>
  #</Plugin>
  
 +#<Plugin memory>
 +#     ValuesAbsolute true
 +#     ValuesPercentage false
 +#</Plugin>
 +
  #<Plugin modbus>
  #     <Data "data_name">
  #             RegisterBase 1234
  #             Password "secret"
  #             Database "db_name"
  #             MasterStats true
 +#             ConnectTimeout 10
 +#             InnodbStats true
  #     </Database>
  #
  #     <Database db_name2>
 +#             Alias "squeeze"
  #             Host "localhost"
  #             Socket "/var/run/mysql/mysqld.sock"
  #             SlaveStats true
  #             Username "user"
  #             Password "secret"
  #             Interface "eth0"
 +#             ResolveInterval 14400
  @LOAD_PLUGIN_NETWORK@ </Server>
  #     TimeToLive "128"
  #
  #             AuthFile "/etc/collectd/passwd"
  #             Interface "eth0"
  #     </Listen>
 -#     MaxPacketSize 1024
 +#     MaxPacketSize 1452
  #
  #     # proxy setup (client and server as above):
  #     Forward true
  #  TimerPercentile 90.0
  #</Plugin>
  
 -#<Plugin "swap">
 +#<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"
  
  #<Plugin tcpconns>
  #     ListeningPorts false
+ #     AllPortsSummary false
  #     LocalPort "25"
  #     RemotePort "25"
  #</Plugin>
  #   </Instance>
  #</Plugin>
  
 +#<Plugin virt>
 +#     Connection "xen:///"
 +#     RefreshInterval 60
 +#     Domain "name"
 +#     BlockDevice "name:device"
 +#     InterfaceDevice "name:device"
 +#     IgnoreSelected false
 +#     HostnameFormat name
 +#     InterfaceFormat name
 +#     PluginInstanceFormat name
 +#</Plugin>
 +
  #<Plugin vmem>
  #     Verbose false
  #</Plugin>
  #  <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
 +#             BufferSize 4096
  #     </URL>
  #</Plugin>
  
 +#<Plugin write_kafka>
 +#  Property "metadata.broker.list" "localhost:9092"
 +#  <Topic "collectd">
 +#    Format JSON
 +#  </Topic>
 +#</Plugin>
 +
  #<Plugin write_mongodb>
  #     <Node "example">
  #             Host "localhost"
  #             Protocol UDP
  #             StoreRates true
  #             AlwaysAppendDS false
 +#             TTLFactor 2.0
 +#             EventServicePrefix ""
  #     </Node>
  #     Tag "foobar"
 +#       Attribute "foo" "bar"
 +#</Plugin>
 +
 +#<Plugin write_tsdb>
 +#     <Node>
 +#             Host "localhost"
 +#             Port "4242"
 +#             HostTags "status=production"
 +#             StoreRates false
 +#             AlwaysAppendDS false
 +#     </Node>
  #</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
@@@ -6,9 -6,9 +6,9 @@@ collectd.conf - Configuration for the s
  
  =head1 SYNOPSIS
  
 -  BaseDir "/path/to/data/"
 -  PIDFile "/path/to/pidfile/collectd.pid"
 -  Server  "123.123.123.123" 12345
 +  BaseDir "/var/lib/collectd"
 +  PIDFile "/run/collectd.pid"
 +  Interval 10.0
    
    LoadPlugin cpu
    LoadPlugin load
@@@ -16,9 -16,6 +16,9 @@@
    <LoadPlugin df>
      Interval 3600
    </LoadPlugin>
 +  <Plugin df>
 +    ValuesPercentage true
 +  </Plugin>
    
    LoadPlugin ping
    <Plugin ping>
@@@ -31,9 -28,7 +31,9 @@@
  This config file controls how the system statistics collection daemon
  B<collectd> behaves. The most significant option is B<LoadPlugin>, which
  controls which plugins to load. These plugins ultimately define collectd's
 -behavior.
 +behavior. If the B<AutoLoadPlugin> option has been enabled, the explicit
 +B<LoadPlugin> lines may be omitted for all plugins with a configuration block,
 +i.e. a C<E<lt>PluginE<nbsp>...E<gt>> block.
  
  The syntax of this config file is similar to the config file of the famous
  I<Apache> webserver. Each line contains either an option (a key and a list of
@@@ -60,9 -55,8 +60,9 @@@ indenting the wrapped lines
  The configuration is read and processed in order, i.e. from top to bottom. So
  the plugins are loaded in the order listed in this config file. It is a good
  idea to load any logging plugins first in order to catch messages from plugins
 -during configuration. Also, the C<LoadPlugin> option B<must> occur B<before>
 -the appropriate C<E<lt>Plugin ...E<gt>> block.
 +during configuration. Also, unless B<AutoLoadPlugin> is enabled, the
 +B<LoadPlugin> option I<must> occur I<before> the appropriate
 +C<E<lt>B<Plugin> ...E<gt>> block.
  
  =head1 GLOBAL OPTIONS
  
@@@ -146,18 -140,6 +146,18 @@@ B<E<lt>PluginE<nbsp>...E<gt>> block act
  B<LoadPlugin> statement. B<LoadPlugin> statements are still required for
  plugins that don't provide any configuration, e.g. the I<Load plugin>.
  
 +=item B<CollectInternalStats> B<false>|B<true>
 +
 +When set to B<true>, various statistics about the I<collectd> daemon will be
 +collected, with "collectd" as the I<plugin name>. Defaults to B<false>.
 +
 +The "write_queue" I<plugin instance> reports the number of elements currently
 +queued and the number of elements dropped off the queue by the
 +B<WriteQueueLimitLow>/B<WriteQueueLimitHigh> mechanism.
 +
 +The "cache" I<plugin instance> reports the number of elements in the value list
 +cache (the cache you can interact with using L<collectd-unixsock(5)>).
 +
  =item B<Include> I<Path> [I<pattern>]
  
  If I<Path> points to a file, includes that file. If I<Path> points to a
@@@ -230,14 -212,6 +230,14 @@@ B<Warning:> You should set this once an
  I<you will have to delete all your RRD files> or know some serious RRDtool
  magic! (Assuming you're using the I<RRDtool> or I<RRDCacheD> plugin.)
  
 +=item B<MaxReadInterval> I<Seconds>
 +
 +Read plugin doubles interval between queries after each failed attempt
 +to get data.
 +
 +This options limits the maximum value of the interval. The default value is
 +B<86400>.
 +
  =item B<Timeout> I<Iterations>
  
  Consider a value list "missing" when no update has been read or received for
@@@ -288,11 -262,8 +288,11 @@@ If B<WriteQueueLimitHigh> is set to non
  unset, the latter will default to half of B<WriteQueueLimitHigh>.
  
  If you do not want to randomly drop values when the queue size is between
 -I<LowNum> and I<HighNum>, set If B<WriteQueueLimitHigh> and
 -B<WriteQueueLimitLow> to same value.
 +I<LowNum> and I<HighNum>, set B<WriteQueueLimitHigh> and B<WriteQueueLimitLow>
 +to the same value.
 +
 +Enabling the B<CollectInternalStats> option is of great help to figure out the
 +values to set B<WriteQueueLimitHigh> and B<WriteQueueLimitLow> to.
  
  =item B<Hostname> I<Name>
  
@@@ -370,10 -341,10 +370,10 @@@ The full example configuration looks li
     <Aggregation>
       Plugin "cpu"
       Type "cpu"
 -     
 +
       GroupBy "Host"
       GroupBy "TypeInstance"
 -     
 +
       CalculateSum true
       CalculateAverage true
     </Aggregation>
@@@ -449,13 -420,13 +449,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>
@@@ -523,10 -494,8 +523,10 @@@ possibly filtering or messages
   #   StoreRates false
   #   GraphitePrefix "collectd."
   #   GraphiteEscapeChar "_"
 + #   GraphiteSeparateInstances false
 + #   GraphiteAlwaysAppendDS false
     </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>
@@@ -591,23 -558,9 +591,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
@@@ -678,19 -631,6 +678,19 @@@ In I<Graphite> metric name, dots are us
  metric parts (host, plugin, type).
  Default is "_" (I<Underscore>).
  
 +=item B<GraphiteSeparateInstances> B<true>|B<false>
 +
 +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<GraphiteAlwaysAppendDS> B<true>|B<false>
 +
 +If set to B<true>, append the name of the I<Data Source> (DS) to the "metric"
 +identifier. If set to B<false> (the default), this is only done when there is
 +more than one DS.
 +
  =back
  
  =head2 Plugin C<apache>
@@@ -856,165 -796,6 +856,165 @@@ and are checked by default depends on t
  
  =back
  
 +=head2 Plugin C<barometer>
 +
 +This plugin reads absolute air pressure using digital barometer sensor MPL115A2
 +or MPL3115 from Freescale (sensor attached to any I2C bus available in
 +the computer, for HW details see
 +I<http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=MPL115A> or
 +I<http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=MPL3115A2>).
 +The sensor type - one fo these two - is detected automatically by the plugin
 +and indicated in the plugin_instance (typically you will see subdirectory
 +"barometer-mpl115" or "barometer-mpl3115").
 +
 +The plugin provides absolute barometric pressure, air pressure reduced to sea
 +level (several possible approximations) and as an auxiliary value also internal
 +sensor temperature. It uses (expects/provides) typical metric units - pressure
 +in [hPa], temperature in [C], altitude in [m].
 +
 +It was developed and tested under Linux only. The only platform dependency is
 +the standard Linux i2c-dev interface (the particular bus driver has to
 +support the SM Bus command subset).
 +
 +The reduction or normalization to mean sea level pressure requires (depedning on
 +selected method/approximation) also altitude and reference to temperature sensor(s).
 +When multiple temperature sensors are configured the minumum of their values is
 +always used (expecting that the warmer ones are affected by e.g. direct sun light
 +at that moment).
 +
 +Synopsis:
 +
 +  <Plugin "barometer">
 +     Device            "/dev/i2c-0";
 +     Oversampling      512
 +     PressureOffset    0.0
 +     TemperatureOffset 0.0
 +     Normalization     2
 +     Altitude          238.0
 +     TemperatureSensor "myserver/onewire-F10FCA000800/temperature"
 +  </Plugin>
 +
 +=over 4
 +
 +=item B<Device> I<device>
 +
 +Device name of the I2C bus to which the sensor is connected. Note that typically
 +you need to have loaded the i2c-dev module.
 +Using i2c-tools you can check/list i2c buses available on your system by:
 +
 +  i2cdetect -l
 +
 +Then you can scan for devices on given bus. E.g. to scan the whole bus 0 use:
 +
 +  i2cdetect -y -a 0
 +
 +This way you should be able to verify that the pressure sensor (either type) is
 +connected and detected on address 0x60.
 +
 +=item B<Oversampling> I<value>
 +
 +For MPL115 this is the size of the averaging window. To filter out sensor noise
 +a simple averaging using floating window of configurable size is used. The plugin
 +will use average of the last C<value> measurements (value of 1 means no averaging).
 +Minimal size is 1, maximal 1024.
 +
 +For MPL3115 this is the oversampling value. The actual oversampling is performed
 +by the sensor and the higher value the higher accuracy and longer conversion time
 +(although nothing to worry about in the collectd context). Supported values are:
 +1, 2, 4, 8, 16, 32, 64 and 128. Any other value is adjusted by the plugin to
 +the closest supported one. Default is 128.
 +
 +=item B<PressureOffset> I<offset>
 +
 +You can further calibrate the sensor by supplying pressure and/or temperature offsets.
 +This is added to the measured/caclulated value (i.e. if the measured value is too high
 +then use negative offset).
 +In hPa, default is 0.0.
 +
 +=item B<TemperatureOffset> I<offset>
 +
 +You can further calibrate the sensor by supplying pressure and/or temperature offsets.
 +This is added to the measured/caclulated value (i.e. if the measured value is too high
 +then use negative offset).
 +In C, default is 0.0.
 +
 +=item B<Normalization> I<method>
 +
 +Normalization method - what approximation/model is used to compute mean sea
 +level pressure from the air absolute pressure.
 +
 +Supported values of the C<method> (integer between from 0 to 2) are:
 +
 +=over 5
 +
 +=item B<0> - no conversion, absolute pressrure is simply copied over. For this method you
 +       do not need to configure C<Altitude> or C<TemperatureSensor>.
 +
 +=item B<1> - international formula for conversion ,
 +See I<http://en.wikipedia.org/wiki/Atmospheric_pressure#Altitude_atmospheric_pressure_variation>.
 +For this method you have to configure C<Altitude> but do not need C<TemperatureSensor>
 +(uses fixed global temperature average instead).
 +
 +=item B<2> - formula as recommended by the Deutsche Wetterdienst (German
 +Meteorological Service).
 +See I<http://de.wikipedia.org/wiki/Barometrische_H%C3%B6henformel#Theorie>
 +For this method you have to configure both  C<Altitude> and C<TemperatureSensor>.
 +
 +=back
 +
 +
 +=item B<Altitude> I<altitude>
 +
 +The altitude (in meters) of the location where you meassure the pressure.
 +
 +=item B<TemperatureSensor> I<reference>
 +
 +Temperature sensor which should be used as a reference when normalizing the pressure.
 +When specified more sensors a minumum is found and uses each time.
 +The temperature reading directly from this pressure sensor/plugin
 +is typically not suitable as the pressure sensor
 +will be probably inside while we want outside temperature.
 +The collectd reference name is something like
 +<hostname>/<plugin_name>-<plugin_instance>/<type>-<type_instance>
 +(<type_instance> is usually omitted when there is just single value type).
 +Or you can figure it out from the path of the output data files.
 +
 +=back
 +
 +=head2 Plugin C<battery>
 +
 +The I<battery plugin> reports the remaining capacity, power and voltage of
 +laptop batteries.
 +
 +=over 4
 +
 +=item B<ValuesPercentage> B<false>|B<true>
 +
 +When enabled, remaining capacity is reported as a percentage, e.g. "42%
 +capacity remaining". Otherwise the capacity is stored as reported by the
 +battery, most likely in "Wh". This option does not work with all input methods,
 +in particular when only C</proc/pmu> is available on an old Linux system.
 +Defaults to B<false>.
 +
 +=item B<ReportDegraded> B<false>|B<true>
 +
 +Typical laptop batteries degrade over time, meaning the capacity decreases with
 +recharge cycles. The maximum charge of the previous charge cycle is tracked as
 +"last full capacity" and used to determine that a battery is "fully charged".
 +
 +When this option is set to B<false>, the default, the I<battery plugin> will
 +only report the remaining capacity. If the B<ValuesPercentage> option is
 +enabled, the relative remaining capacity is calculated as the ratio of the
 +"remaining capacity" and the "last full capacity". This is what most tools,
 +such as the status bar of desktop environments, also do.
 +
 +When set to B<true>, the battery plugin will report three values: B<charged>
 +(remaining capacity), B<discharged> (difference between "last full capacity"
 +and "remaining capacity") and B<degraded> (difference between "design capacity"
 +and "last full capacity").
 +
 +=back
 +
  =head2 Plugin C<bind>
  
  Starting with BIND 9.5.0, the most widely used DNS server software provides
@@@ -1041,17 -822,17 +1041,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>
@@@ -1192,68 -973,6 +1192,68 @@@ at all, B<all> cgroups are selected
  
  =back
  
 +=head2 Plugin C<conntrack>
 +
 +This plugin collects IP conntrack statistics.
 +
 +=over 4
 +
 +=item B<OldFiles>
 +
 +Assume the B<conntrack_count> and B<conntrack_max> files to be found in
 +F</proc/sys/net/ipv4/netfilter> instead of F</proc/sys/net/netfilter/>.
 +
 +=back
 +
 +=head2 Plugin C<cpu>
 +
 +The I<CPU plugin> collects CPU usage metrics. By default, CPU usage is reported
 +as Jiffies, using the C<cpu> type. Two aggregations are available:
 +
 +=over 4
 +
 +=item
 +
 +Sum, per-state, over all CPUs installed in the system; and
 +
 +=item
 +
 +Sum, per-CPU, over all non-idle states of a CPU, creating an "active" state.
 +
 +=back
 +
 +The two aggregations can be combined, leading to I<collectd> only emitting a
 +single "active" metric for the entire system. As soon as one of these
 +aggregations (or both) is enabled, the I<cpu plugin> will report a percentage,
 +rather than Jiffies. In addition, you can request individual, per-state,
 +per-CPU metrics to be reported as percentage.
 +
 +The following configuration options are available:
 +
 +=over 4
 +
 +=item B<ReportByState> B<true>|B<false>
 +
 +When set to B<true>, the default, reports per-state metrics, e.g. "system",
 +"user" and "idle".
 +When set to B<false>, aggregates (sums) all I<non-idle> states into one
 +"active" metric.
 +
 +=item B<ReportByCpu> B<true>|B<false>
 +
 +When set to B<true>, the default, reports per-CPU (per-core) metrics.
 +When set to B<false>, instead of reporting metrics for individual CPUs, only a
 +global sum of CPU states is emitted.
 +
 +=item B<ValuesPercentage> B<false>|B<true>
 +
 +This option is only considered when both, B<ReportByCpu> and B<ReportByState>
 +are set to B<true>. In this case, by default, metrics will be reported as
 +Jiffies. By setting this option to B<true>, you can request percentage values
 +in the un-aggregated (per-CPU, per-state) mode as well.
 +
 +=back
 +
  =head2 Plugin C<cpufreq>
  
  This plugin doesn't have any options. It reads
@@@ -1296,16 -1015,6 +1296,16 @@@ finance page and dispatch the value to 
        URL "http://finance.google.com/finance?q=NYSE%3AAMD"
        User "foo"
        Password "bar"
 +      Digest false
 +      VerifyPeer true
 +      VerifyHost true
 +      CACert "/path/to/ca.crt"
 +      Header "X-Custom-Header: foobar"
 +      Post "foo=bar"
 +
 +      MeasureResponseTime false
 +      MeasureResponseCode false
 +
        <Match>
          Regex "<span +class=\"pr\"[^>]*> *([0-9]*\\.[0-9]+) *</span>"
          DSType "GaugeAverage"
@@@ -1337,10 -1046,6 +1337,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
@@@ -1378,19 -1083,13 +1378,19 @@@ C<application/x-www-form-urlencoded>)
  Measure response time for the request. If this setting is enabled, B<Match>
  blocks (see below) are optional. Disabled by default.
  
 +=item B<MeasureResponseCode> B<true>|B<false>
 +
 +Measure response code for the request. If this setting is enabled, B<Match>
 +blocks (see below) are optional. Disabled by default.
 +
  =item B<E<lt>MatchE<gt>>
  
  One or more B<Match> blocks that define how to match information in the data
  returned by C<libcurl>. The C<curl> plugin uses the same infrastructure that's
  used by the C<tail> plugin, so please see the documentation of the C<tail>
 -plugin below on how matches are defined. If the B<MeasureResponseTime> option
 -is set to B<true>, B<Match> blocks are optional.
 +plugin below on how matches are defined. If the B<MeasureResponseTime> or
 +B<MeasureResponseCode> options are set to B<true>, B<Match> blocks are
 +optional.
  
  =back
  
@@@ -1457,25 -1156,12 +1457,25 @@@ The following options are valid within 
  
  Sets the plugin instance to I<Instance>.
  
 +=item B<Interval> I<Interval>
 +
 +Sets the interval (in seconds) in which the values will be collected from this
 +URL. By default the global B<Interval> setting will be used.
 +
  =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
@@@ -1513,8 -1199,6 +1513,8 @@@ The B<curl_xml plugin> uses B<libcurl> 
       VerifyPeer true
       VerifyHost true
       CACert "/path/to/ca.crt"
 +     Header "X-Custom-Header: foobar"
 +     Post "foo=bar"
  
       <XPath "table[@id=\"magic_level\"]/tr">
         Type "magic_level"
@@@ -1566,8 -1250,6 +1566,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>
@@@ -1807,16 -1489,6 +1807,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
@@@ -1931,17 -1603,17 +1931,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
  
@@@ -1977,20 -1649,6 +1977,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>
@@@ -2454,63 -2112,94 +2454,63 @@@ independent from the I<JavaClass> argum
  
  =back
  
 -=head2 Plugin C<libvirt>
 +=head2 Plugin C<load>
  
 -This plugin allows CPU, disk and network load to be collected for virtualized
 -guests on the machine. This means that these characteristics can be collected
 -for guest systems without installing any software on them - collectd only runs
 -on the hosting system. The statistics are collected through libvirt
 -(L<http://libvirt.org/>).
 +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.
  
 -Only I<Connection> is required.
 +The following configuration options are available:
  
  =over 4
  
 -=item B<Connection> I<uri>
 -
 -Connect to the hypervisor given by I<uri>. For example if using Xen use:
 -
 - Connection "xen:///"
 -
 -Details which URIs allowed are given at L<http://libvirt.org/uri.html>.
 -
 -=item B<RefreshInterval> I<seconds>
 -
 -Refresh the list of domains and devices every I<seconds>. The default is 60
 -seconds. Setting this to be the same or smaller than the I<Interval> will cause
 -the list of domains and devices to be refreshed on every iteration.
 +=item B<ReportRelative> B<false>|B<true>
  
 -Refreshing the devices in particular is quite a costly operation, so if your
 -virtualization setup is static you might consider increasing this. If this
 -option is set to 0, refreshing is disabled completely.
 -
 -=item B<Domain> I<name>
 -
 -=item B<BlockDevice> I<name:dev>
 -
 -=item B<InterfaceDevice> I<name:dev>
 -
 -=item B<IgnoreSelected> I<true>|I<false>
 -
 -Select which domains and devices are collected.
 +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.
  
 -If I<IgnoreSelected> is not given or I<false> then only the listed domains and
 -disk/network devices are collected.
 +=back
  
 -If I<IgnoreSelected> is I<true> then the test is reversed and the listed
 -domains and disk/network devices are ignored, while the rest are collected.
  
 -The domain name and device names may use a regular expression, if the name is
 -surrounded by I</.../> and collectd was compiled with support for regexps.
 +=head2 Plugin C<logfile>
  
 -The default is to collect statistics for all domains and all their devices.
 +=over 4
  
 -Example:
 +=item B<LogLevel> B<debug|info|notice|warning|err>
  
 - BlockDevice "/:hdb/"
 - IgnoreSelected "true"
 +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.
  
 -Ignore all I<hdb> devices on any domain, but other block devices (eg. I<hda>)
 -will be collected.
 +Please note that B<debug> is only available if collectd has been compiled with
 +debugging support.
  
 -=item B<HostnameFormat> B<name|uuid|hostname|...>
 +=item B<File> I<File>
  
 -When the libvirt plugin logs data, it sets the hostname 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>.
 +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.
  
 -B<uuid> means use the guest's UUID. This is useful if you want to track the
 -same guest across migrations.
 +=item B<Timestamp> B<true>|B<false>
  
 -B<hostname> means to use the global B<Hostname> setting, which is probably not
 -useful on its own because all guests will appear to have the same name.
 +Prefix all lines printed by the current time. Defaults to B<true>.
  
 -You can also specify combinations of these fields. For example B<name uuid>
 -means to concatenate the guest name and UUID (with a literal colon character
 -between, thus I<"foo:1234-1234-1234-1234">).
 +=item B<PrintSeverity> B<true>|B<false>
  
 -=item B<InterfaceFormat> B<name>|B<address>
 +When enabled, all lines are prefixed by the severity of the log message, for
 +example "warning". Defaults to B<false>.
  
 -When the libvirt plugin logs interface data, it sets the name of the collected
 -data according to this setting. The default is to use the path as provided by
 -the hypervisor (the "dev" property of the target node), which is equal to
 -setting B<name>.
 +=back
  
 -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.
 +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.
  
 -=back
 +=head2 Plugin C<log_logstash>
  
 -=head2 Plugin C<logfile>
 +The I<log logstash plugin> behaves like the logfile plugin but formats
 +messages as JSON events for logstash to parse and input.
  
  =over 4
  
@@@ -2529,6 -2218,15 +2529,6 @@@ B<stderr> can be used to write to the s
  channels, respectively. This, of course, only makes much sense when I<collectd>
  is running in foreground- or non-daemon-mode.
  
 -=item B<Timestamp> B<true>|B<false>
 -
 -Prefix all lines printed by the current time. Defaults to B<true>.
 -
 -=item B<PrintSeverity> B<true>|B<false>
 -
 -When enabled, all lines are prefixed by the severity of the log message, for
 -example "warning". Defaults to B<false>.
 -
  =back
  
  B<Note>: There is no need to notify the daemon after moving or removing the
@@@ -2708,7 -2406,7 +2708,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>
  
@@@ -2774,7 -2472,7 +2774,7 @@@ Fan I
  
  =item fout
  
 -Fan Out 
 +Fan Out
  
  =item vccp
  
@@@ -2815,11 -2513,11 +2815,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
  
@@@ -2827,57 -2525,36 +2827,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
@@@ -2893,19 -2570,19 +2893,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"
@@@ -3036,11 -2713,9 +3036,11 @@@ Synopsis
        Password "password"
        Port "3306"
        MasterStats true
 +      ConnectTimeout 10
      </Database>
  
      <Database bar>
 +      Alias "squeeze"
        Host "localhost"
        Socket "/var/run/mysql/mysqld.sock"
        SlaveStats true
@@@ -3055,11 -2730,6 +3055,11 @@@ section "mysql_real_connect()" in the B
  
  =over 4
  
 +=item B<Alias> I<Alias>
 +
 +Alias to use as sender instead of hostname when reporting. This may be useful
 +when having cryptic hostnames.
 +
  =item B<Host> I<Hostname>
  
  Hostname of the database server. Defaults to B<localhost>.
@@@ -3098,11 -2768,6 +3098,11 @@@ only has any effect, if B<Host> is set 
  Otherwise, use the B<Port> option above. See the documentation for the
  C<mysql_real_connect> function for details.
  
 +=item B<InnodbStats> I<true|false>
 +
 +If enabled, metrics about the InnoDB storage engine are collected.
 +Disabled by default.
 +
  =item B<MasterStats> I<true|false>
  
  =item B<SlaveStats> I<true|false>
@@@ -3116,10 -2781,6 +3116,10 @@@ privileges. See the B<User> documentati
  If enabled, the plugin sends a notification if the replication slave I/O and /
  or SQL threads are not running.
  
 +=item B<ConnectTimeout> I<Seconds>
 +
 +Sets the connect timeout for the MySQL client.
 +
  =back
  
  =head2 Plugin C<netapp>
@@@ -3154,7 -2815,7 +3154,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
@@@ -3756,7 -3417,7 +3756,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">
@@@ -3819,12 -3480,6 +3819,12 @@@ behavior is to let the kernel choose th
  that the manual selection of an interface for unicast traffic is only
  necessary in rare cases.
  
 +=item B<ResolveInterval> I<Seconds>
 +
 +Sets the interval at which to re-resolve the DNS for the I<Host>. This is
 +useful to force a regular DNS lookup to support a high availability setup. If
 +not specified, re-resolves are never attempted.
 +
  =back
  
  =item B<E<lt>Listen> I<Host> [I<Port>]B<E<gt>>
@@@ -4151,36 -3806,13 +4151,36 @@@ B<EXPERIMENTAL!> See notes below
  The C<onewire> plugin uses the B<owcapi> library from the B<owfs> project
  L<http://owfs.org/> to read sensors connected via the onewire bus.
  
 -Currently only temperature sensors (sensors with the family code C<10>,
 -e.E<nbsp>g. DS1820, DS18S20, DS1920) can be read. If you have other sensors you
 -would like to have included, please send a sort request to the mailing list.
 +It can be used in two possible modes - standard or advanced.
 +
 +In the standard mode only temperature sensors (sensors with the family code
 +C<10>, C<22> and C<28> - e.g. DS1820, DS18S20, DS1920) can be read. If you have
 +other sensors you would like to have included, please send a sort request to
 +the mailing list. You can select sensors to be read or to be ignored depending
 +on the option B<IgnoreSelected>). When no list is provided the whole bus is
 +walked and all sensors are read.
  
  Hubs (the DS2409 chips) are working, but read the note, why this plugin is
  experimental, below.
  
 +In the advanced mode you can configure any sensor to be read (only numerical
 +value) using full OWFS path (e.g. "/uncached/10.F10FCA000800/temperature").
 +In this mode you have to list all the sensors. Neither default bus walk nor
 +B<IgnoreSelected> are used here. Address and type (file) is extracted from
 +the path automatically and should produce compatible structure with the "standard"
 +mode (basically the path is expected as for example
 +"/uncached/10.F10FCA000800/temperature" where it would extract address part
 +"F10FCA000800" and the rest after the slash is considered the type - here
 +"temperature").
 +There are two advantages to this mode - you can access virtually any sensor
 +(not just temperature), select whether to use cached or directly read values
 +and it is slighlty faster. The downside is more complex configuration.
 +
 +The two modes are distinguished automatically by the format of the address.
 +It is not possible to mix the two modes. Once a full path is detected in any
 +B<Sensor> then the whole addressing (all sensors) is considered to be this way
 +(and as standard addresses will fail parsing they will be ignored).
 +
  =over 4
  
  =item B<Device> I<Device>
@@@ -4201,23 -3833,14 +4201,23 @@@ This directive is B<required> and does 
  
  =item B<Sensor> I<Sensor>
  
 -Selects sensors to collect or to ignore, depending on B<IgnoreSelected>, see
 -below. Sensors are specified without the family byte at the beginning, to you'd
 -use C<F10FCA000800>, and B<not> include the leading C<10.> family byte and
 -point.
 +In the standard mode selects sensors to collect or to ignore
 +(depending on B<IgnoreSelected>, see below). Sensors are specified without
 +the family byte at the beginning, so you have to use for example C<F10FCA000800>,
 +and B<not> include the leading C<10.> family byte and point.
 +When no B<Sensor> is configured the whole Onewire bus is walked and all supported
 +sensors (see above) are read.
 +
 +In the advanced mode the B<Sensor> specifies full OWFS path - e.g.
 +C</uncached/10.F10FCA000800/temperature> (or when cached values are OK
 +C</10.F10FCA000800/temperature>). B<IgnoreSelected> is not used.
 +
 +As there can be multiple devices on the bus you can list multiple sensor (use
 +multiple B<Sensor> elements).
  
  =item B<IgnoreSelected> I<true>|I<false>
  
 -If no configuration if given, the B<onewire> plugin will collect data from all
 +If no configuration is given, the B<onewire> plugin will collect data from all
  sensors found. This may not be practical, especially if sensors are added and
  removed regularly. Sometimes, however, it's easier/preferred to collect only
  specific sensors or all sensors I<except> a few specified ones. This option
@@@ -4225,8 -3848,6 +4225,8 @@@ enables you to do that: By setting B<Ig
  B<Sensor> is inverted: All selected interfaces are ignored and all other
  interfaces are collected.
  
 +Used only in the standard mode - see above.
 +
  =item B<Interval> I<Seconds>
  
  Sets the interval in which all sensors should be read. If not specified, the
@@@ -4903,6 -4524,13 +4903,6 @@@ Specify the password to be used when co
  Specify whether to use an SSL connection when contacting the server. The
  following modes are supported:
  
 -=item B<Instance> I<name>
 -
 -Specify the plugin instance name that should be used instead of the database
 -name (which is the default, if this option has not been specified). This
 -allows to query multiple databases of the same name on the same host (e.g.
 -when running multiple database server versions in parallel).
 -
  =over 4
  
  =item I<disable>
@@@ -4923,13 -4551,6 +4923,13 @@@ Use SSL only
  
  =back
  
 +=item B<Instance> I<name>
 +
 +Specify the plugin instance name that should be used instead of the database
 +name (which is the default, if this option has not been specified). This
 +allows to query multiple databases of the same name on the same host (e.g.
 +when running multiple database server versions in parallel).
 +
  =item B<KRBSrvName> I<kerberos_service_name>
  
  Specify the Kerberos service name to use when authenticating with Kerberos 5
@@@ -5716,19 -5337,6 +5716,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>
@@@ -5864,7 -5472,6 +5864,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"
@@@ -5891,9 -5498,6 +5891,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:
  
@@@ -6176,6 -5780,11 +6176,11 @@@ connections a mail server or news serve
  how many connections a web proxy holds to web servers. You have to give the
  port in numeric form.
  
+ =item B<AllPortsSummary> I<true>|I<false>
+ If this option is set to I<true> a summary of statistics from all connections
+ are collectd. This option defaults to I<false>.
  =back
  
  =head2 Plugin C<thermal>
@@@ -6433,101 -6042,6 +6438,101 @@@ Collect statistics about worker threads
  
  =back
  
 +=head2 Plugin C<virt>
 +
 +This plugin allows CPU, disk and network load to be collected for virtualized
 +guests on the machine. This means that these metrics can be collected for guest
 +systems without installing any software on them - I<collectd> only runs on the
 +host system. The statistics are collected through libvirt
 +(L<http://libvirt.org/>).
 +
 +Only I<Connection> is required.
 +
 +=over 4
 +
 +=item B<Connection> I<uri>
 +
 +Connect to the hypervisor given by I<uri>. For example if using Xen use:
 +
 + Connection "xen:///"
 +
 +Details which URIs allowed are given at L<http://libvirt.org/uri.html>.
 +
 +=item B<RefreshInterval> I<seconds>
 +
 +Refresh the list of domains and devices every I<seconds>. The default is 60
 +seconds. Setting this to be the same or smaller than the I<Interval> will cause
 +the list of domains and devices to be refreshed on every iteration.
 +
 +Refreshing the devices in particular is quite a costly operation, so if your
 +virtualization setup is static you might consider increasing this. If this
 +option is set to 0, refreshing is disabled completely.
 +
 +=item B<Domain> I<name>
 +
 +=item B<BlockDevice> I<name:dev>
 +
 +=item B<InterfaceDevice> I<name:dev>
 +
 +=item B<IgnoreSelected> B<true>|B<false>
 +
 +Select which domains and devices are collected.
 +
 +If I<IgnoreSelected> is not given or B<false> then only the listed domains and
 +disk/network devices are collected.
 +
 +If I<IgnoreSelected> is B<true> then the test is reversed and the listed
 +domains and disk/network devices are ignored, while the rest are collected.
 +
 +The domain name and device names may use a regular expression, if the name is
 +surrounded by I</.../> and collectd was compiled with support for regexps.
 +
 +The default is to collect statistics for all domains and all their devices.
 +
 +Example:
 +
 + BlockDevice "/:hdb/"
 + IgnoreSelected "true"
 +
 +Ignore all I<hdb> devices on any domain, but other block devices (eg. I<hda>)
 +will be collected.
 +
 +=item B<HostnameFormat> B<name|uuid|hostname|...>
 +
 +When the libvirt plugin logs data, it sets the hostname 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. This is useful if you want to track the
 +same guest across migrations.
 +
 +B<hostname> means to use the global B<Hostname> setting, which is probably not
 +useful on its own because all guests will appear to have the same name.
 +
 +You can also specify combinations of these fields. For example B<name uuid>
 +means to concatenate the guest name and UUID (with a literal colon character
 +between, thus I<"foo:1234-1234-1234-1234">).
 +
 +=item B<InterfaceFormat> B<name>|B<address>
 +
 +When the libvirt plugin logs interface data, it sets the name of the collected
 +data according to this setting. The default is to use the path as provided by
 +the hypervisor (the "dev" property of the target node), which is equal to
 +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<vmem>
  
  The C<vmem> plugin collects information about the usage of virtual memory.
@@@ -6576,7 -6090,7 +6581,7 @@@ Synopsis
     <Node "example">
       Host "localhost"
       Port "2003"
 -     Protocol "udp"
 +     Protocol "tcp"
       LogSendErrors true
       Prefix "collectd"
     </Node>
@@@ -6638,59 -6152,6 +6643,59 @@@ instance) are put into one component, f
  
  =item B<AlwaysAppendDS> B<false>|B<true>
  
 +If set to B<true>, append the name of the I<Data Source> (DS) to the "metric"
 +identifier. If set to B<false> (the default), this is only done when there is
 +more than one DS.
 +
 +=back
 +
 +=head2 Plugin C<write_tsdb>
 +
 +The C<write_tsdb> plugin writes data to I<OpenTSDB>, a scalable open-source
 +time series database. The plugin connects to a I<TSD>, a masterless, no shared
 +state daemon that ingests metrics and stores them in HBase. The plugin uses
 +I<TCP> over the "line based" protocol with a default port 4242. The data will
 +be sent in blocks of at most 1428 bytes to minimize the number of network
 +packets.
 +
 +Synopsis:
 +
 + <Plugin write_tsdb>
 +   <Node "example">
 +     Host "tsd-1.my.domain"
 +     Port "4242"
 +     HostTags "status=production"
 +   </Node>
 + </Plugin>
 +
 +The configuration consists of one or more E<lt>B<Node>E<nbsp>I<Name>E<gt>
 +blocks. Inside the B<Node> blocks, the following options are recognized:
 +
 +=over 4
 +
 +=item B<Host> I<Address>
 +
 +Hostname or address to connect to. Defaults to C<localhost>.
 +
 +=item B<Port> I<Service>
 +
 +Service name or port number to connect to. Defaults to C<4242>.
 +
 +
 +=item B<HostTags> I<String>
 +
 +When set, I<HostTags> is added to the end of the metric. It is intended to be
 +used for name=value pairs that the TSD will tag the metric with. Dots and
 +whitespace are I<not> escaped in this string.
 +
 +=item B<StoreRates> B<false>|B<true>
 +
 +If set to B<true>, convert counter values to rates. If set to B<false>
 +(the default) counter values are stored as is, as an increasing
 +integer number.
 +
 +=item B<AlwaysAppendDS> B<false>|B<true>
 +
  If set the B<true>, append the name of the I<Data Source> (DS) to the "metric"
  identifier. If set to B<false> (the default), this is only done when there is
  more than one DS.
@@@ -6752,9 -6213,8 +6757,9 @@@ want to use authentication all three fi
  
  =head2 Plugin C<write_http>
  
 -This output plugin submits values to an http server by POST them using the
 -PUTVAL plain-text protocol. Each destination you want to post data to needs to
 +This output plugin submits values to an HTTP server using POST requests and
 +encoding metrics with JSON or using the C<PUTVAL> command described in
 +L<collectd-unixsock(5)>. Each destination you want to post data to needs to
  have one B<URL> block, within which the destination can be configured further,
  for example by specifying authentication data.
  
@@@ -6764,7 -6224,6 +6769,7 @@@ Synopsis
     <URL "http://example.com/post-collectd">
       User "collectd"
       Password "weCh3ik0"
 +     Format JSON
     </URL>
   </Plugin>
  
@@@ -6800,33 -6259,6 +6805,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
@@@ -6838,129 -6270,14 +6843,129 @@@ Defaults to B<Command>
  =item B<StoreRates> B<true|false>
  
  If set to B<true>, convert counter values to rates. If set to B<false> (the
 -default) counter values are stored as is, i.E<nbsp>e. as an increasing integer
 -number.
 +default) counter values are stored as is, i.e. as an increasing integer number.
 +
 +=item B<BufferSize> I<Bytes>
 +
 +Sets the send buffer size to I<Bytes>. By increasing this buffer, less HTTP
 +requests will be generated, but more metrics will be batched / metrics are
 +cached for longer before being sent, introducing additional delay until they
 +are available on the server side. I<Bytes> must be at least 1024 and cannot
 +exceed the size of an C<int>, i.e. 2E<nbsp>GByte.
 +Defaults to C<4096>.
 +
 +=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
 +C<E<lt>metricE<gt> E<lt>valueE<gt> E<lt>timestampE<gt>\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
 +C<E<lt>prefixE<gt>E<lt>hostE<gt>E<lt>postfixE<gt>E<lt>pluginE<gt>E<lt>typeE<gt>E<lt>nameE<gt>>
 +
 +=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
 +C<E<lt>prefixE<gt>E<lt>hostE<gt>E<lt>postfixE<gt>E<lt>pluginE<gt>E<lt>typeE<gt>E<lt>nameE<gt>>
 +
 +=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 C<_> (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.
  
@@@ -6976,7 -6293,6 +6981,7 @@@ Synopsis
       TTLFactor 2.0
     </Node>
     Tag "foobar"
 +   Attribute "foo" "bar"
   </Plugin>
  
  The following options are understood by the I<write_riemann plugin>:
@@@ -7030,23 -6346,6 +7035,23 @@@ 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>.
 +
 +=item B<EventServicePrefix> I<String>
 +
 +Add the given string as a prefix to the event service name.
 +If B<EventServicePrefix> not set or set to an empty string (""),
 +no prefix will be used.
 +
  =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
@@@ -7093,7 -6387,7 +7098,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
@@@ -7531,36 -6825,19 +7536,36 @@@ Available options
  =item B<Plugin> I<Name>
  
  Name of the write plugin to which the data should be sent. This option may be
 -given multiple times to send the data to more than one write plugin.
 +given multiple times to send the data to more than one write plugin. If the
 +plugin supports multiple instances, the plugin's instance(s) must also be
 +specified.
  
  =back
  
  If no plugin is explicitly specified, the values will be sent to all available
  write plugins.
  
 -Example:
 +Single-instance plugin example:
  
   <Target "write">
     Plugin "rrdtool"
   </Target>
  
 +Multi-instance plugin example:
 +
 + <Plugin "write_graphite">
 +   <Node "foo">
 +   ...
 +   </Node>
 +   <Node "bar">
 +   ...
 +   </Node>
 + </Plugin>
 +  ...
 + <Target "write">
 +   Plugin "write_graphite/foo"
 + </Target>
 +
  =item B<jump>
  
  Starts processing the rules of another chain, see L<"Flow control"> above. If
@@@ -7730,7 -7007,7 +7735,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
@@@ -7912,7 -7189,7 +7917,7 @@@ Example
   <Target "replace">
     # Replace "example.net" with "example.com"
     Host "\\<example.net\\>" "example.com"
 - 
 +
     # Strip "www." from hostnames
     Host "\\<www\\." ""
   </Target>
@@@ -7995,6 -7272,6 +8000,6 @@@ L<sensors(1)
  
  =head1 AUTHOR
  
 -Florian Forster E<lt>octo@verplant.orgE<gt>
 +Florian Forster E<lt>octo@collectd.orgE<gt>
  
  =cut
diff --combined src/tcpconns.c
@@@ -17,7 -17,7 +17,7 @@@
   * 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
   *
   * Author:
 - *   Florian octo Forster <octo at verplant.org>
 + *   Florian octo Forster <octo at collectd.org>
   *   Michael Stapelberg <michael+git at stapelberg.de>
   **/
  
@@@ -74,9 -74,7 +74,9 @@@
  /* sys/socket.h is necessary to compile when using netlink on older systems. */
  # include <sys/socket.h>
  # include <linux/netlink.h>
 +#if HAVE_LINUX_INET_DIAG_H
  # include <linux/inet_diag.h>
 +#endif
  # include <sys/socket.h>
  # include <arpa/inet.h>
  /* #endif KERNEL_LINUX */
  #endif /* KERNEL_AIX */
  
  #if KERNEL_LINUX
 +#if HAVE_STRUCT_LINUX_INET_DIAG_REQ
  struct nlreq {
    struct nlmsghdr nlh;
    struct inet_diag_req r;
  };
 +#endif
  
  static const char *tcp_state[] =
  {
@@@ -219,13 -215,13 +219,13 @@@ static const char *tcp_state[] 
    "CLOSED",
    "LISTEN",
    "SYN_SENT",
 -  "SYN_RCVD",
 +  "SYN_RECV",
    "ESTABLISHED",
    "CLOSE_WAIT",
 -  "FIN_WAIT_1",
 +  "FIN_WAIT1",
    "CLOSING",
    "LAST_ACK",
 -  "FIN_WAIT_2",
 +  "FIN_WAIT2",
    "TIME_WAIT"
  };
  
@@@ -272,20 -268,18 +272,23 @@@ static const char *config_keys[] 
  {
    "ListeningPorts",
    "LocalPort",
-   "RemotePort"
+   "RemotePort",
+   "AllPortsSummary"
  };
  static int config_keys_num = STATIC_ARRAY_SIZE (config_keys);
  
  static int port_collect_listening = 0;
+ static int port_collect_total = 0;
  static port_entry_t *port_list_head = NULL;
+ static uint32_t count_total[TCP_STATE_MAX + 1];
  
  #if KERNEL_LINUX
 +#if HAVE_STRUCT_LINUX_INET_DIAG_REQ
 +/* This depends on linux inet_diag_req because if this structure is missing,
 + * sequence_number is useless and we get a compilation warning.
 + */
  static uint32_t sequence_number = 0;
 +#endif
  
  enum
  {
  } linux_source = SRC_DUNNO;
  #endif
  
+ static void conn_prepare_vl (value_list_t *vl, value_t *values)
+ {
+   vl->values = values;
+   vl->values_len = 1;
+   sstrncpy (vl->host, hostname_g, sizeof (vl->host));
+   sstrncpy (vl->plugin, "tcpconns", sizeof (vl->plugin));
+   sstrncpy (vl->type, "tcp_connections", sizeof (vl->type));
+ }
  static void conn_submit_port_entry (port_entry_t *pe)
  {
    value_t values[1];
    value_list_t vl = VALUE_LIST_INIT;
    int i;
  
-   vl.values = values;
-   vl.values_len = 1;
-   sstrncpy (vl.host, hostname_g, sizeof (vl.host));
-   sstrncpy (vl.plugin, "tcpconns", sizeof (vl.plugin));
-   sstrncpy (vl.type, "tcp_connections", sizeof (vl.type));
+   conn_prepare_vl (&vl, values);
  
    if (((port_collect_listening != 0) && (pe->flags & PORT_IS_LISTENING))
        || (pe->flags & PORT_COLLECT_LOCAL))
    }
  } /* void conn_submit */
  
+ static void conn_submit_port_total (void)
+ {
+   value_t values[1];
+   value_list_t vl = VALUE_LIST_INIT;
+   int i;
+   conn_prepare_vl (&vl, values);
+   sstrncpy (vl.plugin_instance, "all", sizeof (vl.plugin_instance));
+   for (i = 1; i <= TCP_STATE_MAX; i++)
+   {
+     vl.values[0].gauge = count_total[i];
+     sstrncpy (vl.type_instance, tcp_state[i], sizeof (vl.type_instance));
+     plugin_dispatch_values (&vl);
+   }
+ }
  static void conn_submit_all (void)
  {
    port_entry_t *pe;
  
+   if (port_collect_total)
+     conn_submit_port_total ();
    for (pe = port_list_head; pe != NULL; pe = pe->next)
      conn_submit_port_entry (pe);
  } /* void conn_submit_all */
@@@ -381,6 -403,8 +412,8 @@@ static void conn_reset_port_entry (void
    port_entry_t *prev = NULL;
    port_entry_t *pe = port_list_head;
  
+   memset (&count_total, '\0', sizeof(count_total));
    while (pe != NULL)
    {
      /* If this entry was created while reading the files (ant not when handling
@@@ -428,6 -452,8 +461,8 @@@ static int conn_handle_ports (uint16_t 
      return (-1);
    }
  
+   count_total[state]++;
    /* Listening sockets */
    if ((state == TCP_STATE_LISTEN) && (port_collect_listening != 0))
    {
   * zero on other errors. */
  static int conn_read_netlink (void)
  {
 +#if HAVE_STRUCT_LINUX_INET_DIAG_REQ
    int fd;
    struct sockaddr_nl nladdr;
    struct nlreq req;
  
    /* Not reached because the while() loop above handles the exit condition. */
    return (0);
 +#else
 +  return (1);
 +#endif /* HAVE_STRUCT_LINUX_INET_DIAG_REQ */
  } /* int conn_read_netlink */
  
  static int conn_handle_line (char *buffer)
@@@ -704,6 -726,13 +739,13 @@@ static int conn_config (const char *key
        else
        pe->flags |= PORT_COLLECT_REMOTE;
    }
+   else if (strcasecmp (key, "AllPortsSummary") == 0)
+   {
+     if (IS_TRUE (value))
+       port_collect_total = 1;
+     else
+       port_collect_total = 0;
+   }
    else
    {
      return (-1);
  #if KERNEL_LINUX
  static int conn_init (void)
  {
-   if (port_list_head == NULL)
+   if (port_collect_total == 0 && port_list_head == NULL)
      port_collect_listening = 1;
  
    return (0);