Contenido

Monitorización con Graphite

Actualmente está de moda utilizar Graphite como base de cualquier sistema de monitorización, y sobre él añadir distintas herramientas. Éstas pueden estar orientadas al sistema de almacenamiento, interfaz para programas o interfaz para humanos.

En este post analizaré el stack de Graphite, proponiendo diversas herramientas cuyo uso es bastante habitual.

Al final del post, cualquiera con una Debian/Ubuntu debería tener instalado un Graphite básico con un panel muy molón.

Distintos tipos de gráficas

Graphite

Es el corazón de todo el tinglado que vamos a montar.

Graphite sirve para recibir datos, guardarlos y después consultarlos. Por defecto, Graphite utiliza el backend de Carbon, que es otro servicio que permite guardar datos en una base de datos (por llamarlo de alguna manera) llamada Wisper. Ésta utiliza un sistema de almacenamiento tipo Round Robin: imaginad un vector de datos circular, donde cada cierto tiempo se escribe en la misma casilla.

Realmente Graphite es un Django, por lo que está escrito en Python.

Instalando Graphite

Ésta debe ser la sección más estúpida. En breve veréis por qué.

Para instalarlo en debian, lo primero que haremos será:

1
apt-get install graphite-web graphite-carbon

Esto nos instala todo lo que necesitamos. Para configurarlo, basta leerse el archivo /usr/share/doc/graphite-web/README.Debian, donde explican estupendamente los pasos a seguir.

Como queremos tener algo al final de este post, vamos a hacer algo muy básico (como root):

1
2
3
4
graphite-manage syncdb
chown _graphite:_graphite /var/lib/graphite/graphite.db
su -s /bin/bash -c '/usr/bin/django-admin runserver --settings \
  graphite.settings 0.0.0.0:8080' _graphite

Básicamente: Hacemos que Django cree la base de datos y se la asignamos al usuario _graphite, y después lanzamos el django con la configuración básica. Esto está en el archivo de información que comenté antes.

Podríamos haberlo montado con un Apache Httpd o con un Nginx… Pero eso complicaría este post. Tenéis todo lo que necesitáis en /usr/share/doc/graphite-web/README.Debian.

Interfaz de Graphite

Ya podemos abrir Graphite en https://localhost:8080 aunque de momento estará vacía.

Bien… Ésta es la interfaz básica para humanos. Es un poco horrible, pero no os preocupéis que luego la pintamos bonita.

Vamos a meter algún dato, que si no esto no vale para nada. Podemos hacerlo directamente con netcat:

1
echo "magmax.test.examples 4 `date +%s`" | nc -q0 localhost 2003

con esto le estamos mandando los datos directamente a Carbon, que es un servicio que por defecto escucha en el puerto 2003.

Lo que le estamos mandando es la métrica magmax.test.examples, con el valor 4 y el timestamp. Éste es el formato que acepta Carbon.

Ejecutad el comando varias veces, esperando un rato entre ejecuciones e id variando el valor. Después podéis entrar en la interfaz web de Graphite en https://localhost:8080 y, en el gráfico principal, pulsad sobre Graph options, Line mode y seleccionad Connected line.

Además vamos a reducir el rango dibujado, que por defecto es de 24 horas. Apuntad a los botones que están encima del gráfico y os saldrá un tip. Pulsad sobre select recent data y seleccionad 5 ó 10 minutos.

En el árbol de la izquierda, id navegando hasta los nodos hoja, y veréis que el gráfico pinta los valores.

Mola, ¿eh?

Bueno, pues el gráfico que estáis generando tiene una URL que siempre generará el mismo gráfico. Eso lo han aprovechado algunos paneles como Gdash para mostrar dashboards completos. Pero lo realmente molón es que se le puede indicar que quieres esos datos en Json, cosa que utilizan otros como Grafana.

Grafana

Diamond es un servicio (Python también) que genera estadísticas del sistema y las manda a Carbon para que podamos pintarlas con Graphite.