collectd on Debian ================== General notes: -------------- - Some plugins require additional libraries. To prevent you from having to install dozens of further packages that you don't actually need, there is no strict dependency on those libraries. Rather, they are listed as recommenda- tions ("collectd" package) or suggestions ("collectd-core" package"). See /usr/share/doc/collectd-core/README.Debian.plugins for details. - The main components of collectd have been split into two packages: * "collectd-core": This package contains the main program file and the plugins but no config- uration. It allows sites to, e.g., provide customizations on top of it without having to modify the "collectd" package. For example, a custom configuration and appropriate dependencies may be provided by some package depending on "collectd-core" and conflicting / replacing / providing "collectd". Ready-to-use sample config files (collectd.conf, filters.conf, thresholds.conf) are available in /usr/share/doc/collectd-core/examples/. * "collectd": This package provides a full installation of the daemon, including a configuration. It is meant to be ready to use for simple setups or first steps. Configuring collectd: --------------------- - See collectd.conf(5) for details about configuring collectd. Access the collected data: -------------------------- collectd is able to write data to CSV (comma separated list) and RRD (round robin database - see http://oss.oetiker.ch/rrdtool/) files. However it does not create graphs from these files. This package contains two sample scripts in /usr/share/doc/collectd/examples/ which can be used for this purpose. They are meant to be a starting point for your own experiments - more sophisticated solutions are welcome. - collectd2html.pl: This script by Vincent Stehlé will search for RRD files in "/var/lib/collectd/" and generate a static HTML file and a directory containing several PNG files which are graphs of the RRD files found. - collection.cgi: Sample CGI script that creates graphs on the fly. The Perl modules "RRDs" (package librrds-perl), "URI:Escape" (package liburi-perl), "HTML::Entities" (package libhtml-parser-perl) and a CGI capable web server (e.g. apache2 or boa) are required for this script to run. Simply install the (gunzip'ed) script to a place where the webserver will treat it as a CGI script (/usr/lib/cgi-bin/ by default) and visit that page in a browser (http://localhost/cgi-bin/collection.cgi by default). Please refer to your webserver's documentation for more details. collection.cgi requires a small config file, which is installed to /etc/collectd/collection.conf. You should not need to change anything there. - collection3: A graphing front-end for the RRD files created by and filled with collectd. See /usr/share/doc/collectd/examples/collection3/README for details. This is a successor for collection.cgi. Cleanup of old data: -------------------- collectd itself does not take care of removing any data files (e.g. RRDtool) that are no longer updated (e.g., no longer existing hosts or instances). There are a couple of ways to take care of that. In any case, double-check the list of files to be removed before doing so! We do not take responsibility for any data loss or similar. - Check the last modification time of all RRD files: find /var/lib/collectd/rrd/ -mtime +30 -type f This will list all files that have not been updated within the last 30 days. After double-checking the list of files, use a command like the following to delete old files: find /var/lib/collectd/rrd/ -mtime +30 -type f | xargs rm NOTE: Some versions of RRDtool did not update mtime when writing to a file. This has been fixed in version 1.3.5 of RRDtool. If your version is affected by that, this approach does not work. - Check the 'last_update' header of the RRD files: export IFS=" " for file in $( find /var/lib/collectd/rrd/ -type f -name '*.rrd' ); do last_update=$( rrdtool info $file | grep last_update | cut -d' ' -f3 ) if test -n "$last_update" \ -a $(( $( date +%s ) - $last_update )) -gt 2592000; then echo $file fi done This will also list all files that have not been updated within the last 30 days. It's a bit more expensive since each and every RRD file will have to be read from disk rather than checking the file-system meta-data only. When doing those checks, take into account any caching times configured in the RRDtool plugin or when using RRDCacheD. Building your own plugins: -------------------------- - Originally, plugins for collectd had to be written in C and linked as shared objects. Starting with version 4.0.0, it is also possible to use plugins written in the scripting language Perl or implemented as separate processes. In later versions, support for Java and Python has been added. See the appropriate collectd-(5) manual page for details. - If you want to contribute plugins to the official distribution you should read https://collectd.org/dev-info.shtml. - If you want to build C plugins for your personal use only simply install the collectd-dev package and use /usr/share/doc/collectd-dev/examples/myplugin.c as a starting point (Note: This is already a working example, though it does not collect any useful data). The resulting file can be compiled as follows: gcc -DHAVE_CONFIG_H -shared -fPIC -o myplugin.so myplugin.c Copy myplugin.so to /usr/lib/collectd and add the following line to your collectd config file: LoadPlugin myplugin Restart collectd and you're done. - The collectd-dev package also provides an example Perl plugin that can be used as a starting point for your own development. It can be found in /usr/share/doc/collectd-dev/examples/MyPlugin.pm (Note: This is already a working example, though it does not collect any useful data). To enable the plugin, copy it to a place where Perl can find it (i.e. a subdirectory named "Collectd/Plugin" of a directory listed in @INC) and add the following line to the perl plugin section in your config file: LoadPlugin "Collectd::Plugin::MyPlugin" or BaseName "Collectd::Plugin" LoadPlugin MyPlugin Restart collectd and you're done. Examples: --------- - SpamAssassin/: This directory contains a SpamAssassin plugin which passes statistics to collectd using the email plugin. See the embedded POD documentation for information about setup and configuration: perldoc Collectd.pm. - iptables/: This directory contains a script which will setup iptables to do global logging of all traffic going in and out of an interface. This information can then be collected by collectd's iptables plugin. - collectd-network.py: Python module implementing the collectd network protocol in pure Python. It currently supports to receive data and notifications from collectd. - collectd-unixsock.py: Python module providing an interface to collect's unixsock plugin. - cussh.pl: "Collectd Unix Socket SHell" is a small, interactive front-end for the unixsock plugin. See the embedded POD documentation for details: perldoc cussh.pl. - exec-munin.px: Script to be used with the exec-plugin (see collectd-exec(5) for details) which executes munin plugins, parses the output and translates it to a format the exec-plugin understands. The features are limited - changing the munin plugins to use the output format understood by the exec-plugin is recommended. See the embedded POD documentation for more details: perldoc exec-munin.px. - exec-smartctl: Sample script for the exec plugin. Please refer to the documentation in the file - you will have to adapt it to your needs anyway. - network-proxy.py: A simple unicast proxy for collectd traffic. - snmp-data.conf: Sample configuration for the SNMP plugin. This config includes a few standard definitions that you can include in your own config using the `Include' statement (available since version 4.2.0). The config includes some data that is defined in the IF-MIB, e. g. octet or packet counters, UPS-MIB and whatever people have send in. If you have some more definitions please send them in, so others can profit from it. - snmp-probe-host.px: Script to be used to automatically generate SNMP configuration snippets for the "snmp" plugin. See the embedded POD documentation for more details: perldoc snmp-probe-host.px. Additional helper scripts: -------------------------- - add_rra.sh: Before version 3.9.0 collectd used to create a different set of RRAs. The most detailed of these old RRAs had a one minute resolution. This script can be used to add three more RRAs: minimum, maximum and average with a ten second resolution and 2200 rows (~6 hours). This will make hourly statistics much more interesting. Please note that no sanity-checking whatsoever is performed. You can seriously screw up your RRD files if you don't know what you're doing.