Cómo instalar TIG Stack (Telegraf, InfluxDB y Grafana) en Rocky Linux

La pila TIG (Telegraf, InfluxDB y Grafana) es el acrónimo de una plataforma de herramientas de código abierto para facilitar la recopilación, almacenamiento, representación gráfica y alerta de las métricas del sistema. Puedes controlar y visualizar métricas como la memoria, el espacio en disco, los usuarios registrados, la carga del sistema, el uso de swap, el tiempo de actividad, los procesos en ejecución, etc. desde un solo lugar. Las herramientas utilizadas en la pila son las siguientes:

  • Telegraf – es un agente de recopilación de métricas de código abierto para recoger y enviar datos y eventos de bases de datos, sistemas y sensores IoT. Admite varios plugins de salida, como InfluxDB, Graphite, Kafka, etc., a los que puede enviar los datos recopilados.
  • InfluxDB – es una base de datos de series temporales de código abierto escrita en lenguaje Go. Está optimizada para un almacenamiento rápido y de alta disponibilidad, y es adecuada para todo lo que implique grandes cantidades de datos con marcas temporales, como métricas, eventos y análisis en tiempo real.
  • Grafana – es una suite de visualización y monitorización de datos de código abierto. Admite varios plugins de entrada, como Graphite, ElasticSearch, InfluxDB, etc. Proporciona un bonito panel de control y análisis de métricas, que te permite visualizar y supervisar cualquier tipo de métricas del sistema y datos de rendimiento.

En este tutorial, aprenderás a instalar y configurar la Pila TIG en un único servidor basado en Rocky Linux 8.

Requisitos previos

  1. Un servidor que ejecute Rocky Linux 8.
  2. Un usuario no usuario con privilegios de root.
  3. SELinux deshabilitado.
  4. Asegúrate de que todo está actualizado.
    $ sudo dnf update
    

Paso 1 – Configurar el cortafuegos

El primer paso es configurar el cortafuegos. Rocky Linux viene con el cortafuegos Firewalld.

Comprueba si el cortafuegos se está ejecutando.

$ sudo firewall-cmd --state

Deberías obtener la siguiente salida.

running

Comprueba los servicios/puertos permitidos actualmente.

$ sudo firewall-cmd --permanent --list-services

Debería mostrar la siguiente salida.

cockpit dhcpv6-client ssh

Permite el puerto 8086 para ejecutar InfluxDB y el puerto 3000 para ejecutar Grafana Server.

$ sudo firewall-cmd --permanent --add-port=8086/tcp
$ sudo firewall-cmd --permanent --add-port=3000/tcp

Recarga el cortafuegos.

$ sudo systemctl reload firewalld

Paso 2 – Instalar InfluxDB

Para instalar InfluxDB, primero tienes que crear un archivo repo para él.

Crea y abre el archivo influxdb.repo para editarlo.

$ sudo nano /etc/yum.repos.d/influxdb.repo

Pega en él el siguiente código.

[influxdb]
name = InfluxDB Repository - RHEL $releasever
baseurl = https://repos.influxdata.com/rhel/$releasever/$basearch/stable
enabled = 1
gpgcheck = 1
gpgkey = https://repos.influxdata.com/influxdb.key

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.

Tienes la opción de instalar InfluxDB 1.8.x o 2.0.x. Sin embargo, es mejor utilizar la última versión. Instala InfluxDB.

$ sudo dnf install influxdb2

Inicia y habilita el servicio InfluxDB.

$ sudo systemctl enable influxdb
$ sudo systemctl start influxdb

Paso 3 – Crear la base de datos InfluxDB y las credenciales de usuario

Para almacenar los datos de Telegraf, necesitas configurar la base de datos y el usuario de Influx.

InfluxDB viene con una herramienta de línea de comandos llamada influx para interactuar con el servidor InfluxDB. Piensa en influx como la herramienta de línea de comandos mysql.

Ejecuta el siguiente comando para realizar la configuración inicial de Influx.

$ influx setup
> Welcome to InfluxDB 2.0!
? Please type your primary username navjot
? Please type your password ***************
? Please type your password again ***************
? Please type your primary organization name howtoforge
? Please type your primary bucket name tigstack
? Please type your retention period in hours, or 0 for infinite 360
? Setup with these parameters?
  Username:          navjot
  Organization:      howtoforge
  Bucket:            tigstack
  Retention Period:  360h0m0s
 Yes
> Config default has been stored in /home/username/.influxdbv2/configs.
User    Organization    Bucket
navjot  howtoforge      tigstack

Necesitas configurar tu nombre de usuario inicial, la contraseña, el nombre de la organización, el nombre del bucket primario para almacenar los datos y el periodo de retención en horas para esos datos.

También puedes realizar esta configuración iniciando la URL http://<serverIP>:8086/ en tu navegador. Una vez que hayas realizado la configuración inicial, puedes iniciar sesión en la URL.

Página de inicio de sesión de InfluxDB

Aparecerá el siguiente panel de control.

Panel de InfluxDB

El proceso de configuración inicial crea un código por defecto que tiene acceso total de lectura y escritura a todas las organizaciones de la base de datos. Por motivos de seguridad, necesitarás un nuevo token que sólo se conectará a la organización y al cubo a los que queremos conectarnos.

Para crear un nuevo token, haz clic en la opción Datos de la barra lateral izquierda. A continuación, haz clic en la sección Tokens.

https://i.imgur.com/xUVl6BB.png

Aquí verás el token por defecto que creamos en el momento de la configuración inicial. Haz clic en el botón Generar Token y selecciona la opción Token de Lectura/Escritura para lanzar una nueva ventana emergente superpuesta.

Dale un nombre al Token y selecciona el cubo por defecto que creamos en las secciones de Lectura y Escritura.

Crear token InfluxDB

Haz clic en Guardar para terminar de crear el token. Haz clic en el nombre del token recién creado para que aparezca una ventana emergente con el valor del token. Guárdalo por ahora, ya que lo necesitaremos más adelante.

Esto completa la instalación y configuración de InfluxDB. A continuación, tenemos que instalar Telegraf.

Paso 4 – Instalar Telegraf

Telegraf e InfluxDB comparten el mismo repositorio. Esto significa que puedes instalar Telegraf directamente.

$ sudo dnf install telegraf

Habilita e Inicia el servicio Telegraf.

$ sudo systemctl enable telegraf
$ sudo systemctl start telegraf

Telegraf es un agente basado en plugins y tiene 4 tipos de plugins:

  1. Los plugins deentrada recogen métricas.
  2. Los pluginsprocesadores transforman, decoran y filtran las métricas.
  3. Los pluginsagregadores crean y agregan métricas.
  4. Los plugins desalida definen los destinos a los que se envían las métricas, incluido InfluxDB.

Telegraf almacena la configuración de todos estos plugins en el archivo /etc/telegraf/telegraf.conf. El primer paso es conectar Telegraf a InfluxDB activando el plugin de salida influxdb_v2. Abre el archivo /etc/telegraf/telegraf.conf para editarlo.

$ sudo nano /etc/telegraf/telegraf.conf

Busca la línea [[outputs.influxdb_v2]] y descoméntala eliminando el # que hay delante. Edita el código que hay debajo de la siguiente manera.

[[outputs.influxdb_v2]]
  urls = ["http://localhost:8086"]
  token = "$INFLUX_TOKEN"
  organization = "howtoforge"
  bucket = "tigstack"

Pega el valor del token InfluxDB guardado anteriormente en lugar de la variable $INFLUX_TOKEN en el código anterior.

Busca la línea INPUT PLUGINS y verás los siguientes plugins de entrada activados por defecto.

# Read metrics about cpu usage
[[inputs.cpu]]
  ## Whether to report per-cpu stats or not
  percpu = true
  ## Whether to report total system cpu stats or not
  totalcpu = true
  ## If true, collect raw CPU time metrics
  collect_cpu_time = false
  ## If true, compute and report the sum of all non-idle CPU states
  report_active = false

# Read metrics about disk usage by mount point
[[inputs.disk]]
  ## By default stats will be gathered for all mount points.
  ## Set mount_points will restrict the stats to only the specified mount points.
  # mount_points = ["/"]

  ## Ignore mount points by filesystem type.
  ignore_fs = ["tmpfs", "devtmpfs", "devfs", "iso9660", "overlay", "aufs", "squashfs"]

[[inputs.diskio]]
....
....

# Get kernel statistics from /proc/stat
[[inputs.kernel]]
  # no configuration


# Read metrics about memory usage
[[inputs.mem]]
  # no configuration
  
# Get the number of processes and group them by status
[[inputs.processes]]
  # no configuration


# Read metrics about swap memory usage
[[inputs.swap]]
  # no configuration


# Read metrics about system load & uptime
[[inputs.system]]
  ## Uncomment to remove deprecated metrics.

Puedes configurar plugins de entrada adicionales en función de tus necesidades, como Apache Server, contenedores Docker, Elasticsearch, cortafuegos iptables, Kubernetes, Memcached, MongoDB, MySQL, Nginx, PHP-fpm, Postfix, RabbitMQ, Redis, Varnish, Wireguard, PostgreSQL, etc.

Cuando hayas terminado, guarda el archivo pulsando Ctrl + X e introduciendo Y cuando te lo pida.

Reinicia el servicio Telegraf cuando hayas terminado de aplicar los cambios.

$ sudo systemctl restart telegraf

Paso 5 – Comprueba si las estadísticas de Telegraf se almacenan en InfluxDB

Antes de seguir adelante, tienes que verificar si las estadísticas de Telegraf se recogen correctamente y se introducen en InfluxDB. Abre la interfaz de usuario de InfluxDB en tu navegador y ve a Datos >> Cubos >> tigstack. Aparecerá la siguiente página.

InfluxDB Data Explorer

Haz clic en el nombre del cubo y, a continuación, haz clic en uno de los valores del filtro _measurement, y sigue haciendo clic en otros valores a medida que aparezcan. Cuando hayas terminado, haz clic en el botón Enviar. Deberías ver un gráfico en la parte superior.

Gráficos de datos InfluxDB

Esto debería confirmar que los datos se están transmitiendo correctamente.

Paso 6 – Instalar Grafana

Crea y abre el archivo /etc/yum.repos.d/grafana.repo para editarlo.

$ sudo nano /etc/yum.repos.d/grafana.repo

Pega en él el siguiente código.

[grafana]
name=grafana
baseurl=https://packages.grafana.com/oss/rpm
repo_gpgcheck=1
enabled=1
gpgcheck=1
gpgkey=https://packages.grafana.com/gpg.key
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.

Instala Grafana.

$ sudo dnf install grafana

Inicia y habilita el servicio Grafana.

$ sudo systemctl start grafana-server
$ sudo systemctl enable grafana-server

Paso 7 – Configurar la fuente de datos de Grafana

Inicia la URL http://<serverIP>:3000 en tu navegador y la siguiente página de inicio de sesión de Grafana debería darte la bienvenida.

Página de inicio de sesión de Grafana

Inicia sesión con el nombre de usuario predeterminado admin y la contraseña admin. A continuación, debes configurar una nueva contraseña por defecto.

Grafana Nueva contraseña

Te aparecerá la siguiente página de inicio de Grafana. Haz clic en el botón Añade tu primera fuente de datos.

Panel Grafana

Haz clic en el botón InfluxDB.

Añadir fuente de datos en Grafana

En la página siguiente, selecciona Flux en el menú desplegable como lenguaje de consulta. Puedes utilizar InfluxQL como lenguaje de consulta, pero es más complicado de configurar ya que sólo admite InfluxDB v1.x por defecto. Flux es compatible con InfluxDB v2.x y es más fácil de instalar y configurar.

Selector de lenguaje de consulta de Grafana

Introduce los siguientes valores.

URL: http://localhost:8086 Acceso: Server Basic Auth Details Usuario: navjot Contraseña:

Detalles de Grafana InfluxDB HTTP

Detalles deInfluxDB Organización: howtoforge Token: Por defecto Bucket: tigstack

Detalles de Grafana InfluxDB

Haz clic en el botón Guardar y probar y deberías ver un mensaje de confirmación verificando que la configuración se ha realizado correctamente.

Grafana Guardar detalles

Paso 8 – Configurar los Cuadros de Mando de Grafana

El siguiente paso es configurar los Cuadros de mando de Grafana. Haz clic en el signo + y selecciona Cuadros de mando para abrir la pantalla Crear Cuadro de mando.

Botón Crear Cuadro de Mando

En la página siguiente, haz clic en el botón Añadir un panel vacío para lanzar la siguiente pantalla.

Nuevo panel de control de Grafana

Pega el siguiente código en el Editor de consultas. Este

from(bucket: "NAMEOFYOUBUCKET")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["_measurement"] == "cpu")
  |> filter(fn: (r) => r["_field"] == "usage_idle")
  |> filter(fn: (r) => r["cpu"] == "cpu-total")
  |> filter(fn: (r) => r["host"] == "NAMEOFYOURHOST")
  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
  |> map(fn: (r) => ({ r with _value: r._value * -1.0 + 100.0 }))
  |> toFloat()
  |> yield(name: "mean")

Utiliza el nombre del cubo que hemos utilizado anteriormente. Y el nombre del host que puedes recuperar del archivo /etc/hostname.

El código anterior calculará el Uso de la CPU y generará un gráfico para ello. Dale un Título al Panel. Haz clic en el botón Inspector de consultas para comprobar si tu consulta funciona correctamente. Cuando estés satisfecho con el resultado, haz clic en el botón Aplicar para continuar.

Panel de creación de Grafana

También puedes dar un nombre al eje utilizando el campo Etiqueta de la derecha, debajo de la sección Eje.

Campo de etiqueta de eje de Grafana

Pulsa el botón Aplicar para guardar el panel.

Pulsa el botón Guardar Cuadro de Mando, una vez hayas terminado.

Panel de control Grafana Save

Dale un nombre al panel de control y haz clic en Guardar para terminar.

Ventana emergente Grafana Save Dashboard

Se abrirá el panel de control y haz clic en el botón Añadir Panel para crear otro panel.

Página del nuevo panel del panel de control de Grafana

Repite el proceso creando otro panel para el Uso de RAM.

from(bucket: "NAMEOFYOUBUCKET")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["_measurement"] == "mem")
  |> filter(fn: (r) => r["_field"] == "used_percent")
  |> filter(fn: (r) => r["host"] == "NAMEOFYOURHOST")
  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
  |> yield(name: "mean")

Y utiliza el siguiente código para mostrar el Uso del Disco Duro.

from(bucket: "NAMEOFYOURBUCKET")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["_measurement"] == "disk")
  |> filter(fn: (r) => r["_field"] == "used")
  |> filter(fn: (r) => r["path"] == "/")
  |> filter(fn: (r) => r["host"] == "NAMEOFYOURHOST")
  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
  |> map(fn: (r) => ({ r with _value: r._value / 1000000.0 }))
  |> toFloat()  
  |> yield(name: "mean")

Puedes crear un número ilimitado de paneles.

El código anterior se basa en el lenguaje Flux Scripting. Afortunadamente, no necesitas aprender el lenguaje para escribir consultas. Puedes generar la consulta a partir de la URL de InfluxDB. ‘Aunque aprender el lenguaje puede beneficiarte en la optimización de las consultas.

Tienes que volver al panel de InfluxDB y abrir la página Explorar para obtener la consulta.

Haz clic en el nombre del cubo y, a continuación, en uno de los valores del filtro _measurement, y sigue haciendo clic en otros valores a medida que aparezcan. Cuando hayas terminado, haz clic en el botón Editor de Script y deberías ver la página siguiente. El gráfico también debería actualizarse.

Página de consulta de Explorar InfluxDB

Botón Editor de Script de InfluxDB

Copia la consulta mostrada y ya podrás utilizarla en el panel de control de Grafana para construir tus gráficos.

Paso 9 – Configurar alertas y notificaciones

El uso principal de configurar monitores es recibir alertas puntuales cuando el valor supera un determinado umbral.

El primer paso es establecer el destino donde quieres recibir las alertas. Puedes recibir notificaciones por correo electrónico, Slack, Kafka, Google Hangouts Chat, Microsoft Teams, Telegram, etc.

Para nuestro tutorial habilitaremos las notificaciones por correo electrónico. Para configurar las notificaciones por correo electrónico, primero tenemos que configurar el servicio SMTP. Abre el archivo /etc/grafana/grafana.ini para configurar SMTP.

$ sudo nano /etc/grafana/grafana.ini

Busca en él la siguiente línea [smtp]. Descomenta las siguientes líneas e introduce los valores para el servidor SMTP personalizado.

[smtp]
enabled = true
host = email-smtp.us-west-2.amazonaws.com:587
user = YOURUSERNAME
# If the password contains # or ; you have to wrap it with triple quotes. Ex """#password;"""
password = YOURUSERPASSWORD
;cert_file =
;key_file =
;skip_verify = false
from_address = [email protected]
from_name = HowtoForge Grafana
# EHLO identity in SMTP dialog (defaults to instance_name)
;ehlo_identity = dashboard.example.com
# SMTP startTLS policy (defaults to 'OpportunisticStartTLS')
;startTLS_policy = NoStartTLS

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.

Reinicia el servidor Grafana para aplicar la configuración.

$ sudo systemctl restart grafana-server

Abre la página de Grafana y haz clic en el icono Alerta y en Canales de notificación.

Ventana emergente de canales de notificación de Grafana

Haz clic en el botón Añadir canal.

Grafana Añadir canal

Introduce los detalles para configurar el canal de notificación de correo electrónico.

Canal de notificación por correo electrónico de Grafana

Haz clic en Probar para ver si la configuración del correo electrónico funciona. Haz clic en Guardar cuando hayas terminado.

Ahora que hemos configurado los canales de notificación, tenemos que configurar las alertas sobre cuándo recibir estos correos electrónicos. Para configurar las alertas, tienes que volver a los paneles del panel de control.

Haz clic en Panel >> Gestionar para abrir la página del Panel.

Grafana Gestionar cuadros de mando

Haz clic en el panel de control que acabamos de crear y accederás a su página principal con diferentes paneles. Para editar el panel, haz clic en el nombre del panel y aparecerá un menú desplegable. Haz clic en el enlace Editar para continuar.

Panel de edición del panel de control de Grafana

Haz clic en el Panel de Alertas y pulsa el botón Crear Alerta para configurar una nueva alerta.

Grafana Crear alerta

Ahora puedes configurar las condiciones en las que Grafana enviará la alerta.

Alerta de edición de Grafana

Regla

  • Nombre – Introduce un nombre descriptivo para la alerta
  • Evaluar cada – Especifica la frecuencia con la que Grafana debe evaluar la alerta. También se denomina intervalo de evaluación. Aquí puedes establecer cualquier valor que desees.
  • Durante – Especifica durante cuánto tiempo la consulta debe violar el umbral antes de que se active la alerta. Cambia el tiempo según tus necesidades.

Condiciones

Grafana trabaja con una consulta del siguiente formato para determinar cuándo lanzar una alerta.

avg() OF query(A, 15m, now) IS BELOW 14
  • avg() controla cómo debe reducirse el valor de cada serie a un valor comparable con el umbral. Puedes hacer clic en el nombre de la función para seleccionar una función diferente, como avg(), min(), max(), sum(), count(), etc.Funciones de alerta de Grafana
  • consulta(A, 15m, ahora ) La letra entre paréntesis define qué consulta ejecutar desde la pestaña Métricas. Los dos parámetros siguientes definen el intervalo de tiempo. 15m, ahora significa desde hace 15 minutos hasta ahora.
  • IS BELOW14 Define el tipo de umbral y el valor del umbral. Puedes hacer clic en IS BELOW para seleccionar un tipo de umbral diferente.

    Tipo de umbral de Grafana

Puedes añadir una segunda condición debajo haciendo clic en el botón + situado debajo de la primera condición. Actualmente, sólo puedes utilizar los operadores Y y O entre varias condiciones.

Sin Datos y Gestión de Errores

Puedes configurar cómo debe gestionar Grafana las consultas que no devuelven datos o sólo valores nulos utilizando las siguientes condiciones:

  1. Sin datos – Establece el estado de la regla en NoData
  2. Alerta – Establece el estado de la regla en Alerting
  3. Mantener último estado – Mantener el estado actual de la regla, sea cual sea
  4. Ok – Establece el estado de la regla de alerta en Ok, es decir, recibirás una alerta aunque las cosas estén bien.

Puedes decirle a Grafana cómo manejar los errores de ejecución o de tiempo de espera.

  1. Alerta – Establece el estado de la regla en Alerting
  2. Mantener último estado – Mantén el estado actual de la regla, sea cual sea.

Notificaciones

Puedes especificar notificaciones de reglas de alerta junto con un mensaje detallado sobre la regla. Puedes añadir cualquier cosa en el mensaje o información que quieras incluir relacionada con la alerta.

  1. Enviar a – Selecciona el canal de notificación al que configuramos anteriormente para enviar las alertas.
  2. Mensaje – Introduce un mensaje de texto para enviarlo junto con tu alerta.
  3. Etiquetas – Especifica una lista de etiquetas (clave/valor) que se incluirán en la notificación. No son compatibles con todos los canales de notificación (incluido el correo electrónico), por lo que puedes dejarlas vacías. Normalmente se utilizan para enviar variables y sus valores por correo.

Cuando hayas terminado, haz clic en el botón Probar regla para comprobar que todo funciona correctamente. Haz clic en el botón Aplicar de la parte superior derecha para terminar de añadir la alerta.

Ahora deberías empezar a recibir alertas en tu correo electrónico.

Conclusión

Con esto concluye el tutorial sobre la instalación y configuración de TIG Stack en un servidor Rocky Linux 8 Based. Si tienes alguna pregunta, publícala en los comentarios a continuación.

También te podría gustar...