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.).