There are no shortage of tutorials on setting up collectd as an agent on a machine. However, I have found little help in the way of describing how to setup a centralized collectd collection server that aggregates statistics from multiple clients and sends them to Graphite. This post will help you do just that. It focuses on Ubuntu, but the instructions are universally applicable.
First, let's setup the central collectd server. This could be on the same machine as your Graphite server, but on large production environments, it is not recommended.
The Ubuntu collectd repositories do not contain the necessary write_graphite plugin, so you must download and install collectd manually. Download the source from the website at: http://collectd.org/download.shtml
Next, run:
tar jxf collectd-version.tar.bz2
cd collectd-version
./configure
make all install
Once collectd is installed, modify the /opt/etc/collectd.conf file to contain the following:
Hostname "hostname"
FQDNLookup true
BaseDir "/opt/collectd/var/lib/collectd"
PIDFile "/opt/collectd/var/run/collectd.pid"
PluginDir "/opt/collectd/lib/collectd"
TypesDB "/opt/collectd/share/collectd/types.db"
Interval 10
LoadPlugin network
<Plugin network>
Listen "*" "12345"
</Plugin>
LoadPlugin interface
<Plugin interface>
Interface "eth0"
</Plugin>
LoadPlugin write_graphite
<Plugin write_graphite>
<Node "graphing">
Host "localhost"
Port "2003"
Protocol "tcp"
LogSendErrors true
Prefix "collectd."
StoreRates true
AlwaysAppendDS false
EscapeCharacter "_"
</Node>
</Plugin>
Make adjustments for your network as needed.
Now, we are going install the collectd agent on the client and then tell it to send the metrics to the collectd server (not Graphite).
The clients do not need the write_graphite plugin and can use the older version of Collectd that ships with the repositories. On each client, run:
sudo apt-get install collectd collectd-utils
Then, cd into /etc/collectd. Backup the collectd.conf file as collectd.conf.bkp or similar and then create a new collectd.conf file. In it, enable the plugins you want and also add the following:
Hostname "hostname"
FQDNLookup true
BaseDir "/var/lib/collectd"
PIDFile "/var/run/collectd.pid"
PluginDir "/usr/lib/collectd"
TypesDB "/usr/share/collectd/types.db"
Interval 10
#Timeout 5
ReadThreads 5
LoadPlugin network
<Plugin network>
Server "collectd.domain.com" "12345"
</Plugin>
LoadPlugin cpu
LoadPlugin load
LoadPlugin disk
LoadPlugin memory
LoadPlugin processes
Include "/etc/collectd/filters.conf"
Include "/etc/collectd/thresholds.conf"
Be sure to configure the network plugin with your collectd server information.
Now, if you log into Graphite, you should see that your clients are sending all of their statistics to the collectd server which is then sending them to Graphite.