Scrutiny: Docker

2 minuto(s) de lectura

Docker

Scrutiny es un WebUI para monitorear estado S.M.A.R.T. de nuestros medios de almacenamiento.

Hasta ahora para el monitoreado del servidor usaba el demonio smartd, pero no disponía de metricas online.

Scrutiny es una aplicación simple pero de uso enfocado especialmente en los servidores, desarrollada en Go.

Entre otras, cuenta con las siguientes características principales:

  • Panel de interfaz de usuario web: centrado en métricas críticas
  • Integración smartd (sin reinventar la rueda)
  • Detección automática de todos los discos duros conectados
  • Seguimiento de métricas S.M.A.R.T para tendencias históricas
  • Umbrales personalizados utilizando tasas de falla reales
  • Seguimiento de temperatura
  • Alertas / notificaciones configurables en el futuro a través de webhooks
  • Prueba y seguimiento del rendimiento del disco duro (en desarrollo)

Vamos a realizar unos pasos previos para preparar el entorno. En primer lugar creamos las carpetas donde alojar el proyecto:

mkdir -p $HOME/docker/scrutiny/config && \
cd $HOME/docker/scrutiny

Ahora vamos a crear el fichero de configuración docker-compose.yml lanzando el siguiente comando:

cat << EOF > $HOME/docker/scrutiny/docker-compose.yml
version: "2.1"
services:
  scrutiny:
    image: ghcr.io/linuxserver/scrutiny
    container_name: Scrutiny
    privileged: true
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Madrid
      - SCRUTINY_API_ENDPOINT=http://localhost:8080
      - SCRUTINY_WEB=true
      - SCRUTINY_COLLECTOR=true
    volumes:
     - '~/docker/scrutiny/config:/config'
     - /dev/disk:/dev/disk
     - /run/udev:/run/udev:ro
    ports:
      - 8088:8080
    restart: always
EOF

Vamos a repasar los principales parámetros a modificar para adaptarlos a nuestro sistema y configuración especifica:

Parámetro Función
privileged: true Permitimos que el contenedor se ejecute con privilegios root en las consultas
PUID=1000 UID de nuestro usuario. Para saber nuestro ID ejecutar en terminal: id
PGID=1000 GID de nuestro usuario. Para saber nuestro ID ejecutar en terminal: id
TZ=Europe/Madrid Zona horaria Europa/Madrid
SCRUTINY_API_ENDPOINT=http://localhost:8080 Ruta donde consulta la API del contenedor, no modificar
SCRUTINY_WEB=true Habilitamos la consulta vía web
SCRUTINY_COLLECTOR=true Habilitamos la recolección de datos locales
~/docker/scrutiny/config:/config Ruta donde almacenaremos la configuración
/dev/disk:/dev/disk Ruta donde se descubriran los HD´s
/run/udev:/run/udev:ro Ruta donde consultaremos los metadatos del sistema
8088:8080 Puerto gestión web 8088
restart: always Habilitamos que tras reiniciar la maquina anfitrion vuelva a cargar el servicio

Una vez configurado, lo levantamos para ser creado y ejecutado:

docker-compose up -d

A continuación entramos dentro del contenedor de imagen:

docker exec -it Scrutiny bash

Forzamos la ejecución del script que actualiza información sobre discos duros:

scrutiny-collector-metrics run

Ejemplo de ejecución en mi sistema:

pi@overclock:~/docker/scrutiny$ docker exec -it Scrutiny bash
root@2688892d1188:/# scrutiny-collector-metrics run
2021/02/18 20:07:14 No configuration file found at /scrutiny/config/collector.yaml. Using Defaults.

 ___   ___  ____  __  __  ____  ____  _  _  _  _
/ __) / __)(  _ \(  )(  )(_  _)(_  _)( \( )( \/ )
\__ \( (__  )   / )(__)(   )(   _)(_  )  (  \  /
(___/ \___)(_)\_)(______) (__) (____)(_)\_) (__)
AnalogJ/scrutiny/metrics                                dev-0.3.5

INFO[0000] Verifying required tools                      type=metrics
INFO[0000] Executing command: smartctl --scan -j         type=metrics
{
  "json_format_version": [
    1,
    0
  ],
  "smartctl": {
    "version": [
      7,
      1
    ],

	[...]

      }
    ],
    "reset": false
  }
}
INFO[0006] Publishing smartctl results for 0x5000039a3bc01274  type=metrics
INFO[0006] Main: Completed                               type=metrics
root@2688892d1188:/# exit
exit
pi@overclock:~/docker/scrutiny$

Tras ello, podremos consultar el servicio, que en mi caso estaría disponible en la dirección web http://192.168.1.90:8088

NOTA: Si queremos personalizar la notificación, editamos la configuración y reiniciamos el docker:

nano $HOME/docker/scrutiny/config/scrutiny.yaml && \
docker restart Scrutiny

Para poder probar que la notificación ha sido debidamente configurada, podemos lanzar la siguente consulta:

curl -X POST http://localhost:8088/api/health/notify

Y listo!