Cómo instalar TIG Stack (Telegraf, InfluxDB y Grafana) en Ubuntu 22.04
Este tutorial existe para estas versiones del sistema operativo
- Ubuntu 22.04 (Jammy Jellyfish)
- Ubuntu 18.04 (Castor biónico)
En esta página
- Requisitos previos
- Paso 1: configurar el cortafuegos
- Paso 2: instalar InfluxDB
- Paso 3: crear la base de datos InfluxDB y las credenciales de usuario
- Paso 4: instalar Telegraf
- Paso 5: verificar si las estadísticas de Telegraf se almacenan en InfluxDB
- Paso 6: instalar Grafana
- Paso 7: configurar la fuente de datos de Grafana
- Paso 8: configurar los paneles de Grafana
- Paso 9: configurar alertas y notificaciones
- Condiciones
- Regla
- Sin datos y manejo de errores
La pila TIG (Telegraf, InfluxDB y Grafana) es un acrónimo de una plataforma de herramientas de código abierto para facilitar la recopilación, el almacenamiento, la representación gráfica y las alertas de las métricas del sistema. Puede monitorear y visualizar métricas como memoria, espacio en disco, usuarios registrados, carga del sistema, uso de intercambio, tiempo de actividad, 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 recopilar y enviar datos y eventos desde bases de datos, sistemas y sensores de IoT. Admite varios complementos 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 el lenguaje Go. Está optimizado para un almacenamiento rápido y de alta disponibilidad y es adecuado para cualquier cosa que involucre grandes cantidades de datos con marca de tiempo, incluidas métricas, eventos y análisis en tiempo real.
- Grafana: es una suite de supervisión y visualización de datos de código abierto. Es compatible con varios complementos de entrada, como Graphite, ElasticSearch, InfluxDB, etc. Proporciona un hermoso tablero y análisis de métricas que le permiten visualizar y monitorear cualquier tipo de métrica y datos de rendimiento del sistema.
En este tutorial, aprenderá cómo instalar y configurar TIG Stack en un solo servidor Ubuntu 22.04.
requisitos previos
-
A server running Ubuntu 22.04.
-
A non-sudo user with root privileges.
-
The uncomplicated Firewall(UFW) is enabled and running.
-
Ensure that everything is updated.
$ sudo apt update && sudo apt upgrade
Paso 1: configurar el cortafuegos
Antes de instalar cualquier paquete, el primer paso es configurar el firewall para abrir puertos para InfluxDB y Grafana.
Compruebe el estado del cortafuegos.
$ sudo ufw status
Deberías ver algo como lo siguiente.
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6)
Abra el puerto 8086 para InfluxDB y 3000 para el servidor Grafana.
$ sudo ufw allow 8086 $ sudo ufw allow 3000
Vuelva a comprobar el estado para confirmar.
$ sudo ufw status Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 8086 ALLOW Anywhere 3000 ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) 8086 (v6) ALLOW Anywhere (v6) 3000 (v6) ALLOW Anywhere (v6)
Paso 2 - Instalar InfluxDB
Usaremos el repositorio oficial de InfluxDBs para instalarlo.
Descargue la clave GPG de InfluxDB.
$ wget -q https://repos.influxdata.com/influxdb.key
Importa la clave GPG al servidor.
$ echo '23a1c8836f0afc5ed24e0486339d7cc8f6790b83886c4c96995b88a061c5bb5d influxdb.key' | sha256sum -c && cat influxdb.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/influxdb.gpg > /dev/null
Importe el repositorio de InfluxDB.
$ echo 'deb [signed-by=/etc/apt/trusted.gpg.d/influxdb.gpg] https://repos.influxdata.com/debian stable main' | sudo tee /etc/apt/sources.list.d/influxdata.list
Actualice la lista de repositorios de sistemas.
$ sudo apt update
Tiene la opción de instalar InfluxDB 1.8.xo 2.0.x. Sin embargo, es mejor usar la última versión. Instale InfluxDB.
$ sudo apt install influxdb2
Inicie el servicio InfluxDB.
$ sudo systemctl start influxdb
Consultar el estado del servicio.
$ sudo systemctl status influxdb ? influxdb.service - InfluxDB is an open-source, distributed, time series database Loaded: loaded (/lib/systemd/system/influxdb.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2022-09-13 00:00:27 UTC; 42s ago Docs: https://docs.influxdata.com/influxdb/ Process: 12514 ExecStart=/usr/lib/influxdb/scripts/influxd-systemd-start.sh (code=exited, status=0/SUCCESS) Main PID: 12515 (influxd) Tasks: 7 (limit: 1030) Memory: 48.5M CPU: 547ms CGroup: /system.slice/influxdb.service ??12515 /usr/bin/influxd ........
Paso 3: cree la base de datos InfluxDB y las credenciales de usuario
Para almacenar los datos de Telegraf, debe 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. Piense en
influx
como la herramienta de línea de comandosmysql
.Ejecute 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 User Organization Bucket navjot howtoforge tigstack
Debe configurar su nombre de usuario inicial, contraseña, nombre de la organización, el nombre del depósito principal para almacenar datos y el período de retención en horas para esos datos. Sus datos se almacenan en el archivo
/home/username/.influxdbv2/configs
.También puede realizar esta configuración iniciando la URL
http://
en su navegador. Una vez que haya realizado la configuración inicial, puede iniciar sesión en la URL con las credenciales creadas anteriormente.:8086/ Debería ser recibido con el siguiente tablero.
El proceso de configuración inicial crea un token predeterminado que tiene acceso completo de lectura y escritura a todas las organizaciones en la base de datos. Necesita un nuevo token por motivos de seguridad que solo se conectará a la organización y al grupo al que queremos conectarnos.
Para crear un nuevo token, haga clic en el siguiente ícono de la barra lateral izquierda y haga clic en el enlace API Tokens para continuar.
Accederá a la página de tokens API. Aquí verá el token predeterminado que creamos en el momento de la configuración inicial.
Haga clic en el botón Generar token y seleccione la opción Leer/escribir token para iniciar una nueva ventana emergente superpuesta. Asigne un nombre al token (
telegraf
) y seleccione el depósito predeterminado que creamos en las secciones de lectura y escritura.Haga clic en Guardar para terminar de crear el token. Haga clic en el nombre del token recién creado para revelar una ventana emergente con el valor del token.
Guárdelo por ahora ya que lo necesitaremos más adelante.
Esto completa la instalación y configuración de InfluxDB. A continuación, necesitamos instalar Telegraf.
Paso 4 - Instalar Telegraf
Telegraf e InfluxDB comparten el mismo repositorio. Significa que puede instalar Telegraf directamente.
$ sudo apt install telegraf
El servicio Telegrafs se activa y se inicia automáticamente durante la instalación.
Telegraf es un agente basado en complementos y tiene 4 tipos de complementos:
- Los complementos de entrada recopilan métricas.
- Los complementos del procesador transforman, decoran y filtran las métricas.
- Los complementos de agregador crean y agregan métricas.
- Los complementos de salida definen los destinos donde se envían las métricas, incluido InfluxDB.
Telegraf almacena su configuración para todos estos complementos en el archivo
/etc/telegraf/telegraf.conf
. El primer paso es conectar Telegraf a InfluxDB habilitando el complemento de salidainfluxdb_v2
. Abra el archivo/etc/telegraf/telegraf.conf
para editarlo.$ sudo nano /etc/telegraf/telegraf.conf
Busque la línea
[[outputs.influxdb_v2]]
y elimine el comentario quitando el # delante de ella. Edite el código debajo de él de la siguiente manera.# # Configuration for sending metrics to InfluxDB 2.0 [[outputs.influxdb_v2]] # ## The URLs of the InfluxDB cluster nodes. # ## # ## Multiple URLs can be specified for a single cluster, only ONE of the # ## urls will be written to each interval. # ## ex: urls = ["https://us-west-2-1.aws.cloud2.influxdata.com"] urls = ["http://127.0.0.1:8086"] # # ## Token for authentication. token = "$INFLUX_TOKEN" # # ## Organization is the name of the organization you wish to write to. organization = "howtoforge" # # ## Destination bucket to write into. bucket = "tigstack"
Pegue el valor del token InfluxDB guardado anteriormente en lugar de la variable
$INFLUX_TOKEN
en el código anterior.Busque la línea
INPUT PLUGINS
y verá los siguientes complementos de entrada habilitados de forma predeterminada.# 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 ## If true and the info is available then add core_id and physical_id tags core_tags = 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"] ## Ignore mount points by mount options. ## The 'mount' command reports options of all mounts in parathesis. ## Bind mounts can be ignored with the special 'bind' option. # ignore_mount_opts = [] # Read metrics about disk IO by device [[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]] # no configuration
Puede configurar complementos de entrada adicionales según sus requisitos, incluidos Apache Server, contenedores Docker, Elasticsearch, iptables firewall, Kubernetes, Memcached, MongoDB, MySQL, Nginx, PHP-fpm, Postfix, RabbitMQ, Redis, Varnish, Wireguard, PostgreSQL, etc.
Una vez que haya terminado, guarde el archivo presionando Ctrl + X e ingresando Y cuando se le solicite.
Reinicie el servicio de Telegraf una vez que haya terminado de aplicar los cambios.
$ sudo systemctl restart telegraf
Paso 5: Verifique si las estadísticas de Telegraf se almacenan en InfluxDB
Antes de continuar, debe verificar si las estadísticas de Telegraf se recopilan correctamente y se introducen en InfluxDB. Abra la interfaz de usuario de InfluxDB en su navegador y haga clic en el tercer icono de la barra lateral izquierda y seleccione el menú Cubos.
Haga clic en tigstack y debería recibir la siguiente página.
Haga clic en el nombre del depósito y luego haga clic en uno de los valores en el filtro
_measurement
, y siga haciendo clic en otros valores a medida que aparecen. Una vez que haya terminado, haga clic en el botón Enviar. Debería ver un gráfico en la parte superior. Es posible que deba esperar un tiempo para que aparezcan los datos.Esto debería confirmar que los datos se transmiten correctamente.
Paso 6 - Instalar Grafana
Usaremos el repositorio oficial de Grafana para instalarlo. Importa la clave Grafana GPG.
$ sudo wget -q -O /usr/share/keyrings/grafana.key https://packages.grafana.com/gpg.key
Agregue el repositorio a su sistema.
$ echo "deb [signed-by=/usr/share/keyrings/grafana.key] https://packages.grafana.com/oss/deb stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
Actualice la lista de repositorios del sistema.
$ sudo apt update
Instalar Grafana.
$ sudo apt install grafana
Inicie y habilite el servicio de Grafana.
$ sudo systemctl enable grafana-server --now
Verifique el estado del servicio.
$ sudo systemctl status grafana-server ? grafana-server.service - Grafana instance Loaded: loaded (/lib/systemd/system/grafana-server.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2022-09-13 01:04:47 UTC; 2s ago Docs: http://docs.grafana.org Main PID: 13674 (grafana-server) Tasks: 7 (limit: 1030) Memory: 104.6M CPU: 1.050s CGroup: /system.slice/grafana-server.service ??13674 /usr/sbin/grafana-server --config=/etc/grafana/grafana.ini --pidfile=/run/grafana/grafana-server.pid --packaging=deb cfg:default.paths.logs=/var/log/grafana .......
Paso 7: configurar la fuente de datos de Grafana
Inicie la URL
http://
en su navegador y siga la página de inicio de sesión de Grafana.:3000 Inicie sesión con el nombre de usuario predeterminado
admin
y la contraseñaadmin
. A continuación, debe configurar una nueva contraseña predeterminada.Será recibido con la siguiente página de inicio de Grafana. Haga clic en el botón Agregar su primera fuente de datos.
Haga clic en el botón InfluxDB.
En la página siguiente, seleccione Flux en el menú desplegable como idioma de consulta. Puede usar InfluxQL como lenguaje de consulta, pero es más complicado de configurar ya que solo admite InfluxDB v1.x de manera predeterminada. Flux es compatible con InfluxDB v2.x y es más fácil de instalar y configurar.
Introduzca los siguientes valores.
URL:
http://localhost:8086
Acceso: Servidor
Detalles básicos de autenticación
Usuario: navjot
Contraseña:
Detalles de InfluxDB
Organización: howtoforge
Token:
Depósito predeterminado: tigstack
Haga clic en el botón Guardar y probar y debería ver un mensaje de confirmación que verifica que la configuración se realizó correctamente.
Paso 8: configurar los paneles de Grafana
El siguiente paso es configurar Grafana Dashboards. Haga clic en el letrero con los cuatro cuadrados y seleccione Tableros para abrir la pantalla Crear tablero.
En la página siguiente, haga clic en el botón Agregar un nuevo panel para iniciar la siguiente pantalla.
Pegue el siguiente código en el Editor de consultas. Esto
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")
Use el nombre del depósito que usamos anteriormente. Y el nombre del host que puede recuperar del archivo
/etc/hostname
.El código anterior calculará el uso de la CPU y generará un gráfico para ello. Asigne un título al panel.
Haga clic en el botón Inspector de consultas y luego haga clic en el botón Actualizar para verificar si su consulta funciona correctamente. Haga clic en el icono de la cruz para cerrar el inspector.
También puede nombrar el eje usando el campo Etiqueta a la derecha debajo de la sección Eje.
Haga clic en el botón Aplicar para guardar el panel.
Haga clic en el botón Guardar panel, una vez que haya terminado.
Asigne un nombre al tablero y haga clic en Guardar para finalizar.
Se abrirá el tablero y luego haga clic en el botón Agregar panel para crear otro panel.
Repita 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 use el siguiente código para mostrar el uso de HDD.
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")
Puede crear un número ilimitado de paneles.
El código anterior se basa en el lenguaje Flux Scripting. Afortunadamente, no necesita aprender el idioma para escribir consultas. Puede generar la consulta desde la URL de InfluxDB. Aunque aprender el idioma puede ser beneficioso para optimizar las consultas.
Debe volver al panel de InfluxDB y abrir la página Explorar para obtener la consulta.
Haga clic en el nombre del depósito y luego haga clic en uno de los valores en el filtro
_measurement
, y siga haciendo clic en otros valores a medida que aparecen. Una vez que haya terminado, haga clic en el botón Editor de secuencias de comandos y debería ver la siguiente página. El gráfico también debe actualizarse.Copie la consulta que se muestra y ahora puede usarla en el tablero de Grafana para construir sus gráficos.
Paso 9: configurar alertas y notificaciones
El uso principal de la configuración de monitores es recibir alertas a tiempo cuando el valor supera un cierto umbral.
El primer paso es establecer el destino donde desea recibir alertas. Puede recibir notificaciones por correo electrónico, Slack, Kafka, Google Hangouts Chat, Microsoft Teams, Telegram, etc.
Vamos a habilitar las notificaciones por correo electrónico para nuestro tutorial. Para configurar las notificaciones por correo electrónico, primero debemos configurar el servicio SMTP. Abra el archivo
/etc/grafana/grafana.ini
para configurar SMTP.$ sudo nano /etc/grafana/grafana.ini
Busque la siguiente línea
[smtp]
en ella. Quite el comentario de las siguientes líneas e ingrese 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 = 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
Guarde el archivo presionando Ctrl + X e ingresando Y cuando se le solicite.
Reinicie el servidor Grafana para aplicar la configuración.
$ sudo systemctl restart grafana-server
Abra la página de Grafana y haga clic en el icono Alerta y haga clic en Puntos de contacto.
Grafana crea y configura automáticamente un punto de contacto de correo electrónico predeterminado que debe configurarse con la dirección de correo electrónico correcta. Haga clic en el botón de edición en el punto de contacto
grafana-default-email
.Ingrese los detalles para configurar el canal de notificación por correo electrónico.
Si desea enviar un mensaje adicional, haga clic en el enlace Configuración de correo electrónico opcional e ingrese el mensaje.
Haga clic en Prueba para ver si la configuración del correo electrónico funciona. Haga clic en Guardar cuando haya terminado.
Ahora que hemos configurado canales de notificación, debemos configurar alertas sobre cuándo recibir estos correos electrónicos. Para configurar las alertas, debe volver a los paneles del tablero.
Haga clic en Tablero >> Examinar para abrir la página del Tablero.
Haga clic en el tablero que acabamos de crear y obtendrá su página de inicio con diferentes paneles. Para editar el panel, haga clic en el nombre del panel y aparecerá un menú desplegable. Haga clic en el enlace Editar para continuar.
Haga clic en el Panel de alertas y haga clic en el botón Crear regla de alerta desde este panel para configurar una nueva alerta.
Ahora puede configurar las condiciones bajo las cuales Grafana enviará la alerta.
De forma predeterminada, el tipo de alerta seleccionado es una alerta gestionada por Grafana. Haz clic en el menú desplegable para cambiar el rango de tiempo a Últimos 15 minutos, lo que significa que se verificará desde hace 15 minutos hasta ahora.
Condiciones
Grafana trabaja sobre una consulta del siguiente formato para determinar cuándo lanzar una alerta.
avg() OF query(A) IS BELOW 14
- avg() controla cómo se debe reducir el valor de cada serie a un valor comparable con el umbral. Puede hacer clic en el nombre de la función para seleccionar una función diferente, como avg(), min(), max(), sum(), count(), etc.
Puede agregar una segunda condición debajo de ella haciendo clic en el botón + debajo de la primera condición. Actualmente, solo puede usar operadores AND y OR entre varias condiciones.
Regla
- Nombre: ingrese un nombre descriptivo para la alerta
- Carpeta: cree o seleccione una carpeta preexistente para almacenar su regla de notificación.
- Grupo: ingrese un nombre para su grupo de alerta. Las alertas en un solo grupo se evalúan después del mismo intervalo de tiempo.
- Evaluar cada: especifique con qué frecuencia Grafana debe evaluar la alerta. También se denomina intervalo de evaluación. Puede establecer cualquier valor que desee aquí.
Sin datos y manejo de errores
Puede configurar cómo Grafana debe manejar las consultas que no devuelven datos o solo valores nulos usando las siguientes condiciones:
- Sin datos: establezca el estado de la regla en
NoData
- Alertas: establezca el estado de la regla en
Alertas
- Ok: establezca el estado de la regla de alerta en Ok, ya que recibirá una alerta incluso si todo va bien.
Puede decirle a Grafana cómo manejar los errores de ejecución o tiempo de espera.
- Alertas: establezca el estado de la regla en
Alertas
- Ok: establezca el estado de la regla de alerta en Ok, ya que recibirá una alerta incluso si todo va bien.
- Error: establezca el estado de la regla de alerta en Error para indicar que hay un problema.
Una vez que haya terminado, haga clic en el botón Vista previa de alertas para ver si todo funciona bien. Haga clic en el botón Guardar y salir en la parte superior derecha para terminar de agregar la alerta. Ahora debería comenzar a recibir alertas en su correo electrónico.
Conclusión
Esto concluye el tutorial sobre la instalación y configuración de TIG Stack en un servidor basado en Ubuntu 22.04. Si tiene alguna pregunta, publíquela en los comentarios a continuación.