Cómo instalar TIG Stack (Telegraf, InfluxDB y Grafana) en Debian 12
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 supervisar 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 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 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 TIG Stack en un único servidor Debian 12.
Requisitos previos
- Un servidor que ejecute Debian 12 con un mínimo de 1 GB de RAM.
- Un usuario no usuario con privilegios de root.
- El Cortafuegos sin complicaciones (UFW) está activado y en ejecución.
- Un Nombre de Dominio Completamente Cualificado (FQDN) como
grafana.example.com
apuntando a tu servidor. - Una cuenta SMTP con un servicio de correo electrónico como Amazon SES o Mailgun para recibir notificaciones por correo electrónico de las alertas de servicio.
- Asegúrate de que todo está actualizado.
$ sudo apt update && sudo apt upgrade
- Se necesitan algunos paquetes esenciales para que funcionen el tutorial y Craft CMS. Algunos de ellos ya estarán en tu servidor.
$ sudo apt install curl wget nano software-properties-common dirmngr apt-transport-https ca-certificates lsb-release debian-archive-keyring gnupg2 ufw unzip -y
Paso 1 – Configurar el cortafuegos
Antes de instalar ningún paquete, el primer paso es configurar el cortafuegos para que abra puertos para InfluxDB y Grafana.
Comprueba 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)
Abre el puerto 8086 para InfluxDB y el 3000 para el servidor Grafana.
$ sudo ufw allow 8086 $ sudo ufw allow 3000
Permite los puertos HTTP y HTTPs.
$ sudo ufw allow http $ sudo ufw allow https
Vuelve a comprobar el estado para confirmarlo.
$ sudo ufw status Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 8086 ALLOW Anywhere 3000 ALLOW Anywhere 80/tcp ALLOW Anywhere 443 ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) 8086 (v6) ALLOW Anywhere (v6) 3000 (v6) ALLOW Anywhere (v6) 80/tcp (v6) ALLOW Anywhere (v6) 443 (v6) ALLOW Anywhere (v6)
Paso 2 – Instalar InfluxDB
Utilizaremos el repositorio oficial de InfluxDB para instalarlo.
Descarga la clave GPG de InfluxDB.
$ wget -q https://repos.influxdata.com/influxdata-archive_compat.key
Importa la clave GPG al servidor.
$ echo '393e8779c89ac8d958f81f942f9ad7fb82a25e133faddaf92e15b16e6ac9ce4c influxdata-archive_compat.key' | sha256sum -c && cat influxdata-archive_compat.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg > /dev/null influxdata-archive_compat.key: OK
Importa el repositorio de InfluxDB.
$ echo 'deb [signed-by=/etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg] https://repos.influxdata.com/debian stable main' | sudo tee /etc/apt/sources.list.d/influxdata.list
Actualiza la lista de repositorios del sistema.
$ sudo apt update
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 apt install influxdb2
Inicia el servicio InfluxDB.
$ sudo systemctl start influxdb
Comprueba 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; preset: enabled) Active: active (running) since Tue 2024-01-02 02:39:41 UTC; 1s ago Docs: https://docs.influxdata.com/influxdb/ Process: 5584 ExecStart=/usr/lib/influxdb/scripts/influxd-systemd-start.sh (code=exited, status=0/SUCCESS) Main PID: 5585 (influxd) Tasks: 8 (limit: 2299) Memory: 53.1M CPU: 735ms CGroup: /system.slice/influxdb.service ??5585 /usr/bin/influxd ........
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 User Organization Bucket navjot howtoforge tigstack
Necesitas configurar tu nombre de usuario inicial, tu contraseña, el nombre de la organización, el nombre del bucket primario para almacenar datos y el periodo de retención en horas para esos datos. Tus datos se almacenan en el archivo /home/username/.influxdbv2/configs
.
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 con las credenciales creadas anteriormente.
Aparecerá el siguiente panel de control.
El proceso de configuración inicial crea un token por defecto que tiene acceso total de lectura y escritura a todas las organizaciones de la base de datos. Necesitarás un nuevo token por motivos de seguridad, 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 el siguiente icono de la barra lateral izquierda y haz clic en el enlace Tokens API para continuar.
Accederás a la página Tokens de la API. 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 de API y selecciona la opción Token de API personalizado para lanzar una nueva ventana emergente superpuesta. Dale un nombre al Token (telegraf
) y despliega la sección Recursos y selecciona el cubo por defecto que creamos en las secciones Lectura y Escritura.
Haz clic en Generar para terminar de crear el token. Haz clic en el botón COPIAR A CLIPBOARD para copiar el token. Puede que el botón no funcione en algunos casos, así que asegúrate de confirmar antes de cerrar la ventana emergente.
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 apt install telegraf
El servicio de Telegraf se activa e inicia automáticamente durante la instalación.
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.
# # 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"
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 ## 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
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 IU de InfluxDB en tu navegador, haz clic en el segundo icono de la barra lateral izquierda y selecciona el menú Cubos.
Haz clic en tigstack y aparecerá la siguiente página.
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, pulsa el botón Enviar. Deberías ver un gráfico en la parte superior. Puede que tengas que esperar algún tiempo hasta que aparezcan los datos. Hemos desplazado el intervalo de tiempo de Pasado 1 h a Pasado 5 m para generar un gráfico sobre un área amplia.
Esto debería confirmar que los datos se están transmitiendo correctamente.
Paso 6 – Instalar Grafana
Utilizaremos el repositorio oficial de Grafana para instalarlo. Importa la clave GPG de Grafana.
$ sudo mkdir -p /etc/apt/keyrings/ $ wget -q -O - https://apt.grafana.com/gpg.key | gpg --dearmor | sudo tee /etc/apt/keyrings/grafana.gpg > /dev/null
Añade el repositorio a tu sistema.
$ echo "deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
Si quieres instalar Grafana beta, añade en su lugar el siguiente repositorio.
$ echo "deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com beta main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
Actualiza la lista de repositorios del sistema.
$ sudo apt update
Instala Grafana.
$ sudo apt install grafana
Inicia y habilita el servicio Grafana.
$ sudo systemctl enable grafana-server --now
Comprueba el estado del servicio.
$ sudo systemctl status grafana-server ? grafana-server.service - Grafana instance Loaded: loaded (/lib/systemd/system/grafana-server.service; enabled; preset: enabled) Active: active (running) since Tue 2024-01-02 03:48:01 UTC; 3s ago Docs: http://docs.grafana.org Main PID: 8769 (grafana) Tasks: 7 (limit: 2299) Memory: 42.6M CPU: 1.804s CGroup: /system.slice/grafana-server.service ??8769 /usr/share/grafana/bin/grafana server --config=/etc/grafana/grafana.ini --pidfile=/run/grafana/grafana-server.pid --packaging=deb cfg:default.paths.logs=/var/log/grafana cfg:default.paths... .......
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
Basic Auth Details Usuario: navjot Contraseña: <yourinfluxdbpassword>
Detalles deInfluxDB Organización: howtoforge Token: <influxdbtoken>
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 menú hamburguesa situado a la izquierda de Inicio y haz clic en Cuadros de mando para abrir la pantalla Crear cuadro de mando.
Haz clic en el botón Crear Cuadro de Mando para continuar.
En la página siguiente, haz clic en el botón Añadir visualización para lanzar la superposición y haz clic en influxdb-1
para seleccionarla como fuente de datos.
Accederás a la siguiente página Editar Panel.
Pega el siguiente código en el Editor de consultas.
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 utilizamos 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 y luego en el botón Actualizar para comprobar si tu consulta funciona correctamente. Haz clic en el icono de la cruz para cerrar el inspector.
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 Visualización 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")
Utiliza el siguiente código para visualizar 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, haz clic en el icono Alerta y 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. Haz clic en el botón de edición del punto de contacto grafana-default-email
.
Introduce los detalles para configurar el canal de notificación por correo electrónico.
Si quieres enviar un mensaje adicional, haz clic en el enlace Configuración de correo electrónico opcional e introduce el mensaje.
Haz clic en Probar para abrir la ventana emergente y, a continuación, haz clic en el botón Enviar notificación de prueba para comprobar si la configuración del correo electrónico funciona. Haz clic en Guardar punto de contacto cuando hayas terminado.
Deberías recibir el siguiente correo electrónico confirmando la configuración.
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.
Vuelve a la pantalla de Paneles de control. Haz clic en el panel de control que acabamos de crear y obtendrás su página de inicio 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 en el botón Nueva regla de alerta para configurar una nueva alerta. Estamos creando una alerta para el panel Uso de la CPU.
Ahora puedes configurar las condiciones en las que Grafana enviará la alerta. Haz clic en el menú desplegable del enlace Opciones y selecciona el intervalo de tiempo por defecto (ahora-6h hasta ahora) para cambiar el intervalo de tiempo a Últimos 15 minutos, lo que significa que comprobará desde hace 15 minutos hasta ahora.
Por defecto, el tipo de alerta seleccionado es Alerta gestionada por Grafana. Hay dos expresiones seleccionadas por defecto. Elimínalas pulsando el botón de la papelera situado junto a ellas. Selecciona el desplegable Añadir expresión y selecciona la Condición clásica como tipo de expresión.
Haz clic en Establecer como condición de alerta para seleccionar la expresión elegida para enviar las alertas. Al hacerlo, el cuadro de expresión cambiará como se muestra a continuación.
Condiciones
Grafana trabaja con una consulta del siguiente formato para determinar cuándo lanzar una alerta.
avg() OF query(A) IS ABOVE 0.8
- 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 ) La letra del paréntesis define qué consulta ejecutar desde la pestaña Métricas.
- 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.
A continuación, estableceremos el comportamiento de evaluación. Haz clic en el botón Nueva carpeta para crear una carpeta donde almacenar tus reglas. Haz clic en el botón Nuevo grupo de evaluación para crear un grupo para agrupar reglas que se evaluarán tras el mismo intervalo de tiempo. Establece el intervalo de tiempo como 5m mientras creas el grupo.
Una vez terminado, la página debería tener el siguiente aspecto. Establece el estado de Alerta si se produce un error de ejecución o se agota el tiempo de espera en Alerta.
Regla
- Nombre – Introduce un nombre descriptivo para la alerta
- Carpeta – Crea o selecciona una carpeta preexistente para almacenar tu regla de notificación.
- Grupo – Introduce un nombre para tu grupo de alertas. Las alertas de un mismo grupo se evalúan tras el mismo intervalo de tiempo.
- Pendiente – 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.
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
- Ok – Establece el estado de la regla de alerta en
Ok
, ya que recibirás una alerta aunque las cosas estén bien.
Puedes indicar a Grafana cómo manejar los errores de ejecución o de tiempo de espera.
- Alerta – Establece el estado de la regla en
Alerting
- Ok – Establece el estado de la regla de alerta en
Ok
, ya que recibirás una alerta incluso si las cosas van bien. - Error – Establece el estado de la regla de alerta en Error para indicar que hay un problema.
Cuando hayas terminado, haz clic en el botón Previsualizar alertas para ver si todo funciona bien. Haz clic en el botón Guardar regla y salir en la parte superior derecha para terminar de añadir la alerta. Ahora deberías empezar a recibir alertas en tu correo electrónico. A continuación se muestra un ejemplo de uno de estos correos.
Paso 10 – Instalar Nginx
Debian 12 incluye una versión antigua de Nginx. Necesitas descargar el repositorio oficial de Nginx para instalar la última versión.
Importa la clave de firma de Nginx.
$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \ | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
Añade el repositorio de la versión principal de Nginx.
$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \ http://nginx.org/packages/mainline/debian `lsb_release -cs` nginx" \ | sudo tee /etc/apt/sources.list.d/nginx.list
Actualiza los repositorios del sistema.
$ sudo apt update
Instala Nginx.
$ sudo apt install nginx
Verifica la instalación. En los sistemas Debian, el siguiente comando sólo funcionará con sudo
.
$ sudo nginx -v nginx version: nginx/1.25.3
Inicia el servidor Nginx.
$ sudo systemctl start nginx
Comprueba el estado del servicio.
$ sudo systemctl status nginx ? nginx.service - nginx - high performance web server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; preset: enabled) Active: active (running) since Tue 2024-01-02 09:21:10 UTC; 5s ago Docs: https://nginx.org/en/docs/ Process: 12964 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS) Main PID: 12965 (nginx) Tasks: 3 (limit: 2299) Memory: 2.9M CPU: 86ms CGroup: /system.slice/nginx.service ??12965 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf" ??12966 "nginx: worker process" ??12967 "nginx: worker process" Jan 02 09:21:10 grafana systemd[1]: Starting nginx.service - nginx - high performance web server... Jan 02 09:21:10 grafana systemd[1]: Started nginx.service - nginx - high performance web server.
Paso 11 – Instalar SSL
Necesitamos instalar Certbot para generar el certificado SSL. Puedes instalar Certbot utilizando el repositorio de Debian u obtener la última versión utilizando la herramienta Snapd. Nosotros utilizaremos la versión Snapd.
Debian 12 no viene con Snapd instalado. Instala el paquete Snapd.
$ sudo apt install snapd
Ejecuta los siguientes comandos para asegurarte de que tu versión de Snapd está actualizada.
$ sudo snap install core && sudo snap refresh core
Instala Certbot.
$ sudo snap install --classic certbot
Utiliza el siguiente comando para asegurarte de que se puede ejecutar el comando Certbot creando un enlace simbólico al directorio /usr/bin
.
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
Comprueba si Certbot funciona correctamente.
$ certbot --version certbot 2.8.0
Ejecuta el siguiente comando para generar un certificado SSL.
$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d grafana.example.com
El comando anterior descargará un certificado en el directorio /etc/letsencrypt/live/grafana.example.com
de tu servidor.
Genera un certificado de grupo Diffie-Hellman.
$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
Comprueba el servicio programador de renovación de Certbot.
$ systemctl list-timers
Encontrarás snap.certbot.renew.service
como uno de los servicios programados para ejecutarse.
NEXT LEFT LAST PASSED UNIT ACTIVATES ----------------------------------------------------------------------------------------------------------------------------------------- Tue 2024-01-02 15:24:52 UTC 6h left Mon 2024-01-01 15:24:52 UTC 17h ago systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service Tue 2024-01-02 20:05:29 UTC 10h left Tue 2024-01-02 09:02:47 UTC 21min ago apt-daily.timer apt-daily.service Tue 2024-01-02 20:35:00 UTC 11h left - - snap.certbot.renew.timer snap.certbot.renew.service
Realiza una ejecución en seco del proceso para comprobar si la renovación SSL funciona correctamente.
$ sudo certbot renew --dry-run
Si no ves ningún error, ya está todo listo. Tu certificado se renovará automáticamente.
Paso 12 – Configurar Nginx para Grafana e InfluxDB
Abre el archivo /etc/nginx/nginx.conf
para editarlo.
$ sudo nano /etc/nginx/nginx.conf
Añade la siguiente línea antes de la línea include /etc/nginx/conf.d/*.conf;
.
server_names_hash_bucket_size 64;
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.
Crea y abre el archivo /etc/nginx/conf.d/grafana.conf
para editarlo.
$ sudo nano /etc/nginx/conf.d/grafana.conf
Pega en él el siguiente código. Sustituye grafana.example.com
por el nombre de tu dominio.
map $http_upgrade $connection_upgrade { default upgrade; '' close; } server { listen 443 ssl reuseport; listen [::]:443 ssl reuseport; http2 on; server_name grafana.example.com; access_log /var/log/nginx/grafana.access.log; error_log /var/log/nginx/grafana.error.log; ssl_certificate /etc/letsencrypt/live/grafana.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/grafana.example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/grafana.example.com/chain.pem; ssl_session_timeout 5m; ssl_session_cache shared:MozSSL:10m; ssl_session_tickets off; ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1; ssl_stapling on; ssl_stapling_verify on; ssl_dhparam /etc/ssl/certs/dhparam.pem; resolver 1.1.1.1 1.0.0.1 [2606:4700:4700::1111] [2606:4700:4700::1001] valid=60s; resolver_timeout 2s; location / { proxy_set_header Host $http_host; proxy_pass http://localhost:3000; } location /api/live { proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_set_header Host $http_host; proxy_pass http://localhost:3000; } location /influxdb/ { access_log /var/log/nginx/influx.access.log; error_log /var/log/nginx/influx.error.log; rewrite ^/influxdb$ /influxdb/ permanent; rewrite ^/influxdb/(.*)$ /$1 break; proxy_cookie_path ~*^/api /influxdb/api; proxy_connect_timeout 600s; proxy_http_version 1.1; proxy_pass http://localhost:8086; proxy_read_timeout 600s; proxy_send_timeout 600s; proxy_set_header Authorization $http_authorization; proxy_set_header Connection "upgrade"; proxy_set_header Host $http_host; proxy_set_header Upgrade $http_upgrade; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto https; proxy_set_header X-Real-IP $remote_addr; sub_filter '<base href="/">' '<base href="/influxdb/">'; sub_filter 'src="/' 'src="/influxdb/'; sub_filter 'href="/' 'href="/influxdb/'; sub_filter 'data-basepath="' 'data-basepath="/influxdb/'; sub_filter 'n.p="/"' 'n.p="/influxdb/"'; sub_filter 'o.p="/"' 'o.p="/influxdb/"'; sub_filter '/api/' '/influxdb/api/'; sub_filter 'api/v2/query' 'influxdb/api/v2/query'; sub_filter '/health`' '/influxdb/health`'; sub_filter_types text/css text/javascript application/javascript application/json; sub_filter_once off; } } # enforce HTTPS server { listen 80; listen [::]:80; server_name grafana.example.com; return 301 https://$host$request_uri; }
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.
Comprueba la configuración de Nginx.
$ sudo nginx -t
Reinicia el servidor Nginx.
$ sudo systemctl restart nginx
Configurar Telegraf para HTTPS
Abre el archivo /etc/telegraf/telegraf.conf
para editarlo.
$ sudo nano /etc/telegraf/telegraf.conf
Busca la sección [[outputs.influxdb_v2]]
y cambia el valor de la URL a https://grafana.nspeaks.com/influxdb
para que los datos entre InfluxDB y Telegraf sean seguros.
urls = ["https://grafana.example.com/influxdb"]
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.
Reinicia el servicio Telegraf.
$ sudo systemctl restart telegraf
Configurar Grafana para HTTPS
A continuación, tenemos que configurar Grafana para el acceso HTTPS. Abre el archivo /etc/grafana/grafana.ini
para editarlo.
$ sudo nano /etc/grafana/grafana.ini
Busca la sección [server]
y cambia la variable domain
, y root_url
como se indica a continuación.
# The public facing domain name used to access grafana from a browser ;domain = localhost domain = grafana.example.com # Redirect to correct domain if host header does not match domain # Prevents DNS rebinding attacks ;enforce_domain = true # The full public facing url you use in browser, used for redirects and emails # If you use reverse proxy and sub path specify full url (with sub path) ;root_url = %(protocol)s://%(domain)s:%(http_port)s/ root_url = %(protocol)s://%(domain)s
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.
Reinicia el servidor Grafana.
$ sudo systemctl restart grafana-server
Cierra los puertos del cortafuegos para InfluxDB y Grafana
También debes cerrar los puertos de InfluxDB y Grafana.
$ sudo ufw delete allow 8086 $ sudo ufw delete allow 3000
Grafana debería ser accesible en https://grafana.example.com
y la interfaz de usuario y la API de InfluxDB deberían ser accesibles en la URL https://grafana.example.com/influxdb
.
Conclusión
Con esto concluye el tutorial sobre la instalación y configuración de TIG Stack en un servidor Debian 12. Si tienes alguna pregunta, publícala en los comentarios a continuación.