Let's start by assuming you have heard about Graphite. I started deploying Graphite March 8th, 2012. Here are some of the questions I had when evaluating Influxdb.


  1. I recently ran into an Incident. I was running a fairly recent version of 0.9.12 and the resolution was by updating to 0.9.x which I had to install whisper from master as whisper/0.9.x is no longer in sync with graphite-web/0.9.x. This bothers me as my Chef will likely no longer work with 0.9.x any more.
  2. Storage Schema -
    This can be fairly straight forward but can get ugly if you have a lot of regexp's setup. Influxdb has not implemented this yet Issue 571 > Influxdb currently stores the data as you input it. No averaging or sampling is done.
    > If you send data at a lower precision than default you may not get the expected result.
  3. Scaling
    1. carbon-cache - also known as the carbon agent.

      Each carbon agent can only consume $x metrics before it starts overflowing and loosing data.

    2. carbon-relay - directs traffic to multiple carbon agents.

      Once again each carbon relay distribute $x many metrics before it starts dropping metrics.

    3. graphite-web
    4. Speed of generating png's
      This can be alleviated with RENDER_HOSTS
    5. Assume you have 2 servers running graphite and you want them to see each others metrics? You would enable CLUSTER_SERVERS and restart and win.

Determining where Carbon Drops your metrics is usually by Trial and Error.

InfluxDB includes a Benchmark in the git repo.

  • Additionally it is a single process and there is no png rendering so there is no need for RENDER_HOSTS.

Influxdb

  • Simple configuration.
    After having to manage multiple configuration files having to deal with just 1 file is a joy.

    Also makes it darn simple to automate.

  • Written in Go so it's easy to install
    Deploy with Docker in several easy steps.
  • Start Influxdb
pip install fig
fig build influxdb
fig up -d influxdb
  1. Secure the root password
curl -X POST 'http://localhost:8086/cluster_admins/root?u=root&p=root' -d '{"password": "somethingood"}'
  1. Setup the Shard Space
curl -X POST "http://localhost:8086/cluster/shard_spaces/test?u=root&p=somethinggood" \
  -d '{
  "name": "short_term",
  "retentionPolicy": "inf",
  "shardDuration": "7d",
  "regex": "/.*/",
  "replicationFactor": 1,
  "split": 1}'
curl -X POST "http://localhost:8086/cluster/shard_spaces/test?u=root&p=somethinggood" \
  -d '{
  "name": "long_term",
  "retentionPolicy": "inf",
  "shardDuration": "30d",
  "regex": "/^[A-Z].*/",
  "replicationFactor": 1,
  "split": 1}'
  1. Create the Graphite database
curl -X POST 'http://localhost:8086/db?u=root&p=somethinggood'  -d '{"name": "graphite"}'
  1. Create the Grafana user to query with
curl -X POST 'http://localhost:8086/db/site_dev/users?u=root&p=root'   -d '{"name": "grafana", "password": "soethingunique"}'

Consider generating a random password. If your Grafana installation is accessable publicly they will be able to get your credentials easily.

Dashboard

There are 3 Dashboards available for InfluxDB currently.

  1. Built-in

    No 3rd party software to install; it's there with InfluxDB.

  2. Grafana

    Easy to install just requires a static web server to serve content with the proper CORS headers

  3. Influga

    Nice NodeJS Dashboard that uses LocalStorage for persistence.

Now let's Replace Graphite

If you want to send data to Graphite as well as Influxdb you may be interested in carbon-relay-ng and replicate your metrics between Graphite and Influxdb until you are ready to make your decision.

  • Requirements: inputs_plugins:graphite should be enabled.

  • Diamond supports sending Metrics to Influxdb using the graphite protocol. http post should work as well; I have not tested it.

  • Collectd supports sending metrics to Influxdb using the graphite protocol. It also supports writing metrics to an http endpoint.

What Influxdb does not do yet

When trying to replace Graphite the first thing I missed was the functions; such as aliasByNode. Depending on your usage of Graphite a simple regexp like mentioned in Query Language may not be enough.

Responsive Community

  • Graphite
    It has been over 23+ months since Graphite has released a new version; the mailing list is rather empty and irc can be quiet for periods of time.

  • Influxdb Fairly active community; Influxdb@Google Groups is not a heavy list; but fairly active. Releases are fairly often right now; the Changelog is a great source to know what has changed and why.

I have had 1 data loss issue and the fix was issued the same day.

Updates

I have tried to not use graphite-api from serving my data from Influxdb which has caused me to find alternative ways to solve the problem.

  1. scale()
    It is now possible to do math in grafana #477 in the select drop down.
  2. continous query can help creating nicer metric names or modify the data.

    For example if you use collectd to collect the drop rate; 1.0 is 100% packet loss, not an effective graph so let's fix that.

select value*100 from acheron_livid_dk.ping.ping_droprate.google_com.value group by time(10s) into droprate.google_com;  
select value*100 from acheron_livid_dk.ping.ping_droprate.ipv6_google_com.value group by time(10s) into droprate.6google_com;  
select value*100 from acheron_livid_dk.ping.ping_droprate.74_82_42_42.value group by time(10s) into droprate.he.net;
  1. derivative() This works now; using fill() should help with it not working right.