Vamos a ver cómo podemos convertir nuestros dashboards de Grafana en imágenes, para poder compartirlos en cualquier lugar, como por ejemplo en slack, discord, microsoft teams, etc. Con esto podremos tener una vista previa de nuestros dashboards sin necesidad de entrar a Grafana y crear automatizaciones para enviarlas a nuestros equipos.
Prerrequisitos
Nota: Necesitamos una instancia de Grafana corriendo, con la versión 8.3.11 o superior. Grafana >=8.3.11
Necesitamos tener instalado el plugin Grafana Image Renderer en nuestro Grafana, para poder renderizar nuestros dashboards en imágenes, y para que nos genere los endpoints necesarios para poder hacer las peticiones.
La primera opción es instalar este plugin desde su CLI, mediante el siguiente comando:
Otra opción es instalarlo mediante docker, para eso necesitamos agregar la siguiente imagen a nuestro docker-compose:
Para iniciar los servicios, ejecuta:
Nota: Asegúrate de que tienes tu API Key de Grafana, para poder hacer las peticiones a la API.
Uso
Paso 1: Obtener el UID del dashboard
Lo primero que necesitamos es UID del dashboard que queremos renderizar, para esto vamos a ocupar la API de Grafana.
Con esto obtendremos una lista de todos los dashboards que tenemos en nuestro Grafana, y podremos ver el UID de cada uno, por lo cual solo nos interesa el nodo uid
y title
para saber cuál es el dashboard que queremos renderizar.
Paso 2: Obtener el detalle del dashboard
Luego necesitamos obtener el detalle de este dashboard, para eso ocupamos el siguiente comando:
De aquí obtendremos el JSON con toda la información de nuestro dashboard, y sus paneles en el nodo dashboard.panels
, nos interesa el id
de cada panel para poder renderizarlo y el title
para identificarlo.
Paso 3: Renderizar el panel
Como ultimo paso, necesitamos hacer la petición al endpoint de nuestro Grafana Image Renderer, para eso ocupamos el siguiente comando:
Asegúrate de cambiar los valores de estas variables obligatorias:
TU_API_KEY
: con tu API Key de Grafana.TU_GRAFANA_URL
: con la URL de tu Grafana.UID_DEL_DASHBOARD
: con el UID del dashboard que quieres renderizar. (Lo obtuvimos en el primer paso)TIMESTAMP_INICIO
: con el timestamp de inicio de la imagen. (Ejemplo: 1724011204)TIMESTAMP_FIN
: con el timestamp de fin de la imagen. (Ejemplo: 1724011204)ID_DEL_PANEL
: con el ID del panel que quieres renderizar. (Lo obtuvimos en el segundo paso)ORG_ID
: con el ID de tu organización.
Nota: Puedes cambiar el
width
yheight
para cambiar el tamaño de la imagen. También puedes cambiar eltz
para cambiar la zona horaria y elscale
para cambiar la calidad de la imagen.
Esto generará un archivo imagen_dashboard.png
con la imagen de tu dashboard.
Extras
He dejado un ejemplo de una librería que hice en Typescript
para poder hacer esto de una manera más fácil,
Esta librería te proporciona 3 métodos para poder renderizar tus dashboards, que son los 3 pasos que vimos anteriormente.
Tómalo como una guía para poder hacer tus propias automatizaciones.
Puedes ver el código en este repositorio