Ранее в статьях, посвященных Zabbix, мы рассказали про особенности мониторинга SAAS-сервиса интернет-магазинов, а также про установку сервера и агента Zabbix.

Новая статья поможет вам настроить мониторинг дисков и программных RAID-массивов, созданных с помощью mdadm. Без преувеличения можно сказать, что мониторинг этих устройств сервера представляет собой одну из важнейших задач. 

Если не контролировать постоянно состояние дисков и массивов, рано или поздно сервер прекратит свою работу. А если вдобавок еще и не делать резервное копирование данных, то в худшем случае при аварии с дисками можно потерять бизнес.

Объекты мониторинга дисковой системы

Перечислим объекты и свойства дисковых систем серверов, которые необходимо контролировать в любой системе:

  • состояние программных и аппаратных RAID-массивов;

  • исправность дисков SATA, SAS, SSD и SSD NVMe;

  • свободное пространство на дисках;

  • использование дисковых квот

Сейчас мы займемся решением только первых двух задач — настроим мониторинг программных RAID-массивов и контроль исправности дисков с помощью анализа данных S.M.A.R.T., а остальное оставим на потом.

На серверах SAAS-сервиса интернет-магазинов используются зеркальные аппаратные и программные массивы RAID-1. При выходе из строя одного из дисков массива сервер продолжает работать. Неисправный диск можно заменить в горячем режиме, не останавливая работу сервера и размещенных на нем интернет-магазинов.

Контроль программных RAID-массивов mdadm

Относительно недорогие серверы обычно не комплектуются аппаратными контроллерами дисков. В этом случае имеет смысл объединять диски в программные зеркальные массивы RAID-1 с помощью программы mdadm. 

Если вы берете сервер в аренду, то можете заказать установку нужной вам ОС, а также объединение дисков в зеркало. Когда вы размещаете в дата-центре свой собственный сервер, то установку ОС и создание дисковых массивов придется делать самостоятельно.

В любом случае для размещения ОС и сайтов можно использовать два быстрых диска SSD, объединенных в зеркало RAID-1, а для создания и локального хранения резервных копий — массив RAID-1 из двух дисков SATA. Здесь предполагается, что резервные копии вначале создаются локально, а потом копируются на выделенные серверы для бэкапов.

Контроль программного массива вручную

Получив сервер в аренду, первым делом проверьте количество процессоров и ядер, объем памяти, объем доступного дискового пространства, а также состояние дисковых массивов.

Что касается количества процессоров, ядер и объема оперативной памяти, то для ручного контроля можно использовать утилиты lscpu и free. Команда «df -h» поможет вам узнать объем дискового пространства, занимаемого смонтированными файловыми системами, объем использованного и доступного дискового пространства.

Также запустите команду lsblk, которая выводит на консоль информацию обо всех доступных блочных устройствах в виде дерева:

# lsblk
NAME            MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda               8:0    0 894.3G  0 disk
├─sda1            8:1    0   953M  0 part
│ └─md0           9:0    0   952M  0 raid1 /boot
└─sda2            8:2    0 893.3G  0 part
  └─md1           9:1    0 893.2G  0 raid1
    ├─vg00-swap 253:0    0  15.3G  0 lvm   [SWAP]
    └─vg00-root 253:1    0 877.9G  0 lvm   /
sdb               8:16   0 894.3G  0 disk
├─sdb1            8:17   0   953M  0 part
│ └─md0           9:0    0   952M  0 raid1 /boot
└─sdb2            8:18   0 893.3G  0 part
  └─md1           9:1    0 893.2G  0 raid1
    ├─vg00-swap 253:0    0  15.3G  0 lvm   [SWAP]
    └─vg00-root 253:1    0 877.9G  0 lvm   /
sdc               8:32   0   1.8T  0 disk
└─sdc1            8:33   0   1.8T  0 part
  └─md2           9:2    0   1.8T  0 raid1 /mnt/raid
sdd               8:48   0   1.8T  0 disk
└─sdd1            8:49   0   1.8T  0 part
  └─md2           9:2    0   1.8T  0 raid1 /mnt/raid

Как видите, на сервере установлены диски sda, sdbs sdcs и sdd. Создано три дисковых массива md0, md1 и md2.

Для ручной проверки состояния дисковых массивов введите команду:

# cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md2 : active raid1 sdc1[1] sdd1[0]
      1953381376 blocks super 1.2 [2/2] [UU]
      bitmap: 0/15 pages [0KB], 65536KB chunk

md1 : active raid1 sda2[0] sdb2[1]
      936583168 blocks super 1.2 [2/2] [UU]
      bitmap: 5/7 pages [20KB], 65536KB chunk

md0 : active raid1 sda1[0] sdb1[1]
      974848 blocks super 1.2 [2/2] [UU]

unused devices: <none>

Если в блоке параметров всех массивов есть строка [UU], значит с ними все хорошо. Если же вместо U в этой строке имеются символы подчеркивания «_», то соответствующие диски находятся в отключенном состоянии, а массив — в состоянии деградации или восстановления.

Когда массив находится в состоянии восстановления, вы увидите строки такого вида:

md2 : active raid1 sdc4[2] sda4[0]
 1919763264 blocks super 1.2 [2/1] [U_]
 [>....................] recovery = 1.7% (33233600/1919763264) finish=770.0min speed=40832K/sec

Если вы только что получили доступ к арендованному серверу и занимаетесь его проверкой, возможно, что еще не все дисковые массивы окончательно синхронизировались. Перед подключением мониторинга нужно дождаться завершения синхронизации.

Установка шаблона zabbix_mdraid

В составе Zabbix уже имеются шаблоны, предназначенных для мониторинга различных устройств и сервисов. Дополнительно на сайте https://www.zabbix.com/integrations можно найти очень много шаблонов, добавленных сторонними разработчиками.

В комплекте с этими шаблонами идут скрипты, которые нужно подключить к агенту Zabbix через файл конфигурации, а также инструкции по установке.

Что касается мониторинга программных массивов, созданных с помощью mdadm, то в составе встроенных шаблонов Zabbix 6.2 его нет. Поэтому мы воспользуемся готовым шаблоном Template MD RAID, доступным в Github:https://github.com/linuxsquad/zabbix_mdraid.

Импорт шаблона zabbix_mdraid

Скачайте файл zbx_export_templates.xml по ссылке https://github.com/linuxsquad/zabbix_mdraid/blob/master/zbx_export_templates.xml и добавьте его в шаблоны сервера Zabbix.

Для добавления на странице веб-интерфейса Zabbix выберите из меню Configuration строку Templates. Вы попадете на страницу с полным списком шаблонов. Щелкните кнопку Import, расположенную в верхнем правом углу страницы Templates. Далее в появившемся на экране всплывающем окне нажмите кнопку Import.

Если шаблон импортировался успешно, он появится в общем списке шаблонов под именем Template MD RAID.

Установка скрипта zabbix_mdraid.sh

Чтобы импортированный шаблон включился в работу, скачайте скрипт zabbix_mdraid.sh, доступный по адресу https://github.com/linuxsquad/zabbix_mdraid/blob/master/zabbix_mdraid.sh, и запишите его в каталог /usr/local/bin/.

Далее установите для файла скрипта разрешение на запуск, а затем назначьте владельцем пользователя zabbix:

chmod +x /usr/local/bin/zabbix_mdraid.sh
chown zabbix:zabbix /usr/local/bin/zabbix_mdraid.sh

Скрипт /usr/local/bin/zabbix_mdraid.sh будет запускаться агентом Zabbix с помощью sudo. Добавьте командой visudo разрешение на запуск скрипта через sudo (укажите полный путь к скрипту):

zabbix ALL= (ALL) NOPASSWD: /usr/local/bin/zabbix_mdraid.sh

Проверьте, что скрипт запускается от пользователя zabbix без ошибок:

sudo -u zabbix '/usr/local/bin/zabbix_mdraid.sh'

Если посмотреть исходный текст скрипта, то видно, что для получения списке программных дисковых массивов используется команда:

# cat /proc/mdstat | grep ^md
md2 : active raid1 sdc1[1] sdd1[0]
md1 : active raid1 sda2[0] sdb2[1]
md0 : active raid1 sda1[0] sdb1[1]

Результат работы этой команды записывается в файл /tmp/zabbix_mdraid_discovery.json примерно в таком виде:

{
 "data":[
 { "{#MD_DEVICE}":"/dev/md2" },
 { "{#MD_DEVICE}":"/dev/md1" },
 { "{#MD_DEVICE}":"/dev/md0" }, ]
}

Этот файл используется для низкоуровневого обнаружения LLD (Low-level discovery), описанного в документации: https://www.zabbix.com/documentation/current/en/manual/discovery/low_level_discovery.

Далее для получения состояния каждого массива используется команда «mdadm --query --detail», которой в качестве параметра передается путь к массиву:

# mdadm --query --detail /dev/md/0
/dev/md/0:
           Version : 1.2
     Creation Time : Tue May 17 22:43:58 2022
        Raid Level : raid1
        Array Size : 974848 (952.00 MiB 998.24 MB)
     Used Dev Size : 974848 (952.00 MiB 998.24 MB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent
       Update Time : Mon Jul 11 00:38:06 2022
             State : clean
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0
Consistency Policy : resync
              Name : debian:0
              UUID : e4932f3c:dd178f82:d972c9fe:71de1c90
            Events : 88
    Number   Major   Minor   RaidDevice State
       0       8        1        0      active sync   /dev/sda1
       1       8       17        1      active sync   /dev/sdb1

Скрипт zabbix_mdraid.sh извлекает отсюда параметры состояния массива и передает их серверу Zabbix.

Редактирование файла конфигурации агента Zabbix

Для запуска скрипта zabbix_mdraid.sh добавьте в файл конфигурации агента /etc/zabbix/zabbix_agentd.conf следующие строки:

#### MDRAID
UserParameter=mdraid[*], sudo /usr/local/bin/zabbix_mdraid.sh -m'$1' -$2'$3'
UserParameter=mdraid.discovery, sudo /usr/local/bin/zabbix_mdraid.sh -D

Затем перезапустите агент:

systemctl restart zabbix-agent

Для zabbix-agent2 используется файл конфигурации /etc/zabbix/zabbix_agent2.conf.

На этом установка шаблона закончена, и можно отслеживать получение данных о программных массивах.

Просмотр данных о программных массивах

Выберите в меню Monitoring строку Latest Data. Далее с помощью меню Host group и Hosts выберите нужный сервер, где вы только что отредактировали файл конфигурации агента Zabbix, а затем щелкните кнопку Apply.

Вы увидите очень большую таблицу данных, полученных от агента. Щелкните в поле TAG Values строку MD_RAID, чтобы на странице остались только данные, полученные с помощью шаблона zabbix_mdraid (рис. 1).

Рис. 1. Данные мониторинга программных дисковых массивов
Рис. 1. Данные мониторинга программных дисковых массивов

Чтобы посмотреть график изменений данных, щелкните в соответствующей строке кнопку Graph. На рис. 2 показано изменение скорости записи данных для массива /dev/md1.

Рис. 2. График изменения скорости записи данных для массива /dev/md1
Рис. 2. График изменения скорости записи данных для массива /dev/md1

Триггеры контроля состояния программных дисковых массивов

Чтобы проверять, находятся ли отслеживаемые данные в допустимых пределах, а также имеют ли они допустимые значения, в Zabbix используются триггеры.

Вы можете посмотреть, какие триггеры созданы для контролируемого сервера и в каком они находятся состоянии. Для этого откройте список контролируемых узлов, выбрав из меню Configuration строку Hosts. В таблице щелкните ссылку Triggers в строке нужно хоста, в результате чего в окне браузера появится довольно большая таблица триггеров, определенная для хоста.

На рис. 3 показаны строки таблицы, имеющие отношение к шаблону zabbix_mdraid.

Рис. 3. Триггеры шаблона zabbix_mdraid
Рис. 3. Триггеры шаблона zabbix_mdraid

Эти триггеры были добавлены в процессе низкоуровневого обнаружения LLD.

Обратите внимание: если состояние массива, взятое из элемента данных с именем State, содержит строки degraded, resyncing, recovering или Not Started, триггер сработает. При правильной настройке системы оповещений, о которой мы расскажем в отдельной статье, системный администратор получит оповещение по электронной почте, через SMS или другим способом.

О создании триггеров можно прочитать в документации Zabbix: https://www.zabbix.com/documentation/current/en/manual/quickstart/trigger. Для версии 6.0 есть версия на русском языке: https://www.zabbix.com/documentation/6.0/ru/manual/quickstart/trigger.

Мониторинг S.M.A.R.T. дисковых устройств

В 1995 году производители жестких дисков создали технологию самотестирования, анализа состояния и накопления статистических данных об ухудшении характеристик дисков с названием S.M.A.R.T. (Self-Monitoring Analysis and Reporting Technology).

С помощью программы smartctl, входящей в пакет smartmontools, вы можете контролировать значение параметров S.M.A.R.T. дисковых устройств вашего сервера как вручную, так и средствами Zabbix.

Контроль  параметров S.M.A.R.T. вручную

Для начала установите пакет smartmontools. В ОС Debian это можно сделать следующей командой:

# apt-get install smartmontools

После установки вы сможете запускать программу smartctl для получения значений параметров.

Убедитесь, что будет установлена версия программы smartctl не ниже 7.1, это будет нужно для мониторинга параметров S.M.A.R.T. с помощью встроенного шаблона SMART by Zabbix agent 2. Проверить версию smartctl можно так:

/usr/sbin/smartctl -V
smartctl 7.2 2020-12-30 r5155 [x86_64-linux-5.10.0-14-amd64] (local build)

Давайте посмотрим параметры S.M.A.R.T. для устройства /dev/sda:

# smartctl -a /dev/sda

Команда выведет на консоль довольно подробную информацию о диске, включая название модели Device Model, серийный номер Serial Number, объем User Capacity и другие параметры:

=== START OF INFORMATION SECTION ===
Device Model:     INTEL SSDSC2KB480G8
Serial Number:    BTYF83160CQ04878ER82
LU WWN Device Id: 5 5cd2e4 14fd79e98
Firmware Version: XCV10100
User Capacity:    480,103,981,056 bytes [480 GB]
Sector Sizes:     512 bytes logical, 4096 bytes physical
Rotation Rate:    Solid State Device
Form Factor:      2.5 inches
Device is:        Not in smartctl database [for details use: -P showall]
ATA Version is:   ACS-3 T13/2161-D revision 5
SATA Version is:  SATA 3.2, 6.0 Gb/s (current: 6.0 Gb/s)
Local Time is:    Thu Jul 21 18:44:31 2022 MSK
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

Обратите внимание на таблицу значений параметров, где есть идентификатор параметра ID, название параметра NAME,  так называемое нормализованное значение VALUE,  пороговое значение THRESH и другие данные:

Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  5 Reallocated_Sector_Ct   0x0032   100   100   000    Old_age   Always       -       0
  9 Power_On_Hours          0x0032   100   100   000    Old_age   Always       -       31311
 12 Power_Cycle_Count       0x0032   100   100   000    Old_age   Always       -       8
170 Unknown_Attribute       0x0033   100   100   010    Pre-fail  Always       -       0
171 Unknown_Attribute       0x0032   100   100   000    Old_age   Always       -       0
172 Unknown_Attribute       0x0032   100   100   000    Old_age   Always       -       0
174 Unknown_Attribute       0x0032   100   100   000    Old_age   Always       -       8
175 Program_Fail_Count_Chip 0x0033   100   100   010    Pre-fail  Always       -       38654642595
183 Runtime_Bad_Block       0x0032   100   100   000    Old_age   Always       -       0
184 End-to-End_Error        0x0033   100   100   090    Pre-fail  Always       -       0
187 Reported_Uncorrect      0x0032   100   100   000    Old_age   Always       -       0
190 Airflow_Temperature_Cel 0x0022   071   062   000    Old_age   Always       -       29 (Min/Max 12/38)
192 Power-Off_Retract_Count 0x0032   100   100   000    Old_age   Always       -       8
194 Temperature_Celsius     0x0022   100   100   000    Old_age   Always       -       29
197 Current_Pending_Sector  0x0012   100   100   000    Old_age   Always       -       0
199 UDMA_CRC_Error_Count    0x003e   100   100   000    Old_age   Always       -       0
225 Unknown_SSD_Attribute   0x0032   100   100   000    Old_age   Always       -       1762160
226 Unknown_SSD_Attribute   0x0032   100   100   000    Old_age   Always       -       3389
227 Unknown_SSD_Attribute   0x0032   100   100   000    Old_age   Always       -       78
228 Power-off_Retract_Count 0x0032   100   100   000    Old_age   Always       -       1878671
232 Available_Reservd_Space 0x0033   100   100   010    Pre-fail  Always       -       0
233 Media_Wearout_Indicator 0x0032   097   097   000    Old_age   Always       -       0
234 Unknown_Attribute       0x0032   100   100   000    Old_age   Always       -       0
235 Unknown_Attribute       0x0033   100   100   010    Pre-fail  Always       -       38654642595
241 Total_LBAs_Written      0x0032   100   100   000    Old_age   Always       -       1762160
242 Total_LBAs_Read         0x0032   100   100   000    Old_age   Always       -       6319391
243 Unknown_Attribute       0x0032   100   100   000    Old_age   Always       -       5924573

В интернете нетрудно найти описание этих параметров по названию. Заметим, что для дисков SSD разных производителей параметры могут различаться, и не все они документированы. Для дисков SSD компании Intel хорошее описание приведено здесь: https://www.thomas-krenn.com/en/wiki/SMART_attributes_of_Intel_SSDs, а для Kingston — здесь: https://media.kingston.com/support/downloads/MKP_306_SMART_attribute.pdf

Также довольно полное описание параметров можно найти на этой странице: https://wiki5.ru/wiki/S.M.A.R.T.

Когда вы контролируете состояние дисков Intel SSD, обратите внимание на следующие параметры:

  • 232 Available Reserved Space — доступный объем зарезервированного пространства;

  • 233 Media Wearout Indicator — индикатор износа диска

Если первый из них достигает порогового значение 10, то ресурс диска подходит к концу. Второй представляет собой индикатор износа накопителя, и при достижении порогового значения диск подлежит замене.

Для дисков SSD Kingston интересен параметр 231 SSD Life Left, значение которого зависит от выполненный циклов стирания. 

Что касается жестких дисков, то для них важен контроль следующих параметров:

  • 1 Raw_Read_Error_Rate — частота ошибок чтения;

  • 5 Reallocated_Sector_Ct — количество неисправных переназначенных секторов;

  • 7 Seek_Error_Rate — частота ошибок поиска;

  • 9 Power_On_Hours — время работы диска, «сырое» значение  RAW_VALUE может задавать общее количество часов, минут или секунд (в зависимости от производителя) работы диска;

  • 10 Spin_Retry_Count — количество повторных попыток раскрутки, увеличивается по мере износа механики диска;

  • 194 Temperature_Celsius — температура диска в градусах Цельсия

Температуру имеет смысл контролировать для дисков любых типов.

Еще раз напомним, что диски разных производителей могут использовать разные параметры, поэтому точную информацию лучше искать на сайте производителя для ваших моделей.

В любом случае при ручном контроле нужно следить, чтобы значения VALUE не были равны или ниже соответствующих пороговых значений THRESH.

Контроль параметров S.M.A.R.T. с помощью шаблона SMART by Zabbix agent 2

В Zabbix версии 6.2 имеется шаблон SMART by Zabbix agent 2, контролирующий состояние дисков исходя из значений параметров S.M.A.R.T. Для работы этого шаблона вам нужно будет установить на сервер агент zabbix-agent2, о чем мы рассказывали в предыдущей статье.

Описание шаблона SMART by Zabbix agent 2 есть на этой странице: https://www.zabbix.com/integrations/smart.

Если у вас Zabbix версии 6.2, то для включения мониторинга S.M.A.R.T. на контролируемом сервере просто добавьте шаблон SMART by Zabbix agent 2 к шаблонам сервера. 

Чтобы это сделать, выберите из меню Configuration строку Hosts, а затем щелкните название сервера. Откроется окно, где вам нужно щелкнуть кнопку Select в блоке Templates, а затем отыскать шаблон с названием SMART by Zabbix agent 2, отметить флажок возле него и щелкнуть кнопку Select.

В результате шаблон SMART by Zabbix agent 2 будет добавлен к серверу (рис. 4).

Рис. 4. Добавление шаблона SMART by Zabbix agent 2
Рис. 4. Добавление шаблона SMART by Zabbix agent 2

Шаблон SMART by Zabbix agent 2 устроен так, что ему не нужны дополнительные скрипты. Он обращается за данными к пакету  smartmontools с помощью агента zabbix-agent2.

Через некоторое время после установки шаблона с помощью LLD к контролируемому серверу будут добавлены элементы данных и триггеры.

Для просмотра созданных элементов данных и триггеров выберите из меню Configuration строку Hosts. В строке вашего сервера для просмотра данных щелкните ссылку Items, а для просмотра триггеров — ссылку Triggers.

Вы увидите, что для сервера всего было создано очень много элементов данных. С помощью фильтра оставьте только те элементы, которые были получены с помощью LLD с именем sda (рис. 5).

Рис. 5. Отфильтровываем нужные нам элементы данных
Рис. 5. Отфильтровываем нужные нам элементы данных

В результате получаем вполне обозримый список элементов данных, имеющий отношение к S.M.A.R.T. (рис. 6).

Рис. 6. Элементы данных S.M.A.R.T. для диска /dev/sda
Рис. 6. Элементы данных S.M.A.R.T. для диска /dev/sda

Аналогичным способом вы можете посмотреть список триггеров контролируемого сервера. Триггеры, созданные для диска /dev/sda, показаны на рис. 7.

Рис. 7. Триггеры, созданные для диска /dev/sda
Рис. 7. Триггеры, созданные для диска /dev/sda

Обратите внимание на триггер SMART [sda sat]: Some Attributes have been <= threshold. Он срабатывает, если какое-либо значение параметра S.M.A.R.T. достигает порогового значения или опускается еще ниже. В результате создается событие высокой степени важности High, и при правильной настройке оповещения такое событие попадает к системному администратору по приоритетному каналу.

Аналогичные события создаются и при обнаружении каких-либо других существенных проблем с диском.

Текущие значения параметров S.M.A.R.T. (как и других отслеживаемых параметров) и графики их изменения можно увидеть, если из меню Monitoring веб-интерфейса Zabbix выбрать строку Latest Data.

Мониторинг S.M.A.R.T.S с помощью своего шаблона Zabbix

Если по каким-то причинам вы не можете использовать новую версию Zabbix, или если вам нужно настроить мониторинг параметров S.M.A.R.T. своим особым способом, то такая возможность также имеется.

В любом случае сначала нужно установить пакет smartmontools, как это было описано ранее.

После этого создайте несложный шаблон для отслеживания параметра «здоровья» 233 Media_Wearout_Indicator дисков SSD.

Вы можете получить значение этого параметра для диска /dev/sda через консоль следующим образом:

# smartctl -a /dev/sda | grep Media_Wearout_Indicator
233 Media_Wearout_Indicator 0x0032   097   097   000    Old_age   Always       -       0

Как видите, здесь значение этого параметра равно 97, что очень даже неплохо.

Настройка мониторинга

Добавьте в конец файла /etc/zabbix/zabbix_agentd.conf такие строки:

###### MY S.M.A.R.T.
UserParameter=smartd.value[*],sudo smartctl -A -f hex,id $1 | grep $2 | awk '{print $ 4+0}'
UserParameter=smartd.trash[*],sudo smartctl -A -f hex,id $1 | grep $2 | awk '{print $ 6+0}'
UserParameter=smartd.raw[*],sudo smartctl -A -f hex,id $1 | grep $2 | awk '{print $ 10+0}'

Затем перезапустите агент Zabbix:

# systemctl restart zabbix-agent

Не забудьте установить sudo (если эта программа у вас еще не установлена), и разрешить запуск через sudo программы /usr/sbin/smartctl.

Для разрешения запуска с помощью visudo добавьте в файл /etc/sudoers строку:

zabbix ALL= (ALL) NOPASSWD: /usr/sbin/smartctl

Проверка получения параметра с сервера Zabbix

Проверьте, что сервер Zabbix получает данные добавленного вами мониторинга S.M.A.R.T. от агента. Установите на сервере Zabbix программу zabbix_get:

apt install zabbix-get

Теперь на сервере Zabbix проверьте получение нужного вам параметра от агента Zabbix, запущенного на контролируемом сервере:

# zabbix_get -s xxx.xxx.xxx.xxx -k "smartd.value[/dev/sda,0xe9]"
97

Здесь вместо xxx.xxx.xxx.xxx в параметре -s укажите адрес IP контролируемого сервера. Идентификатор атрибута S.M.A.R.T. следует указывать в шестнадцатеричной системе счисления с префиксом 0x.

В результате команда должна вывести на консоль значение атрибута 0xe9 или 233 (в десятичной системе счисления).

Результатом выполнения команда должно быть значение 100 при новом диске. У нас диск не совсем новый, поэтому мы получили значение 97.

Создание шаблона для Zabbix

Вы можете создать шаблон для мониторинга самостоятельно. Для этого зайдите на страницу Templates, доступную в меню Configuration, и щелкните кнопку Create Template.

Задайте имя шаблона, скажем, с именем MY SMART SSD и добавьте его в группу шаблонов  Templates (если вы еще не создали группу для своих шаблонов).

Далее найдите этот шаблон в общем списке и добавьте в него элемент Items с помощью кнопки Create Items. Укажите такие параметры:

Name: 233 Media_Wearout_Indicator /dev/sda
Type: Zabbix Agent
Key: smartd.value[/dev/sda,0xe9]

Создайте аналогичный шаблон для диска /dev/sdb/.

Добавление триггера

Теперь откройте пока пустой список триггеров и щелкните кнопку Add Trigger. Для нового триггера задайте такие параметры:

Name: Life time SSD /dev/sda/ on {HOST.NAME}
Expression: last(/MY SMART SSD/smartd.value[/dev/sda,0xe9])<10

Аналогичный триггер создайте и для диска /dev/sdb.

Теперь, когда вы создали шаблон, подключите его к контролируемому серверу и наблюдайте получение данных через страницу Latest Data.

При необходимости подобным образом вы можете добавить в свой шаблон другие элементы данных и триггеры для отслеживания нужных вам параметров S.M.A.R.T.

В следующей статье мы займемся мониторингом аппаратных дисковых массивов, созданных с применением контроллера LSI.

Автор: Александр Фролов.


НЛО прилетело и оставило здесь промокод для читателей нашего блога:

— 15% на все тарифы VDS (кроме тарифа Прогрев) — HABRFIRSTVDS.

Комментарии (12)


  1. Abyss777
    09.08.2022 13:42

    С одной стороны Zabbix хорош, а с другой всё приходится допиливать и дописывать.

    Вроде такая базовая вещь, как мониторинг состояния дисков, а не реализована в Zabbix из коробки.

    Единственный шаблон SMART от Zabbix только работает со smartmontools 7.1, т.е. еще поддерживаемая Ubuntu 18 до свиданья. Но чуть приятно, что иногда может пролезть за некоторые типы аппаратных raid.

    Для mdadm свой костыль приходится писать.

    А что с нормальными аппаратными RAID ? Их поддержки нет вообще! Как такую базовую вещь не реализовали?!


    1. rzerda
      09.08.2022 14:43

      Приведите, пожалуйста, 3-4 примера «нормальных аппаратных RAID»? И, если не затруднит, интерфейсы, через которые эти устройства можно мониторить.


      1. eto_on
        11.08.2022 12:15

        3ware + megacli


    1. valmont2k
      11.08.2022 11:23

      Обычно у таких рейдов есть cli утилита, вывод которой приходится парсить. Решение не огонь, зато можно подстроиться под любую железку


      1. Abyss777
        11.08.2022 12:08

        Дак в этом и проблема Zabbix, что нет многих очевидно базовых вещей. И каждый велосипедит как может. Вот хороший пример с mdadm, тут навелосипедили своё, ниже вон ссылка на более безопасное решение.
        mdadm вроде как стандарт программных рейдов, почему это в агента нельзя добавить? Шаблон правильный написать.

        А эти cli утилиты еще и выхлоп одинаковый имеют, напиши zabbix парсинг в агенте, в конфиг просто путь к этой утилите указать, шаблон правильный сделать. Базовая же вещь.


        1. rzerda
          11.08.2022 14:40

          О да, базовая вещь.

          Представьте себя разработчиком Zabbix. Вы решаете осчастливить сообщество и добавить бортовую поддержку mdadm и MegaRAID в дистрибутив. Проходит неделя, и Вам заводят четырнадцать тикетов типа:

          • почему только mdadm, у нас вот ещё есть geom во FreeBSD, и ZFS

          • где Adaptec или NearestBasementTec, почему MegaRAID добавили а его нет

          • у меня mdadm/ядро/контроллер тысяча девятьсот мохнатого года, и у меня не работает

          • у меня mdadm/ядро/контроллер вчерашний, и у меня не работает

          • зачем вы принесли sudo, я не хочу

          • я включил мониторинг и он ругается на отсутствие megacli, что это такое и где это взять

          Через полгода Вы обнаруживаете себя владельцем десятка экзотических контроллеров, специалистом по регулярным выражениям, и либо седым, либо лысым от парсинга восхитительного вывода чудесных вендорских утилит управления массивами (спойлер: вывод json в smartmontools появился всего 4 года назад). И с тех пор, разумеется, Вы ни разу не притронулись к разработке всего остального Zabbix. При этом ввиду существования виртуализации количество систем вообще без RAID-контроллеров значительно выше, чем систем с ними.

          Вам дали возможности расширения, пользуйтесь ими. Не можете воспользоваться сами - наймите кого-то способного.


          1. Abyss777
            11.08.2022 15:22

            Можно создать базовый шаблон со стандартными сущностями LLD. Controller, Battery, VD, PD, Корзины. Добавить несколько разных (самых популярных) имплементаций использующих этот шаблон, остальное проще уже адаптировать. Шаблон поддерживается, обновляется с релизами. Мохнатые контроллеры можно уже добавлять руками, json скриптом генерировать, хотя бы шаблон писать не надо.

            я включил мониторинг и он ругается на отсутствие megacli, что это такое и где это взять

            Их это вообще не парит, ищите сами, например угадайте какие права нужны токену для этого шаблона? https://www.zabbix.com/ru/integrations/hashicorp_vault

            Или я повешал шаблон Windows by Zabbix agent active на хост, а почему он не сообщает о том что время неправильное? Триггер же есть, почему? https://support.zabbix.com/browse/ZBX-15624
            Won't Fix

            При этом ввиду существования виртуализации количество систем вообще без RAID-контроллеров значительно выше, чем систем с ними.

            Да, только если навернется RAID массив, то умрет куча виртуальных машин. Не хватает мониторинга критических вещей, без которого всё остальное работать не будет.

            Раз уж виртуализация такая популярная, нет мониторинга Hyper-V например.


  1. Abyss777
    09.08.2022 15:00
    +2

    Приведите, пожалуйста, 3-4 примера «нормальных аппаратных RAID»?

    Все PCIe карточки LSI/Broadcom MegaRAID SAS и их брендовые клоны Dell PERC, Intel RMS, HP SmartArray

    И, если не затруднит, интерфейсы, через которые эти устройства можно мониторить.

    Понятия не имею

    Универсальный шаблон с LLD: array, battery, VD, PD, а на стороне агента обертка для парсинга выхлопа megacli, perccli и т.д.

    Парсят же smartmontools


  1. Kirikekeks
    09.08.2022 19:01

    Гора родила мышь. Причем дефективную. Зато не bash, и не pyton.


  1. vasilisc
    09.08.2022 23:04

    Стал переходить для дисковых массивов на ZFS. Масса возможностей и тьма параметров под всевозможные нагрузки и случаи. Псевдопрожорливость ZFS до ОЗУ это из-за слишком большого размера ARC кеша по умолчанию или включение дедупликации и не более того. Zabbix имеет отличные шаблоны для мониторинга ZFS и SMART.


  1. ilyakruchinin
    11.08.2022 04:49

    Скрипты для мониторинга, создающие временный файл в /tmp/, использующие sudo для "cat /proc/mdstat", не фильтрующие передаваемые аргументы со стороны server или proxy - это жесть.

    Достаточно работнику из отдела "техподдержки" переконфигурировать item на сервере, и получаем root-доступ на хосте.
    Куча лишних подпроцессов.
    Отсутствие логики проверки наличия файла в /tmp и его "свежести".
    Отсутствие логики и уведомления об отвалившихся items на сервере.

    Вы опубликовали статью из серии "антипэттернов" - как не надо мониторить рейд при помощи небезопасных костылей.


    1. ilyakruchinin
      11.08.2022 05:04

      Даже вот это - уже во много раз лучше и безопасней: https://codeberg.org/zabbix-deb/zabbix-check-mdadm3/src/branch/master
      Использует sysfs, не требует sudo, не создает временных файлов и лишних подпроцессов итд, не вызывает бинарники mdadm.

      Присмотритесь (настоятельно рекомендую выкинуть упомянутые в статье скрипты zabbix_mdraid на помойку).