Consultar API REST desde Grafana
Si podemos consumir los datos que necesitamos vía REST API (en formato JSON), podremos por tanto visualizarnos en Grafana! ¡El mundo es maravilloso con Grafana! Así que, como sabemos, hoy día, casi cualquier app nos permite realizar consultas mediante API, ¡No esperes más y a exprimirlas!
Bueno, y antes de nada… deciros que arrancamos tras un veranito de gozo y disfrute =) y trabajo, vaya… Que han sido unos meses de desconexión y esperamos quien sabe si 1 o mejor 2 posts por semana hasta fin de año… El temario más o menos lo tengo, pero mis hijos me chupan la vida :-), venga, ¡al turrón!
En este post haremos algo sencillo, un ejemplo de lo que requeriremos para tenerlo en marcha. Pongamos una app, en este caso particular usaremos Wekan, que es un organizador Kanban y es con el que gestiono entre otras, las Tareas pendientes a realizar (en mi vida, en el trabajo, con prioridades…). Como es una app que permite vía REST API en formato JSON consultar los datos, pues la intención será hacer un Dashboard en Grafana que me ordene las tareas pendientes, y claro, luego este pool rotatorio irá a la pantalla del helpdesk. Será una consulta directamente, que podremos cachear o no si queremos los valores durante un tiempo, no se almacenará en ninguna BD.
Lo primero, en Grafana instalaremos el datasource ‘JSON API’ & reiniciamos Grafana:
grafana-cli plugins install marcusolsson-json-datasource systemctl restart grafana-server
Pongamos este ejemplo sencillo, tras leer la documentación de cada app podremos conocer cómo consultar los datos que necesitemos; lo dicho, Wekan, y que liste las Cards, que en mi caso las uso como Tareas, con un curl lo haríamos así rápido para validar la salida de lo que veremos luego en Grafana:
curl -H "Authorization: Bearer XXXXXXXXXX" -X GET http://192.168.1.115:3001/api/boards/xxxxxx/lists/xxxxxx/cards [{"_id":"MRodsfJo","title":"Tarea 1...","description":"","assignees":[]},{"_id":"dfgmh2","title":"Tarea 2...","description":"","assignees":[]},{"_id":"Rymt8","title":"Tarea 3...","description":"","assignees":[]}....
En este caso, requiere autenticación, y va en la cabecera, con su token, y luego le hacemos un GET de la sección que nos interese.
Podremos ya crear el Data Source en Grafana que apunte a la URL raíz de las API y en este caso la autenticación se la mandaremos en una cabecera personalizada. Es que Wekan es un ejemplo algo particular, ya que todo lo que va detrás de los ‘:’ de ‘Authorization’ lo pondremos como ‘value’ en el ‘Header’ (no solo el Token, pero en este caso, insisto).
Y ya en un Dashboard en Grafana podremos añadir un Panel nuevo, del tipo que necesitemos, en mi caso con uno sencillo en formato tabla me vale, quiero simplemente ver las Tareas Urgentes pendientes. Indicamos el campo que queremos extraer, en este caso en formato JSONPath y en mi caso particular si os fijáis bien en el curl anterior, sería ‘$.*.title’ para obtener los títulos de todas las Tarjetas.
En la pestaña ‘Path’ podremos especificar la ruta de la consulta, en este caso de tipo GET y (en mi caso) añadiendo el path: ‘/boards/xxxxxxxxxx/lists/xxxxxxxxxx/cards’
Y esto sería un ejemplo de algunas de las Tareas Urgentes que tengo pendiente ahora mismo 🙂
Lo dicho, es un mero ejemplo de cómo consumir desde Grafana mediante APIs directamente datos en formato JSON que nos pueda escupir la app remota. Espero que le podáis sacar alguna utilidad, la verdad que tiene 1000 posibilidades y me quedo corto 😉
Que seáis felices, que ha sido un placer escribir estas pocas líneas, pero tengo que ir sacando el óxido, algunos documentos que a lo mejor os resultan interesantes y otros no tanto, pero con intención de que aporten algo. Un besazo!