Guía completa de instalación de Prometheus y Grafana

Prometheus está desarrollado en Go, pero no requiere obligatoriamente tener Go instalado en el servidor de monitoreo. Sin embargo, para compilar exporters o ejecutar binarios desde fuente es recomendable. Instalaremos Go solo si es necesario:

# Descargar Go (versión estable)
$ wget https://storage.googleapis.com/golang/go1.21.1.linux-amd64.tar.gz
$ sudo tar -C /usr/local -xzf go1.21.1.linux-amd64.tar.gz
$ echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
$ source ~/.bashrc
$ go version
go version go1.21.1 linux/amd64

Instalación de Prometheus (servidor)

Descargamos el binario de Prometheus desde el sitio oficial y lo descomprimimos:

$ wget https://github.com/prometheus/prometheus/releases/download/v2.45.0/prometheus-2.45.0.linux-amd64.tar.gz
$ tar -xzf prometheus-2.45.0.linux-amd64.tar.gz -C /usr/local/
$ sudo ln -s /usr/local/prometheus-2.45.0.linux-amd64 /usr/local/prometheus

A continuación, editamos el archivo de configuración /usr/local/prometheus/prometheus.yml. La sección scrape_configs define los objetivos a monitorear. Por defecto, Prometheus se monitoriza a sí mismo en localhost:9090.

# Ejemplo de configuración mínima
global:
  scrape_interval: 15s

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

Iniciamos Prometheus en segundo plano (modo desarrollo) o lo configuramos como servicio systemd. Por ahora, lo ejecutamos driectamente:

$ cd /usr/local/prometheus
$ ./prometheus --config.file=prometheus.yml &

Verificamos que el servicio esté activo visitando http://<IP-servidor>:9090.

Instalación de node_exporter en el host monitoreado

Para recolectar métricas del sistema operativo (CPU, memoria, disco, red), instalamos node_exporter en cada máquina a monitorear.

$ wget https://github.com/prometheus/node_exporter/releases/download/v1.6.1/node_exporter-1.6.1.linux-amd64.tar.gz
$ tar -xzf node_exporter-1.6.1.linux-amd64.tar.gz -C /usr/local/
$ /usr/local/node_exporter-1.6.1.linux-amd64/node_exporter &
$ ss -tlnp | grep 9100
LISTEN  0  128  *:9100  *:*   users:(("node_exporter",pid=12345,fd=3))

Ahora modificamos el archivo prometheus.yml del servidor para agregar el nuevo target:

scrape_configs:
  - job_name: 'node'
    static_configs:
      - targets: ['192.168.1.10:9100', '192.168.1.11:9100']

Recargamos la configuración de Prometheus (enviando señal SIGHUP) o reiniciamos el proceso.

Configuración como servicio systemd

Para que Prometheus arranque automáticamente, creamos un fichero de unidad systemd:

$ sudo vim /etc/systemd/system/prometheus.service

[Unit]
Description=Sistema de monitoreo Prometheus
Documentation=https://prometheus.io/docs/

[Service]
User=root
ExecStart=/usr/local/prometheus/prometheus \
  --config.file=/usr/local/prometheus/prometheus.yml \
  --web.listen-address=:9090
Restart=always

[Install]
WantedBy=multi-user.target

Activamos e iniciamos el servicio:

$ sudo systemctl daemon-reload
$ sudo systemctl start prometheus
$ sudo systemctl enable prometheus

Instalación de Grafana para visualización

Grafana ofrece paneles interactivos con los datos de Prometheus. Descargamos e instalamos el paquete RPM:

$ wget https://dl.grafana.com/oss/release/grafana-9.5.2-1.x86_64.rpm
$ sudo yum localinstall -y grafana-9.5.2-1.x86_64.rpm
$ sudo systemctl start grafana-server
$ sudo systemctl enable grafana-server
$ ss -tlnp | grep 3000
LISTEN  0  128  *:3000  *:*   users:(("grafana-server",pid=9876,fd=8))

Accedemos a http://<IP-servidor>:3000 con credenciales predeterminadas admin/admin. Grafana solicitará cambiar la contraseña.

Agregamos una fuente de datos (Data Source) de tipo Prometheus apuntando a http://localhost:9090. Luego importamos dashboards predefinidos como "Prometheus 2.0 Stats" para ver las métricas en tiempo real.

Con esto, el ecosistema de monitoreo está listo para escalar a más servidorse y exporters especializados (MySQL, Nginx, etc.).

Etiquetas: prometheus Grafana node_exporter systemd Go

Publicado el 7-4 21:37