Hola comunidad, ya habíamos creado un sistema de monitoreo en tiempo real con Netdata en cascada aquí. Ahora toca el turno a la posibilidad de almacenar métricas de nuestros servidores por un largo período, para tener un largo historial.
Para lograr esto se escogieron como soluciones las de Prometheus y Grafana, que vinculada a la solución de Netdata, lograremos lo siguiente:
Actualmente Netdata permite exportar sus métricas a Prometheus, pero para evitar la enorme cantidad de métricas, que va a estar siendo duplicadas, tanto en largo como en corto plazo, recomiendo usar mejor Prometheus Node Exporter para exportar sólo aquellas méricas que se deseen. Lo anterior no supondría un problema si tuviesemos una «gestión en banda» (enlace dedicado para la gestión que no afecte el ancho de banda de los servicios).
Prometheus es un sistema de monitoreo y herramientas de alertas de código. Sus principales características son:
Paquetes necesarios:
apt-get install wget curl
Creando usuario y grupo de sistema para prometheus:
useradd -M -r -s /bin/false Prometheus
Para verificar esto, ingresamos la siguiente línea:
id prometheus
Debe devolver algo como esto:
uid=998(prometheus) gid=998(prometheus) grupos=998(prometheus)
Creando los directorios de configuración:
mkdir /etc/prometheus mkdir /var/lib/prometheus
Asignando los propietarios a los directorios creados:
chown prometheus:prometheus /etc/prometheus chown prometheus:prometheus /var/lib/Prometheus
Descargando el compilado:
mkdir /opt/instaladores cd /opt/instaladores/ wget https://github.com/prometheus/prometheus/releases/download/v2.6.0/prometheus-2.11.1.linux-amd64.tar.gz
Extraemos el paquete:
tar -xzvf prometheus-2.11.1.linux-amd64.tar.gz
Copie los dos ficheros «prometheus» y «promtool» que están dentro de la carpeta del paquete descomprimido y ubicarlos en «/usr/local/bin/»
cp prometheus-2.11.1.linux-amd64/prometheus /usr/local/bin/ cp prometheus-2.11.1.linux-amd64/promtool/usr/local/bin/
Asignando los propietarios a los ficheros copiados en su nuevo destino
chown prometheus:prometheus /usr/local/bin/prometheus chown prometheus:prometheus /usr/local/bin/promtool
Copie los directorios «consoles/» y «console_libraries/» al directorio “/etc/prometheus”:
cp -r prometheus-2.11.1.linux-amd64/consoles/ /etc/prometheus/ cp -r prometheus-2.11.1.linux-amd64/console_libraries/ /etc/prometheus/
Asignamos el propietario de los directorios anteriores:
chown -R prometheus:prometheus /etc/prometheus/consoles chown -R prometheus:prometheus /etc/prometheus/console_libraries
Descargando el compilado:
mkdir /opt/instaladores cd /opt/instaladores/ wget https://github.com/prometheus/prometheus/releases/download/v2.6.0/prometheus-2.11.1.linux-amd64.tar.gz
Extraemos el paquete:
tar -xzvf prometheus-2.11.1.linux-amd64.tar.gz
Copie los dos ficheros «prometheus» y «promtool» que están dentro de la carpeta del paquete descomprimido y ubicarlos en «/usr/local/bin/»:
cp prometheus-2.11.1.linux-amd64/prometheus /usr/local/bin/ cp prometheus-2.11.1.linux-amd64/promtool/usr/local/bin/
Asignando los propietarios a los ficheros copiados en su nuevo destino
chown prometheus:prometheus /usr/local/bin/prometheus chown prometheus:prometheus /usr/local/bin/promtool
Copie los directorios «consoles/» y «console_libraries/» al directorio “/etc/prometheus”:
cp -r prometheus-2.11.1.linux-amd64/consoles/ /etc/prometheus/ cp -r prometheus-2.11.1.linux-amd64/console_libraries/ /etc/prometheus/
Asignamos el propietario de los directorios anteriores:
chown -R prometheus:prometheus /etc/prometheus/consoles chown -R prometheus:prometheus /etc/prometheus/console_libraries
Ahora que tenemos todos los ficheros de configuración requeridos en su lugar, procedemos a configurar Prometheus. El fichero de configuración por defecto de Prometheus está localizado en el directorio creado tras extraerse su paquete de instalación por compilado. Desde que estamos haciendo una instalación básica, copiaremos ese fichero y lo modificaremos:
cp prometheus-2.11.1.linux-amd64/prometheus.yml /etc/prometheus/
Editamos el fichero de configuración de ejemplo:
nano /etc/prometheus/prometheus.yml
Ajustamos el fichero a como se muestra a continuación:
# my global config global: scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute. evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute. # scrape_timeout is set to the global default (10s). # A scrape configuration containing exactly one endpoint to scrape: # Here it's Prometheus itself. scrape_configs: # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config. - job_name: 'prometheus' # metrics_path defaults to '/metrics' # scheme defaults to 'http'. static_configs: - targets: ['localhost:9090']
Establecemos el propietario del fichero de configuración:
chown prometheus:prometheus /etc/prometheus/prometheus.yml
La configuración básica de Prometheus está finalizada. Para iniciar Prometheus con nuestra configuración básica, corremos el programa:
prometheus --config.file=/etc/prometheus/prometheus.yml
El programa habrá iniciado, cuando devuelva algo como lo siguiente:
level=info ts=2019-08-14T17:58:16.996Z caller=main.go:621 msg="Server is ready to receive web requests."
Accedemos a la página de estados de Prometheus:
http://server_ip:9090
Creamos el servicio Prometheus en systemd para que inicie con el sistema:
nano /etc/systemd/system/prometheus.service
Agregamos lo siguiente:
[Unit] Description=Prometheus Time Series Collection and Processing Server Wants=network-online.target After=network-online.target [Service] User=prometheus Group=prometheus Type=simple ExecStart=/usr/local/bin/prometheus \ --config.file /etc/prometheus/prometheus.yml \ --storage.tsdb.path /var/lib/prometheus/ \ --web.console.templates=/etc/prometheus/consoles \ --web.console.libraries=/etc/prometheus/console_libraries [Install] WantedBy=multi-user.target
Recargamos la configuración del demonio systemd:
systemctl daemon-reload
Habilitamos e iniciamos el servicio Prometheus para que corra con el inicio del sistema:
systemctl enable prometheus.service systemctl start prometheus.service
Verificamos el estado del servicio:
systemctl status prometheus
Si sale lo siguiente, entonces Prometheus está corriendo:
prometheus.service - Prometheus Time Series Collection and Processing Server Loaded: loaded (/etc/systemd/system/prometheus.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2019-08-14 20:08:44 CDT; 5s ago Main PID: 1649 (prometheus) CGroup: /system.slice/prometheus.service └─1649 /usr/local/bin/prometheus --config.file /etc/prometheus/prometheus.yml --storage.tsdb.path /var/lib/prometheus/ --web.console.templates=/etc/
Reiniciamos el servidor:
reboot
Después que inicie el servidor, verificamos si prometheus inició con el sistema:
systemctl status prometheus.service
#===========================================================
NOTA: Si no inició con el sistema, propongo iniciarlo mediante un script que inicie con el sistema (usted puede hacerlo de otra manera más eficiente si así lo desea):
mkdir -p /config/scripts nano /config/scripts/prometheus.startup.sh
Agregar lo siguiente:
#!/bin/sh #---------------------------------------------------------------------------- # El objetivo de este script es iniciar el servicio de prometheus #---------------------------------------------------------------------------- /usr/local/bin/prometheus --config.file /etc/prometheus/prometheus.yml --storage.tsdb.path /var/lib/prometheus/ --web.console.templates=/etc/prometheus/consoles --web.console.libraries=/etc/prometheus/console_libraries
Le damos permisos de ejecución:
chmod +x /config/scripts/prometheus.startup.sh
Editamos el cron:
crontab -e
Agregamos lo siguiente al final:
############## # PROMETHEUS # ############## @reboot /config/scripts/prometheus.startup.sh
Reiniciamos y volvemos a verificar cuando inicie el servidor. Ahora sí debe de iniciar prometheus.
#===========================================================
El siguiente procedimiento para implementar y configurar Prometheus Node Exporter es necesario hacerlo en cada host Linux, tanto en el servidor prometheus, como en los demás servidores a monitorear.
Para correr de forma segura el «Node Exporter», necesitamos crear un usuario para ello.
useradd -M -r -s /bin/false node_exporter
Esto creará el usuario especificado con un grupo bajo el mismo nombre. Verificamos:
id node_exporter
Debe devolver algo como esto:
uid=997(node_exporter) gid=997(node_exporter) grupos=997(node_exporter)
Descargando Node Exporter:
cd /opt/instaladores wget https://github.com/prometheus/node_exporter/releases/download/v0.18.1/node_exporter-0.18.1.linux-amd64.tar.gz
Desempaquetando «node_exporter-0.18.1.linux-amd64.tar.gz»:
tar xzf node_exporter-0.18.1.linux-amd64.tar.gz
Copiamos el binario de «node_exporter» del directorio creado al destino «/usr/local/bin»:
cp node_exporter-0.18.1.linux-amd64/node_exporter /usr/local/bin/
Establecemos el usuario y grupo propietario del binario:
chown node_exporter:node_exporter /usr/local/bin/node_exporter
Node Exporter puede ser configurado para exponer específicos sistemas métricos. A continuación, se crea el servicio «node_exporter» en systemd para que inicie con el sistma, brindando información colectada de CPU, uso de disco, estadísticas de memoria, entre otros:
nano /etc/systemd/system/node_exporter.service
Agregar lo siguiente:
[Unit] Description=Prometheus Node Exporter Wants=network-online.target After=network-online.target [Service] User=node_exporter Group=node_exporter Type=simple ExecStart=/usr/local/bin/node_exporter \ --collector.cpu \ --collector.cpufreq \ --collector.diskstats \ --collector.meminfo \ --collector.loadavg \ --collector.filesystem \ --collector.hwmon \ --collector.netdev \ --collector.netstat \ --collector.time \ [Install] WantedBy=multi-user.target
Recargamos la configuración del demonio systemd:
systemctl daemon-reload
Iniciamos y habilitamos el servicio «node_exporter» para que corra con el inicio del sistema:
systemctl start node_exporter.service systemctl enable node_exporter.service
Verificamos el estado del servicio:
systemctl status node_exporter.service
Debe devolver algo como esto:
node_exporter.service - Prometheus Node Exporter Loaded: loaded (/etc/systemd/system/node_exporter.service; disabled; vendor preset: enabled) Active: active (running) since Wed 2019-08-14 21:38:07 CDT; 16s ago Main PID: 4092 (node_exporter) Tasks: 4 (limit: 2337) CGroup: /system.slice/node_exporter.service └─4092 /usr/local/bin/node_exporter
Reiniciamos el servidor:
reboot
Verificamos si inició con el sistema:
systemctl status node_exporter.service
#===========================================================
NOTA: Si no inicia con el sistema hacer misma operación que con el servicio «prometheus»
#===========================================================
El «Node Exporter» corre sobre el puerto TCP 9100. Lo podemos comprobar con el siguiente comando:
ss -altnp | grep 9100
Debe devolver algo como esto:
LISTEN 0 128 :::9100 :::* users:(("node_exporter",pid=3018,fd=3))
(En el servidor de que alberga a Prometheus)
Editamos el fichero de configuración de prometheus:
nano /etc/prometheus/prometheus.yml
Agregamos al final (en la sección de las configuraciones estáticas) lo siguiente:
# 192.168.9.101 - job_name: 'netdata2' static_configs: - targets: ['192.168.9.101:9100']
Si se quiere añadir al propio servidor prometheus en los chequeos, comentarear el “target” referente a prometheus y agregar debajo la siguiente línea siguiente:
- targets: ['localhost:9100']
Reiniciamos el servicio de prometheus:
systemctl restart prometheus.service
#===========================================================
NOTA: Si el servicio no inicia bien, recomiendo reiniciar el servidor, para que se ejecute el script de autoinicio
#===========================================================
Nos “logueamos” en la web del prometheus y verificamos el estado de los «targets». El procedimiento se describe en imágenes a continuación:
Si todo está bien, los objetivos deberían poder aparecer en estado «UP»:
Para verificar que el servidor de prometheus recibe las métricas de sus objetivos, debe correr el siguiente comando:
#curl http://<target-IP>:9100/metrics
curl http://192.168.9.101:9100/metrics
Debe devolver algo como esto:
[...] # TYPE node_filesystem_avail_bytes gauge node_filesystem_avail_bytes{device="/dev/mapper/ubuntu--vg-root",fstype="ext4",mountpoint="/"} 2.0969934848e+10 node_filesystem_avail_bytes{device="tmpfs",fstype="tmpfs",mountpoint="/run"} 2.07343616e+08 node_filesystem_avail_bytes{device="tmpfs",fstype="tmpfs",mountpoint="/run/lock"} 5.24288e+06 node_filesystem_avail_bytes{device="tmpfs",fstype="tmpfs",mountpoint="/run/user/0"} 2.09006592e+08 node_filesystem_avail_bytes{device="tmpfs",fstype="tmpfs",mountpoint="/run/user/1000"} 2.08973824e+08 node_filesystem_avail_bytes{device="tmpfs",fstype="tmpfs",mountpoint="/run/user/121"} 2.0897792e+08 # HELP node_filesystem_device_error Whether an error occurred while getting statistics for the given device. # TYPE node_filesystem_device_error gauge [...]
Si se quiere ver alguna métrica en particular, basta con pararse en la ventana principal de Prometheus y seleccionar la opción «- insert metric at cursos -«, para que se listen todas las métricas posibles. A continuación, un ejemplo para la métrica «node_memory_MemAvailable_bytes» (ver imagen), la tecleamos y ejecutamos con la opción «Execute»:
Para ver una gráfica de la métrica, click en la pestaña «Graph» para esa métrica:
Hasta ahora hemos configurado satisfactoriamente un servidor de Prometheus para albergar las métricas y Prometheus Node Exporter para exportar las métricas.
Grafana es un software libre basado en licencia de Apache 2.0,2 que permite la visualización y el formato de datos métricos. Permite crear cuadros de mando y gráficos a partir de múltiples fuentes, incluidas bases de datos de series de tiempo. Entre sus características principales se encuentran:
Instalando grafana usando paquete “.deb”:
mkdir /opt/instaladores cd /opt/instaladores/ wget https://dl.grafana.com/oss/release/grafana_6.2.1_amd64.deb dpkg -i grafana_6.2.1_amd64.deb
Debe devolver algo como esto:
Desempaquetando grafana (6.2.1) ... Configurando grafana (6.2.1) ... Añadiendo el usuario del sistema `grafana' (UID 111) ... Añadiendo un nuevo usuario `grafana' (UID 111) con grupo `grafana' ... No se crea el directorio personal `/usr/share/grafana'. ### NOT starting on installation, please execute the following statements to configure grafana to start automatically using systemd sudo /bin/systemctl daemon-reload sudo /bin/systemctl enable grafana-server ### You can start grafana-server by executing sudo /bin/systemctl start grafana-server Procesando disparadores para systemd (232-25+deb9u4) ...
Verificamos la versión instalada:
apt-cache policy grafana
Debe devolver algo como esto:
grafana: Instalados: 6.2.1 Candidato: 6.2.1 Tabla de versión: *** 6.2.1 100 100 /var/lib/dpkg/status
Recargar systemd, iniciar y habilitar grafana para que corra al inicio del sistema:
systemctl daemon-reload systemctl enable grafana-server systemctl start grafana-server
Accedemos a la WebGUI de Grafana:
http://server_ip:3000
user: admin
passwd: admin
Definimos una nueva contraseña para la gestión del sitio y proseguimos:
Con esto echo ya tenemos instalado Grafana en nuestro sistema.
Una vez que se haya configurado la colecta de métricas con Prometheus, sería muy provechoso integrar esas métricas coleccionadas con Grafana, para tener una visualización más intuitiva de los datos, gracias a sus bellos “dashboards”.
Agregamos la fuente de los datos, que en este caso será Prometheus, que a su vez obtiene las métricas del Node Exporter en cada host linux (incluyéndose él mismo):
Configuration > Datasources > Add data source
Ahora podríamos crear nuestros propios “dashboards” para la visualización de los datos o bien importar cualquiera que ya haya sido creado por la comunidad. Para más info, llegarse al siguiente enlace:
https://grafana.com/dashboards
Un ejemplo podría ser:
https://grafana.com/dashboards/10283
Esta plantilla ha sido importada y usada en este ejemplo para visualizar todas las métricas colectadas, usando Prometheus Node Exporter:
Imágenes del «dashboard» importado:
A continuación, otro ejemplo de “dahsboard” echo por la comunidad:
Hasta aquí usted cuenta con un sistema de monitoreo integrado con Prometheus y Grafana para visualización de los históricos de las métricas obtenidas por Node Exporter.
Me complace anunciar la creación de esta útil herramienta (SquidStats), para el análisis y monitoreo…
La inteligencia artificial está revolucionando las industrias al automatizar tareas, predecir patrones y permitiendo tomar…
Uno de los grandes retos al que nos podemos enfrentar cuando una aplicación crece, es…
Percona Monitoring and Management (PMM) es una herramienta de código abierto para la supervisión y…
Qué es lo que deseo hacer en este capítulo? Básicamente un sonoff, quiero encender/apagar las…
Hace algunos meses estoy escuchando hablar del proyecto Home Assistant (HA). En palabras literales del…
View Comments
Hola amigo, que métrica debería agregar en la configuración del node_exporter para poder monitorear las actualizaciones de mis sistemas Linux?
root@debian:/opt# systemctl enable node_exporter.service
The unit files have no installation config (WantedBy=, RequiredBy=, Also=,
Alias= settings in the [Install] section, and DefaultInstance= for template
units). This means they are not meant to be enabled using systemctl.
Possible reasons for having this kind of units are:
• A unit may be statically enabled by being symlinked from another unit's
.wants/ or .requires/ directory.
• A unit's purpose may be to act as a helper for some other unit which has
a requirement dependency on it.
• A unit may be started when needed via activation (socket, path, timer,
D-Bus, udev, scripted systemctl call, ...).
• In case of template units, the unit is meant to be enabled with some
instance name specified.
root@debian:/opt#
-------------------------------------------------------------
CREO QUE FALTA ALGO...MIRA LAS PRIMERAS LINEAS....
LO VOLVI A REALIZAR CON OTRO SERVER Y PASO LO MISMO....MIRA ARRIBA..
ES CUANDO PONGO ESTA LINEA
root@debian:/opt# systemctl enable node_exporter.service
NOTAS:
TENGO DEBIAN 10
prometheus-2.12.0.linux-amd64.tar
node_exporter-0.18.1.linux-amd64.tar
Jeansito, dame un chance que estoy volcado ahora con una serie de artículos sobre Nagsios, prometo echarle un ojo a esto que pones. Lo voy a volver a realizar en la infra que estoy haciendo, pero recuerda que estoy trabajando sobre Debian 9 y esto queme pones puede que sea una incompatibilidad con Debian 10. No tengo Buster, por lo que no puedo corroborarlo en ese S.O. Trata de tener el mismo software de instalación, primero para ir decantando posibles incompatibilidades con nuevas versiones.
SL2
jeansito ese error no me suena. Prueba con service start node_exporter, si no resuelves reinicia el servidor y vuelve a intentar con systemctl. Verifica q asi se llama realmente el. servicio,y nos dices. Luego verrifico lo de los comandos repetidos.SL2
HOLA...ME DA EL SIGUIENTE ERROR!!!
***************************************************
root@debian:~# systemctl enable node_exporter.service
The unit files have no installation config (WantedBy=, RequiredBy=, Also=,
Alias= settings in the [Install] section, and DefaultInstance= for template
units). This means they are not meant to be enabled using systemctl.
Possible reasons for having this kind of units are:
• A unit may be statically enabled by being symlinked from another unit's
.wants/ or .requires/ directory.
• A unit's purpose may be to act as a helper for some other unit which has
a requirement dependency on it.
• A unit may be started when needed via activation (socket, path, timer,
D-Bus, udev, scripted systemctl call, ...).
• In case of template units, the unit is meant to be enabled with some
instance name specified.
************************************
NOTA:
Sugerencia
1. tienes repetido la primera parte del tutorial
2. useradd -M -r -s /bin/false Prometheus en ocasiones con mayúsculas y en otras con minúsculas..