Prometheus: Exportando Datos del Sistema

August 19, 2018
prometheus devops node exporter sistemas raspberry-pi

docker logo

Ya en el post anterior contaba como instalar un servidor de Prometheus, así que el siguiente paso es cargar datos que consultar en dicho sistema, para eso tenemos los exportadores.

Un exportador es un servicio que a través de Web expone una ruta metrics donde mostrará las métricas que exporte, en este caso usaremos el node_exporter de Prometheus, el cual exportará datos del sistema en el que esté instalado.

Instalación

La instalación es prácticamente igual que la de Prometheus, solo que en este caso tenemos que instalarlo en las máquinas de donde queramos exportar los datos, incluida la máquina donde esté el servidor de Prometheus si lo deseamos.

Descargaremos el fichero tar.gz desde la página de descarga. Recordad que para Raspberries 1 y 2 debemos bajar la versión ARMV6 y para la raspberry 3 la versión ARMV7. Igual que en la instalación de Prometheus voy a poner el ejemplo de como lo he realizado en una Raspberry Pi 1.

  • Lo descargamos

wget https://github.com/prometheus/node_exporter/releases/download/v0.16.0/node_exporter-0.16.0.linux-armv6.tar.gz
  • Lo descomprimimos

tar zxvf node_exporter-0.16.0.linux-armv6.tar.gz
  • Entramos a la carpeta creada por la descompresión

cd node_exporter-0.16.0.linux-armv6/
  • Lo ejecutamos

./node_exporter

Con esto ya tenemos el node_exporter ejecutándose en nuestro equipo, podremos acceder a las métricas a través del puerto 9100, por ejemplo http://192.168.1.31:9100. En /metrics nos mostrará todas las métricas que está exportando.

Importando los datos en Prometheus

Ahora ya tenemos una o varias máquinas, que están exportando datos, así que es hora de configurar Prometheus para que pueda leer esos datos y así nosotros poder crear las consultas que necesitemos. Para ello necesitamos editar el fichero prometeus.yml .

Dependiendo de en que punto te quedaste en el post anterior sobre la instalación de Prometheus puede que ese fichero esté en /etc/prometheus o si no habéis creado un servicio pues estará en la carpeta donde ejecutamos Prometheus.

  • Editamos el fichero

sudo nano /etc/prometheus/prometheus.yml

Se trata de un fichero YAML, esta sintaxis se validará a la hora de cargarlo y está basada en indentado, así que fijaos bien en el tema de donde habéis puesto los espacios.

  • Buscamos el nodo scrape_configs y añadimos lo siguiente dentro:

- job_name: 'system'
    static_configs:
    - targets: ['192.168.1.31:9100']

En target añadiremos la máquina o máquinas que exportan los datos con su respectivo puerto.

Dejo aquí mi fichero de configuración por si sirve de ayuda, el mio es el de por defecto pero añadiendo algunas cosas extras, que aún no voy a explicar.

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

# Alertmanager configuration
alerting:
  alertmanagers:
  - static_configs:
    - targets:
      # - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  - 'prometheus.rules.yml'
    # - "first_rules.yml"
  # - "second_rules.yml"

# 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']

  - job_name: 'system'
    static_configs:
    - targets: ['192.168.1.30:9100', '192.168.1.31:9100', '192.168.1.32:9100']
      labels:
        group: "production"

Como podéis ver ya en la configuración por defecto viene una configuración de un scraper, es la que mira el exporter propio del servidor de Prometheus.

Una vez ya reiniciado el servicio de Prometheus, si el fichero está bien creado podremos probar que esté recibiendo correctamente los datos de la siguiente forma:

  • Entramos a nuestro servidor de Prometheus, en mi caso http://192.168.1.31:9090 vamos a graph, si no está ya dentro por defecto

  • En el cuadro donde pone Expression es donde introduciremos nuestras consultas, si vamos escribiendo el nombre de una métrica nos irá autocompletando. Todas las que empiezan por node_ son las que crea el node_exporter.

    Por ejemplo podemos introducir node_memory_MemFree_bytes y pulsar Intro para que nos muestre la memoria disponible en Bytes.

docker logo

Montando el node_exporter como servicio del sistema

Al igual que pasa con Prometheus, supongo que lo irán cambiando, no tiene un servicio por el cual se arranque solo o se pueda gestionar, así que debemos crear este servicio en la máquina donde tengamos los exportadores.

  • Creamos un usuario para la ejecución del servicio

sudo useradd --no-create-home --shell /bin/false node_exporter
  • Copiamos el ejecutable que nos hemos descargado, el que está dentro de la carpeta comprimida. Al ser un solo ejecutable sin configuración ni nada con esto nos vale.

sudo cp node_exporter /usr/local/bin/
  • Creamos la configuración del servicio

sudo nano /etc/systemd/system/node_exporter.service
  • Añadimos este contenido al fichero

[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
  • Y cargamos el nuevo servicio, lo ejecutamos y lo activamos.

sudo systemctl daemon-reload
sudo systemctl start node_exporter
sudo systemctl enable node_exporter

Como lo he tenido que hacer en varias máquinas y será lo mas común, he creado un one-liner. Simplemente copiando el código del bloque de abajo y ejecutandolo todo como una sola linea se encarga de crear todo, eso si, debemos ejecutarlo dentro del directorio donde está el ejecutable

sudo useradd --no-create-home --shell /bin/false node_exporter && sudo cp node_exporter /usr/local/bin/ && echo "[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" | sudo tee /etc/systemd/system/node_exporter.service && sudo systemctl daemon-reload && sudo systemctl start node_exporter && sudo systemctl enable node_exporter

Conclusión

Con esto por ahora tenemos mas que suficiente para empezar a probar Prometheus y trastear un poco con él. A parte de esto he instalado Grafana, he creado algunas alertas y reglas, así que iré poco a poco documentándolo antes de ponerme a meterle cosas nuevas, que luego se me olvida todo.

Cualquier duda puedes preguntarme por gnusocial.net.

comments powered by Disqus