Scrutiny - мониторинг SMART дисков с уведомлениями

Столкнулся со следующими неудобствами/проблемами

  1. Имеется несколько серверов с дисками, просматривать значения мониторинга в одном месте не очень удобно
  2. Некоторые USB адаптеры не показывают smart в автоматическом режиме, но если указать тип, то работают
  3. Хочется наглядности и централизованности
  4. вTrueNAS пока что у меня пробрасываются диски, а не контроллеры, мониторинг в нем не работает

Нашел один из нескольких проектов: scrutiny

Проект состоит их 3 частей

  1. База данных для исторических данных и графиков
  2. Веб интерфейс, который отображает информацию
  3. Коллектор, который собирает информацию, он может быть в одном docker образе или же отдельно под разные платформы

Что я сделал

  1. Поднял LXC/Docker сервис с базой данных и веб интерфейсом
  2. Установил бинарник коллектора на PVE ноды
  3. Опубликовал веб интерфейс с proxy-auth

Пошагово
Прописал doc1ker-compose на сервере

services:
  influxdb:
    volumes:
      - ./db:/var/lib/influxdb2
    image: influxdb:2.2
    restart: unless-stopped

  scrutiny:
    ports:
      - 80:8080
    volumes:
      - ./scrutiny:/opt/scrutiny/config
    image: ghcr.io/analogj/scrutiny:master-web
    restart: unless-stopped

Создал конфиг scrutiny/scrutiny.yaml на основе шаблона, но задал адрес influxdb базы

  influxdb:
#    scheme: 'http'
    host: influxdb

После запуска на 80 порту получил пустой дашборд + базу данных

Далее, пока в ручном режиме на PVE нодах

wget https://github.com/AnalogJ/scrutiny/releases/download/v0.8.1/scrutiny-collector-metrics-linux-amd64 -O /usr/local/bin/scrutiny-collector-metrics
mkdir /etc/scrutiny
vim /etc/scrutiny/collector.yaml

и вставил следующий файл (шаблон)

version: 1
host:
  id: "PVE-05"
devices:
  - device: /dev/sda
    type: `sat`
api:
  endpoint: http://scrutiny.lan

Соответственно, прописываем название хоста, переопределение типа диска и хост веб интерфейса, который развернули ранее

vim /etc/cron.d/sсrutiny

Вставляем

# scrutiny SMART collector
PATH="/usr/sbin:/usr/bin:/sbin:/bin"
*/10 * * * * root if [ -f /etc/scrutiny/collector.yaml ] ;then /usr/local/bin/scrutiny-collector-metrics run --config=/etc/scrutiny/collector.yaml --log-file /var/log/scrutiny-collector.log > /dev/null 2>&1; fi

Тут прописываем расписание запуска и пути

Коллектор запускается, собирает информацию всю, отправляет ее на сервер и завершает свою работу

Скриншоты



Уведомления есть в шаблоне scrutiny

#notify:
#  urls:
#    - "discord://token@webhookid"
#    - "telegram://token@telegram?channels=channel-1[,channel-2,...]"
#    - "pushover://shoutrrr:apiToken@userKey/?priority=1&devices=device1[,device2, ...]"
#    - "slack://[botname@]token-a/token-b/token-c"
#    - "smtp://username:password@host:port/?fromAddress=fromAddress&toAddresses=recipient1[,recipient2,...]"
#    - "teams://token-a/token-b/token-c"
#    - "gotify://gotify-host/token"
#    - "pushbullet://api-token[/device/#channel/email]"
#    - "ifttt://key/?events=event1[,event2,...]&value1=value1&value2=value2&value3=value3"
#    - "mattermost://[username@]mattermost-host/token[/channel]"
#    - "ntfy://username:password@host:port/topic"
#    - "hangouts://chat.googleapis.com/v1/spaces/FOO/messages?key=bar&token=baz"
#    - "zulip://bot-mail:bot-key@zulip-domain/?stream=name-or-id&topic=name"
#    - "join://shoutrrr:api-key@join/?devices=device1[,device2, ...][&icon=icon][&title=title]"
#    - "script:///file/path/on/disk"
#    - "https://www.example.com/path"

Что понравилось

  1. Вроде даже есть какя-то хронология, а не просто показ данных
  2. Можно переопределять тип диска, что полезно очень т.к. proxmox показывает, что нет smart у диска, а по факту он есть
  3. Я так понял, что диски по серийникам создаются, при переезде диска в другой сервер он переезжает с сохранением данных, но у меня iscsi диск один выводился т.е. он есть на всех серверах, но выводится последний привязаный
  4. Можно скрыывать диски
  5. Написан на go, очень быстрый
  6. Современный дизайн и темная тема

Что не понравилось

  1. Похоже, что проект мертвый: написано, что бета, но последняя сборка была в апреле 24 года, куча ишьюсов и пулреквестов
  2. Тип диска определяется по букве, соответственно, при смене оной конфигурация поплывет
  3. Никакой безопасности: ни аутентификации веб интерфейса, ни коллекторов
  4. Проект сырой, графиков маловато, функционал базовый
  5. Были заготовки под самотесты дисков, но данный функционал так и не был реализован

Что недоделал

  1. DEB пакет и/или Ansible плейбук для быстрого деплоя
  2. Закрытие фаерволом
  3. Форк и допиливание проекта
4 лайка

Добавил ansible роль, скачать можно тут
Из особенностей:

  1. Запускается под рутом, т.к. коллектор не умеет sudo, а иначе я пока не решил эту проблему
  2. Дефолтный конфиг задается с указанием хоста на основе хоста в inventory, например, если там указано pve-01.lan, то в конфиг запишется PVE-01
  3. Не делал проверку на версию программы и скачивания новой, сомневаюсь, что разработчик будет выпускать новые версии, а если и будет, то тогда уже проще собрать свой .deb пакет и закинуть в свою репу
  4. В cron таску добавил вывод лога в случае ошибки, это позволит отправить уведомление штатными средствами PVE (у меня это бот в телеге)
1 лайк