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