TIG: Telegraf + InfluxDB + Grafana
2020-01-02
Índice
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
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…:peng