Prometheus con un panel de Grafana

Este tutorial explica cómo utilizar un servidor de supervisión Prometheus con Grafana Dashboard.

Prometheus es una solución de monitoreo flexible que está en desarrollo desde 2012. El software almacena todos sus datos en una base de datos de series de tiempo y ofrece un modelo de datos multidimensional y un poderoso lenguaje de consulta para generar informes de los recursos monitoreados.

Preparando su entorno

En este tutorial, usamos una instancia que se ejecuta en Ubuntu.

  • Para ejecutar Prometheus de forma segura en nuestro servidor, tenemos que crear un usuario para Prometheus y Node Exporter sin la posibilidad de iniciar sesión. Para lograr esto, usamos el parámetro –no-create-home que omite la creación de un directorio de inicio y deshabilite el shell con –shell / usr / sbin / nologin.
sudo useradd --no-create-home --shell /usr/sbin/nologin prometheus
sudo useradd --no-create-home --shell /bin/false node_exporter
  • Cree las carpetas necesarias para almacenar los archivos binarios de Prometheus y sus archivos de configuración:
sudo mkdir /etc/prometheus
sudo mkdir /var/lib/prometheus
  • Configure la propiedad de estos directorios para nuestro usuario de prometheus, para asegurarse de que Prometheus pueda acceder a estas carpetas:
sudo chown prometheus:prometheus /etc/prometheus
sudo chown prometheus:prometheus /var/lib/prometheus

Descarga e instalación de Node Exporter

Como su Prometheus solo es capaz de recopilar métricas, queremos ampliar sus capacidades agregando Node Exporter, una herramienta que recopila información sobre el sistema, incluido el uso de CPU, disco y memoria, y los expone para rasparlos.

wget https://github.com/prometheus/node_exporter/releases/download/v0.16.0/node_exporter-0.16.0.linux-amd64.tar.gz
  • Descomprime el archivo descargado. Esto creará un directorio node_exporter-XXXX, que contiene el ejecutable, un archivo Léame y un archivo de licencia:
tar xvf node_exporter-0.16.0.linux-XXXX.tar.gz
  • Copie el archivo binario en el directorio /usr/local/bin y establezca la propiedad en el usuario que ha creado en el paso anterior:
sudo cp node_exporter-0.16.0.linux-XXXX/node_exporter /usr/local/bin
sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter
  • Elimine los archivos sobrantes de Node Exporter, ya que ya no son necesarios:
rm -rf node_exporter-0.16.0.linux-XXXX.tar.gz node_exporter-0.16.0.linux-XXXX
  • Para ejecutar Node Exporter automáticamente en cada arranque, se requiere un archivo de servicio Systemd. Cree el siguiente archivo abriéndolo en Nano:
sudo nano /etc/systemd/system/node_exporter.service
  • Copie la siguiente información en el archivo de servicio, guárdelo y salga de Nano:
[Unit]
Description=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

[Install]
WantedBy=multi-user.target
  • Los recopiladores se utilizan para recopilar información sobre el sistema. Por defecto, se activa un conjunto de colectores. Puede ver los detalles sobre el conjunto en el archivo README. Si desea utilizar un conjunto específico de recopiladores, puede definirlos en la sección ExecStart del servicio. Los recopiladores se habilitan proporcionando un indicador --collector.<name>. Los recopiladores que están habilitados de forma predeterminada se pueden deshabilitar proporcionando una marca --collector.<name> . flag.
  • Reload Systemd to use the newly defined service:
sudo systemctl daemon-reload
  • Ejecute Node Exporter escribiendo el siguiente comando:
sudo systemctl start node_exporter
  • Verifique que el software se haya iniciado correctamente:
sudo systemctl status node_exporter

Verá una salida como esta, que le muestra el estado active (running), así como el PID principal de la aplicación:

● node_exporter.service - Node Exporter
Loaded: loaded (/etc/systemd/system/node_exporter.service; disabled; vendor preset: enabled)
Active: active (running) since Mon 2018-06-25 11:47:06 UTC; 4s ago
Main PID: 1719 (node_exporter)
CGroup: /system.slice/node_exporter.service
└─1719 /usr/local/bin/node_exporter
  • Si todo está funcionando, habilite Node Exporter para que se inicie en cada arranque del servidor:
sudo systemctl enable node_exporter

Descarga e instalación de Prometheus

  • Descargue y descomprima la última versión de Prometheus:
sudo apt-get update && apt-get upgrade
wget https://github.com/prometheus/prometheus/releases/download/vXXXX/prometheus-XXXX.tar.gz
tar xfz prometheus-_.tar.gz
cd prometheus-_
  • Copie los archivos binarios en el directorio /usr/local/bin/:
sudo cp ./prometheus /usr/local/bin/
sudo cp ./promtool /usr/local/bin/
  • Establezca la propiedad de estos archivos en el usuario de prometheus creado anteriormente:
sudo chown prometheus:prometheus /usr/local/bin/prometheus
sudo chown prometheus:prometheus /usr/local/bin/promtool
  • Copie los directorios consoles y console_libraries en /etc/prometheus:
sudo cp -r ./consoles /etc/prometheus
sudo cp -r ./console_libraries /etc/prometheus
  • Establezca la propiedad de las dos carpetas, así como de todos los archivos que contienen, para nuestro usuario de prometheus:
sudo chown -R prometheus:prometheus /etc/prometheus/consoles
sudo chown -R prometheus:prometheus /etc/prometheus/console_libraries
  • En nuestra carpeta de inicio, elimine los archivos de origen que ya no son necesarios:
cd .. && rm -rf prometheus-\*

Configuración de Prometheus

Antes de usar Prometheus, necesita una configuración básica. Por lo tanto, necesitamos crear un archivo de configuración llamado prometheus.yml
Nota: El archivo de configuración de Prometheus está escrito en YAML, que prohíbe estrictamente el uso de pestañas. Si su archivo tiene un formato incorrecto, Prometheus no se iniciará. Tenga cuidado al editarlo.

  • Abra el archivo prometheus.yml en un editor de texto:
sudo nano /etc/prometheus/prometheus.yml

El archivo de configuración de Prometheus se divide en tres partes: global, rule_files y scrape_configs. En la parte global podemos encontrar la configuración general de Prometheus: scrape_interval define la frecuencia con la que Prometheus raspa los objetivos, Evaluation_interval controla la frecuencia con la que el software evaluará las reglas. Las reglas se utilizan para crear nuevas series de tiempo y para la generación de alertas. El bloque rule_files contiene información de la ubicación de las reglas que queremos que cargue el servidor de Prometheus. El último bloque del archivo de configuración se llama scape_configs y contiene la información que supervisa los recursos de Prometheus. Nuestro archivo debería verse como este ejemplo:

global:
  scrape_interval:     15s
  evaluation_interval: 15s

rule_files:
  # - "first.rules"
  # - "second.rules"

scrape_configs:
  - job_name: 'prometheus'
    scrape_interval: 5s
    static_configs:
      - targets: ['localhost:9090']

  - job_name: 'node_exporter'
    scrape_interval: 5s
    static_configs:
      - targets: ['localhost:9100']
  • Establezca la propiedad del archivo para nuestro usuario de Prometheus:
sudo chown prometheus:prometheus /etc/prometheus/prometheus.yml

Nuestro servidor Prometheus está listo para ejecutarse por primera vez.

Ejecutando Prometheus

  • Inicie Prometheus directamente desde la línea de comandos con el siguiente comando, que ejecuta el archivo binario como nuestro usuario de Prometheus:
sudo -u 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

El servidor comienza a mostrar varios mensajes de estado y la información de que el servidor se ha iniciado:

level=info ts=2018-04-12T11:56:53.084000977Z caller=main.go:220 msg="Starting Prometheus" version="(version=2.2.1, branch=HEAD, revision=bc6058c81272a8d938c05e75607371284236aadc)"
level=info ts=2018-04-12T11:56:53.084463975Z caller=main.go:221 build_context="(go=go1.10, user=root@149e5b3f0829, date=20180314-14:15:45)"
level=info ts=2018-04-12T11:56:53.084632256Z caller=main.go:222 host_details="(Linux 4.4.127-mainline-rev1 #1 SMP Sun Apr 8 10:38:32 UTC 2018 x86_64 scw-041406 (none))"
level=info ts=2018-04-12T11:56:53.084797692Z caller=main.go:223 fd_limits="(soft=1024, hard=65536)"
level=info ts=2018-04-12T11:56:53.09190775Z caller=web.go:382 component=web msg="Start listening for connections" address=0.0.0.0:9090
level=info ts=2018-04-12T11:56:53.091908126Z caller=main.go:504 msg="Starting TSDB ..."
level=info ts=2018-04-12T11:56:53.102833743Z caller=main.go:514 msg="TSDB started"
level=info ts=2018-04-12T11:56:53.103343144Z caller=main.go:588 msg="Loading configuration file" filename=/etc/prometheus/prometheus.yml
level=info ts=2018-04-12T11:56:53.104047346Z caller=main.go:491 msg="Server is ready to receive web requests."
  • Abra su navegador y escriba http: //IP.OF.YOUR.SERVER: 9090 para acceder a la interfaz de Prometheus. Si todo está funcionando, finalizamos la tarea presionando CTRL + C en nuestro teclado. Nota: Si recibe un mensaje de error cuando inicia el servidor, verifique su archivo de configuración para ver si hay posibles errores de sintaxis YAML. El mensaje de error le dirá qué verificar.
  • El servidor está funcionando ahora, pero aún no se puede iniciar automáticamente al arrancar. Para lograr esto, tenemos que crear un nuevo archivo de configuración de systemd que le dirá a su sistema operativo qué servicios debe iniciarse automáticamente durante el proceso de arranque.
sudo nano /etc/systemd/system/prometheus.service
  • Copie la siguiente información en el archivo y guárdelo, luego salga del editor:
[Unit]
Description=Prometheus Monitoring
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
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target
  • Para utilizar el nuevo servicio, vuelva a cargar systemd:
sudo systemctl daemon-reload
  • Habilitamos el servicio para que se cargue automáticamente durante el arranque:
sudo systemctl enable prometheus
  • Start Prometheus:
sudo systemctl start prometheus
Share