Grafana es una plataforma de observabilidad líder para la visualización de métricas. Le permite crear paneles personalizados para mostrar información significativa de los flujos de datos en tiempo real de su aplicación.
Grafana es una aplicación nativa de la nube que está lista para lanzarse en proveedores de infraestructura populares, instalarse en su propio hardware o implementarse como un contenedor independiente. En esta guía, nos centraremos en la última opción mediante el uso de la imagen oficial de Grafana para iniciar una instancia que se ejecuta en Docker.
Cómo empezar
La creación de contenedores de Grafana más simple se ve así:
docker run -d --name=grafana -p 3000:3000 grafana/grafana
Tendrá un nuevo servidor Grafana accesible en el puerto 3000. Visite http://localhost:3000
e inicie sesión como admin
/admin
.
Ahora puede comenzar a agregar fuentes de datos y tableros para crear sus visualizaciones. Presione el botón "Agregar su primera fuente de datos" en la página de inicio para conectar una nueva fuente; seleccione el tipo de proveedor en la siguiente pantalla, luego complete los detalles para que Grafana pueda acceder a sus datos.
A continuación, regrese a la página de inicio y haga clic en "Crear su primer tablero". Elija su tipo de visualización preferido y luego use el panel de consulta para seleccionar las métricas apropiadas de sus datos. Una vez que haya terminado, su nueva visualización se mostrará en su tablero.
Este procedimiento demuestra la facilidad con la que puede iniciar una instancia de prueba desechable de Grafana. Sin embargo, ejecutar un contenedor listo para producción requiere un poco más de reflexión. Aquí hay un enfoque más completo que está mejor equipado para el uso a largo plazo.
Selección de una variante de imagen
Grafana utiliza un modelo de negocio de doble licencia. La edición de código abierto se publica como grafana/grafana
en Docker Hub mientras que Enterprise es grafana/grafana-enterprise
. Las siguientes instrucciones funcionarán con estas dos variantes de nivel superior.
Hay varias versiones de Grafana disponibles, cada una en versión Alpine o Ubuntu. Se debe preferir Alpine en la mayoría de las situaciones de implementación:es más delgado y se enfoca en proporcionar un entorno compatible con Grafana sin extras superfluos.
El sistema operativo se selecciona agregando su nombre después de la versión de Grafana en una etiqueta de imagen:
grafana/grafana:8.3.0-ubuntu
Siempre es mejor anclarse a una versión específica para que no reciba involuntariamente cambios importantes a medida que se publican nuevas actualizaciones. Omitir el nombre del SO (grafana/grafana:8.3.0
) le dará la variante Alpine de su versión seleccionada.
Creando un Contenedor
Grafana tiene requisitos de implementación relativamente sencillos. Debe montar un volumen de Docker para almacenar sus datos persistentes y vincular un puerto de host para poder acceder al servicio. La configuración se puede proporcionar montando un archivo de configuración en el contenedor o inyectando variables de entorno.
docker run -d --name grafana -p 9000:3000 -v grafana-data:/var/lib/grafana grafana/grafana:8.3.0
Este ejemplo inicia un nuevo contenedor Grafana llamado grafana
que escucha en el puerto 9000 en su host Docker. El puerto está vinculado a 3000 en el contenedor, ya que esta es la dirección de escucha predeterminada de Grafana.
Un volumen Docker llamado grafana-data
es referenciado por -v
bandera. Está montado en /var/lib/grafana
dentro del contenedor, donde Grafana almacena todos sus datos generados. El montaje de volumen significa que el contenido del directorio se almacenará fuera del contenedor, evitando la pérdida de datos cuando el contenedor se detiene o su host se reinicia.
Configuración de inyección
Puede anular las claves de configuración de Grafana configurando variables de entorno cuando inicia su contenedor. Puede cambiar cualquiera de las claves en los archivos de configuración de formato INI de Grafana escribiendo en mayúscula el nombre de la clave y anteponiendo GF_
:
# INI file instance_name = my-grafana [security] admin_user = demo admin_password = grafana --- # Corresponding environment variables GF_DEFAULT_INSTANCE_NAME=my-grafana GF_SECURITY_ADMIN_USER=demo GF_SECURITY_ADMIN_PASSWORD=grafana
Asegúrate de incluir el DEFAULT
implícito nombre de la sección cuando cambia el valor de una variable de nivel superior en el archivo de configuración.
Una vez que haya resuelto qué valores desea cambiar, proporcione las variables de entorno correctas con -e
banderas cuando inicia su contenedor:
docker run -d --name grafana -p 9000:3000 -e GF_DEFAULT_INSTANCE_NAME=my-grafana -e GF_SECURITY_ADMIN_USER=demo -e GF_SECURITY_ADMIN_PASSWORD=grafana -v grafana-data:/var/lib/grafana grafana/grafana:8.3.0
Grafana también admite la configuración basada en archivos. Con este mecanismo, el valor de la variable de entorno de destino se convierte en la ruta a un archivo disponible dentro del contenedor. Grafana obtendrá el valor real de la configuración leyendo el archivo.
Para usar este enfoque, modifique cualquier variable de entorno agregando el sufijo __FILE
a su nombre habitual:
docker run -d --name grafana -p 9000:3000 -e GF_DEFAULT_INSTANCE_NAME=my-grafana -e GF_SECURITY_ADMIN_USER=demo -e GF_SECURITY_ADMIN_PASSWORD__FILE=/run/secrets/password -v grafana-data:/var/lib/grafana grafana/grafana:8.3.0
Puede agregar el archivo al contenedor usando un montaje de vinculación (-v ./password.txt:/run/secrets/password
) o un sistema de gestión de secretos dedicado como Docker Secrets. La configuración basada en archivos proporciona una forma más segura de inyectar valores confidenciales que preferiría no exponer como texto sin formato en los registros de trabajo de CI y el historial de su shell.
Anulación del archivo de configuración
Siempre puede anular el archivo de configuración en disco de Grafana si está cambiando demasiados valores para que las variables de entorno sean convenientes.
La imagen de Docker ubica este archivo en /etc/grafana/grafana.ini
. Puede montar un reemplazo en la ruta esperada utilizando un montaje de vinculación de Docker:
docker run -d --name grafana -p 9000:3000 -v ./grafana.ini:/etc/grafana/grafana.ini -v grafana-data:/var/lib/grafana grafana/grafana:8.3.0
El uso de un archivo de configuración facilita la inyección de configuraciones más complicadas. Puede interpolar variables para generar valores dinámicos. Los archivos de configuración también admiten comentarios que le permiten documentar sus intenciones de ayudar a los futuros mantenedores.
Administración de complementos
Muchas instalaciones de Grafana requieren complementos que agregan fuentes de datos adicionales o proporcionan paneles de control prediseñados. La imagen de Docker incluye una utilidad auxiliar que le permite agregar complementos a un nuevo contenedor configurando una variable de entorno especial.
Aquí se explica cómo agregar un complemento oficial que se encuentra en el catálogo de Grafana:
docker run -d --name grafana -p 9000:3000 -e GF_INSTALL_PLUGINS=grafana-simple-json-datasource -v grafana-data:/var/lib/grafana grafana/grafana:8.3.0
El GF_INSTALL_PLUGINS
variable espera que se instale una lista separada por comas de nombres de complementos cuando se inicia el contenedor por primera vez. Los nombres se pasarán a la grafana-cli plugins install
dominio. Esto significa que puede incluir expresiones de versión, como grafana-simple-json-datasource 1.1.0
y haga referencia a los complementos de la comunidad a través de su URL:
docker run -d --name grafana -p 9000:3000 -e GF_INSTALL_PLUGINS=https://example.com/grafana-plugin.zip -v grafana-data:/var/lib/grafana grafana/grafana:8.3.0
Creando una imagen personalizada
Abrir manualmente los contenedores de Grafana con la configuración suministrada a través de docker run
flags es repetitivo y propenso a errores. Crear su propia imagen de Docker con sus modificaciones incluidas ahorra tiempo y centraliza la configuración cuando varios miembros del equipo necesitan poder activar una nueva instancia.
Puede lograr esto escribiendo un Dockerfile que extienda el grafana/grafana
oficial imagen. Esto le da la oportunidad de copiar en un archivo de configuración personalizado y establecer cualquier variable de entorno adicional que necesite.
FROM grafana/grafana:8.3.0 # Add plugins ENV GF_INSTALL_PLUGINS=grafana-simple-json-datasource # Copy a config file from your working directory COPY grafana.ini /etc/grafana/grafana.ini
Usa tu Dockerfile para construir tu nueva imagen de Grafana:
docker build -t custom-grafana:latest .
Ahora puede iniciar una instancia de contenedor preconfigurada desde su imagen:
docker run -d --name grafana -p 9000:3000 -v grafana-data:/var/lib/grafana custom-grafana:latest
Este enfoque es particularmente útil cuando ha realizado amplias modificaciones en su entorno de Grafana. Ahora puede reproducir de forma fiable su configuración cada vez que inicia un contenedor. Esto también ayuda a los cambios de versión de su instalación a lo largo del tiempo.
Un inconveniente es la necesidad de reconstruir su imagen cuando se publican actualizaciones de Grafana. Tendrás que tirar periódicamente grafana/grafana
, docker build
su imagen, insértela en un registro y luego extraiga la nueva versión en su host Docker. La etapa final es recrear sus contenedores en ejecución para que usen la imagen actualizada.
Resumen
Docker simplifica la instalación y configuración de Grafana al proporcionar un entorno aislado en el que puede alojar su plataforma de observabilidad. Puede iniciar rápidamente nuevas instancias de Grafana vinculando un puerto de host, montando un volumen de datos y proporcionando valores de configuración a través de variables de entorno. Más tarde, puede encapsular su configuración en su propia imagen reutilizable que se basa en la base oficial.
Una vez que está en funcionamiento, una instalación Dockerized Grafana funciona como una normal. Puede conectar fuentes de datos, interactuar con la API HTTP y configurar alertas apuntando al puerto de host que vinculó a su contenedor. También puede asignar a su instancia un nombre de dominio y configurar HTTPS sirviéndolo detrás de un proxy inverso como Apache o Traefik.