InfluxDB Configuration

The default settings provided by InfluxDB are not sufficient for a high traffic
GitLab environment. The settings discussed in this document are based on the
settings GitLab uses for GitLab.com, depending on your own needs you may need to
further adjust them.

If you are intending to run InfluxDB on the same server as GitLab, make sure
you have plenty of RAM since InfluxDB can use quite a bit depending on traffic.

Unless you are going with a budget setup, it's advised to run it separately.

Requirements

InfluxDB 0.9.5 or newer

A fairly modern version of Linux

At least 4GB of RAM

At least 10GB of storage for InfluxDB data

Note that the RAM and storage requirements can differ greatly depending on the
amount of data received/stored. To limit the amount of stored data users can
look into InfluxDB Retention Policies.

Installation

InfluxDB Server Settings

Since InfluxDB has many settings that users may wish to customize themselves
(e.g. what port to run InfluxDB on), we'll only cover the essentials.

The configuration file in question is usually located at
/etc/influxdb/influxdb.conf. Whenever you make a change in this file,
InfluxDB needs to be restarted.

Storage Engine

InfluxDB comes with different storage engines and as of InfluxDB 0.9.5 a new
storage engine is available, called TSM Tree. All users must use the new
tsm1 storage engine as this will be the default engine in
upcoming InfluxDB releases.

Make sure you have the following in your configuration file:

[data] dir = "/var/lib/influxdb/data" engine = "tsm1"

Admin Panel

Production environments should have the InfluxDB admin panel disabled. This
feature can be disabled by adding the following to your InfluxDB configuration
file:

[admin] enabled = false

HTTP

HTTP is required when using the InfluxDB CLI or other tools such as Grafana,
thus it should be enabled. When enabling make sure to also enable
authentication:

Define a batch of points to be 1000 points in size and allow a maximum of
5 batches or flush them automatically after 1 second.

Define a UDP read buffer size of 200 MB.

One of the most important settings here is the UDP read buffer size as if this
value is set too low, packets will be dropped. You must also make sure the OS
buffer size is set to the same value, the default value is almost never enough.

To set the OS buffer size to 200 MB, on Linux you can run the following command:

sysctl -w net.core.rmem_max=209715200

To make this permanent, add the following to /etc/sysctl.conf and restart the
server:

net.core.rmem_max=209715200

It is very important to make sure the buffer sizes are large enough to
handle all data sent to InfluxDB as otherwise you will lose data. The above
buffer sizes are based on the traffic for GitLab.com. Depending on the amount of
traffic, users may be able to use a smaller buffer size, but we highly recommend
using at least 100 MB.

When enabling UDP, users should take care to not expose the port to the public,
as doing so will allow anybody to write data into your InfluxDB database (as
InfluxDB's UDP protocol doesn't support authentication). We recommend either
whitelisting the allowed IP addresses/ranges, or setting up a VLAN and only
allowing traffic from members of said VLAN.