• Home
  • History
  • Annotate
Name Date Size #Lines LOC

..03-May-2022-

bindings/H03-Sep-2020-4,8852,832

build-aux/H03-Sep-2020-16,80612,464

contrib/H03-May-2022-24,16818,743

m4/H03-Sep-2020-9,3428,455

proto/H03-Sep-2020-205171

src/H03-May-2022-214,098158,196

AUTHORSH A D03-Sep-20209.4 KiB427307

COPYINGH A D20-Jul-202019.2 KiB372308

ChangeLogH A D03-Sep-2020232.9 KiB4,4984,328

Makefile.amH A D03-May-202270.7 KiB2,5202,193

Makefile.inH A D03-Sep-2020836.7 KiB11,60810,763

READMEH A D03-Sep-202039.1 KiB1,191885

aclocal.m4H A D03-Sep-202051.1 KiB1,4191,285

configureH A D03-Sep-20203.5 MiB123,169100,867

configure.acH A D03-May-2022211.6 KiB7,6916,770

testwrapper.shH A D30-Jul-2020718 3115

version-gen.shH A D03-May-2022124 105

README

1 collectd - System information collection daemon
2=================================================
3https://collectd.org/
4
5About
6-----
7
8  collectd is a small daemon which collects system information periodically
9  and provides mechanisms to store and monitor the values in a variety of
10  ways.
11
12
13Features
14--------
15
16  * collectd is able to collect the following data:
17
18    - apache
19      Apache server utilization: Number of bytes transferred, number of
20      requests handled and detailed scoreboard statistics
21
22    - apcups
23      APC UPS Daemon: UPS charge, load, input/output/battery voltage, etc.
24
25    - apple_sensors
26      Sensors in Macs running Mac OS X / Darwin: Temperature, fan speed and
27      voltage sensors.
28
29    - aquaero
30      Various sensors in the Aquaero 5 water cooling board made by Aquacomputer.
31
32    - ascent
33      Statistics about Ascent, a free server for the game `World of Warcraft'.
34
35    - barometer
36      Reads absolute barometric pressure, air pressure reduced to sea level and
37      temperature.  Supported sensors are MPL115A2 and MPL3115 from Freescale
38      and BMP085 from Bosch.
39
40    - battery
41      Batterycharge, -current and voltage of ACPI and PMU based laptop
42      batteries.
43
44    - bind
45      Name server and resolver statistics from the `statistics-channel'
46      interface of BIND 9.5, 9,6 and later.
47
48    - buddyinfo
49      Statistics from buddyinfo file about memory fragmentation.
50
51    - capabilities
52      Platform capabilities decoded from hardware subsystems, for example from
53      SMBIOS using dmidecode.
54      <https://www.nongnu.org/dmidecode/>
55
56    - ceph
57      Statistics from the Ceph distributed storage system.
58
59    - cgroups
60      CPU accounting information for process groups under Linux.
61
62    - chrony
63      Chrony daemon statistics: Local clock drift, offset to peers, etc.
64
65    - connectivity
66      Event-based interface status.
67
68    - conntrack
69      Number of nf_conntrack entries.
70
71    - contextswitch
72      Number of context switches done by the operating system.
73
74    - cpu
75      CPU utilization: Time spent in the system, user, nice, idle, and related
76      states.
77
78    - cpufreq
79      CPU frequency (For laptops with speed step or a similar technology)
80
81    - cpusleep
82      CPU sleep: Time spent in suspend (For mobile devices which enter suspend automatically)
83
84    - curl
85      Parse statistics from websites using regular expressions.
86
87    - curl_json
88      Retrieves JSON data via cURL and parses it according to user
89      configuration.
90
91    - curl_xml
92      Retrieves XML data via cURL and parses it according to user
93      configuration.
94
95    - dbi
96      Executes SQL statements on various databases and interprets the returned
97      data.
98
99    - dcpmm
100      Collects Intel Optane DC Presistent Memory (DCPMM) performance and health statistics.
101
102    - df
103      Mountpoint usage (Basically the values `df(1)' delivers)
104
105    - disk
106      Disk utilization: Sectors read/written, number of read/write actions,
107      average time an IO-operation took to complete.
108
109    - dns
110      DNS traffic: Query types, response codes, opcodes and traffic/octets
111      transferred.
112
113    - dpdkstat
114      Collect DPDK interface statistics.
115      See docs/BUILD.dpdkstat.md for detailed build instructions.
116
117      This plugin should be compiled with compiler defenses enabled, for
118      example -fstack-protector.
119
120    - dpdk_telemetry
121      Collect DPDK interface, application and global statistics.
122      This plugin can be used as substitute to dpdkstat plugin.
123
124      This plugin is dependent on DPDK 19.08 release and must be used
125      along with the DPDK application.
126
127      Also, this plugin has dependency on Jansson library.
128
129    - drbd
130      Collect individual drbd resource statistics.
131
132    - email
133      Email statistics: Count, traffic, spam scores and checks.
134      See collectd-email(5).
135
136    - entropy
137      Amount of entropy available to the system.
138
139    - ethstat
140      Network interface card statistics.
141
142    - exec
143      Values gathered by a custom program or script.
144      See collectd-exec(5).
145
146    - fhcount
147      File handles statistics.
148
149    - filecount
150      Count the number of files in directories.
151
152    - fscache
153      Linux file-system based caching framework statistics.
154
155    - gmond
156      Receive multicast traffic from Ganglia instances.
157
158    - gps
159      Monitor gps related data through gpsd.
160
161    - gpu_nvidia
162      Monitor NVIDIA GPU statistics available through NVML.
163
164    - hddtemp
165      Hard disk temperatures using hddtempd.
166
167    - hugepages
168      Report the number of used and free hugepages. More info on
169      hugepages can be found here:
170      https://www.kernel.org/doc/Documentation/vm/hugetlbpage.txt.
171
172      This plugin should be compiled with compiler defenses enabled, for
173      example -fstack-protector.
174
175    - infiniband
176      Attributes and counters for each port on each IB device.
177
178    - intel_pmu
179      The intel_pmu plugin reads performance counters provided by the Linux
180      kernel perf interface. The plugin uses jevents library to resolve named
181      events to perf events and access perf interface.
182
183    - intel_rdt
184      The intel_rdt plugin collects information provided by monitoring features
185      of Intel Resource Director Technology (Intel(R) RDT) like Cache Monitoring
186      Technology (CMT), Memory Bandwidth Monitoring (MBM). These features
187      provide information about utilization of shared resources like last level
188      cache occupancy, local memory bandwidth usage, remote memory bandwidth
189      usage, instructions per clock.
190      <https://01.org/packet-processing/cache-monitoring-technology-memory-bandwidth-monitoring-cache-allocation-technology-code-and-data>
191
192    - interface
193      Interface traffic: Number of octets, packets and errors for each
194      interface.
195
196    - ipc
197      IPC counters: semaphores used, number of allocated segments in shared
198      memory and more.
199
200    - ipmi
201      IPMI (Intelligent Platform Management Interface) sensors information.
202
203    - ipstats
204      IPv4 and IPv6; incoming, outgoing, forwarded counters. FreeBSD only.
205
206    - iptables
207      Iptables' counters: Number of bytes that were matched by a certain
208      iptables rule.
209
210    - ipvs
211      IPVS connection statistics (number of connections, octets and packets
212      for each service and destination).
213      See http://www.linuxvirtualserver.org/software/index.html.
214
215    - irq
216      IRQ counters: Frequency in which certain interrupts occur.
217
218    - java
219      Integrates a `Java Virtual Machine' (JVM) to execute plugins in Java
220      bytecode.
221      See docs/BUILD.java.md for detailed build instructions.
222
223    - load
224      System load average over the last 1, 5 and 15 minutes.
225
226    - lpar
227      Detailed CPU statistics of the “Logical Partitions” virtualization
228      technique built into IBM's POWER processors.
229
230    - lua
231      The Lua plugin implements a Lua interpreter into collectd. This
232      makes it possible to write plugins in Lua which are executed by
233      collectd without the need to start a heavy interpreter every interval.
234      See collectd-lua(5) for details.
235
236    - madwifi
237      Queries very detailed usage statistics from wireless LAN adapters and
238      interfaces that use the Atheros chipset and the MadWifi driver.
239
240    - mbmon
241      Motherboard sensors: temperature, fan speed and voltage information,
242      using mbmon(1).
243
244    - mcelog
245      Monitor machine check exceptions (hardware errors detected by hardware
246      and reported to software) reported by mcelog and generate appropriate
247      notifications when machine check exceptions are detected.
248
249    - md
250      Linux software-RAID device information (number of active, failed, spare
251      and missing disks).
252
253    - memcachec
254      Query and parse data from a memcache daemon (memcached).
255
256    - memcached
257      Statistics of the memcached distributed caching system.
258      <http://www.danga.com/memcached/>
259
260    - memory
261      Memory utilization: Memory occupied by running processes, page cache,
262      buffer cache and free.
263
264    - mic
265      Collects CPU usage, memory usage, temperatures and power consumption from
266      Intel Many Integrated Core (MIC) CPUs.
267
268    - modbus
269      Reads values from Modbus/TCP enabled devices. Supports reading values
270      from multiple "slaves" so gateway devices can be used.
271
272    - multimeter
273      Information provided by serial multimeters, such as the `Metex
274      M-4650CR'.
275
276    - mysql
277      MySQL server statistics: Commands issued, handlers triggered, thread
278      usage, query cache utilization and traffic/octets sent and received.
279
280    - netapp
281      Plugin to query performance values from a NetApp storage system using the
282      “Manage ONTAP” SDK provided by NetApp.
283
284    - netlink
285      Very detailed Linux network interface and routing statistics. You can get
286      (detailed) information on interfaces, qdiscs, classes, and, if you can
287      make use of it, filters.
288
289    - network
290      Receive values that were collected by other hosts. Large setups will
291      want to collect the data on one dedicated machine, and this is the
292      plugin of choice for that.
293
294    - nfs
295      NFS Procedures: Which NFS command were called how often.
296
297    - nginx
298      Collects statistics from `nginx' (speak: engine X), a HTTP and mail
299      server/proxy.
300
301    - ntpd
302      NTP daemon statistics: Local clock drift, offset to peers, etc.
303
304    - numa
305      Information about Non-Uniform Memory Access (NUMA).
306
307    - nut
308      Network UPS tools: UPS current, voltage, power, charge, utilisation,
309      temperature, etc. See upsd(8).
310
311    - olsrd
312      Queries routing information from the “Optimized Link State Routing”
313      daemon.
314
315    - onewire (EXPERIMENTAL!)
316      Read onewire sensors using the owcapu library of the owfs project.
317      Please read in collectd.conf(5) why this plugin is experimental.
318
319    - openldap
320      Read monitoring information from OpenLDAP's cn=Monitor subtree.
321
322    - openvpn
323      RX and TX of each client in openvpn-status.log (status-version 2).
324      <http://openvpn.net/index.php/documentation/howto.html>
325
326    - oracle
327      Query data from an Oracle database.
328
329    - ovs_events
330      The plugin monitors the link status of Open vSwitch (OVS) connected
331      interfaces, dispatches the values to collectd and sends the notification
332      whenever the link state change occurs in the OVS database. It requires
333      YAJL library to be installed.
334      Detailed instructions for installing and setting up Open vSwitch, see
335      OVS documentation.
336      <http://openvswitch.org/support/dist-docs/INSTALL.rst.html>
337
338    - ovs_stats
339      The plugin collects the statistics of OVS connected bridges and
340      interfaces. It requires YAJL library to be installed.
341      Detailed instructions for installing and setting up Open vSwitch, see
342      OVS documentation.
343      <http://openvswitch.org/support/dist-docs/INSTALL.rst.html>
344
345    - pcie_errors
346      Read errors from PCI Express Device Status and AER extended capabilities.
347      <https://www.design-reuse.com/articles/38374/pcie-error-logging-and-handling-on-a-typical-soc.html>
348
349    - perl
350      The perl plugin implements a Perl-interpreter into collectd. You can
351      write your own plugins in Perl and return arbitrary values using this
352      API. See collectd-perl(5).
353
354    - pf
355      Query statistics from BSD's packet filter "pf".
356
357    - pinba
358      Receive and dispatch timing values from Pinba, a profiling extension for
359      PHP.
360
361    - ping
362      Network latency: Time to reach the default gateway or another given
363      host.
364
365    - postgresql
366      PostgreSQL database statistics: active server connections, transaction
367      numbers, block IO, table row manipulations.
368
369    - powerdns
370      PowerDNS name server statistics.
371
372    - processes
373      Process counts: Number of running, sleeping, zombie, ... processes.
374
375    - procevent
376      Listens for process starts and exits via netlink.
377
378    - protocols
379      Counts various aspects of network protocols such as IP, TCP, UDP, etc.
380
381    - python
382      The python plugin implements a Python interpreter into collectd. This
383      makes it possible to write plugins in Python which are executed by
384      collectd without the need to start a heavy interpreter every interval.
385      See collectd-python(5) for details.
386
387    - redis
388      The redis plugin gathers information from a Redis server, including:
389      uptime, used memory, total connections etc.
390
391    - routeros
392      Query interface and wireless registration statistics from RouterOS.
393
394    - rrdcached
395      RRDtool caching daemon (RRDcacheD) statistics.
396
397    - sensors
398      System sensors, accessed using lm_sensors: Voltages, temperatures and
399      fan rotation speeds.
400
401    - serial
402      RX and TX of serial interfaces. Linux only; needs root privileges.
403
404    - sigrok
405      Uses libsigrok as a backend, allowing any sigrok-supported device
406      to have its measurements fed to collectd. This includes multimeters,
407      sound level meters, thermometers, and much more.
408
409    - slurm
410      Gathers per-partition node and job state information using libslurm,
411      as well as internal health statistics.
412
413    - smart
414      Collect SMART statistics, notably load cycle count, temperature
415      and bad sectors.
416
417    - snmp
418      Read values from SNMP (Simple Network Management Protocol) enabled
419      network devices such as switches, routers, thermometers, rack monitoring
420      servers, etc. See collectd-snmp(5).
421
422    - statsd
423      Acts as a StatsD server, reading values sent over the network from StatsD
424      clients and calculating rates and other aggregates out of these values.
425
426    - sysevent
427      Listens to rsyslog events and submits matched values.
428
429    - swap
430      Pages swapped out onto hard disk or whatever is called `swap' by the OS..
431
432    - table
433      Parse table-like structured files.
434
435    - tail
436      Follows (tails) log files, parses them by lines and submits matched
437      values.
438
439    - tail_csv
440      Follows (tails) files in CSV format, parses each line and submits
441      extracted values.
442
443    - tape
444      Bytes and operations read and written on tape devices. Solaris only.
445
446    - tcpconns
447      Number of TCP connections to specific local and remote ports.
448
449    - teamspeak2
450      TeamSpeak2 server statistics.
451
452    - ted
453      Plugin to read values from `The Energy Detective' (TED).
454
455    - thermal
456      Linux ACPI thermal zone information.
457
458    - tokyotyrant
459      Reads the number of records and file size from a running Tokyo Tyrant
460      server.
461
462    - turbostat
463      Reads CPU frequency and C-state residency on modern Intel
464      turbo-capable processors.
465
466    - ubi
467      Reads the count of bad physical eraseblocks and the current
468      maximum erase counter value on UBI volumes.
469
470    - uptime
471      System uptime statistics.
472
473    - users
474      Users currently logged in.
475
476    - varnish
477      Various statistics from Varnish, an HTTP accelerator.
478
479    - virt
480      CPU, memory, disk and network I/O statistics from virtual machines.
481
482    - vmem
483      Virtual memory statistics, e.g. the number of page-ins/-outs or the
484      number of pagefaults.
485
486    - vserver
487      System resources used by Linux VServers.
488      See <http://linux-vserver.org/>.
489
490    - wireless
491      Link quality of wireless cards. Linux only.
492
493    - xencpu
494      XEN Hypervisor CPU stats.
495
496    - xmms
497      Bitrate and frequency of music played with XMMS.
498
499    - zfs_arc
500      Statistics for ZFS' “Adaptive Replacement Cache” (ARC).
501
502    - zone
503      Measures the percentage of cpu load per container (zone) under Solaris 10
504      and higher
505
506    - zookeeper
507      Read data from Zookeeper's MNTR command.
508
509  * Output can be written or sent to various destinations by the following
510    plugins:
511
512    - amqp
513      Sends JSON-encoded data to an Advanced Message Queuing Protocol (AMQP)
514      0.9.1 server, such as RabbitMQ.
515
516    - amqp1
517      Sends JSON-encoded data to an Advanced Message Queuing Protocol (AMQP)
518      1.0 server, such as Qpid Dispatch Router or Apache Artemis Broker.
519
520    - csv
521      Write to comma separated values (CSV) files. This needs lots of
522      diskspace but is extremely portable and can be analysed with almost
523      every program that can analyse anything. Even Microsoft's Excel..
524
525    - grpc
526      Send and receive values over the network using the gRPC framework.
527
528    - lua
529      It's possible to implement write plugins in Lua using the Lua
530      plugin. See collectd-lua(5) for details.
531
532    - mqtt
533      Publishes and subscribes to MQTT topics.
534
535    - network
536      Send the data to a remote host to save the data somehow. This is useful
537      for large setups where the data should be saved by a dedicated machine.
538
539    - perl
540      Of course the values are propagated to plugins written in Perl, too, so
541      you can easily do weird stuff with the plugins we didn't dare think of
542      ;) See collectd-perl(5).
543
544    - python
545      It's possible to implement write plugins in Python using the python
546      plugin. See collectd-python(5) for details.
547
548    - rrdcached
549      Output to round-robin-database (RRD) files using the RRDtool caching
550      daemon (RRDcacheD) - see rrdcached(1). That daemon provides a general
551      implementation of the caching done by the `rrdtool' plugin.
552
553    - rrdtool
554      Output to round-robin-database (RRD) files using librrd. See rrdtool(1).
555      This is likely the most popular destination for such values. Since
556      updates to RRD-files are somewhat expensive this plugin can cache
557      updates to the files and write a bunch of updates at once, which lessens
558      system load a lot.
559
560    - snmp_agent
561      Receives and handles queries from SNMP master agent and returns the data
562      collected by read plugins. Handles requests only for OIDs specified in
563      configuration file. To handle SNMP queries the plugin gets data from
564      collectd and translates requested values from collectd's internal format
565      to SNMP format.
566
567    - unixsock
568      One can query the values from the unixsock plugin whenever they're
569      needed. Please read collectd-unixsock(5) for a description on how that's
570      done.
571
572    - write_graphite
573      Sends data to Carbon, the storage layer of Graphite using TCP or UDP. It
574      can be configured to avoid logging send errors (especially useful when
575      using UDP).
576
577    - write_http
578      Sends the values collected by collectd to a web-server using HTTP POST
579      requests. The transmitted data is either in a form understood by the
580      Exec plugin or formatted in JSON.
581
582    - write_kafka
583      Sends data to Apache Kafka, a distributed queue.
584
585    - write_log
586      Writes data to the log
587
588    - write_mongodb
589      Sends data to MongoDB, a NoSQL database.
590
591    - write_prometheus
592      Publish values using an embedded HTTP server, in a format compatible
593      with Prometheus' collectd_exporter.
594
595    - write_redis
596      Sends the values to a Redis key-value database server.
597
598    - write_riemann
599      Sends data to Riemann, a stream processing and monitoring system.
600
601    - write_sensu
602      Sends data to Sensu, a stream processing and monitoring system, via the
603      Sensu client local TCP socket.
604
605    - write_syslog
606      Sends data in syslog format, using TCP, where the message
607      contains the metric in human or JSON format.
608
609    - write_tsdb
610      Sends data OpenTSDB, a scalable no master, no shared state time series
611      database.
612
613  * Logging is, as everything in collectd, provided by plugins. The following
614    plugins keep us informed about what's going on:
615
616    - logfile
617      Writes log messages to a file or STDOUT/STDERR.
618
619    - perl
620      Log messages are propagated to plugins written in Perl as well.
621      See collectd-perl(5).
622
623    - python
624      It's possible to implement log plugins in Python using the python plugin.
625      See collectd-python(5) for details.
626
627    - syslog
628      Logs to the standard UNIX logging mechanism, syslog.
629
630    - log_logstash
631      Writes log messages formatted as logstash JSON events.
632
633  * Notifications can be handled by the following plugins:
634
635    - notify_desktop
636      Send a desktop notification to a notification daemon, as defined in
637      the Desktop Notification Specification. To actually display the
638      notifications, notification-daemon is required.
639      See http://www.galago-project.org/specs/notification/.
640
641    - notify_email
642      Send an E-mail with the notification message to the configured
643      recipients.
644
645    - notify_nagios
646      Submit notifications as passive check results to a local nagios instance.
647
648    - exec
649      Execute a program or script to handle the notification.
650      See collectd-exec(5).
651
652    - logfile
653      Writes the notification message to a file or STDOUT/STDERR.
654
655    - network
656      Send the notification to a remote host to handle it somehow.
657
658    - perl
659      Notifications are propagated to plugins written in Perl as well.
660      See collectd-perl(5).
661
662    - python
663      It's possible to implement notification plugins in Python using the
664      python plugin. See collectd-python(5) for details.
665
666  * Value processing can be controlled using the "filter chain" infrastructure
667    and "matches" and "targets". The following plugins are available:
668
669    - match_empty_counter
670      Match counter values which are currently zero.
671
672    - match_hashed
673      Match values using a hash function of the hostname.
674
675    - match_regex
676      Match values by their identifier based on regular expressions.
677
678    - match_timediff
679      Match values with an invalid timestamp.
680
681    - match_value
682      Select values by their data sources' values.
683
684    - target_notification
685      Create and dispatch a notification.
686
687    - target_replace
688      Replace parts of an identifier using regular expressions.
689
690    - target_scale
691      Scale (multiply) values by an arbitrary value.
692
693    - target_set
694      Set (overwrite) entire parts of an identifier.
695
696  * Miscellaneous plugins:
697
698    - aggregation
699      Selects multiple value lists based on patterns or regular expressions
700      and creates new aggregated values lists from those.
701
702    - threshold
703      Checks values against configured thresholds and creates notifications if
704      values are out of bounds. See collectd-threshold(5) for details.
705
706    - uuid
707      Sets the hostname to a unique identifier. This is meant for setups
708      where each client may migrate to another physical host, possibly going
709      through one or more name changes in the process.
710
711  * Performance: Since collectd is running as a daemon it doesn't spend much
712    time starting up again and again. With the exception of the exec plugin no
713    processes are forked. Caching in output plugins, such as the rrdtool and
714    network plugins, makes sure your resources are used efficiently. Also,
715    since collectd is programmed multithreaded it benefits from hyper-threading
716    and multicore processors and makes sure that the daemon isn't idle if only
717    one plugin waits for an IO-operation to complete.
718
719  * Once set up, hardly any maintenance is necessary. Setup is kept as easy
720    as possible and the default values should be okay for most users.
721
722
723Operation
724---------
725
726  * collectd's configuration file can be found at `sysconfdir'/collectd.conf.
727    Run `collectd -h' for a list of built-in defaults. See `collectd.conf(5)'
728    for a list of options and a syntax description.
729
730  * When the `csv' or `rrdtool' plugins are loaded they'll write the values to
731    files. The usual place for these files is beneath `/var/lib/collectd'.
732
733  * When using some of the plugins, collectd needs to run as user root, since
734    only root can do certain things, such as craft ICMP packages needed to ping
735    other hosts. collectd should NOT be installed setuid root since it can be
736    used to overwrite valuable files!
737
738  * Sample scripts to generate graphs reside in `contrib/' in the source
739    package or somewhere near `/usr/share/doc/collectd' in most distributions.
740    Please be aware that those script are meant as a starting point for your
741    own experiments.. Some of them require the `RRDs' Perl module.
742    (`librrds-perl' on Debian) If you have written a more sophisticated
743    solution please share it with us.
744
745  * The RRAs of the automatically created RRD files depend on the `step'
746    and `heartbeat' settings given. If change these settings you may need to
747    re-create the files, losing all data. Please be aware of that when changing
748    the values and read the rrdtool(1) manpage thoroughly.
749
750
751collectd and chkrootkit
752-----------------------
753
754  If you are using the `dns' plugin chkrootkit(1) will report collectd as a
755  packet sniffer ("<iface>: PACKET SNIFFER(/usr/sbin/collectd[<pid>])"). The
756  plugin captures all UDP packets on port 53 to analyze the DNS traffic. In
757  this case, collectd is a legitimate sniffer and the report should be
758  considered to be a false positive. However, you might want to check that
759  this really is collectd and not some other, illegitimate sniffer.
760
761
762Prerequisites
763-------------
764
765  To compile collectd from source you will need:
766
767  * Usual suspects: C compiler, linker, preprocessor, make, ...
768
769    collectd makes use of some common C99 features, e.g. compound literals and
770    mixed declarations, and therefore requires a C99 compatible compiler.
771
772    On Debian and Ubuntu, the "build-essential" package should pull in
773    everything that's necessary.
774
775  * A POSIX-threads (pthread) implementation.
776    Since gathering some statistics is slow (network connections, slow devices,
777    etc) collectd is parallelized. The POSIX threads interface is being
778    used and should be found in various implementations for hopefully all
779    platforms.
780
781  * When building from the Git repository, flex (tokenizer) and bison (parser
782    generator) are required. Release tarballs include the generated files – you
783    don't need these packages in that case.
784
785  * aerotools-ng (optional)
786    Used by the `aquaero' plugin. Currently, the `libaquaero5' library, which
787    is used by the `aerotools-ng' toolkit, is not compiled as a shared object
788    nor does it feature an installation routine. Therefore, you need to point
789    collectd's configure script at the source directory of the `aerotools-ng'
790    project.
791    <https://github.com/lynix/aerotools-ng>
792
793  * CoreFoundation.framework and IOKit.framework (optional)
794    For compiling on Darwin in general and the `apple_sensors' plugin in
795    particular.
796    <http://developer.apple.com/corefoundation/>
797
798  * CUDA (optional)
799    Used by the `gpu_nvidia' plugin
800    <https://developer.nvidia.com/cuda-downloads>
801
802  * libatasmart (optional)
803    Used by the `smart' plugin.
804    <http://git.0pointer.de/?p=libatasmart.git>
805
806  * libcap (optional)
807    The `turbostat' plugin can optionally build Linux Capabilities support,
808    which avoids full privileges requirement (aka. running as root) to read
809    values.
810    <http://sites.google.com/site/fullycapable/>
811
812  * libclntsh (optional)
813    Used by the `oracle' plugin.
814
815  * libhiredis (optional)
816    Used by the redis plugin. Please note that you require a 0.10.0 version
817    or higher. <https://github.com/redis/hiredis>
818
819  * libcurl (optional)
820    If you want to use the `apache', `ascent', `bind', `curl', `curl_json',
821    `curl_xml', `nginx', or `write_http' plugin.
822    <http://curl.haxx.se/>
823
824  * libdbi (optional)
825    Used by the `dbi' plugin to connect to various databases.
826    <http://libdbi.sourceforge.net/>
827
828  * libesmtp (optional)
829    For the `notify_email' plugin.
830    <http://www.stafford.uklinux.net/libesmtp/>
831
832  * libganglia (optional)
833    Used by the `gmond' plugin to process data received from Ganglia.
834    <http://ganglia.info/>
835
836  * libgrpc (optional)
837    Used by the `grpc' plugin. gRPC requires a C++ compiler supporting the
838    C++11 standard.
839    <https://grpc.io/>
840
841  * libgcrypt (optional)
842    Used by the `network' plugin for encryption and authentication.
843    <http://www.gnupg.org/>
844
845  * libgps (optional)
846    Used by the `gps' plugin.
847    <http://developer.berlios.de/projects/gpsd/>
848
849  * libi2c-dev (optional)
850    Used for the plugin `barometer', provides just the i2c-dev.h header file
851    for user space i2c development.
852
853  * libiptc (optional)
854    For querying iptables counters.
855    <http://netfilter.org/>
856
857  * libjansson (optional)
858    Parse JSON data. This is used for the `capabilities' and `dpdk_telemetry` plugins.
859    <http://www.digip.org/jansson/>
860
861  * libjevents (optional)
862    The jevents library is used by the `intel_pmu' plugin to access the Linux
863    kernel perf interface.
864    Note: the library should be build with -fPIC flag to be linked with
865    intel_pmu shared object correctly.
866    <https://github.com/andikleen/pmu-tools>
867
868  * libjvm (optional)
869    Library that encapsulates the `Java Virtual Machine' (JVM). This library is
870    used by the `java' plugin to execute Java bytecode.
871    See docs/BUILD.java.md for detailed build instructions.
872    <http://openjdk.java.net/> (and others)
873
874  * libldap (optional)
875    Used by the `openldap' plugin.
876    <http://www.openldap.org/>
877
878  * liblua (optional)
879    Used by the `lua' plugin. Currently, Lua 5.1 and later are supported.
880    <https://www.lua.org/>
881
882  * libmemcached (optional)
883    Used by the `memcachec' plugin to connect to a memcache daemon.
884    <http://tangent.org/552/libmemcached.html>
885
886  * libmicrohttpd (optional)
887    Used by the write_prometheus plugin to run an http daemon.
888    <http://www.gnu.org/software/libmicrohttpd/>
889
890  * libmnl (optional)
891    Used by the `netlink' plugin.
892    <http://www.netfilter.org/projects/libmnl/>
893
894  * libmodbus (optional)
895    Used by the `modbus' plugin to communicate with Modbus/TCP devices. The
896    `modbus' plugin works with version 2.0.3 of the library – due to frequent
897    API changes other versions may or may not compile cleanly.
898    <http://www.libmodbus.org/>
899
900  * libmysqlclient (optional)
901    Unsurprisingly used by the `mysql' plugin.
902    <http://dev.mysql.com/>
903
904  * libnetapp (optional)
905    Required for the `netapp' plugin.
906    This library is part of the “Manage ONTAP SDK” published by NetApp.
907
908  * libnetsnmp (optional)
909    For the `snmp' and 'snmp_agent' plugins.
910    <http://www.net-snmp.org/>
911
912  * libnetsnmpagent (optional)
913    Required for the 'snmp_agent' plugin.
914    <http://www.net-snmp.org/>
915
916  * libnotify (optional)
917    For the `notify_desktop' plugin.
918    <http://www.galago-project.org/>
919
920  * libopenipmi (optional)
921    Used by the `ipmi' plugin to prove IPMI devices.
922    <http://openipmi.sourceforge.net/>
923
924  * liboping (optional)
925    Used by the `ping' plugin to send and receive ICMP packets.
926    <http://octo.it/liboping/>
927
928  * libowcapi (optional)
929    Used by the `onewire' plugin to read values from onewire sensors (or the
930    owserver(1) daemon).
931    <http://www.owfs.org/>
932
933  * libpcap (optional)
934    Used to capture packets by the `dns' plugin.
935    <http://www.tcpdump.org/>
936
937  * libperfstat (optional)
938    Used by various plugins to gather statistics under AIX.
939
940  * libperl (optional)
941    Obviously used by the `perl' plugin. The library has to be compiled with
942    ithread support (introduced in Perl 5.6.0).
943    <http://www.perl.org/>
944
945  * libpmwapi (optional)
946    Used by the `dcpmm` plugin.
947    The library github: https://github.com/intel/intel-pmwatch
948    Follow the pmwatch build instructions mentioned for dcpmm plugin and
949    use the install path to resolve the dependency here.
950
951  * libpq (optional)
952    The PostgreSQL C client library used by the `postgresql' plugin.
953    <http://www.postgresql.org/>
954
955  * libpqos (optional)
956    The PQoS library for Intel(R) Resource Director Technology used by the
957    `intel_rdt' plugin.
958    <https://github.com/01org/intel-cmt-cat>
959
960  * libprotobuf, protoc 3.0+ (optional)
961    Used by the `grpc' plugin to generate service stubs and code to handle
962    network packets of collectd's protobuf-based network protocol.
963    <https://developers.google.com/protocol-buffers/>
964
965  * libprotobuf-c, protoc-c (optional)
966    Used by the `pinba' plugin to generate a parser for the network packets
967    sent by the Pinba PHP extension.
968    <http://code.google.com/p/protobuf-c/>
969
970  * libpython (optional)
971    Used by the `python' plugin. Currently, Python 2.6 and later and Python 3
972    are supported.
973    <http://www.python.org/>
974
975  * libqpid-proton (optional)
976    Used by the `amqp1' plugin for AMQP 1.0 connections, for example to
977    Qdrouterd.
978    <http://qpid.apache.org/>
979
980  * librabbitmq (optional; also called “rabbitmq-c”)
981    Used by the `amqp' plugin for AMQP 0.9.1 connections, for example to
982    RabbitMQ.
983    <http://hg.rabbitmq.com/rabbitmq-c/>
984
985  * librdkafka (optional; also called “rdkafka”)
986    Used by the `write_kafka' plugin for producing messages and sending them
987    to a Kafka broker.
988    <https://github.com/edenhill/librdkafka>
989
990  * librouteros (optional)
991    Used by the `routeros' plugin to connect to a device running `RouterOS'.
992    <http://octo.it/librouteros/>
993
994  * librrd (optional)
995    Used by the `rrdtool' and `rrdcached' plugins. The latter requires RRDtool
996    client support which was added after version 1.3 of RRDtool. Versions 1.0,
997    1.2 and 1.3 are known to work with the `rrdtool' plugin.
998    <http://oss.oetiker.ch/rrdtool/>
999
1000  * librt, libsocket, libkstat, libdevinfo (optional)
1001    Various standard Solaris libraries which provide system functions.
1002    <http://developers.sun.com/solaris/>
1003
1004  * libsensors (optional)
1005    To read from `lm_sensors', see the `sensors' plugin.
1006    <http://www.lm-sensors.org/>
1007
1008  * libsigrok (optional)
1009    Used by the `sigrok' plugin. In addition, libsigrok depends on glib,
1010    libzip, and optionally (depending on which drivers are enabled) on
1011    libusb, libftdi and libudev.
1012
1013  * libslurm (optional)
1014    Used by the `slurm` plugin.
1015    <https://slurm.schedmd.com/>
1016
1017  * libstatgrab (optional)
1018    Used by various plugins to collect statistics on systems other than Linux
1019    and/or Solaris.
1020    <http://www.i-scream.org/libstatgrab/>
1021
1022  * libtokyotyrant (optional)
1023    Used by the `tokyotyrant' plugin.
1024    <http://1978th.net/tokyotyrant/>
1025
1026  * libupsclient/nut (optional)
1027    For the `nut' plugin which queries nut's `upsd'.
1028    <http://networkupstools.org/>
1029
1030  * libvirt (optional)
1031    Collect statistics from virtual machines.
1032    <http://libvirt.org/>
1033
1034  * libxml2 (optional)
1035    Parse XML data. This is needed for the `ascent', `bind', `curl_xml' and
1036    `virt' plugins.
1037    <http://xmlsoft.org/>
1038
1039  * libxen (optional)
1040    Used by the `xencpu' plugin.
1041    <http://xenbits.xensource.com/>
1042
1043  * libxmms (optional)
1044    <http://www.xmms.org/>
1045
1046  * libyajl (optional)
1047    Parse JSON data. This is needed for the `ceph', `curl_json', 'ovs_events',
1048    'ovs_stats' and `log_logstash' plugins.
1049    <http://github.com/lloyd/yajl>
1050
1051  * libvarnish (optional)
1052     Fetches statistics from a Varnish instance. This is needed for the
1053     `varnish' plugin.
1054     <http://varnish-cache.org>
1055
1056  * riemann-c-client (optional)
1057     For the `write_riemann' plugin.
1058     <https://github.com/algernon/riemann-c-client>
1059
1060Configuring / Compiling / Installing
1061------------------------------------
1062
1063  To configure, build and install collectd with the default settings, run
1064  `./configure && make && make install'.  For a complete list of configure
1065  options and their description, run `./configure --help'.
1066
1067  By default, the configure script will check for all build dependencies and
1068  disable all plugins whose requirements cannot be fulfilled (any other plugin
1069  will be enabled). To enable a plugin, install missing dependencies (see
1070  section `Prerequisites' above) and rerun `configure'. If you specify the
1071  `--enable-<plugin>' configure option, the script will fail if the depen-
1072  dencies for the specified plugin are not met. In that case you can force the
1073  plugin to be built using the `--enable-<plugin>=force' configure option.
1074  This will most likely fail though unless you're working in a very unusual
1075  setup and you really know what you're doing. If you specify the
1076  `--disable-<plugin>' configure option, the plugin will not be built. If you
1077  specify the `--enable-all-plugins' or `--disable-all-plugins' configure
1078  options, all plugins will be enabled or disabled respectively by default.
1079  Explicitly enabling or disabling a plugin overwrites the default for the
1080  specified plugin. These options are meant for package maintainers and should
1081  not be used in everyday situations.
1082
1083  By default, collectd will be installed into `/opt/collectd'. You can adjust
1084  this setting by specifying the `--prefix' configure option - see INSTALL for
1085  details. If you pass DESTDIR=<path> to `make install', <path> will be
1086  prefixed to all installation directories. This might be useful when creating
1087  packages for collectd.
1088
1089Generating the configure script
1090-------------------------------
1091
1092Collectd ships with a `build.sh' script to generate the `configure'
1093script shipped with releases.
1094
1095To generate the `configure` script, you'll need the following dependencies:
1096
1097- autoconf
1098- automake
1099- flex
1100- bison
1101- libtool
1102- pkg-config
1103
1104The `build.sh' script takes no arguments.
1105
1106
1107Building on Windows
1108-----------------------------------------------
1109
1110Collectd can be built on Windows using Cygwin, and the result is a binary that
1111runs natively on Windows. That is, Cygwin is only needed for building, not running,
1112collectd.
1113
1114You will need to install the following Cygwin packages:
1115- automake
1116- bison
1117- flex
1118- git
1119- libtool
1120- make
1121- mingw64-x86_64-dlfcn
1122- mingw64-x86_64-gcc-core
1123- mingw64-x86_64-zlib
1124- pkg-config
1125
1126To build, just run the `build.sh' script in your Cygwin terminal. By default, it installs
1127to "C:/Program Files/collectd". You can change the location by setting the INSTALL_DIR
1128variable:
1129
1130$ export INSTALL_DIR="C:/some/other/install/directory"
1131$ ./build.sh
1132
1133or:
1134
1135$ INSTALL_DIR="C:/some/other/install/directory" ./build.sh
1136
1137
1138Crosscompiling
1139--------------
1140
1141  To compile correctly collectd needs to be able to initialize static
1142  variables to NAN (Not A Number). Some C libraries, especially the GNU
1143  libc, have a problem with that.
1144
1145  Luckily, with GCC it's possible to work around that problem: One can define
1146  NAN as being (0.0 / 0.0) and `isnan' as `f != f'. However, to test this
1147  ``implementation'' the configure script needs to compile and run a short
1148  test program. Obviously running a test program when doing a cross-
1149  compilation is, well, challenging.
1150
1151  If you run into this problem, you can use the `--with-nan-emulation'
1152  configure option to force the use of this implementation. We can't promise
1153  that the compiled binary actually behaves as it should, but since NANs
1154  are likely never passed to the libm you have a good chance to be lucky.
1155
1156  Likewise, collectd needs to know the layout of doubles in memory, in order
1157  to craft uniform network packets over different architectures. For this, it
1158  needs to know how to convert doubles into the memory layout used by x86. The
1159  configure script tries to figure this out by compiling and running a few
1160  small test programs. This is of course not possible when cross-compiling.
1161  You can use the `--with-fp-layout' option to tell the configure script which
1162  conversion method to assume. Valid arguments are:
1163
1164    * `nothing'    (12345678 -> 12345678)
1165    * `endianflip' (12345678 -> 87654321)
1166    * `intswap'    (12345678 -> 56781234)
1167
1168
1169Contact
1170-------
1171
1172  Please use GitHub to report bugs and submit pull requests:
1173  <https://github.com/collectd/collectd/>.
1174  See CONTRIBUTING.md for details.
1175
1176  For questions, development information and basically all other concerns please
1177  send an email to collectd's mailing list at
1178  <list at collectd.org>.
1179
1180  For live discussion and more personal contact visit us in IRC, we're in
1181  channel #collectd on freenode.
1182
1183
1184Author
1185------
1186
1187  Florian octo Forster <octo at collectd.org>,
1188  Sebastian tokkee Harl <sh at tokkee.org>,
1189  and many contributors (see `AUTHORS').
1190
1191