Tienda Wifi

Tienda Wifi
CiudadWireless es la tienda Wifi recomendada por elhacker.NET

Entradas Mensuales

Síguenos en:

Canal Oficial Telegram de elhacker.NET Grupo Facebook elhacker.NET Twitter elhacker.NET Canal Youtube elhacker.NET Comunidad Steam: Grupo elhacker.NET Mastodon

Entradas populares

PostHeaderIcon 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


 
 
Speedtest-tracker es un contenedor Docker que permite realizar test de velocidad cada cierto tiempo, y nos mostrará las estadísticas en una web específicamente dedicada a ello. No obstante, en la web de administración tenemos la posibilidad de enviar los datos también a InfluxDB. Nosotros lo hemos hecho, y así podemos mostrarlo todo en Grafana de manera centralizada. De todas formas, la web de administración de este Docker también tiene un muy buen diseño, por lo que no tienes la necesidad de integrarlo en InfluxDB y Grafana, pero debido a la facilidad de configuración de este Docker, nosotros lo hemos puesto y la verdad es que visualmente es realmente espectacular para controlar todas las velocidades reales de nuestra conexión.


Fuentes:

https://www.redeszone.net/marcas/qnap/instalar-configurar-telegraf-influxdbv2-grafana-monitorizar-nas-qnap/


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.