Grafana es una de las más populares soluciones Open Source para construir Dashboards, especialmente para propósitos de Monitorización, pero también como herramienta de visualización de propósito general (métricas y gráficos), capaz de conectarse a todo tipo de orígenes de datos (ej: Prometheus, InfluxDB, Graphite, Elasticsearch, OpenTSDB, MySQL, PostgreSQL, etc.) y con capacidades de gestión de alertas.
Continuando con la serie acerca de Prometheus, hoy vamos a hablar de Grafana, el producto más habitualmente utilizado como herramienta de visualización de Prometheus. Inseparables.
Una de las ventajas de Grafana, es que ofrece una gran cantidad de Dashboards ya desarrollados y disponibles de forma gratuita. De este modo, aunque tenemos la posibilidad de desarrollar nuestros propios Dashboards completamente desde cero, podemos ahorrarnos mucho esfuerzo, usando los Dashboards ya existentes, o bien partiendo de ellos para personalizarlos conforme a nuestras necesidades. Por ejemplo, ahora mismo hay más de 3.000 Dashboards para Prometheus. Aquí puedes ver todos los que hay disponible: Grafana Dashboards
Existen dos versiones de Grafana, la versión Open Source totalmente gratuita (la que vamos a usar en este Post) y existe también una versión Enterprise de pago, que ofrece algunas características adicionales (ej: más proveedores de datos y plugins Enterprise, integración con SAML, integración mejorada con LDAP, etc.). Para más detalles: Grafana Enterprise
Grafana utiliza el concepto de Organizaciones. Durante la instalación se crea una Organización llamada Main Org. Dentro de una Organización, podemos crear carpetas, crear Data sources, organizar los Dashboards entre carpetas, dar permisos a usuarios, etc. Esto nos ayuda a organizar mejor los contenidos de Grafana, especialmente entornos multi-usuario y de empresa, pudiendo crear varias Organizaciones para distintos propósitos.
Documentación oficial de Grafana: Grafana Documentation
Instalación de Grafana OSS
Antes de comenzar con la instalación de Grafana, es interesante comentar algún detalle.
Grafana utiliza por defecto una base de datos embebida SQLite, que para un pequeño entorno de experimentación monousuario, puede ser suficiente, pero en entornos más profesionales y multiusuario podemos utilizar PostgreSQL o MySQL/MariaDB.
Una vez instalado, la Web de Grafana escucha por defecto en el puerto tcp-3000 por HTTP, por lo que es habitual montar un NGINX por delante como Proxy inverso, como terminador SSL.
Hay principalmente dos formas de instalar Grafana (especialmente si excluimos Docker de la ecuación):
- Descargando e instalando manualmente el paquete .deb, que requiere hacer las actualizaciones de forma manual a futuro: Download Grafana
- Utilizando el repositorio oficial APT. Es el método más recomendado, ya que una vez configurado el repo APT, simplifica tanto la instalación como las posteriores actualizaciones de Grafana.
Vamos a comenzar con la instalación. Lo primero, actualizamos el sistema operativo, y si es necesario reiniciamos.
sudo apt update -y && sudo apt upgrade
A continuación añadiremos la clave APT (gpg.key) necesaria para autenticarse contra el repo APT para poder descargar paquetes, para seguidamente añadir el repo APT de Grafana OSS, lo que nos permitará poder instalar o actualizar Grafana con un simple comando apt. Hecho esto, actualizaremos la paquetería, e instalaremos Grafana.
curl https://packages.grafana.com/gpg.key | sudo apt-key add -
echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
sudo apt-get update
sudo apt-get install -y grafana
La instalación creará un servicio de systemd. Lo configuraremos para que arranque automáticamente con el sistema operativo, y nos aseguraremos de que está iniciado.
sudo systemctl enable grafana-server
sudo systemctl start grafana-server
sudo systemctl status grafana-server
Y ya está instalado y disponible. Con estos sencillos pasos ya tendríamos instalado Grafana, y podríamos acceder a través del puerto tcp-3000 (ej: https://localhost:3000). Para el primer inicio de sesión usaremos usuario admin y password admin, tras lo cual nos pedirá cambiar la password, por motivos de seguridad.
Configurar un Origen de Datos y añadir Dashboards
Para añadir un nuevo origen de datos a una Organización de Grafana, en Configuration -> Data sources, haremos click en la opción Add data source de la pestaña Data sources, tal y como se represanta en la siguiente pantalla capturada.
En nuestro caso de ejemplo, vamos a elegir Prometheus, que viene ya pre-instalado, aunque podemos elegir en gran cantidad de origen de datos, unos disponibles pero que tendremos que instalar, e incluso otros que podamos añadir mediante en Plugins.
Existen varias opciones en la configuración del origen de datos de Prometheus, además del nombre que le queramos dar. Para nuestro caso de ejemplo, con especificar la URL de conexión es suficiente, así que, hecho eso click Save & Test para continuar, y ya lo tenemos..
Realizado esto, ya podremos crear nuestros Dashboards, o importar Dashboards existentes de la comunidad de Grafana, también podemos organizar los Dashboards en carpetas. Para continuar vamos a importar un Dashboard existente (Dashboards -> Import).
En particular vamos a importar el Dashboard «Node Exporter Full«, que tiene el ID 1860. Muy útil si vamos a utilizar el Node Exporter. Lo especificamos, y click en Load.
Confirmaremos el nombre que le queremos dar al Dashboard, en qué carpeta lo queremos importar, y que Datasoruce queremos utilizar. Click Import, y ya lo tenemos.
Un Dashboard super completo con un montón de información, disponible para utilizar, donde sólo tendremos que especificar de qué máquina queremos mostrar los datos, y ya está.
Podemos repetir este proceso, para los diferentes Dashboards de Prometheus que necesitemos. Por poner algún ejemplo:
- Node Exporter Full (ID 1860). Útil para el Node Exporter.
- Prometheus Blackbox Exporter (ID 7587). Útil para el Blacbox Exporter.
- Blackbox Exporter HTTP prober (ID 13659). Útil para el Blacbox Exporter.
- AlertManager (ID 9578). Utiliza un Datasource de tipo Prometheus.
- Prometheus AlertManager (ID 8010). Utiliza un Datasource de tipo AlertManager, pero no funciona con las versiones más recientes.
Despedida y Cierre
Con todos estos pasos, hemos instalado grafana quedando configurado como servicio para su arranque automático con el sistema. A continuación podéis ver algunos comandos, para arrancar, parar, y comprobar el estado del servicio grafana-server.
sudo systemctl start grafana-server
sudo systemctl stop grafana-server
sudo systemctl status grafana-server
Hay algunos otros detalles sobre la instalación que acabamos de hacer, que vale la pena mencionar. Lo bueno de instalar Grafana a través del repositorio oficial APT es que resulta muy sencillo, pero por contra nos abstraemos de muchos detalles que nos pueden resultar de interés, como los siguientes:
- La instalación ha creado un usuario grafana y un grupo grafana, para utilizar como identidad del servicio de Grafana, y no ejecutarlo como el super-usuario root, por motivos de seguridad.
- El servicio de Grafana es
grafana-server.service
que queda definido en/usr/lib/systemd/system/grafana-server.service
- El fichero de definición de variables de entorno para Grafana es
/etc/default/grafana-server
- El binario de Grafana es
/usr/sbin/grafana-server
- El fichero de configuración de Grafana es
/etc/grafana/grafana.ini
- El fichero de Log de Grafana por defecto es
/var/log/grafana/grafana.log
- El fichero de la base de datos SQLite utilizada por defecto por Grafana es
/var/lib/grafana/grafana.db
- Los ficheros HTML/JS/CSS están en
/usr/share/grafana
Además, hemos creado un Origen de Datos para Prometheus y hemos importado algunos Dashboard (Node Exporter Full), con lo que ya hemos podido comenzar a utilizarlo.
Poco más por hoy. Como siempre, confío que la lectura resulte de interés.