Remplacer Collectd par InfluxDb pour le stockage des métriques

Je travaille actuellement sur un petit projet personnel qui consiste à enregistrer ma consommation électrique avec un petit appareil (je détaillerais cela dans une note ultérieure) et envoyer les données vers un serveur collectd distant.

Mais, pour faire l’histoire courte, je voulais utiliser influxdb au lieu du système de stockage RRD de collectd mais sans requérir un proxy entre les deux applications pour les faire communiquer ensemble. En lisant les commits influxdb je me suis aperçu qu’il avait le support du protocole natif de collectd depuis la version 0.8.4. Donc il est possible de remplacer la partie serveur de collectd par un serveur influxdb sans problème.

Comme cela m’a semblait peu connu et pas documenté sur le site d’influxdb j’ai pensé que cela serait intéressant de fournir la configuration à effectuer. C’est très simple, il suffit d’ajouter cette section à votre fichier de configuration influxdb sous la section [input_plugins].

[input_plugins.collectd]
enabled = true
port = 25826
database = "collectd"
typesdb = "/usr/share/collectd/types.db"

Je pense que l’exemple parle de lui-même, le port 25826 est le port serveur par défaut de collectd, et typesdb est le fichier collectd de correspondance des types de données. Pour avoir ce fichier, deux solutions possibles, installer collectd sur la machine ou récupérer un fichier sur le dépôt GitHub de collectd.

Maintenant redémarrer votre serveur influxdb et ca devrait être bon. Pour vérifier la bonne collecte, la requête SELECT * from /.*/ LIMIT 1 ou list series dans la database collectd doit vous retourner des valeurs.

J’ai décidé de garder collectd à côté d’influxdb et de configurer mes clients collectd pour envoyer leurs données vers les deux serveurs. Mais l’apport de grafana avec influxdb en fait un couple redoutable. je pense que je ne garderai pas collectd longtemps pour stocker les données en RRD.

Replace collectd server with influxdb with native protocol for metric storage

I am working on a small project of mine based on collecting metrics of my power consumption and it involves using collectd on a small device (more to come about that in few days) and collecting the data on a remote collectd server.

Well, long story short, I wanted to use influxdb instead of collectd RRD backend but I didn’t want to use a proxy (like influxdb-collectd-proxy or collectd-influxdb-proxy) between collectd and influxdb to make them talk together. While reading the commlitlog, I came across the git log and discovered that influxdb gained native collectd protocol since 0.8.4. So it means influx can replace seamlessly a collectd server.

As it was almost unnoticed and there is no documentation provided on the influxdb site, I decided documentating that would be cool.

So I assume you have a working collectd client, it should have something like that.

Loadplugin network
...
<Plugin "network">
Server "foobar.com" "25826" #25826 is the collect server port
</Plugin "network">

I provide an example configuration. So you have to add this stanza to the influxdb configuration.

[input_plugins.collectd]
enabled = true
port = 25826
database = "collectd"
typesdb = "/usr/share/collectd/types.db"

I guess it speaks for itself (port 25826 is the default server port of collectd), except the typesdb definition, which the file mapping used by collectd to understand the data it receives and store it. So to have this file you have 2 solutions, install collectd or retrieve an example somewhere.

Restart influxdb and you’re done, influxdb replaced your collectd server. You can check you receive data by executing the query SELECT * from /.*/ or list series in the datatabase collectd.

In my specific case, I kept collectd alongside with influxdb, and configure my collectd clients to send data to the two servers. But playing with grafana on top of it makes me think that I won’t keep collectd for long for storing data (don’t get me wrong, collectd stays a wonderful for collecting metrics).

Edit: I did a patch to update the influxdb documentation