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
- Un servidor que ejecute Rocky Linux 8.
- Un usuario no usuario con privilegios de root.
- SELinux deshabilitado.
- 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.
Aparecerá el siguiente panel de control.
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.
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.
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:
- Los plugins deentrada recogen métricas.
- Los pluginsprocesadores transforman, decoran y filtran las métricas.
- Los pluginsagregadores crean y agregan métricas.
- 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.
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.
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.
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.
Te aparecerá la siguiente página de inicio de Grafana. Haz clic en el botón Añade tu primera fuente de datos.
Haz clic en el botón InfluxDB.
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.
Introduce los siguientes valores.
URL: http://localhost:8086 Acceso: Server Basic Auth Details Usuario: navjot Contraseña:
Detalles deInfluxDB Organización: howtoforge Token: Por defecto Bucket: tigstack
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.
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.
En la página siguiente, haz clic en el botón Añadir un panel vacío para lanzar la siguiente pantalla.
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.
También puedes dar un nombre al eje utilizando el campo Etiqueta de la derecha, debajo de la sección Eje.
Pulsa el botón Aplicar para guardar el panel.
Pulsa el botón Guardar Cuadro de Mando, una vez hayas terminado.
Dale un nombre al panel de control y haz clic en Guardar para terminar.
Se abrirá el panel de control y haz clic en el botón Añadir Panel para crear otro panel.
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.
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.
Haz clic en el botón Añadir canal.
Introduce los detalles para configurar el canal de notificación de correo electrónico.
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.
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.
Haz clic en el Panel de Alertas y pulsa el botón Crear Alerta para configurar una nueva alerta.
Ahora puedes configurar las condiciones en las que Grafana enviará la alerta.
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.
- 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.
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:
- Sin datos – Establece el estado de la regla en
NoData
- Alerta – Establece el estado de la regla en
Alerting
- Mantener último estado – Mantener el estado actual de la regla, sea cual sea
- 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.
- Alerta – Establece el estado de la regla en
Alerting
- 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.
- Enviar a – Selecciona el canal de notificación al que configuramos anteriormente para enviar las alertas.
- Mensaje – Introduce un mensaje de texto para enviarlo junto con tu alerta.
- 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.