Плагин mdadm
Мониторинг массивов Linux Software RAID, управляемых mdadm, с отслеживанием состояния массива, деградировавших или отказавших устройств и прогресса перестроения/ресинхронизации.
Обзор
Плагин mdadm читает статус RAID из ядра напрямую из /proc/mdstat и сообщает о здоровье каждого активного массива на хосте:
- Состояние массива - active, degraded, recovering, resyncing, reshaping, inactive или failed
- Количество устройств - всего, активные, рабочие, отказавшие и резервные устройства на массив
- Обнаружение деградации - помечает любой массив, в котором отсутствует одно или несколько устройств
- Прогресс синхронизации - действие recovery / resync / reshape / check / repair и процент завершения
- Размер массива - полезный размер массива в ГБ
- Сводные счётчики - всего массивов, деградировавшие массивы и отказавшие массивы по всему хосту
Плагин работает только на чтение. Он никогда не выполняет команды записи, не собирает и не изменяет массивы.
Требования
Поддержка RAID
- Только Linux - плагин полагается на драйвер ядра
mdи/proc/mdstat - Как минимум один собранный массив software RAID (
md0,md1, …)
Зависимости
- Python-пакеты не требуются. Плагин использует только стандартную библиотеку.
mdadmдолжен быть установлен на хосте (стандартный инструмент для создания массивов и управления ими). Драйверmdв любом случае предоставляет статус через/proc/mdstat, который является основным источником данных плагина.
Проверка наличия RAID
# Primary data source — must exist and list at least one array
cat /proc/mdstat
# Confirm mdadm is installed
mdadm --version
# Detailed view of a specific array
mdadm --detail /dev/md0
Пример /proc/mdstat со здоровым зеркалом и деградировавшим RAID 5:
Personalities : [raid1] [raid6] [raid5] [raid4]
md0 : active raid1 sdb1[1] sda1[0]
104320 blocks super 1.2 [2/2] [UU]
md1 : active raid5 sdd1[3] sdc1[1] sdb1[2] sda1[0]
3145728 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/3] [UU_U]
[>....................] recovery = 1.2% (12345/104320) finish=0.5min speed=12345K/sec
unused devices: <none>
Если /proc/mdstat не существует или не перечисляет активных/неактивных устройств md, плагин сообщает о себе как о недоступном и ничего не собирает.
Конфигурация
Агент читает свою конфигурацию из файла переменных окружения shell по пути /opt/statusradar/config.env, который загружается systemd (EnvironmentFile=). Это не YAML-файл.
Включение плагина
mdadm не требует переменных окружения, специфичных для плагина — просто добавьте mdadm в список PLUGINS.
Отредактируйте /opt/statusradar/config.env:
PLUGINS=mdadm
Чтобы запускать вместе с другими плагинами, используйте список через запятую:
PLUGINS=mdadm,nginx,docker
Перезапустите агент для применения:
sudo systemctl restart statusradar-agent
Никаких параметров host, port, учётных данных или путей задавать не нужно. Плагин всегда читает /proc/mdstat.
Собираемые метрики
Плагин возвращает сводные счётчики уровня хоста плюс разбивку по каждому массиву.
Сводка по хосту
| Метрика | Описание | Единица | Тип |
|---|---|---|---|
total_arrays |
Число массивов, найденных в /proc/mdstat |
Количество | Gauge |
degraded_arrays |
Массивы, в которых отсутствует одно или несколько устройств | Количество | Gauge |
failed_arrays |
Массивы в состоянии failed или inactive |
Количество | Gauge |
Метрики по каждому массиву
Каждый массив в arrays[] идентифицируется своим устройством (например, /dev/md0) и включает:
| Поле | Описание | Единица | Тип |
|---|---|---|---|
device |
Путь к устройству массива (/dev/mdN) |
- | Label |
level |
Уровень RAID (raid0, raid1, raid5, raid6, raid10, linear, multipath) |
- | Label |
state |
Состояние массива (см. ниже) | - | Label |
total_devices |
Устройства-участники, перечисленные для массива | Количество | Gauge |
active_devices |
Устройства, ожидаемые массивом (из [N/M]) |
Количество | Gauge |
working_devices |
Устройства, работающие в данный момент (из [N/M]) |
Количество | Gauge |
failed_devices |
Устройства, помеченные как отказавшие (F) |
Количество | Gauge |
spare_devices |
Устройства, помеченные как резервные (S) |
Количество | Gauge |
size_gb |
Полезный размер массива | Гигабайты | Gauge |
sync_action |
Текущее фоновое действие: idle, recovery, resync, reshape, check, repair |
- | Label |
sync_percent |
Завершённость текущего действия синхронизации (100.0 при простое) |
Проценты | Gauge |
degraded |
Является ли массив деградировавшим | Boolean | Gauge |
state_numeric |
Числовое здоровье для оповещений (см. ниже) | - | Gauge |
Значения состояния
Поле state выводится из слова статуса ядра и строки статуса устройств ([UU], [U_] и т. д.):
active/clean- все устройства присутствуют и исправныdegraded- одно или несколько устройств отсутствуют (_в карте устройств или working < expected)recovering- выполняетсяrecovery(например, перестроение на запасной диск)resyncing- выполняетсяresyncreshaping- выполняетсяreshape(например, расширение массива)inactive/failed- массив не работоспособен
Числовое состояние для оповещений
state_numeric упрощает настройку оповещений о здоровье RAID в VictoriaMetrics:
| Значение | Смысл | Состояния |
|---|---|---|
1.0 |
Здоров | active, clean |
0.5 |
Предупреждение | degraded, recovering, resyncing |
0.0 |
Критично | failed, inactive (и любое другое состояние) |
Метрики дашборда
Дашборд StatusRadar отображает:
Карточка обзора
- Total Arrays -
total_arrays - Degraded Arrays -
degraded_arrays - Failed Arrays -
failed_arrays
Детали по каждому массиву
- State - цветовая кодировка из
state_numeric(зелёный / янтарный / красный) - RAID Level -
level - Devices -
working_devices/active_devicesсfailed_devicesиspare_devices - Size -
size_gb - Sync Progress -
sync_actionиsync_percent, пока выполняется перестроение или проверка
Как работает обнаружение
- Плагин проверяет, что
/proc/mdstatсуществует и содержит как минимум одно устройствоmdв состоянииactiveилиinactive. Если нет — он недоступен. - Он построчно парсит
/proc/mdstat:- Строки заголовка массива (
md0 : active raid1 sdb1[1] sda1[0]) дают устройство, состояние, уровень и список устройств-участников. Устройства, помеченные(F), считаются отказавшими,(S)— резервными. - Строка статуса (
104320 blocks super 1.2 [2/2] [UU]) даёт размер массива, счётчики working/active устройств из[N/M]и карту up/down из[UU]/[U_]. Символ_в карте или working < expected помечает массив какdegraded. - Строки прогресса (
recovery = 1.2% ...) задаютsync_actionиsync_percentи обновляют состояние доrecovering,resyncingилиreshaping.
- Строки заголовка массива (
mdadm --detail /dev/mdXдоступен как запасной вариант для более подробной информации по каждому массиву, но быстрый путь через/proc/mdstatявляется основным источником.
Тестирование
Ручной тест плагина
Запустите плагин напрямую, чтобы увидеть, что он сообщит:
cd /opt/statusradar
export PLUGINS=mdadm
python3 plugins/mdadm_plugin.py
Ожидаемый вывод (хост с двумя массивами):
Plugin name: mdadm
Enabled: True
Available: True
Metrics collected:
Total arrays: 2
Degraded arrays: 1
Failed arrays: 0
Array details:
/dev/md0:
Level: raid1
State: active
Devices: 2/2 (failed: 0)
Size: 0.1 GB
Sync: idle (100.0%)
Degraded: False
/dev/md1:
Level: raid5
State: recovering
Devices: 3/4 (failed: 0)
Size: 3.0 GB
Sync: recovery (1.2%)
Degraded: True
Хост без RAID-массивов:
Plugin name: mdadm
Enabled: True
Available: False
mdadm not available or no RAID arrays found
To enable: export PLUGINS=mdadm
To test: cat /proc/mdstat
Проверка в логах агента
sudo grep mdadm /var/log/statusradar/agent.log | tail -n 20
Устранение неполадок
Плагин сообщает "Available: False"
Причина: Не собрано ни одного RAID-массива, или /proc/mdstat не перечисляет активных/неактивных устройств md.
Проверьте:
# Does the file exist and list arrays?
cat /proc/mdstat
# Is the md driver loaded?
lsmod | grep -E 'md_mod|raid'
# Are arrays assembled?
mdadm --detail --scan
Если /proc/mdstat показывает только Personalities : ... и unused devices: <none>, мониторить нечего — это ожидаемо на хосте без software RAID.
Метрики не собираются
Проверка 1: Включён ли плагин?
grep '^PLUGINS' /opt/statusradar/config.env
PLUGINS должен включать mdadm.
Проверка 2: Был ли агент перезапущен после изменения конфигурации?
sudo systemctl restart statusradar-agent
sudo systemctl status statusradar-agent
Проверка 3: Запустите плагин вручную
cd /opt/statusradar && export PLUGINS=mdadm && python3 plugins/mdadm_plugin.py
Массив всегда показывает деградацию
Симптом: degraded: True сохраняется.
Это плагин корректно сообщает о реальной проблеме — одно или несколько устройств-участников отсутствуют или отказали.
# Identify the failed/missing device
cat /proc/mdstat
mdadm --detail /dev/md0
Ищите _ в карте устройств (например, [U_]) или флаг (F) рядом с участником. Замените диск и добавьте его обратно командой mdadm --manage /dev/md0 --add /dev/sdX1; массив перейдёт в recovering, и sync_percent будет расти к 100%.
Прогресс синхронизации застрял
Симптом: sync_percent не продвигается.
# Current rebuild speed limits
cat /proc/sys/dev/raid/speed_limit_min
cat /proc/sys/dev/raid/speed_limit_max
# Watch live progress
watch -n5 cat /proc/mdstat
Медленное перестроение при высокой нагрузке I/O — это нормально; повышайте speed_limit_min только если массив может выдержать дополнительную нагрузку.
Размер показан как 0.0 GB
Очень маленькие массивы (несколько МБ, например boot-разделы) округляются вниз до 0.0 ГБ, потому что размер указывается с двумя знаками после запятой. Если важен точный размер, проверьте необработанное число блоков в /proc/mdstat.
Влияние на производительность
Плагин читает один небольшой файл (/proc/mdstat) за интервал сбора и парсит его регулярными выражениями.
- CPU: незначительно (парсинг за доли миллисекунды)
- Память: незначительно
- I/O: одно чтение файла ядра из памяти; без обращения к дискам массивов
- Нет влияния на производительность RAID или скорость перестроения
Сценарии использования
1. Раннее обнаружение отказов дисков
Оповещайте в момент выпадения устройства-участника, прежде чем массив полностью потеряет избыточность.
Настройте оповещения на:
degraded_arrays > 0failed_devices > 0на любом массивеstate_numeric <= 0.5
2. Отслеживание прогресса перестроения
Наблюдайте за ресинхронизацией запасного диска после отказа и подтвердите, что массив вернулся в исправное состояние.
Отслеживайте:
sync_actionиsync_percent- Возврат
state_numericк1.0
3. Перехват отказавших массивов
Немедленно отправляйте оповещение, если массив становится неработоспособным.
Настройте оповещения на:
failed_arrays > 0state_numeric == 0.0
Дальнейшие шаги
- Обзор
- Требования
- Поддержка RAID
- Зависимости
- Проверка наличия RAID
- Конфигурация
- Включение плагина
- Собираемые метрики
- Сводка по хосту
- Метрики по каждому массиву
- Значения состояния
- Числовое состояние для оповещений
- Метрики дашборда
- Карточка обзора
- Детали по каждому массиву
- Как работает обнаружение
- Тестирование
- Ручной тест плагина
- Проверка в логах агента
- Устранение неполадок
- Плагин сообщает "Available: False"
- Метрики не собираются
- Массив всегда показывает деградацию
- Прогресс синхронизации застрял
- Размер показан как 0.0 GB
- Влияние на производительность
- Сценарии использования
- 1. Раннее обнаружение отказов дисков
- 2. Отслеживание прогресса перестроения
- 3. Перехват отказавших массивов
- Дальнейшие шаги