This is an old revision of the document!
This is a short guide to installing and configuring a Graphite installation dedicated to NAV on a Debian Wheezy-based server.
A full Graphite setup consists of the Carbon backend server, which receives metrics over TCP or UDP, and a Graphite web frontend, which enables browsing and retrievial/rendering of the stored metrics. NAV will collect metrics and send to the former, while utilizing the latter to retrieve metrics and render graphs.
The Debian package graphite-carbon
is present in the official Debian Wheezy distribution, but because of licensing issues, the graphite-web
package did not make it into Wheezy in time. It is only available for the testing and unstable Debian distributions. If you have followed the instructions from nav_on_debian, you will find a version of the graphite-web
package that has been backported to Wheezy by us:
$ apt-cache policy graphite-web graphite-web: Installed: (none) Candidate: 0.9.12-0uninett1~bpo70+1 Version table: 0.9.12-0uninett1~bpo70+1 0 500 https://nav.uninett.no/debian/ wheezy/navbeta amd64 Packages
Assuming you will be running Graphite on the same Debian server as you are running NAV, all you need to do to install Graphite is:
apt-get install graphite-carbon graphite-web
Carbon, the metric-receiving backend of Graphite, must be configured before it can be used with NAV. We will only be covering the simple case of using the carbon-cache daemon. Most of this information is lifted from the NAV installation documentation.
Edit /etc/carbon/carbon.conf
to ensure these options are set in the [cache]
section:
MAX_CREATES_PER_MINUTE = inf ENABLE_UDP_LISTENER = True
The first line ensures that Carbon will not delay creating Whisper backend files for the metrics NAV sends it. The default setting is a maximum of 50 creates per minute (the setting exists to limit I/O strain on huyge setups), which means that when bootstrapping a NAV installation, hours to days can pass before all its metrics are being actually stored in Graphite.
The second line ensures that Carbon accepts metrics on a UDP socket, which is required by NAV.
Carbon also needs to know the resolution at which to store your time-series data, for how long to store it, and how to roll up data from high resolution data archives to lower resolution archives. These are the storage schemas and aggregation methods. NAV provides its own config examples for this; on a Graphite backend dedicated to NAV, you can simply symlink these config files from NAV:
ln -s /etc/nav/graphite/*.conf /etc/carbon/
Make sure the Carbon backend willbe automatically started at boot time, by editing /etc/default/graphite-carbon
and ensure that:
CARBON_CACHE_ENABLED=true
Finally, start the carbon-cache daemon:
service carbon-cache start
To enable the web interface, you need to do two things:
Graphite will by default use a SQLite database, but this is not recommended in a production setting, as it will cause issues with multiple simultaneous users. You already have a PostgreSQL installation because of NAV, so we recommend using this.
Make a graphite
PostgreSQL user and give it a password (make note of the password), then create a database owned by that user:
createuser --login graphite createdb --owner=graphite graphite
The Graphite web app's configuration file is located in /etc/graphite/local_settings.py
. There are mainly three settings you will need to adjust: SECRET_KEY
, TIME_ZONE
and DATABASES
. The SECRET_KEY
is used for cryptographic purposes when working with cookies and session data (just as the SECRET_KEY setting from nav.conf
). It should be a random string of characters; we can suggest using the makepasswd
command to generate such a string:
$ makepasswd --chars 51 iLNScMiUpNy5hditWAp9e2dyHGTFoX44UKsbhj91f9xL4fdJSDY
Then edit /etc/graphite/local_settings.py
(do not, under any circumstances, re-use the actual example value of SECRET_KEY
here!) and make to set these three settings:
SECRET_KEY = 'iLNScMiUpNy5hditWAp9e2dyHGTFoX44UKsbhj91f9xL4fdJSDY' TIME_ZONE = 'Europe/Oslo' # This should correspond to your actual timezone, also as in nav.conf DATABASES = { 'default': { 'NAME': 'graphite', 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'USER': 'graphite', 'PASSWORD': 'the password you made note of above', 'HOST': 'localhost', 'PORT': '5432' } }
Now make graphite-web initialize its database schema:
graphite-manage syncdb --noinput
In principle, you can use any web server that supports the WSGI interface, but you already have Apache because of NAV, so lets use that.