Customizing a collector

Diamond collectors run within the diamond process and collect metrics that can be published to a graphite server.

Collectors are subclasses of diamond.collector.Collector. In their simplest form, they need to implement a single method called "collect".

    import diamond.collector

    class ExampleCollector(diamond.collector.Collector):

        def collect(self):
            # Set Metric Name
            metric_name = "my.example.metric"

            # Set Metric Value
            metric_value = 42

            # Publish Metric
            self.publish(metric_name, metric_value)

To run this collector in test mode you can invoke the diamond server with the -r option and specify the collector path.

diamond -f -r full/path/to/ExampleCollector.py -c conf/diamond.conf.example

running diamond in the foreground (-f) while logging to stdout (-l) is a good way to quickly see if a custom collector is unable to load.

diamond -f -l

For detailed description and example please take a look at the example collector in the Collectors Directory.

Please note that not all collectors will be added to the PYTHONPATH, depending on configuration, so if you need to import another collector in your code, please add it to the path yourself:

# example: add the proc collector to the path
sys.path.insert(0, '/path/to/diamond/collectors/proc')

If your collector is installed with the rest of the diamond collectors, you should do this:

sys.path.insert(0, os.path.join(os.path.dirname(os.path.dirname(__file__)),
                                'proc'))