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!