Перейти к содержимому

TrueNAS

Сервер хранения на ZFS (TrueNAS SCALE, ныне TrueNAS Community Edition): состояние каждого пула и отказавший диск, scrub и resilver, использование пулов и датасетов относительно квот, снапшоты и репликация, температура дисков и самотесты SMART, оповещения, которые TrueNAS поднимает сам, службы и сама машина.

Зеркало или vdev RAIDZ, потерявший диск, продолжает отдавать данные. Общий ресурс остаётся смонтированным, резервные копии продолжают работать, веб-интерфейс любого другого инструмента остаётся зелёным — а у пула больше нет избыточности. Второй диск уносит пул. truenas_pool_healthy падает до 0 уже на первом, срабатывает правило NAS pool degraded, и страница монитора называет диск.

Помимо общих графиков, монитор TrueNAS показывает три панели, которые читаются из сохранённых опросом данных — открытие страницы никогда не обращается к самому NAS:

  • Pools and disks — каждый пул с состоянием одним словом, собственной фразой ZFS, когда что-то не так, степенью заполнения, его раскладкой (mirror, RAIDZ, cache, log), числом ошибок чтения, записи и контрольной суммы и, главное, именем любого диска, который не ONLINE. Идущий scrub или resilver показывает свой прогресс. Затем каждый диск: модель, серийный номер, тип, размер, пул, температура и результат его последнего самотеста SMART.
  • Datasets and protection — каждый датасет с использованием относительно квоты, числом снапшотов и временем, когда его последний раз охватывала задача снапшотов; последний scrub каждого пула и просрочен ли он; каждая задача репликации и периодических снапшотов с её состоянием, последним запуском, последним обработанным снапшотом и, при сбое, собственной фразой об ошибке от TrueNAS.
  • NAS health — оповещения, поднятые самим TrueNAS, сначала самые серьёзные, затем остановленные службы, затем машина: версия, аптайм, нагрузка, память, CPU.

Все метрики имеют префикс dumbmonit_truenas_.

СемействоМетрикиМетки
Идентификацияversion_info (версия без префикса TrueNAS-SCALE-, который старые выпуски ставили впереди)version
Машинаuptime_seconds, load1/5/15, memory_total_bytes, cpu_count
Пулыpool_healthy (собственный вердикт ZFS: 0 и для DEGRADED, и для FAULTED), pool_warning (resilvering, функции не включены), pool_status_info, pool_size/allocated/free_bytes, pool_used_percent, pool_fragmentation_percentpool, а для информационной серии ещё status
Устройства пулаpool_device_errors (накоплено с последнего zpool clear), pool_devices_unhealthy (обе отсутствуют, если пул не удаётся открыть)pool, kind (read, write, checksum)
Scrubpool_scan_running, pool_scan_percent (только пока идёт), pool_last_scrub_age_seconds, pool_last_scrub_errors, pool_scrub_threshold_dayspool, function (SCRUB, RESILVER)
Датасетыdataset_used_bytes, dataset_available_bytes, dataset_quota_bytes и dataset_quota_used_percent (отсутствуют без квоты), dataset_snapshots, dataset_snapshot_age_seconds (возраст последнего снапшота, сделанного периодической задачей, охватывающей датасет; отсутствует, если такой нет), dataset_locked (только для зашифрованных датасетов)dataset, pool
Снапшотыsnapshots (всего)
Дискиdisk_temperature_celsius, disk_size_bytes, disk_smart_failed (отсутствует для диска, который ни разу не тестировался)disk, serial
Оповещенияalerts — число активных оповещений по уровням, включая нольlevel (INFO … EMERGENCY)
Задачиreplication_error, replication_last_run_age_seconds, snapshot_task_error, snapshot_task_last_run_age_seconds (только включённые задачи)task
Службыservice_running (только службы, запускаемые вместе с NAS)service
Сборup, scrape_errors, scrape_duration_seconds

Несколько особенностей TrueNAS, которые стоит знать:

  • Последний scrub живёт только в записи сканирования пула. В API нет истории scrub, а resilver перезаписывает запись сканирования: после resilver дата последнего scrub просто неизвестна до завершения следующего, и pool_last_scrub_age_seconds отсутствует, а не неверна.
  • Пул, который не удаётся открыть — экспортированный или с слишком большим числом отсутствующих дисков — всё равно отображается, без раскладки и размеров. Его pool_healthy равен 0; серии устройств и размеров отсутствуют, а не равны нулю.
  • Незаданная квота — это не квота ноль. TrueNAS отвечает parsed: null для “нет квоты”, и DumbMonit не публикует для такого датасета серий квоты. quota имеет приоритет над refquota, если заданы обе.
  • Количества снапшотов берутся из собственного кэша ZFS (snapshots_count), а общее — из быстрого подсчёта снапшотов TrueNAS: ни один снапшот никогда не перечисляется. Общее число больше суммы количеств по датасетам: оно включает снапшоты внутренних датасетов TrueNAS, которые список датасетов скрывает.
  • Возраст самого нового снапшота датасета — это последний запуск периодической задачи снапшотов, которая его охватывает, напрямую или через рекурсивный родительский датасет. TrueNAS не может сообщить дату самого нового снапшота без перечисления их всех, поэтому у датасета, который не охватывает ни одна задача, возраста нет — что само по себе полезно знать.
  • Температуры читаются из кэша TrueNAS (only_cached), обновляемого TrueNAS примерно раз в пять минут. Спящий диск никогда не будится, а у диска без показаний серии нет.
  • Ничего никогда не запускается. Ни scrub, ни тест SMART, ни проверка обновлений, ни репликация. Опрос только читает.
  • Пути, менявшиеся между версиями, необязательны. zfs/snapshot стал pool/snapshot в 25.10, и пробуются оба; smart/test/results исчез в 25.10 и тогда молча пропускается.

Применяемые встроенные правила: Monitor unreachable, NAS pool degraded, NAS disk errors, NAS pool almost full, NAS scrub found errors, NAS scrub overdue, NAS disk failed its SMART test, NAS disk too hot, NAS dataset near its quota, NAS replication failed, NAS snapshot task failed, NAS snapshots stale, TrueNAS alert raised, NAS service stopped. Уведомления называют соответствующий пул, диск, датасет, задачу или службу.

Приведённые ниже шаги совпадают с теми, что показывает уведомление рядом с формой. Сначала нужно знать одно: через REST API, который использует DumbMonit, в TrueNAS нет ключа только для чтения. Его роли только для чтения были подключены лишь к более новому API WebSocket; ключ, чей пользователь — Read-Only Administrator, отклоняется с пустым 403 при каждом вызове REST. Это проверено на TrueNAS 25.04.2.6: ключ Read-Only Administrator получил 403 на всех 55 опробованных путях REST, а тот же самый ключ работал через API WebSocket. Ключ должен принадлежать пользователю с привилегией Local Administrator — поэтому ему выделяются собственные пользователь и группа, и ничего больше.

  1. В веб-интерфейсе: Credentials → Groups → Add. Назовите группу так, как указано ниже, и дайте ей привилегию Local Administrator.

    dumbmonit
  2. Почему Local Administrator, а не Read-Only Administrator: TrueNAS подключил свои роли только для чтения лишь к API WebSocket. Через REST API, который использует DumbMonit, ключ только для чтения отклоняется при каждом вызове. Сам DumbMonit только читает: он никогда не запускает scrub, тест SMART, обновление или репликацию.

  3. Credentials → Users → Add. Назовите учётную запись так, как указано ниже, сделайте dumbmonit её основной группой и оставьте доступ к оболочке, sudo и SSH выключенными: ничто из этого не нужно.

    dumbmonit
  4. Создайте ключ: Credentials → Users → API Keys → Add, выберите пользователя dumbmonit и дайте ключу имя. TrueNAS показывает ключ только один раз: скопируйте его. В TrueNAS 24.10 путь — меню пользователя справа вверху → API Keys → Add, и ключ не принадлежит никакому пользователю.

  5. В DumbMonit введите адрес NAS, например “nas.lan”, и вставьте ключ. Оставьте HTTPS: TrueNAS отзывает ключ, который хоть раз получил по обычному HTTP с другой машины.

Адрес: 192.168.1.20, nas.lan, nas.lan:8443, [fd00::20] или полный URL. Схема https и порт 443 добавляются, если отсутствуют.

TrueNAS объявил, что REST API будет удалён в TrueNAS 26 в пользу API WebSocket. До тех пор REST — это то, что обслуживает каждый выпуск вплоть до 25.10.

КлючНазваниеПо умолчаниюСправка
schemeProtocolhttpsОставьте HTTPS: TrueNAS отзывает ключ API, полученный по обычному HTTP с другой машины.
portWeb interface port443Используется, если в адресе не указан порт.
insecure_tlsAccept an unverifiable certificatefalseTrueNAS по умолчанию поставляется с самоподписанным сертификатом.
request_timeout_secondsTimeout per request (seconds)20Время, отведённое на каждый вызов API, от 1 до 120.
datasetsWatch the datasetstrueИспользование относительно квоты, число снапшотов, последнее изменение снапшота.
disksWatch the diskstrueИнвентарь и температуры из кэша; спящий диск никогда не будится.
smartRead the SMART test resultstrueПоследний самотест каждого диска; ни один никогда не запускается.
alertsRead TrueNAS’s own alertstrueСписок оповещений, который TrueNAS ведёт сам, без отклонённых оповещений.
tasksWatch replication and snapshot taskstrueСостояние, последний запуск и последний снапшот каждой задачи.
servicesWatch the servicestrueСлужбы, запускаемые вместе с NAS, и работают ли они.
СимптомВероятная причина
Ошибка аутентификации с упоминанием Local AdministratorПользователь ключа не является полным администратором — как правило, это Read-Only Administrator. TrueNAS отклоняет такой ключ при каждом вызове REST с пустым 403.
Ошибка аутентификации “Invalid API key”Ключ набран с ошибкой, удалён, истёк — или отозван TrueNAS, потому что хоть раз был отправлен по обычному HTTP с другой машины. Создайте новый и оставьте HTTPS.
Ошибка сертификатаСамоподписанный сертификат: установите доверенный (ACME встроен) или включите insecure_tls.
Нет температур дисковNAS работает в виртуальной машине, или TrueNAS ещё не опрашивал диски с момента запуска. Показания берутся из его кэша.
Нет серий SMARTНа этом диске ни разу не выполнялся самотест, либо NAS работает на TrueNAS 25.10, где этот вызов удалён. Запланируйте тесты SMART в Data Protection.
Нет pool_last_scrub_age_secondsПоследним сканированием этого пула был resilver, который стирает запись о последнем scrub, либо пул никогда не проходил scrub.
У датасета нет серии квотыУ него нет квоты. Незаданная квота — это не квота ноль.
“NAS pool degraded”, а страница не показывает имени дискаПул вообще не удаётся открыть (экспортирован или слишком много отсутствующих дисков): тогда TrueNAS не сообщает раскладки.
scrape_errors больше нуляОдин необязательный вызов не удался по причине, отличной от отсутствующего пути, — обычно таймаут. Остальные метрики не затронуты.