Tutoriales y Manuales
Entradas Mensuales
-
▼
2024
(Total:
862
)
- ► septiembre (Total: 8 )
-
▼
julio
(Total:
104
)
-
Los actores de doblaje de videojuegos, en huelga c...
-
Intel confirma daños permanentes en los Core Gen 1...
-
Un fallo en Google Password Manager dejó sin contr...
-
Múltiples malware y ransomware aprovechan vulnerab...
-
Estafas del CEO mediate IA
-
Nicolás Maduro declara a Elon Musk «archienemigo» ...
-
Las ganancias de Tesla caen un 45 %, mientras Elon...
-
Suiza exigirá que todo el software gubernamental s...
-
Secure Boot está roto en más de 200 modelos de 5 g...
-
Cómo evitar que X (Twitter) use tus publicaciones ...
-
Elon Musk se enfrenta a nuevas sanciones por entre...
-
Error en WhatsApp para Windows permite ejecución d...
-
Compañía de seguridad de EEUU contrató un ingenier...
-
Cómo funciona DDoSia: la herramienta DDoS utilizad...
-
Grindr bloquea algunas funciones en la Villa Olímp...
-
Apple Maps lanza, por fin, una versión web para co...
-
Modus operandi de un ataque del ransomware Akira
-
Suplantación de archivos en WhatsApp para Android
-
CrowdStrike ofrece un vale de 10€ en UberEats para...
-
AMD retrasa ligeramente el lanzamiento de los Ryze...
-
El CNI de España coordina una respuesta al ataque ...
-
Photoshop permite crear imágenes con IA desde sus ...
-
Meta presenta Llama 3.1, su IA de código abierto q...
-
Grupo pro ruso NoName057(16) realiza ataques DDoS ...
-
Windows 11 funciona en un iPhone 15 Pro, aunque mu...
-
Compañía aérea se salva del desastre de CrowdStrik...
-
Facebook quiere gastarse 87.000 millones en ‘Ray-B...
-
Google eliminará acortador de URLs goo.gl en 2025
-
Microsoft culpa a la UE de lo sucedido con CrowdSt...
-
Process Hollowing: una técnica de evasión utilizad...
-
0-Day en Telegram permitía enviar archivos dañinos...
-
Herramienta de Microsoft para recuperar equipos da...
-
China tiene un equipo de ciberseguridad que se enc...
-
La nueva normativa pide usar botones físicos en lo...
-
La Guardia Civil detiene a tres prorrusos en Españ...
-
Caída global por culpa de CrowdStrike: un apagón c...
-
OpenAI presenta GPT-4o mini, una IA más potente y ...
-
Filtración de datos de empresa espía mSpy, revela ...
-
Armas biológicas diseñadas por IA
-
Hack WPA / WPA2 fácilmente sin fuerza bruta con Fl...
-
Configurar Telegraf, InfluxDBv2 y Grafana para mon...
-
Caddy: un servidor web con funciones de proxy inverso
-
Windows resolverá el problema de las actualizacion...
-
Apple y otras empresas usaron videos de YouTube pa...
-
Vulnerabilidad crítica en GeoServer GeoTools explo...
-
El FBI logra acceso al móvil del atacante de Donal...
-
Las guerras de Unix: Un capítulo crucial en la his...
-
Europa dice que X (Twitter) engaña a los usuarios ...
-
Detenidos tres menores por difundir por Whatsapp f...
-
Google quiere comprar la startup de ciberseguridad...
-
Explotación de vulnerabilidades tan solo 22 minuto...
-
0-Day en Windows MSHTML utilizado en ataques de ma...
-
HardBit ransomware version 4.0
-
Fábrica de Xiaomi abierta 24/7 en la que todos los...
-
Alemania dejará gradualmente sin uso de las redes ...
-
Detenido de nuevo Alcasec por robar los datos de 3...
-
Vulnerabilidad crítica en Exim expone a millones d...
-
Cómo la desinformación rusa terminó en el top de l...
-
Excel incluye un editor para programar en Python
-
Parche de Microsoft para grave vulnerabilidad acce...
-
Vulnerabilidad crítica en GitLab Community y Enter...
-
Cómo roban cuentas de YouTube con infostealers
-
Función de WhatsApp transcribe las notas de voz pa...
-
The Harvester: herramienta OSINT para analizar los...
-
AMD compra la finlandesa Silo AI para impulsar su ...
-
Windows 10 recibe Copilot como parte de una actual...
-
Samsung Galaxy Ring, un anillo cuantificador con a...
-
Microsoft abandona la junta directiva de OpenAI en...
-
Elon Musk es acusado de hacer trampa con el sistem...
-
Vulnerabilidad crítica en libreria Ghostscript en ...
-
Youtuber muestra cómo conseguir juegos gratis en S...
-
La computadora cuántica de Google es humillada por...
-
Fossify es una suite Open Source, gratis y sin anu...
-
Nothing desvela el CMF Phone 1, un sorprendente sm...
-
Google Maps introducirá anuncios en la navegación
-
Todo lo que necesitas saber sobre puertos USB y ve...
-
El Dorado ransomware: objetivo máquinas virtuales ...
-
Batocera es una retroconsola para PC y Android
-
Recopilación de 10 mil millones de contraseñas
-
Limitar el ancho de banda en Linux
-
Rack SSD
-
Servidor Blade vs. Servidor de Rack vs. Servidor d...
-
ChatGPT para Mac expuso las conversaciones de mill...
-
Roban 33 millones de números de teléfono del famos...
-
La UE podría eliminar la exención aduanera a los p...
-
Google Drive ahora es Booteable
-
Organismo rector de la Fórmula 1 revela una filtra...
-
Google Chrome bloqueará los certificados TLS de En...
-
Apple veta la emulación de PCs «retro» en iOS
-
54 detenidos por estafar más de 2 millones de euro...
-
YouTube permite solicitar el borrado de vídeos gen...
-
Primer cable Thunderbolt 5 con una velocidad 120 G...
-
Los adultos Españoles que quieran entrar en webs p...
-
Japón bate el récord de banda ancha superando los ...
-
Wise alerta de un hackeo masivo con robo de datos ...
-
Detenido autor puntos de acceso Wifi falsos en aer...
-
regreSSHion: 14 millones de servidores OpenSSH vul...
-
NFC - ¿Qué es, cómo funciona y qué riesgos de segu...
-
WhatsApp publica su planificador de eventos para g...
-
Meta deja de publicar parches de seguridad para el...
-
-
►
2023
(Total:
710
)
- ► septiembre (Total: 65 )
-
►
2022
(Total:
967
)
- ► septiembre (Total: 72 )
-
►
2021
(Total:
730
)
- ► septiembre (Total: 56 )
-
►
2020
(Total:
212
)
- ► septiembre (Total: 21 )
-
►
2019
(Total:
102
)
- ► septiembre (Total: 14 )
-
►
2017
(Total:
231
)
- ► septiembre (Total: 16 )
-
►
2016
(Total:
266
)
- ► septiembre (Total: 38 )
-
►
2015
(Total:
445
)
- ► septiembre (Total: 47 )
-
►
2014
(Total:
185
)
- ► septiembre (Total: 18 )
-
►
2013
(Total:
100
)
- ► septiembre (Total: 3 )
-
►
2011
(Total:
7
)
- ► septiembre (Total: 1 )
Blogroll
Etiquetas
Entradas populares
-
Después de ver qué es una vCPU y la diferencia entre núcleos (cores) e hilos en los procesadores, pasamos a explicar toda la nomenclatura d...
-
Aunque durante años ha sido una idea que se ha movido entre la teoría conspirativa y la probable realidad, una nueva filtración de unos do...
-
Si estos días vas a cualquiera de las plataformas de venta que hay en internet y buscas un USB probablemente te encuentras con no pocos con ...
Configurar Telegraf, InfluxDBv2 y Grafana para monitorizar los NAS de QNAP
La monitorización de los servidores y los equipos de red son fundamentales para avisarnos de posibles problemas antes de que sucedan, también nos permiten saber si hay un problema actual en uno de los equipos, para poder solucionarlo lo antes posible. Actualmente hay muchos sistemas de monitorización realmente completos como Zabbix, Prometheus o el popular Nagios entre otros muchos. Hoy en RedesZone os vamos a enseñar paso a paso cómo monitorizar un NAS del fabricante QNAP usando Telegraf, InfluxDBv2 y Grafana, todo ello instalado en Docker para minimizar el consumo de recursos.
Cuando montamos un sistema de monitorización en un servidor NAS, no solamente nos permitirá monitorizar el propio servidor NAS, sino que también nos permitirá recibir los datos desde otros equipos (routers, switches, firewalls e incluso diferentes Dockers) para escribir la información en la base de datos, y posteriormente mostrar todas las gráficas y configurar avisos o alertas. El objetivo de este tutorial es monitorizar nuestro NAS principal de QNAP, pero también sentar la base para que diferentes equipos y softwares puedan enviarnos los datos para que actúe como un sistema de monitorización centralizado.
¿Qué es Telegraf, InfluxDBv2 y Grafana?
Para la realización del sistema de monitorización, vamos a usar tres softwares que son Telegraf, InfluxDBv2 y Grafana. Todos ellos son imprescindibles y hacen una labor fundamental para recopilar, enviar los datos, escribirlos a una base de datos y mostrarlos en un panel de control totalmente personalizable. Si no conoces estos tres softwares, a continuación, os vamos a explicar qué es lo que hacen y para qué nos servirán.
Telegraf es un agente que nos permitirá recopilar, procesar, agregar y escribir las métricas, registros y otros datos arbitrarios. Este software incorpora más de 300 complementos para adaptarse a cualquier origen de datos, por lo que cubren una amplia gama de funciones que incluyen la monitorización del sistema, servicios en la nube y transmisión de los mensajes. Este software permite la integración de código para recopilar, transformar y transmitir los datos de forma eficiente. El archivo de configuración está en lenguaje TOML, por lo que la sintaxis es bastante amigable en comparación con otros.
Este software es bastante fácil de configurar, básicamente tendremos un origen de datos que puede ser HTTP, sensores usando diferentes protocolos y también la nube. En la parte de «Input» o entrada, podremos leer los estados de CPU, RAM, los mensajes MQTT, leer el estado del sistema a través de SNMP y mucho más. Una vez que hayamos recopilado toda esta información, tenemos la posibilidad de procesar estos datos e incluso hacer agregación de ellos, para posteriormente escribir en una base de datos o en un archivo, para su posterior tratamiento.
En este tutorial usaremos Telegraf para recopilar el estado del servidor NAS del fabricante QNAP vía SNMP, el propio sistema operativo QTS y QuTS hero disponen de un servidor SNMPv3 desde donde podemos leer una gran cantidad de datos del equipo. Además, QNAP nos proporciona la MIB necesaria para poder leer todos los datos, y poder configurar Telegraf adecuadamente para su posterior envío a la base de datos de InfluxDBv2.
InfluxDB es la base de datos de series temporales Open Source más utilizada, esta base de datos tiene todo lo que necesitamos en el mismo software, y es que no solo contamos con la propia base de datos, sino también una interfaz gráfica de usuario que nos permitirá mostrar los datos que nosotros queramos, e incluso tiene herramientas para hacer agregación de datos de manera avanzada. No obstante, para mostrar toda la información con sus gráficas y demás usaremos Grafana. La interfaz gráfica de usuario de InfluxDB nos permitirá crear las bases de datos, y también obtener el código de la consulta para posteriormente copiarlo y pegarlo en Grafana.
La base de datos de InfluxDB dispone ahora mismo de un total de tres versiones:
- InfluxDBv1: todavía se sigue utilizando esta base de datos para almacenar todos los registros desde Telegraf. Utiliza un lenguaje SQL para la realización de todas las consultas, con el objetivo de facilitar a los administradores la búsqueda de todo lo que necesiten dentro de la BBDD.
- InfluxDBv2: esta base de datos es la actual «stable», Telegraf y muchos otros softwares son compatibles con ella. La parte negativa es que usa un lenguaje llamado «Flux» que es propio, por lo que la sintaxis es bastante diferente al típico SQL. Esto no es ningún problema, porque la interfaz gráfica de usuario de InfluxDBv2 incorpora un «Editor de consultas» donde nosotros vamos seleccionando las diferentes tablas para que nos genere el código necesario para posteriormente copiarlo en Grafana u otro software. Además de hacer la consulta, también es capaz de usar funciones avanzadas de agregación de datos, y todo ello sin necesidad de tener apenas conocimientos de Flux.
- InfluxDBv3: es la nueva versión de la base de datos, pero todavía no está en versión «stable», es bastante nueva y todavía no tenemos compatibilidad con muchos softwares. Esta nueva versión mejora las prestaciones de la segunda versión, y vuelve a tener un lenguaje de consulta SQL abandonando Flux (al menos, es lo que se sabe, aunque podría cambiar).
En este tutorial nosotros usaremos InfluxDBv2, y veréis que el lenguaje Flux no es ningún problema, y el funcionamiento es simplemente perfecto. Además, todas las comunicaciones las haremos vía HTTPS para proporcionar la mejor seguridad posible, los certificados SSL/TLS serán autofirmados.
Grafana es un software libre que nos permite la visualización de cualquier dato, permitiéndonos crear cuadros de mando y gráficos muy útiles a partir de múltiples fuentes. Este software es compatible con bases de datos relacionales, noSQL e incluso bases de datos de series de tiempo como Graphite o InfluxDB entre otras. Lo mejor de este software es que es multiplataforma, aunque también lo podemos instalar perfectamente en Docker. Este software dispone de una grandísima cantidad de orígenes donde leer la información para poder mostrarla, además, incorpora muchísimos plugins que podemos instalar para aumentar las funcionalidades.
En nuestro tutorial, usaremos Grafana para conectarse con InfluxDBv2 y obtener todos los datos, para posteriormente mostrarlos en gráficas realmente impresionantes. Las posibilidades de Grafana son inmensas, porque también nos permitirá transformar los datos obtenidos en otros, directamente «al vuelo», sin necesidad de escribirlos en una base de datos adicional. La comunicación de este software con InfluxDBv2 será a través de HTTPS con certificados autofirmados, y comprobando la CA para dotar al sistema de la máxima seguridad.
El objetivo de este tutorial es poder crear un panel de control donde podamos ver mucha información sobre el servidor NAS de QNAP, o cualquier otro equipo que envíe datos a InfluxDBv2. En nuestro caso, estamos monitorizando un NAS TVS-h1288X con el sistema operativo QuTS hero. Podemos monitorizar el tiempo de encendido, firmware actual o si hay una actualización, el SAI conectado, CPU y RAM, ventiladores, temperaturas, los conjuntos de almacenamiento y en definitiva, todo lo que nos permita la MIB del SNMP del sistema operativo QTS o QuTS hero.
Gracias a las diferentes gráficas que nos permite crear Grafana, tenemos la posibilidad de verlo todo de una manera realmente espectacular. Dependiendo de los datos que nos interese mostrar, tendremos un tipo de gráfico u otros. El límite lo pone tu imaginación y lo que quieras realmente mostrar.
Una vez que ya conocéis para qué sirven todos los softwares que vamos a instalar, os vamos a hacer un pequeño resumen de cómo sería el flujo de datos para que lo tengáis muy claro:
- Telegraf se encargará de leer todos los estados vía SNMP hacia el NAS, el propio QNAP ya tiene un servidor SNMP en su interior que debemos activar y configurar, y tendremos la MIB para poder leer todos los datos. Telegraf enviará los datos a InfluxDBv2 vía HTTPS a un «Bucket» concreto.
- InfluxDBv2 se encargará de recibir todos los datos de Telegraf instalado en el NAS, o bien desde cualquier Telegraf que tengamos en otros equipos, porque podemos estar recibiendo datos desde todos los que queramos de forma completamente simultánea. Tanto el acceso a la web de administración como la recepción de los datos se hará con HTTPS con certificados autofirmados y una CA.
- Grafana se encargará de conectarse a InfluxDBv2 vía HTTPS para leer todos los datos, y mostrarlos en paneles de control muy configurables.
Configuración del SNMP en QNAP
Ahora debemos habilitar el servidor SNMP, que es al que se conectará Telegraf para «leer» absolutamente todos los estados del servidor NAS. Para hacer esto, tenemos que irnos a «Panel de control / Red y servicios de archivos / SNMP«. En este menú pinchamos en el botón de «Habilitar servicio SNMP» y realizamos estos ajustes:
- Versión SNMP: SNMP v3. Es la última versión y más segura.
- Nombre de usuario: telegraf (podemos poner el que queramos, pero debe corresponderse con la configuración del propio Telegraf, de lo contrario no funcionará).
- Usar autenticación: activado
- Protocolo de autenticación: HMAC-SHA
- Contraseña de autenticación: redeszone
- Privacidad de uso: activado
- Protocolo de privacidad: CBC-DES
- Contraseña de privacidad: redeszone
Ahora pinchamos en «Aplicar» y esperamos unos segundos, también es muy recomendable descargar la SNMP MIB, que es básicamente la base de datos con todo lo que podemos monitorizar. Dependiendo de si usas un sistema operativo QuTS hero o QTS cambiará respecto al almacenamiento, el resto es exactamente igual como ver la velocidad de ventiladores, temperaturas de discos duros etc. Es muy importante descargar la MIB, porque tendremos que copiarla dentro de la carpeta de Telegraf para que pueda usarla.
Creación del árbol de directorios para Docker
Con el fin de evitar problemas de Docker a la hora de levantar los diferentes contenedores, vamos a crear la carpeta compartida o dataset donde almacenaremos todos los contenedores e información. En nuestro caso, la ruta donde tendremos absolutamente todo lo relacionado con Docker es «/share/MaquinasVirtuales/Docker». De este directorio colgará todo el software. Aunque a la hora de ejecutar el stack en Portainer se creará el árbol de directorio, debido a que vamos a configurar «volumes» con archivos específicos, es necesario crear previamente estos archivos, y también asignarles adecuadamente los permisos necesarios.
Lo primero que hacemos es crear los tres directorios para los tres softwares que vamos a crear:
mkdir -p /share/MaquinasVirtuales/Docker/telegraf
mkdir -p /share/MaquinasVirtuales/Docker/influxdb
mkdir -p /share/MaquinasVirtuales/Docker/grafana
Para que Telegraf se cree correctamente con el Docker-compose, es necesario crear el archivo de configuración vacío, luego lo editaremos:
touch /share/MaquinasVirtuales/Docker/telegraf/telegraf.conf
Para que Grafana se inicie correctamente, es necesario proporcionar los permisos adecuados a la carpeta que creará el contenedor, para ello ejecutamos:
mkdir -p /share/MaquinasVirtuales/Docker/grafana/grafana_data
chmod 777 -R /share/MaquinasVirtuales/Docker/grafana/grafana_data
Ahora ya tendremos toda la estructura lista, ahora procedemos a crear los certificados digitales SSL/TLS que usaremos para todos los contenedores, así toda la comunicación se hace vía HTTPS.
Creación de certificados SSL/TLS
Ahora empezaremos con la creación de la CA y los certificados SSL/TLS para los diferentes softwares y que la comunicación sea siempre vía HTTPS. Es muy importante crear estos certificados para que toda la comunicación esté cifrada, porque es muy posible que este sistema de monitorización lo amplíes en un futuro, e instales Telegraf en otros servidores, y solamente necesitaremos configurarlo adecuadamente para que se comunique con InfluxDB. Si no quieres nada de HTTPS, puedes obviar esta parte y quitar de todos los archivos de configuración lo que hace referencia a TLS.
La configuración de los certificados SSL/TLS que vamos a crear, se puede cambiar en cualquier momento a través de los comandos OpenSSL, pero hemos configurado una suite bastante robusta en cuanto a seguridad:
- Hemos usado una criptografía de curva elíptica, concretamente secp384r1
- Para el certificado hemos usado ecdsa-with-SHA512.
- Validez de 10 años
- subjectAltName: tenemos que poner la dirección IP del servidor InfluxDBv2, este parámetro es crítico, sino no funcionará cuando hagamos la comprobación del certificado desde Grafana.
Para la ejecución de todos estos comandos, se puede usar el servidor de QNAP por SSH sin ningún problema, así lo hemos hecho nosotros. También podrías hacerlo de forma externa en cualquier Linux y posteriormente copiar los certificados digitales al NAS.
Creamos la autoridad de certificación (CA) que usaremos en Telegraf y Grafana para comprobar el certificado de InfluxDBv2. Tendremos que rellenar los datos de país, estado y demás valores, puedes pulsar «enter», lo importante es el CN (Common Name), puedes poner «RZ-CA» o lo que quieras, es para identificar la Autoridad de Certificación.
openssl ecparam -genkey -name secp384r1 -out redeszone-ca.key
openssl req -x509 -new -SHA512 -nodes -key redeszone-ca.key -days 3650 -out redeszone-ca.crt
Creamos el certificado del servidor, es fundamental no olvidar el subjectAltName al firmar el certificado, tenemos que poner la IP del servidor donde está InfluxDBv2
openssl ecparam -genkey -name secp384r1 -out redeszone-autofirmado.key
openssl req -new -SHA512 -key redeszone-autofirmado.key -nodes -out redeszone-autofirmado.csr
openssl req -in redeszone-autofirmado.csr -noout -text
Ahora debemos crear el fichero «opciones.txt» con el siguiente contenido. Es crítico poner la dirección IP de nuestro InfluxDBv2, sustituir 10.11.1.9 por la IP de tu NAS:
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
Guardamos el archivo y ahora ejecutamos la siguiente orden para firmar el certificado:
openssl x509 -req -SHA512 -extfile opciones.txt -days 3650 -in redeszone-autofirmado.csr -CA redeszone-ca.crt -CAkey redeszone-ca.key -CAcreateserial -out redeszone-autofirmado.crt
De todos los archivos que nos crea al ejecutar todos estos comandos, debemos usar:
- redeszone-ca.crt para Telegraf y para Grafana, esto sirve para conectarse con InfluxDBv2 y comprobar el certificado TLS
- redeszone-autofirmado.crt y redeszone-autofirmado.key tanto en InfluxDBv2 como en Grafana, ya que será el certificado HTTPS para entrar vía web.
Ahora que ya hemos creado todos los certificados, vamos a proporcionarles los permisos adecuados:
chmod 755 /share/MaquinasVirtuales/redeszone-ca.crt
chmod 755 /share/MaquinasVirtuales/redeszone-autofirmado.crt
chmod 755 /share/MaquinasVirtuales/redeszone-autofirmado.key
Y copiarlos en los directorios correspondientes de Telegraf, InfluxDBv2 y Grafana, ponemos:
cp /share/MaquinasVirtuales/redeszone-ca.crt /share/MaquinasVirtuales/Docker/telegraf/redeszone-ca.crt
cp /share/MaquinasVirtuales/redeszone-autofirmado.crt /share/MaquinasVirtuales/Docker/influxdb/redeszone-autofirmado.crt
cp /share/MaquinasVirtuales/redeszone-autofirmado.key /share/MaquinasVirtuales/Docker/influxdb/redeszone-autofirmado.key
cp /share/MaquinasVirtuales/redeszone-autofirmado.crt /share/MaquinasVirtuales/Docker/grafana/redeszone-autofirmado.crt
cp /share/MaquinasVirtuales/redeszone-autofirmado.key /share/MaquinasVirtuales/Docker/grafana/redeszone-autofirmado.key
Ahora ya podemos levantar el «Stack» de Portainer con todo el software.
Instalar todo el software usando Docker
Para la instalación de todo el software vamos a usar la consola por SSH de QNAP, primero crearemos un Docker-compose en el propio NAS con solamente el contenedor de Portainer, que se encargará de crear y gestionar el resto de contenedores muy fácilmente. Después crearemos un Stack con el resto de contenedores. Os vamos a proporcionar todo el código en un archivo .ZIP para su descarga sencilla.
Crearemos un archivo llamado docker-compose.yaml en el directorio «/share/MaquinasVirtuales/Docker» con el siguiente contenido:
#Comprobar Docker-compose:
#docker-compose -f docker-compose.yml config
version: '3.7'
networks:
dockerportainer:
name: dockerportainer
driver: bridge
ipam:
config:
- subnet: 172.30.1.0/24
services:
## Portainer - Gestor Dockers
portainer:
container_name: Portainer
image: portainer/portainer-ce:2.19.5
command: -H unix:///var/run/docker.sock
restart: always
networks:
dockerportainer:
ipv4_address: 172.30.1.2
ports:
- '10.11.1.9:9443:9443/tcp'
security_opt:
- no-new-privileges:true
volumes:
- /share/MaquinasVirtuales/Docker/portainer:/data
- /var/run/docker.sock:/var/run/docker.sock
- /etc/localtime:/etc/localtime:ro
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Madrid
Solamente tendrás que modificar la dirección IP 10.11.1.9 por la de tu servidor NAS. Es muy importante que sea lenguaje yaml, podéis usar un validador de sintaxis para los espacios. De todas formas, si usáis el código fuente nuestro vais a poder ejecutarlo sin problemas, es simplemente copiar y pegar. Para hacerlo tendrás que ejecutar «vim docker-compose.yaml» y dentro copiar todo el contenido, si no sabes usar de manera básica vim, siempre puedes usar el editor de texto de QNAP que podéis descargarlo desde App Center.
Ahora lo ejecutaremos con la orden siguiente:
docker compose up -d
Esperamos unos segundos y ya podremos iniciar sesión en Portainer a través de la dirección IP de tu NAS y el puerto 9443. Tendrás que poner la dirección https://IP:9443 y te pedirá el nombre de usuario «admin» y poner una contraseña robusta. Una vez creada la clave, ya podrás acceder a su administración y crear el nuevo stack.
Para crear el nuevo stack en Portainer, debemos irnos a «Dashboard / Stacks«:
Una vez que estemos en el menú anterior, tendremos que copiar el siguiente código:
#Comprobar Docker-compose:
#docker-compose -f docker-compose.yml config
version: '3.7'
networks:
dockerredeszone:
name: dockerredeszone
driver: bridge
ipam:
config:
- subnet: 172.30.2.0/24
services:
#Telegraf para leer datos del QNAP via SNMP
telegraf:
image: telegraf:latest
hostname: "QNAPredeszone"
container_name: telegraf
restart: unless-stopped
networks:
dockerredeszone:
ipv4_address: 172.30.2.2
ports:
- '10.11.1.9:8125:8125/tcp'
environment:
- TZ=Europe/Madrid
volumes:
- /share/MaquinasVirtuales/Docker/telegraf/telegraf.conf:/etc/telegraf/telegraf.conf
- /share/MaquinasVirtuales/Docker/telegraf/mibs:/usr/share/snmp/mibs
- /share/MaquinasVirtuales/Docker/telegraf/conf.d:/etc/telegraf/telegraf.d
- /share/MaquinasVirtuales/Docker/telegraf/redeszone-ca.crt:/etc/telegraf/redeszone-ca.crt
depends_on:
- influxdb
#InfluxDB para Home Assistant y otros servicios
influxdb:
image: influxdb:latest
container_name: influxdb
restart: unless-stopped
environment:
- DOCKER_INFLUXDB_INIT_MODE=setup
- DOCKER_INFLUXDB_INIT_USERNAME=redeszone
- DOCKER_INFLUXDB_INIT_PASSWORD=redeszone123
- DOCKER_INFLUXDB_INIT_ORG=RedesZoneORG
- DOCKER_INFLUXDB_INIT_BUCKET=RedesZoneBUCKET
- INFLUXD_TLS_CERT=/etc/ssl/redeszone-autofirmado.crt
- INFLUXD_TLS_KEY=/etc/ssl/redeszone-autofirmado.key
networks:
dockerredeszone:
ipv4_address: 172.30.2.3
ports:
- '10.11.1.9:8086:8086/tcp'
volumes:
- /share/MaquinasVirtuales/Docker/influxdb/influxdb_data:/var/lib/influxdb2
- /share/MaquinasVirtuales/Docker/influxdb/config:/etc/influxdb2
- /share/MaquinasVirtuales/Docker/influxdb/redeszone-autofirmado.crt:/etc/ssl/redeszone-autofirmado.crt
- /share/MaquinasVirtuales/Docker/influxdb/redeszone-autofirmado.key:/etc/ssl/redeszone-autofirmado.key
#Grafana para mostrar todo lo de InfluxDB
grafana:
image: grafana/grafana:latest
container_name: grafana
restart: unless-stopped
networks:
dockerredeszone:
ipv4_address: 172.30.2.4
ports:
- '10.11.1.9:8088:3000/tcp'
volumes:
- /share/MaquinasVirtuales/Docker/grafana/grafana_data:/var/lib/grafana
- /share/MaquinasVirtuales/Docker/grafana/redeszone-autofirmado.crt:/etc/ssl/redeszone-autofirmado.crt
- /share/MaquinasVirtuales/Docker/grafana/redeszone-autofirmado.key:/etc/ssl/redeszone-autofirmado.key
depends_on:
- influxdb
environment:
- GF_SERVER_CERT_FILE=/etc/ssl/redeszone-autofirmado.crt
- GF_SERVER_CERT_KEY=/etc/ssl/redeszone-autofirmado.key
- GF_SERVER_PROTOCOL=https
- GF_SECURITY_ADMIN_USER=redeszone
- GF_SECURITY_ADMIN_PASSWORD=redeszone123
## FIN ##
Tal y como ocurre en el caso anterior, es necesario que cambiéis la dirección IP 10.11.1.9 de nuestro NAS, por la del vuestro. Este fichero de docker-compose ya se encargará de crear los usuarios de administración en InfluxDB y Grafana de forma automática, activar el HTTPS y cargar los certificados digitales anteriores. Por este motivo, es muy importante tenerlo todo listo previamente, sino dará error a la hora de desplegar el stack. Este archivo de Docker-compose también lo tenéis disponible en la descarga de todo el código fuente, así no tendréis errores con la sintaxis.
Configuración del software
Ha llegado el momento de empezar con la configuración de los tres softwares. Primero vamos a configurar el InfluxDBv2 que es la base de datos, porque debemos crear los TOKEN necesarios para que tanto Telegraf como Grafana puedan conectarse correctamente. Os vamos a enseñar cómo crear un nuevo TOKEN con determinados permisos, y cómo conseguir los diferentes identificadores necesarios para el buen funcionamiento del sistema de monitorización.
Configuración de InfluxDBv2
Lo primero que tenemos que hacer es configurar la base de datos de InfluxDBv2, concretamente tenemos que coger cierta información y crear varios TOKEN para que los otros dos softwares (Telegraf y Grafana) puedan tener acceso. Para ello iniciamos sesión vía web, poniendo la dirección HTTPS://IP_NAS:8086 que es el puerto que hemos elegido. El nombre de usuario es «redeszone» y la contraseña es «redeszone123» tal y como teníamos en el docker-compose.
Una vez que estemos dentro, podemos ver en la parte superior izquierda la organización a la que pertenecemos, que es la que configuramos a través del «environment» del Docker-compose.
En este menú de «About» podemos ver el «Organization ID» que lo necesitaremos posteriormente para configurar Grafana, así que no lo olvidéis.
Lo más importante son los «Buckets«, esto son las bases de datos donde se almacenará todo el contenido. Tenemos la posibilidad de crear todos los buckets que nosotros queramos, simplemente le daremos un nombre. Con el docker-compose ya generamos uno automáticamente llamado «RedesZoneBUCKET» que será donde Telegraf escribirá toda la información que recoja vía SNMP. No obstante, podemos crear uno nuevo sin problemas y que recoja toda la información ahí.
En la sección de «API TOKENS» es donde podemos generar TOKEN nuevos con ciertos permisos, tanto de lectura como escritura en todos los BUCKETS o solamente en ciertos.
En este menú, tendremos que darle un nombre el TOKEN, por ejemplo, «Telegraf«, y a continuación, elegiremos el Bucket donde Telegraf trabajará, y le daremos permisos de lectura y escritura. No es recomendable crear un TOKEN universal para todos los buckets por cuestiones de seguridad.
Una vez que lo hayamos creado, copiamos todo ese TOKEN en el portapapeles, será el que usaremos en Telegraf para escribir, o bien en Grafana para leer toda la información.
La configuración de los TOKEN que debemos realizar en InfluxDB son los siguientes:
- Token para Telegraf: creamos un token con permisos de escritura (no es necesario lectura) solamente en el bucket de trabajo.
- Token para Grafana: creamos un token con permisos de lectura (no es necesario escritura) para todos los buckets. Si no lo hacemos así, el día de mañana si creamos un nuevo bucket, tendremos que reconfigurar Grafana con un nuevo token que tenga permisos para todos. También podrías hacerlo individualmente para mayor seguridad, pero tendrás que reconfigurar Grafana cada vez que pongas uno nuevo.
Configuración de Telegraf
Ha llegado el momento de configurar Telegraf adecuadamente para que escriba todos los datos conseguidos por SNMP al InfluxDB. Esta parte es la más compleja y delicada, sobre todo si nunca has trabajo con SNMP. Lo primero que debemos hacer es copiar la MIB del sistema operativo de QNAP (ya sea QTS o QuTS hero) en el directorio de «/share/MaquinasVirtuales/Docker/telegraf/mibs», también debemos copiar la MIB SNMPv2 que podéis bajar de aquí. Una vez que estén las dos en el directorio, ya estaremos listos para configurar el archivo de configuración telegraf.conf.
Debe tener el siguiente contenido:
## COMPROBAR LAS MIBS CON EL SNMP
##snmpget -v3 -l authPriv -u telegraf -a SHA -A "redeszone" -x DES -X "redeszone" 10.11.1.9 QTS-MIB::upsBatteryChargeWarningLevel.0
[[outputs.influxdb_v2]]
urls = ["https://10.11.1.9:8086/"]
token = "TOKEN_DEL_INFLUXDB2"
organization = "RedesZoneORG"
bucket = "RedesZoneBUCKET"
tls_ca = "/etc/telegraf/redeszone-ca.crt"
[[inputs.snmp]]
# Direccion IP del servidor NAS.
agents = [ "10.11.1.9" ]
# Intervalo de consulta al NAS
interval = "30s"
# Timeout a la hora de hacer la peticion de la Query
timeout = "30s"
# Numero de intentos máximos antes de dar timeout.
retries = 3
# The GETBULK max-repetitions parameter
max_repetitions = 10
# Nombre del SNMP
name = "snmp.QNAP_NAS"
#SNMPv3
version = 3
sec_name = "telegraf"
auth_protocol = "SHA"
auth_password = "redeszone"
sec_level = "authPriv"
priv_protocol = "DES"
priv_password = "redeszone"
path = ["/usr/share/snmp/mibs"]
###### QuTS hero #####
######
###### Si usas QTS todo lo que hay abajo debes quitarlo, y dejar solamente la parte de QTS.
######
##
## Detalles del sistema operativo y todas las métricas
##
# CPU
[[inputs.snmp.field]]
name = "nombre_nas"
oid = "QTS-MIB::enclosureName.1"
[[inputs.snmp.field]]
name = "cpu_uso"
oid = "QTS-MIB::systemCPU-Usage.0"
# Memoria RAM
[[inputs.snmp.field]]
name = "memoria_ram_total"
oid = "QTS-MIB::systemTotalMem.0"
[[inputs.snmp.field]]
name = "memoria_ram_libre"
oid = "QTS-MIB::systemFreeMem.0"
[[inputs.snmp.field]]
name = "memoria_ram_disponible"
oid = "QTS-MIB::systemAvailableMem.0"
[[inputs.snmp.field]]
name = "memoria_ram_usada"
oid = "QTS-MIB::systemUsedMemory.0"
[[inputs.snmp.field]]
name = "memoria_cache_usada"
oid = "QTS-MIB::systemCacheMemory.0"
[[inputs.snmp.field]]
name = "memoria_buffer"
oid = "QTS-MIB::systemBufferMemory.0"
# Uptime
[[inputs.snmp.field]]
name = "tiempo_uso"
oid = "QTS-MIB::sysUptime.0"
# Version actual firmware
[[inputs.snmp.field]]
name = "firmware_version_actual"
oid = "QTS-MIB::firmwareVersion.0"
# Version disponble del firmware
[[inputs.snmp.field]]
name = "firmware_version_nueva"
oid = "QTS-MIB::firmwareUpgradeAvailable.0"
# Temperatura
[[inputs.snmp.field]]
name = "temperatura_sistema"
oid = "QTS-MIB::enclosureSystemTemp.1"
[[inputs.snmp.field]]
name = "temperatura_sistema_2"
oid = "QTS-MIB::systemTemperature.0"
[[inputs.snmp.field]]
name = "temperatura_cpu"
oid = "QTS-MIB::cpuTemperature.0"
# Ventiladores
[[inputs.snmp.field]]
name = "rpm_ventilador_1"
oid = "QTS-MIB::sysFanSpeed.1"
[[inputs.snmp.field]]
name = "rpm_ventilador_2"
oid = "QTS-MIB::sysFanSpeed.2"
[[inputs.snmp.field]]
name = "rpm_ventilador_3"
oid = "QTS-MIB::sysFanSpeed.3"
##
## Discos duros y SSD
##
# DISCO 1
# Debes poner tantos discos duros y SSD como tengas instalados en el sistema.
[[inputs.snmp.field]]
name = "disco_numero_1"
oid = "QTS-MIB::diskIndex.1"
[[inputs.snmp.field]]
name = "disco_id_1"
oid = "QTS-MIB::diskID.1"
[[inputs.snmp.field]]
name = "disco_fabricante_1"
oid = "QTS-MIB::diskManufacturer.1"
[[inputs.snmp.field]]
name = "disco_modelo_1"
oid = "QTS-MIB::diskModel.1"
[[inputs.snmp.field]]
name = "disco_numero_serie_1"
oid = "QTS-MIB::diskSerialNumber.1"
[[inputs.snmp.field]]
name = "disco_tipo_1"
oid = "QTS-MIB::diskType.1"
[[inputs.snmp.field]]
name = "disco_estado_1"
oid = "QTS-MIB::diskStatus.1"
[[inputs.snmp.field]]
name = "disco_temperatura_1"
oid = "QTS-MIB::diskTemperature.1"
[[inputs.snmp.field]]
name = "disco_capacidad_1"
oid = "QTS-MIB::diskCapacity.1"
##
## Conjuntos de almacenamiento
##
#CONJUNTO DE ALMACENAMIENTO 1
#Debes poner tantos conjuntos de almacenamiento como tengas creados
[[inputs.snmp.field]]
name = "conjunto_almacenamiento_1_ID"
oid = "QTS-MIB::storagepoolID.1"
[[inputs.snmp.field]]
name = "conjunto_almacenamiento_1_capacidad_total"
oid = "QTS-MIB::storagepoolCapacity.1"
[[inputs.snmp.field]]
name = "conjunto_almacenamiento_1_espacio_disponible"
oid = "QTS-MIB::storagepoolFreeSize.1"
[[inputs.snmp.field]]
name = "conjunto_almacenamiento_1_estado"
oid = "QTS-MIB::storagepoolStatus.1"
##
## Carpetas compartidas (DATASET)
##
#DATASET XXXXXX
#Debes poner tantas carpetas compartidas como tengas creadas
[[inputs.snmp.field]]
name = "carpeta_compartida_1_nombre"
oid = "QTS-MIB::sharedFolderName.1"
[[inputs.snmp.field]]
name = "carpeta_compartida_1_capacidad_total"
oid = "QTS-MIB::sharedFolderCapacity.1"
[[inputs.snmp.field]]
name = "carpeta_compartida_1_capacidad_disponible"
oid = "QTS-MIB::sharedFolderFreeSize.1"
[[inputs.snmp.field]]
name = "carpeta_compartida_1_estado"
oid = "QTS-MIB::sharedFolderStatus.1"
##
## Monitorizacion de un SAI
##
#Monitorizacion de SAI
[[inputs.snmp.field]]
name = "ups_modelo"
oid = "QTS-MIB::upsModel.0"
[[inputs.snmp.field]]
name = "ups_carga_porcentaje"
oid = "QTS-MIB::upsLoadPercentage.0"
[[inputs.snmp.field]]
name = "ups_carga_bateria"
oid = "QTS-MIB::upsBatteryCharge.0"
[[inputs.snmp.field]]
name = "ups_carga_aviso"
oid = "QTS-MIB::upsBatteryChargeWarningLevel.0"
###### QTS #####
######
###### Si usas QuTS hero todo lo que hay abajo debes quitarlo, y dejar solamente la parte de QuTS hero.
######
##
## Detalles del sistema operativo y todas las métricas
##
# CPU
[[inputs.snmp.field]]
name = "nombre_nas"
oid = "QTS-MIB::enclosureName.1"
[[inputs.snmp.field]]
name = "cpu_uso"
oid = "QTS-MIB::systemCPU-Usage.0"
# Memoria RAM
[[inputs.snmp.field]]
name = "memoria_ram_total"
oid = "QTS-MIB::systemTotalMem.0"
[[inputs.snmp.field]]
name = "memoria_ram_libre"
oid = "QTS-MIB::systemFreeMem.0"
[[inputs.snmp.field]]
name = "memoria_ram_disponible"
oid = "QTS-MIB::systemAvailableMem.0"
[[inputs.snmp.field]]
name = "memoria_ram_usada"
oid = "QTS-MIB::systemUsedMemory.0"
[[inputs.snmp.field]]
name = "memoria_cache_usada"
oid = "QTS-MIB::systemCacheMemory.0"
[[inputs.snmp.field]]
name = "memoria_buffer"
oid = "QTS-MIB::systemBufferMemory.0"
# Uptime
[[inputs.snmp.field]]
name = "tiempo_uso"
oid = "QTS-MIB::sysUptime.0"
# Version actual firmware
[[inputs.snmp.field]]
name = "firmware_version_actual"
oid = "QTS-MIB::firmwareVersion.0"
# Version disponble del firmware
[[inputs.snmp.field]]
name = "firmware_version_nueva"
oid = "QTS-MIB::firmwareUpgradeAvailable.0"
# Temperatura
[[inputs.snmp.field]]
name = "temperatura_sistema"
oid = "QTS-MIB::enclosureSystemTemp.1"
[[inputs.snmp.field]]
name = "temperatura_cpu"
oid = "QTS-MIB::cpuTemperature.0"
# Ventiladores
[[inputs.snmp.field]]
name = "rpm_ventilador_1"
oid = "QTS-MIB::sysFanSpeed.1"
[[inputs.snmp.field]]
name = "rpm_ventilador_2"
oid = "QTS-MIB::sysFanSpeed.2"
[[inputs.snmp.field]]
name = "rpm_ventilador_3"
oid = "QTS-MIB::sysFanSpeed.3"
##
## Discos duros y SSD
##
# DISCO 1
[[inputs.snmp.field]]
name = "disco_numero_1"
oid = "QTS-MIB::diskIndex.1"
[[inputs.snmp.field]]
name = "disco_id_1"
oid = "QTS-MIB::diskID.1"
[[inputs.snmp.field]]
name = "disco_fabricante_1"
oid = "QTS-MIB::diskManufacturer.1"
[[inputs.snmp.field]]
name = "disco_modelo_1"
oid = "QTS-MIB::diskModel.1"
[[inputs.snmp.field]]
name = "disco_numero_serie_1"
oid = "QTS-MIB::diskSerialNumber.1"
[[inputs.snmp.field]]
name = "disco_tipo_1"
oid = "QTS-MIB::diskType.1"
[[inputs.snmp.field]]
name = "disco_estado_1"
oid = "QTS-MIB::diskStatus.1"
[[inputs.snmp.field]]
name = "disco_temperatura_1"
oid = "QTS-MIB::diskTemperature.1"
[[inputs.snmp.field]]
name = "disco_capacidad_1"
oid = "QTS-MIB::diskCapacity.1"
##
## Conjuntos de almacenamiento
##
#CONJUNTO DE ALMACENAMIENTO 1
#Debes dar de alta tantos conjuntos de almacenamiento como tengas.
[[inputs.snmp.field]]
name = "conjunto_almacenamiento_1_ID"
oid = "QTS-MIB::storagepoolID.1"
[[inputs.snmp.field]]
name = "conjunto_almacenamiento_1_capacidad_total"
oid = "QTS-MIB::storagepoolCapacity.1"
[[inputs.snmp.field]]
name = "conjunto_almacenamiento_1_espacio_disponible"
oid = "QTS-MIB::storagepoolFreeSize.1"
[[inputs.snmp.field]]
name = "conjunto_almacenamiento_1_estado"
oid = "QTS-MIB::storagepoolStatus.1"
##
## Volumenes creados en QTS
##
#Volumen 1
#Debes poner tantos como tengas creados en el QTS.
[[inputs.snmp.field]]
name = "volumen_1_nombre"
oid = "QTS-MIB::volumeName.1"
[[inputs.snmp.field]]
name = "volumen_1_capacidad_total"
oid = "QTS-MIB::volumeCapacity.1"
[[inputs.snmp.field]]
name = "volumen_1_capacidad_disponible"
oid = "QTS-MIB::volumeFreeSize.1"
[[inputs.snmp.field]]
name = "volumen_1_estado"
oid = "QTS-MIB::volumeStatus.1"
#Monitorizacion de SAI
[[inputs.snmp.field]]
name = "ups_modelo"
oid = "QTS-MIB::upsModel.0"
[[inputs.snmp.field]]
name = "ups_carga_porcentaje"
oid = "QTS-MIB::upsLoadPercentage.0"
[[inputs.snmp.field]]
name = "ups_carga_bateria"
oid = "QTS-MIB::upsBatteryCharge.0"
[[inputs.snmp.field]]
name = "ups_carga_aviso"
oid = "QTS-MIB::upsBatteryChargeWarningLevel.0"
Este archivo es el «universal» para QTS y QuTS hero, por lo que, dependiendo del sistema operativo que uses, tendrás que quitar la parte de uno u otro. Además, con el fin de configurar adecuadamente los diferentes inputs.snmp.field, os recomendamos hacer uso de la herramienta snmpget para ver uno a uno los valores de vuestro NAS. Para usar esto, deberás utilizar cualquier sistema operativo Linux como Debian, y usar la siguiente sintaxis:
snmpget -v3 -l authPriv -u telegraf -a SHA -A "redeszone" -x DES -X "redeszone" 10.11.1.9 QTS-MIB::systemCPU-Usage.0
Al poner esta orden, nos devolverá información sobre el uso de la CPU del sistema. Lo mismo debes hacer con la parte de discos duros y carpetas compartidas o conjuntos de almacenamiento, tienes que adaptar el fichero de configuración anterior.
Otro aspecto muy importante es la parte de «outputs», aquí debes configurar adecuadamente la dirección IP del InfluxDB y el TOKEN correspondiente, así como la organización y el bucket elegido. Todo este código fuente también os lo vamos a proporcionar.
Una vez que lo tengamos todo configurado, reiniciamos el contenedor de Telegraf como os hemos indicado antes, y nos aseguramos de que no haya ningún tipo de error. Sí es normal que aparezca un warning indicando: «DeprecationWarning: Value «agent_host» for option «agent_host_tag» of plugin «inputs.snmp» deprecated since version 1.29.0 and will be removed in : set to «source» for consistent usage across plugins or safely ignore this message and continue to use the current value». Pero no es necesario hacer nada.
Una vez que esperemos aproximadamente un minuto, podremos ver en nuestro InfluxDB que ya hay información en el bucket configurado. Con el «Data Explorer» podemos ir navegando por la diferente información escrita en la base de datos, y al terminar podemos pinchar en «Submit» para que nos la muestre. Este «Data explorer» es muy completo, porque también nos permite tratar los datos e incluso generar el código fuente para posteriormente copiarlo en Grafana.
Es muy importante elegir siempre el «host» QNAPredeszone tal y como podéis ver, para localizar exactamente nuestro servidor NAS.
Configuración de Grafana
Lo primero que tenemos que hacer, es iniciar sesión vía web, poniendo la dirección HTTPS://IP_NAS:8088 que es el puerto que hemos elegido. El nombre de usuario es «redeszone» y la contraseña es «redeszone123» tal y como teníamos en el docker-compose. Nada más acceder, veremos acceso a algunos tutoriales que podemos seguir para realizar la puesta en marcha.
Lo primero que debemos hacer es irnos a «Connections» y elegir «InfluxDB»:
Ahora elegiremos el nombre del origen de los datos, nosotros hemos puesto simplemente «influxdb«. En la sección de «Query Language» debemos elegir «Flux» ya que estamos ante una base de datos InfluxDBv2. Abajo tendremos que empezar con la configuración para conectarnos a la base de datos:
- HTTP:
- URL: https://IP_NAS:8086
- Auth: «with CA cert» activado
Ahora en la sección de TLS/SSL Auth Details, debemos copiar el contenido del redeszone-ca.crt, es decir, el certificado de la Autoridad de Certificación. Esto sirve para que Grafana verifique que se está conectando al servidor InfluxDBv2 correctamente y con seguridad.
En el menú de «InfluxDB Details», debemos poner:
- Organization: tenemos que poner el identificador de la organización que teníamos en «ABOUT», es la cadena de caracteres.
- Token: es el token que generamos en InfluxDB con permisos de lectura a todos los buckets. Debemos copiarlo aquí
Recuerda que el menú de «Organization» está en About
Una vez que lo hayamos hecho todo, pinchamos en «Save & Test» y nos indicará si se ha conectado correctamente o no. Si se ha conectado bien, nos indicará que el origen de los datos está correcto, y que se ha encontrado con un bucket.
Panel de Grafana monitorizando el test de velocidad de Internet
Fuentes:
0 comentarios :
Publicar un comentario
Los comentarios pueden ser revisados en cualquier momento por los moderadores.
Serán publicados aquellos que cumplan las siguientes condiciones:
- Comentario acorde al contenido del post.
- Prohibido mensajes de tipo SPAM.
- Evite incluir links innecesarios en su comentario.
- Contenidos ofensivos, amenazas e insultos no serán permitidos.
Debe saber que los comentarios de los lectores no reflejan necesariamente la opinión del STAFF.