Prometheus – Instalación del Blackbox Exporter en una Raspberry o en Ubuntu

El Blackbox Exporter es el componente de Prometheus que permite monitorizar servicios remotos de diferentes maneras, a través de HTTP, HTTPS, TCP, DNS, ICMP (ping) o gRPC, incluyendo la monitorización de la expiración de certificados SSL. Uno de los Exporters más útiles y usados.

Continuando con nuestra serie sobre Prometheus, si bien ya hemos explicado qué es Prometheus y cómo instalarlo en una Raspberry (o en Ubuntu) y también hemos hablado del Node Exporter y cómo instalarlo, ahora toca el turno de otro de los principales Exporters: Blackbox

El Blackbox Exporter es uno de los Exporters oficiales, y tiene de especial que utiliza el patrón multi-target, que implica:

  • El Exporter obtendrá las métricas a través de un protocolo de red.
  • El Exporter no tiene que ejecutarse sobre la máquina de la que se quiere obtener las métricas.
  • El Exporter obtiene el Target y la configuración a utilizar, a través de parámetros de la petición GET.
  • El Exporter permite consultar múltiples Targets.

Puedes encontrar la documentación oficial del Blackbox Exporter en su GitHub: GitHub – Prometheus Blackbox Exporter

Instalación del Blackbox Exporter

Vamos a instalar el Blackbox Exporter en una Raspberry (en Ubuntu sería exactamente igual, excepto el binario que tendríamos que descargar, como se indica más abajo), para poder capturar sus métricas desde nuestro servidor Prometheus.

Lo primero, actualizamos el sistema operativo, instalamos algunas utilidades (wget, gurl, y vim), y creamos un grupo y un usuario (que no permite login) para Prometheus (si no lo hemos hecho antes, por ejemplo, si es la misma máquina en la que antes instalamos Prometheus u otro Exporter, ya estarían creados), con la intención de evitar que el demonio del Blackbox Exporter se ejecute con un superusuario como root (por motivos de seguridad).

sudo apt update -y && sudo apt upgrade
sudo apt -y install wget curl vim
sudo groupadd --system prometheus
sudo useradd -s /sbin/nologin --system --no-create-home -g prometheus prometheus

Descargamos la última versión del Blackbox Exporter para Raspberry (armv7) sobre un directorio temporal (Prometheus – Download), lo descomprimimos, movemos el binario a /usr/local/bin (así lo podemos ejecutar sin añadir nada al PATH), creamos un directorio /etc/blackbox_exporter para almacenar su fichero de configuración, y lo movemos a dicho directorio. También cambiamos el propietario del binario y fichero de configuración, por motivos de seguridad.

NOTA: Si se deseas instalar el Blackbox Exporter en Ubuntu, en lugar de filtrar por linux-armv7 bastaría con filtrar por linux-amd64 en el siguiente comando, y ya está. El resto de las instrucciones indicadas en este Post serían válidas.

curl -s https://api.github.com/repos/prometheus/blackbox_exporter/releases/latest | grep browser_download_url | grep linux-armv7 |  cut -d '"' -f 4 | wget -qi -
tar xvf blackbox_exporter-*.tar.gz
cd blackbox_exporter*/
sudo mv blackbox_exporter /usr/local/bin/
sudo mkdir /etc/blackbox_exporter
sudo mv blackbox.yml /etc/blackbox_exporter
sudo chown root:root /etc/blackbox_exporter/blackbox.yml
sudo chown root:root /usr/local/bin/blackbox_exporter

Realizado esto podemos ejecutar el siguiente comando para comprobar la versión instalada de Blackbox Exporter:

blackbox_exporter --version

Aprovechamos un momento para revisar el fichero de configuración del Blackbox Exporter, que viene con una configuración básica en base a módulos, que podemos ir completando conforme a nuestras necesidades. Para ello ejecutaremos un comando como el siguiente:

cat /etc/blackbox_exporter/blackbox.yml

El el Blackbox Exporter un módulo define una configuración, de tal modo que cuando queramos hacer un check de un endpoint HTTP, deberemos indicar qué URL queremos comprobar y con qué módulo lo deseamos hacer (es decir, con qué configuración). Esto nos permite poder tener configuraciones concretas para casos específico, por ejemplo, que puedan requerir autenticación (tendremos que indicar las credenciales), etc. Hay un montón de opciones: GitHub – Blackbox Exporter configuration

Podemos consultar el fichero de configuración de ejemplo del Blackbox Exporter, para hacernos una mejor idea de las posibilidades: GitHub – Blackbox Exporter configuration example

A modo de ejemplo, a continuación vemos la configuración de un módulo para comprobar una URL que requiere autenticación básica. Bastante sencillo. Para nuestro laboratorio no lo vamos a necesitar, así que en nuestro caso, no vamos a cambiar la configuración de /etc/blackbox_exporter/blackbox.yml

modules:
  http_custom:
    prober: http
    timeout: 5s
    http:
      method: GET
      basic_auth:
        username: "username"
        password: "password"

Podemos validar que el fichero de configuración está OK (útil siempre que hagamos cambios), ejecutando un comando como el siguiente:

blackbox_exporter --config.file="/etc/blackbox_exporter/blackbox.yml" --config.check

Para poder manejar el Blackbox Exporter como un servicio o demonio, vamos a crear su fichero de configuración de systemd, que ejecute el binario con el fichero de configuración que queremos como parámetro.

sudo tee /etc/systemd/system/blackbox_exporter.service<<EOF
[Unit]
Description=Prometheus Blackbox Exporter
Documentation=https://github.com/prometheus/blackbox_exporter
Wants=network-online.target
After=network-online.target

[Service]
Type=simple
User=prometheus
Group=prometheus
ExecReload=/bin/kill -HUP $MAINPID

ExecStart=/usr/local/bin/blackbox_exporter \
  --config.file=/etc/blackbox_exporter/blackbox.yml \
  --web.listen-address=":9115"

[Install]
WantedBy=multi-user.target
EOF

Hecho esto, activamos y arrancamos el servicio de Blackbox Exporter (así queda configurado para arrancar automáticamente con el inicio del sistema):

sudo systemctl daemon-reload
sudo systemctl start blackbox_exporter
sudo systemctl enable blackbox_exporter
sudo systemctl status blackbox_exporter

Realizado esto, ya tendremos el Blackbox Exporter instalado y con una configuración básica, que podemos adaptar a nuestras necesidades (/etc/blackbox_exporter/blackbox.yml). Si lo deseamos podemos acceder a la URL de la métricas, tal y como se muestra en la siguiente pantalla.

Igualmente, podremos probarlo llamando a la URL de /probe, especificando qué deseamos monitorizar, por ejemplo, que deseamos utilizar un módulo de HTTP y qué URL, con lo cual obtendremos un resultado como el siguiente:

Para continuar, necesitamos configurar nuestro servidor Prometheus para añadir los nuevos targets que necesitemos, y que empiece a recoger sus métricas e ingestarlas en la base de datos de Prometheus. Para ello, nos conectamos al servidor Prometheus por SSH y editamos el fichero de configuración de Prometheus, en nuestro caso, con un comando como este:

vi /etc/prometheus/prometheus.yml

Añadiremos los targets que deseamos monitorizar (scrapear) dentro de la sección scrape_configs. Si lo necesitamos, podríamos añadir varios trabajos, en función de qué módulos necesitemos utilizar para realizar dichas comprobaciones.

  # Blackbox monitoring
  - job_name: 'blackbox_exporter_http'
    metrics_path: /probe
    params:
      module: [http_2xx]
    static_configs:
      - targets:
        - https://elwillie.es
        - https://elmundo.es
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: localhost:9115 # Blackbox Exporter address
  - job_name: 'blackbox_exporter_icmp'
    metrics_path: /probe
    params:
      module: [icmp]
    static_configs:
      - targets:
        - 192.168.30.4
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: localhost:9115 # Blackbox Exporter address

Comprobaremos que el fichero de configuración es válido (con promtool) y tras comprobar que está OK, refrescamos la configuración de Prometheus con un killall.

promtool check config /etc/prometheus/prometheus.yml
sudo killall -HUP prometheus

Realizado esto, podremos comprobar en Prometheus, que pasados unos segundos ya empieza a obtener las métricas del nuevo Job que hemos configurado con Blackbox Exporter.

En cuanto empecemos a tener datos históricos podremos empezar a lanzar consultas. A continuación se muestra un ejemplo de cómo comprobar cuantos días quedan para la expiración de un certificado SSL, aunque la habitual es utilizar un Dashboard en Grafana como herramienta de visualización.

Otro consulta de ejemplo, sería comprobar la disponibilidad de una Web mediante el módulo HTTP, como se muestra en el siguiente ejemplo.

Poco más por hoy. Como siempre, confío que la lectura resulte de interés.