188 - Paneles de control a medida

188 - Paneles de control a medida

¿Como controlar todo un sistema de un único vistazo? Utililzando paneles de control. Para ello puedes utilizar el Grafana, Influxdb y telegraf. Sencillo.

1:25
-3:15

El podcast del lunes lo dediqué a contarte mi experiencia con Ubuntu en la Raspberry Pi. Por supuesto, también te conté como podías instalarlo, y el trabajo que había hecho el equipo de Ubuntu, para que esta experiencia fuera lo mas satisfactoria posible. Sin embargo, uno de temas que mas me preocupaban era la temperatura. Y es que esto de la temperatura es algo que he tratado en diferentes ocasiones. Así puedes encontrar referencias en el episodio 89 del podcast, sobre monitorizar la temperatura en la Raspberry, el episodio 98 sobre medir humedad y temperatura con la Raspberry, el episodio 104 en el que hago una comparativa de refrigerar la Rabperry 4. Y por supuesto el crossover con Ángel, uGeek, titulado entre una tostadora y una Rasbperry Pi 4. En esta ocasión, por supuesto también quería monitorizar la temperatura, y el episodio se ha convertido en un compendio de los episodios anteriores, pero mejorado, porque me he estado entreteniendo con los paneles de control de Grafana.

Y es que como verás en el episodio del podcast de hoy, esto de los paneles de control, da mucho juego. Y no pienses que va solo sobre controlar la temperatura, el consumo de RAM o de CPU, o el número de procesos. Como verás en este episodio se puede hacer mucho mas. Vamos, que se puede hacer cualquier cosa que se te pase por tu imaginación, de hecho, el límite lo pone tu imaginación. Ya verás.

Paneles de control a medida

Paneles de control a medida

En que ando metido

Como todos los jueves quiero contarte en que ando metido para que sepas que es lo que encontrarás en los próximos días por atareao.es.

Artículos

Respecto al tema de los artículos, comentarte que tengo previsto dos, aunque uno de ellos lo tengo prácticamente terminado, y el segundo depende de que sea capaz de actualizar la aplicación. Me explico.

El primero de los artículos, va a ser el del próximo viernes, y si todo va bien, el segundo saldrá el próximo sábado. Este primero es la siguiente entrega del tutorial sobre Ansible. En particular, será una segunda parte del capítulo sobre comandos ad-hoc. Se trata de que veas mas acciones que puedes realizar con una sola línea de comando, para que tomes conciencia de la potente herramienta que resulta Ansible.

Y vuelvo a insistir en el aspecto de que no solo se trata de gestionar decenas de máquinas. Para tu Raspberry te va a venir de maravilla, en tanto en cuanto puedes guardar tus recetas para utilizarlas tantas veces como quieras.

En este nuevo episodio vas poder desde copiar archivos desde tu equipo a tus diferentes máquinas, hasta gestionar archivos o paquetes, pasando por gestionar servicios o usuarios, por ejemplo.

Respecto al otro artículo, se trata de una herramienta para calcular la suma md5, sha256, etc de cualquier archivo desde tu gestor de archivos preferido, ya sea Nemo, Caja o Nautilus.

La cuestión, es que, tengo el complemento a medio actualizar, y va a depender de que esté terminado para poder escribir el artículo. Veremos si me da tiempo.

Aplicaciones

Respecto a las aplicaciones, sigo trabajando en LPlayer, y tengo que remotar Tasker, que llevo unos días que no hago nada, y el amigo Fernando, está trabajando en ella como si le fuera la vida en ello.

Por otro lado, y tal y como te he adelantado, estoy terminando ese complemento de Nautilus, Nemo y Caja que espero tener terminado esta semana, para publicar el artículo pertinente.

Paneles de control

Antes que nada, y por si no lo sabes, explicarte que son los paneles de control. Lo cierto es que aquí, al menos en el podcast, me vendría perfecto poder añadir una imagen, o un vídeo. Entonces no solo comprenderías claramente a que me refiero, sino que además te quedarías maravillado de las posibilidades, que un panel de control puede traer a tu vida. Si, lo has oído bien, a tu vida. Empieza a olvidar, que esto es únicamente para administradores de sistemas o informáticos.

Un panel de control, es para cualquiera que quiera tener un buen control. Alguien que quiera saber de un solo golpe de vista, cual es la situación y como evolucionará en los próximos días. Y lo mismo te vale para el consumo de CPU, como para la temperatura de tu casa, como para la evolución de las divisas.

Entonces, ¿que es un panel de control? Un panel de control es una interfaz que te muestra de forma gráfica datos métricos. Todos estos datos resumidos en un único panel de control, te permite inferir de forma sencilla la situación de aquello que lo que quieres estar informado.

paneles de control de  docker

Probablemente, panel de control o panel de mando, no sean las mejores traducciones, porque es mas un panel donde se recoge información que desde el cual se puede actuar, pero, algún nombre le tenía que dar, si no quería dejarlo con el nombre en inglés.

Para que te hagas una idea, si nunca has visto un panel de control, imagina una piscina. Podrías hacer un panel de control donde se recogieran datos como la temperatura actual del agua, el nivel de agua en la piscina, la cantidad de cloro. Pero además de mostrar estos valores actuales, también te podría mostrar las gráficas correspondientes a los últimos días.

De la misma forma, y para cambiar radicalmente de ejemplo, puedes ver el cambio de divisas actual de una veintena de monedas, y además su evolución de los últimos días.

El stack TIG. Telegraf, InfluxDB y Grafana.

Otro palabro que se me ha colado, stack, cuando podía haber utilizado conjunto… Para poder tener paneles de control y mostrar datos en él, necesitas, por un lado el propio panel de control, pero además necesitas dos piezas mas. Por un lado, recoger los datos de aquello que quieres controlar, y por otro lado un lugar para almacenar esos datos.

Así el stack o conjunto está formado por esas tres piezas,

  • un recolector que se encarga de recoger todos esos datos. En este caso he elegido Telegraf, pero podía haber optado por otro.
  • una base de datos para almacenar esos datos. En este caso, para este stack me he decantado por InfluxDB que se lleva la mar de bien con Telegraf.
  • Y la última pieza, la que permite agrupar y recoger los datos es el propio dashboard o paneles de control.

Telegraf el recolector

¿Como funciona el recolector de información? En principio se ejecuta cada cierto tiempo. Básicamente el tiempo que tu le hayas indicado. Le tienes que indicar donde tiene que guardar los datos. Te puedes imaginar, que tienes una gran variedad de opciones, no solo Influxdb.

paneles de control de divisas

La segunda parte de la configuración de este recolector son los procesadores. Esto va en forma de plugins o complementos. Simplemente tienes que habilitar o crear los que necesites para guardar la información en la base de datos.

Como te puedes imaginar tienes una serie de complementos básicos que recoge información del equipo en el que está hospedado el recolector. Así por ejemplo, puedes recoger información de

  • cpu
  • uso de disco
  • métricas de io
  • estadísticas del kernel
  • métricas de la memoria

Y de muchas otras cosas mas, por ejemplo también tienes estadísticas correspondientes a tus contenedores Docker.

Pero además de esta también puedes recoger información utilizando sencillos o no tan sencillos scripts. Scritps que pueden estar en Bash, en Python y otros lenguajes.

En este caso, yo he realizado mediciones del tiempo de descarga de las diferentes páginas que gestiono, con un sencillo curl.

También, las mediciones de humedad y temperatura local, utilizando para ello un sensor compuesto de humedad relativa y temperatura. En este caso el script está realizado en Python, y utilizo los GPIO, algo que no tenía claro que podría utilizar en tanto en cuanto no estoy utilizando Raspbian, sino Ubuntu sobre la Raspberry.

paneles de control de consumos

Y otro interesante es para mostrar resultados directamente desde un json. Así, en este caso, por ejemplo, estoy leyendo cada 24 el cambio de diferentes monedas a euros, lo que me permite no solo ver la evolución a lo largo del tiempo, sino que también me permite ver el cambio en el momento actual.

Así, como ver, esto vale para cualquier cosa. Toda la información que recopiles, la tendrás a un golpe de vista. Así de sencillo.

Influxdb la base de datos

Una de las ventajas que me encuentro con esta base de datos, es que puedes insertar información de forma sencilla, mediante una simple llamada http. Atacas al puerto 8086 con el formato de Influxdb y ya tengo todos los datos insertados.

Al final no es mas que una base de datos y que funciona como otras bases de datos relacionales. Tiene un cliente para el terminal, que es muy intuitivo, aunque te puede llamar la atención el hecho de que a las tablas las llame measurements. Pero como todo, para gustos los colores.

Grafana. El panel de control.

Y por fin Grafana, el panel de control, el eje en torno al que gira el artículo de hoy. En Grafana vas a poder crear tantos tableros como quieras, teniendo la posibilidad de agruparlos en diferentes carpetas.

paneles de control web

Para cada uno de esos paneles de control, puedes agrupar los gráficos en filas. Cada uno de los gráficos tiene distintas posibilidades,

  • un gráfico de toda la vida
  • Un gráfico con un valor superpuesto
  • Tablas
  • textos
  • Listas de alertas
  • mapas de calor

Para construir cada uno de estos pales, tienes que realizar una consulta en base a la cual obtendrás los valores que esperas.

Importación y exportación

Una característica que te va a resultar tremendamente interesante es la posibilidad de importar y exportar tus paneles de control. No solo para guardarlos tu, e incluso para aplicar un control de versiones, sino también para compartirlo con otros.

Y es que desde la página web de Grafana tienes la posibilidad de importar y exportar gráficos, con solo indicar el número que identifica al panel de control que te quieres importar.

paneles de control de humedad y temperatura

Esto que a priori te puede parecer una tontá es algo realmente impresionante, porque te va a permitir tener un panel de control impresionante en unos pocos minutos. Esto es lo que realmente se llama trabajo colaborativo.

Instalación

Puedes instalar el stack directamente desde el repositorio oficial de Grafana siguiendo estas indicaciones,

sudo apt-get install -y apt-transport-https
sudo apt-get install -y software-properties-common wget
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
sudo add-apt-repository "deb https://packages.grafana.com/enterprise/deb stable main"
ssudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"
sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"
sudo apt install grafana
sudo systemctl daemon-reload
sudo systemctl start grafana-server
sudo systemctl status grafana-server
curl -sL https://repos.influxdata.com/influxdb.key | sudo apt-key add -
echo "deb https://repos.influxdata.com/${DISTRIB_ID,,} ${DISTRIB_CODENAME} stable" | sudo tee /etc/apt/sources.list.d/influxdb.list
sudo apt update
sudo apt install influxdb
systemctl status influxdb
sudo apt install influxdb-client
sudo apt install telegraf
systemctl status telegraf

Igualmente también lo puedes instalar por Docker. En este caso particular te recomiendo que de nuevo recurras a los imprescindibles brazos de Traefik, que seguro te va a hacer la vida tremendamente sencilla. Así, en utilizando un archivo docker-compose, la solución es la siguiente,

version: '3'

services:
  grafana:
    image: grafana/grafana:7.0.3-ubuntu
    container_name: grafana
    restart: unless-stopped
    networks:
      - proxy
      - influxdb
    volumes:
      - grafana:/var/lib/grafana
    labels:
      - "traefik.port=3000"
      - "traefik.enable=true"
      - "traefik.http.routers.grafana.entrypoints=http"
      - "traefik.http.routers.grafana.rule=Host(`grafana.tu-servidor.es`)"
      - "traefik.http.middlewares.grafana-https-redirect.redirectscheme.scheme=https"
      - "traefik.http.routers.grafana.middlewares=grafana-https-redirect"
      - "traefik.http.routers.grafana-secure.entrypoints=https"
      - "traefik.http.routers.grafana-secure.rule=Host(`grafana.tu-servidor.es`)"
      - "traefik.http.routers.grafana-secure.tls=true"
      - "traefik.http.routers.grafana-secure.tls.certresolver=myresolver"
  influxdb:
    container_name: influxdb
    image: influxdb:latest
    volumes:
      - influxdb:/var/lib/influxdb
    labels:
      - "traefik.port=8086"
      - "traefik.enble=true"
      - "traefik.http.routers.grafana.entrypoints=http"
      - "traefik.http.routers.grafana.rule=Host(`grafana.tu-servidor.es`)"
      - "traefik.http.middlewares.grafana-https-redirect.redirectscheme.scheme=https"
      - "traefik.http.routers.grafana.middlewares=grafana-https-redirect"
      - "traefik.http.routers.grafana-secure.entrypoints=https"
      - "traefik.http.routers.grafana-secure.rule=Host(`grafana.tu-servidor.es`)"
      - "traefik.http.routers.grafana-secure.tls=true"
      - "traefik.http.routers.grafana-secure.tls.certresolver=myresolver"
  influxdb:
    container_name: influxdb
    image: influxdb:latest
    volumes:
      - influxdb:/var/lib/influxdb
    labels:
      - "traefik.port=8086"
      - "traefik.enable=true"
      - "traefik.http.routers.influxdb.entrypoints=http"
      - "traefik.http.routers.influxdb.rule=Host(`influxdb.tu-servidor.es`)"
      - "traefik.http.middlewares.influxdb-https-redirect.redirectscheme.scheme=https"
      - "traefik.http.routers.influxdb.middlewares=grafana-https-redirect"
      - "traefik.http.routers.influxdb-secure.entrypoints=https"
      - "traefik.http.routers.influxdb-secure.rule=Host(`influxdb.tu-servidor.es`)"
      - "traefik.http.routers.influxdb-secure.tls=true"
      - "traefik.http.routers.influxdb-secure.tls.certresolver=myresolver"
    networks:
      - proxy
      - influxdb
  telegraf:
    container_name: telegraf
    image: telegraf:latest
    volumes:
      - /proc:/host/proc:ro
      - /var/run/docker.sock:/var/run/docker.sock
      - ./telegraf/telegraf.conf:/etc/telegraf/telegraf.conf:ro
    networks:
      - influxdb

volumes:
  influxdb:
  grafana:

networks:
  influxdb:
  proxy:
    external: true

Espero que te haya gustado este nuevo episodio del podcast. Si puedes, te agradecería una valoración en iVoox y/o en Apple Podcast.

Imagen de portada de Stephen Dawson en Unsplash

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *