TIG: Telegraf + InfluxDB + Grafana

7 minutos de lectura

Siempre me ha gustado conocer todo tipo de datos de mis dispositivos, a modo informativo, de hecho, ya conocía de la recolección y representación de datos mediante TIG (Telegraf + Influxdb + Grafana) pero fue a raíz de un podcast de atareao cuando me anime a instalarlo en mi servidor placa Rock64pro.

No voy a profundizar sobre que es cada cosa, creo que ya hay bastante información si buscas en internet, a grandes rasgos decirte que:

  • Telegraf: se instala en cada cliente, en realidad es un agente que se encarga de recolectar e enviar la información a una base de datos, en este caso InflixDB

  • Influxdb: Es la base de datos donde guardaremos los datos recolectados por Telegraf.

  • Grafana: Programa para la representacion gráfica de los datos almacenados en diferentes bases de datos, en nuestro caso trabajaremos con Influxdb.

Influxdb

Instalación

Añadimos el repositorio oficial y su clave pública


curl -sL https://repos.influxdata.com/influxdb.key | sudo apt-key add -
echo "deb https://repos.influxdata.com/debian buster stable" | sudo tee /etc/apt/sources.list.d/influxdb.list

Actualizamos el sistema e instalamos la base de datos


sudo apt update
sudo apt upgrade
sudo apt install influxdb

Habilitamos e iniciamos Influxdb como un servicio del sistema.


sudo systemctl enable influxdb
sudo systemctl start influxdb

Creación de una instancia de la base de datos

Las métricas que mande Telegraf a la base de datos Influx las vamos a guardar en una instancia de la base datos, yo suelo crear una por cada dispositivos, veamos como crearla

influx
CREATE DATABASE rock64pro

Puesto que se trata de mi red local y que no va a ser accesible desde el exterior, sólo mediante VPN, no he protegido la base de datos con contraseña

Telegraf

Se instala en cada dispositivo del que queremos obtener daatos, tienes clientes para diferentes arquitecturas.

Instalación

Como ya tenemos el repositorio de Influxdb añadido, será tan sencillo como lanzar el comando para instalar Telegraf:

sudo apt-get install telegraf

Configuración

Tenemos que configurar el agente para que envíe las métricas al servidor, en mi caso tiene la dirección 192.168.2.3, y el nombre de la instancia de la base de datos, en el ejemplo rock64pro, para ello editamos el fichero /etc/telegraf/telegraf.conf e introducimos esos datos.


# Configuration for sending metrics to InfluxDB
[[outputs.influxdb]]
  ## The full HTTP or UDP URL for your InfluxDB instance.
  ##
  ## Multiple URLs can be specified for a single cluster, only ONE of the
  ## urls will be written to each interval.
  # urls = ["unix:///var/run/influxdb.sock"]
  # urls = ["udp://127.0.0.1:8089"]
   urls = ["http://192.168.2.3:8086"]

  ## The target database for metrics; will be created as needed.
  ## For UDP url endpoint database needs to be configured on server side.
  database = "rock64pro"
  precision = "s"

Activar input de Networking

Por defecto, la configuración de Telegraf no viene con el plugin de networking habilitado, para habilitarlo es tan sencillo como buscar la sección [inputs.net] y descomentar la línea, si queremo monitorizar una interfaz de red específica, descomentamos la parte de interfaces correspondiente y poner el nombre de la interfaz que vamos monitorizar:


# # Read metrics about network interface usage
[[inputs.net]]
#   ## By default, telegraf gathers stats from any up interface (excluding loopback)
#   ## Setting interfaces will tell it to gather these explicit interfaces,
#   ## regardless of status.
#   ##
    interfaces = ["eth0"]

Después de esto realizamos un restart del servicio Telegraf

sudo systemctl restart telegraf

Docker

Si vamos a monitorizar contenedores Docker, debemos de añadir el usuario Telegraf al grupo docker

sudo usermod -aG docker telegraf

Editamos el fichero /etc/telegraf/telegraf.conf y añadimos el siguiente código, edita según tus preferencias


# Read metrics about docker containers
[[inputs.docker]]
  ## Docker Endpoint
  ##   To use TCP, set endpoint = "tcp://[ip]:[port]"
  ##   To use environment variables (ie, docker-machine), set endpoint = "ENV"
  endpoint = "unix:///var/run/docker.sock"

  ## Set to true to collect Swarm metrics(desired_replicas, running_replicas)
  ## Note: configure this in one of the manager nodes in a Swarm cluster.
  ## configuring in multiple Swarm managers results in duplication of metrics.
  gather_services = false

  ## Only collect metrics for these containers. Values will be appended to
  ## container_name_include.
  ## Deprecated (1.4.0), use container_name_include
  container_names = []

  ## Set the source tag for the metrics to the container ID hostname, eg first 12 chars
  source_tag = false

  ## Containers to include and exclude. Collect all if empty. Globs accepted.
  container_name_include = []
  container_name_exclude = []

  ## Container states to include and exclude. Globs accepted.
  ## When empty only containers in the "running" state will be captured.
  ## example: container_state_include = ["created", "restarting", "running", "removing", "paused", "exited", "dead"]
  ## example: container_state_exclude = ["created", "restarting", "running", "removing", "paused", "exited", "dead"]
  # container_state_include = []
  # container_state_exclude = []

  ## Timeout for docker list, info, and stats commands
  timeout = "5s"

  ## Whether to report for each container per-device blkio (8:0, 8:1...) and
  ## network (eth0, eth1, ...) stats or not
  perdevice = true

  ## Whether to report for each container total blkio and network stats or not
  total = false

  ## docker labels to include and exclude as tags.  Globs accepted.
  ## Note that an empty array for both will include all labels as tags
  docker_label_include = []
  docker_label_exclude = []

  ## Which environment variables should we use as a tag
  tag_env = ["JAVA_HOME", "HEAP_SIZE"]

  ## Optional TLS Config
  # tls_ca = "/etc/telegraf/ca.pem"
  # tls_cert = "/etc/telegraf/cert.pem

"
  # tls_key = "/etc/telegraf/key.pem"
  ## Use TLS but skip chain & host verification
  # insecure_skip_verify = false

Habilitar servicio

Habilitamos e iniciamos Influxdb como un servicio del sistema.


sudo systemctl enable influxdb
sudo systemctl start influxdb

Métricas de Temperatura

Si queremos recolectar las métricas sobre la temperatura de nuestro servidor

Raspberry Pi

Crea un fichero llamado rpitemp.conf en /etc/telegraf/telegraf.d con el siguiente contenido


[[inputs.file]]
  files = ["/sys/class/thermal/thermal_zone0/temp"]
  name_override = "cpu_temperature"
  data_format = "value"
  data_type = "integer"

[[inputs.exec]]
  commands = ["/opt/vc/bin/vcgencmd measure_temp"]
  name_override = "gpu_temperature"
  data_format = "grok"
  grok_patterns = ["%{NUMBER:value:float}"]

Rock64pro

Crear un nuevo fichero de configuración en /etc/telegraf/telegraf.d/rock64temp.conf con este código en su interior:


[[inputs.file]]
  files = ["/sys/class/thermal/thermal_zone0/temp"]
  name_override = "cpu_temperature"
  data_format = "value"
  data_type = "integer"

Y reiniciar el servicio de telegraf de nuevo:

sudo systemctl restart telegraf

Grafana

Instalación

Descargamos el paquete que corresponda con tu distribución desde https://grafana.com/grafana/download, y procedemos a su instalación de forma manual, en mi caso


wget https://dl.grafana.com/oss/release/grafana_6.5.2_arm64.deb
sudo dpkg -i grafana_6.5.2_arm64.deb

Habilitar servicio

Habilitamos e iniciamos Influxdb como un servicio del sistema.


sudo systemctl enable grafana
sudo systemctl start grafana

Una vez iniciado el servicio sin problemas, ya podemos irnos a nuestra URL, http://ip:3000

  • usuario: admin

  • password: admin

Tras obligarnos a cambiar la clave por defecto

Accederemos al tablero de administración

Configuración

Para añadir un panel de metricas primero deberemos añadir una base de datos como origen de los datos

Seleccionamos Influxdb como base de datos donde leer las métricas

Completamos el formulario con los datos de conexión de la dirección IP donde esta corriendo el servidor Influxdb, el nombre de la base de datos y el usuario y contraseña que pusimos cuando creamos la instancia de la base de datos

Si todos los datos son correctos

Una vez realizada la conexión con la base de datos, podemos utilizar, con la opción importar, alguno de los muchos dashboard ya creados para visualizar las métricas, los puedes ver en https://grafana.com/grafana/dashboards

Tableros

A modo de ejemplo te pongo unas capturas de los tablero que yo utilizo

Espero que te haya gustado, pasa un buen dia…:penguin: