ELX-HealthMonitor
Что сервер под Linux делает сейчас и что делал неделю назад
Агент мониторинга с веб-интерфейсом, историей в SQLite и оповещениями по почте. Один исполняемый файл без зависимостей: фронтенд внутри бинарника, база создаётся сама. На четырёхлетнем Celeron это около четырёх процентов одного ядра и одиннадцати мегабайт памяти.
Читается из ядра, а не угадывается
Всё берётся напрямую из /proc, /sys и smartctl. Не нужно ставить коллектор, поднимать базу временных рядов и держать в согласии пару «агент и сервер».
Диски — до того, как они умрут
Здоровье SMART, температура, наработка, переназначенные и нестабильные секторы, ошибки CRC, износ SSD и объём записи за весь срок — с полной таблицей атрибутов, когда хочется посмотреть внимательнее.
RAID, включая неудобную правду
Состояние массива, уровень, состав, отказавшие диски и ход ресинхронизации — плюс карта намерений записи, которая говорит, идентичны ли копии прямо сейчас, и число расхождений последней проверки.
Службы со своим вводом-выводом
Каждый юнит systemd с его процессором, памятью, чтением и записью диска, числом задач и перезапусками — и кнопки пуска, остановки и смены автозапуска.
Оповещения, которые не кричат зря
В правиле есть выдержка: скачок до полной загрузки на десять секунд письма не вызовет, а десять минут на этом уровне — вызовет. Именно эта настройка отличает письма, которые читают, от писем, которые фильтруют.
История, которая не растёт бесконечно
Трое суток в исходном разрешении, затем пятиминутные интервалы со средним, минимумом и максимумом, и ничего старше месяца. Пики переживают прореживание, гигабайты — нет.
Что измеряется
| Раздел | Показатели |
|---|---|
| Процессор | Общая загрузка и по каждому ядру, user/system/iowait/steal, частота, средняя нагрузка, переключения контекста, очередь |
| Память | Занято, доступно, кэш, буферы, slab, грязные страницы, подкачка и интенсивность обращений к ней |
| Диски | Скорость чтения и записи, IOPS, задержка, занятость устройства, модель, объём |
| Файловые системы | Занято, свободно, процент, inode |
| SMART | Здоровье, температура, наработка, переназначенные и нестабильные секторы, ошибки CRC, износ SSD, объём записи за срок, полная таблица атрибутов |
| RAID | Состояние массивов md, уровень, состав, отказавшие диски, ход и скорость ресинхронизации, текущая синхронность копий и расхождения последней проверки |
| Сеть | Приём и передача в байтах и пакетах, ошибки и потери, состояние линка, скорость порта, адреса, MTU |
| Температура | Все датчики hwmon и термозоны ACPI, плюс температуры накопителей из SMART |
| Службы | Состояние и автозапуск юнитов systemd, процессор, память, запись и чтение диска по каждой службе, число задач, перезапуски |
| Процессы | Топ по процессору и по памяти, дисковая активность, владелец, юнит |
Каждый раздел выключается отдельно, и выключенная подсистема не опрашивается вовсе.
Вопрос о RAID, который стоит задать
Зеркальный массив хранит на дисках одинаковые данные, но запись доходит до них не одновременно. Ядро отмечает области возможного расхождения в карте намерений записи, и этот агент показывает её прямо: пока «грязных» областей ноль — копии идентичны, всё, что больше нуля, означает идущую досинхронизацию.
Рядом — число расхождений последней проверки целостности. Ненулевое значение означает, что накопитель или контроллер вернул разные данные с двух половин зеркала, — а это ровно тот отказ, ради которого мониторинг и существует, и ровно тот, который скрывает зелёная надпись «массив исправен».
Во что это обходится
Дорогие показания опрашиваются по собственному расписанию, отдельно от основного цикла: будить пять дисков каждые три секунды, чтобы спросить их температуру, хуже, чем не следить за ними вовсе.
| Параметр | По умолчанию | Что задаёт |
|---|---|---|
interval_sec | 3 с | Основной цикл опроса |
services.interval_sec | 15 с | Полный обход юнитов systemd |
disk.smart_interval_sec | 900 с | Опрос SMART — именно он будит диски |
storage.persist_interval_sec | 30 с | Запись среза в историю |
Измерено на четырёхъядерном Celeron J1900 со 165 юнитами systemd и пятью дисками: около четырёх процентов одного ядра и одиннадцать мегабайт памяти. На Xeon E5-2690 — меньше трёх процентов ядра.
Интерфейс
- Браузер запоминает ваш выбор: период на каждом графике, скрытые щелчком по легенде кривые, фильтры таблицы служб и журнала событий. Перезагрузка страницы не сбрасывает ничего.
- Все кривые растут вверх от нуля, единица на оси подбирается по диапазону, а число знаков — по шагу сетки, поэтому соседние отметки никогда не превращаются в одинаковые подписи.
- После обновления открытая вкладка сама замечает смену версии, сообщает об этом и перезагружается — старый интерфейс не остаётся висеть в кэше браузера.
- Кнопки перезагрузки и выключения машины — в шапке; если они не нужны, их убирает один ключ конфигурации.
- Каждое необратимое действие закрыто подтверждением, которое объясняет последствие, а кнопка подписана самим действием, а не словом «ОК».
Коротко о главном
- Операционные системы
- Debian и Ubuntu с systemd
- Архитектуры
- amd64, arm64, armhf
- Веб-интерфейс
- Порт 8555 по умолчанию
- История
- SQLite; 3 суток в исходном виде, 31 день свёрнутая
- Необязательная зависимость
- smartmontools, для раздела SMART
- Типичный расход
- ~4% одного ядра, ~11 МБ памяти
- Оповещения
- Почта по SMTPS, STARTTLS или без шифрования
- Настройка
- Веб-интерфейс или config.json