Продолжаю свою знакомство с составление и проработкой шагов посредством которых я смогу завести в свой сервис мониторинга Zabbix диски. Сейчас в моем гипервизоре установлен SSD накопитель с интерфейсом M.2 SILICON POWER M-Series SP512GBP34A80M28 512Гб, M.2 2280, PCI-E x4, NVMe», но так как на моей материнской плате нет соответствующего разъема, то понадобится и соответствующий разъем «Адаптер PCI-E M.2 NGFF for SSD Bulk [asia pcie m2 ngff m-key]». В принципе нет разницы как он подключен. Задача поставлена — нужно проработать какую диагностическую информацию по нему (HDD M.2) можно извлечь и приспособить к Zabbix Server 4.4 on Ubuntu 18.04 Server. Я занимаюсь составлением различных жизненно важных заметок в помощь системному администрированию.

Исходные данные:

  • srv-zabbix - Zabbix Server 4.4 on Ubuntu 18.04 Server amd64
  • srv-proxmox - Debian 10 + Proxmox 6

Начну пожалуй:

Шаг №1: Сервер с мониторингом базирующемся на Zabbix Server 4.4 on Ubuntu 18.04 (srv-zabbix, 172.33.33.117)

Шаг №2: Узел — гипервизор Debian 10 + Proxmox 6 (srv-proxmox, 172.33.33.25), на нем Zabbix Agent 4.4

Как установить Zabbix 4.4 агент на Debian Buster Server

Шаг №3: Если ставим узел (физический) на мониторинг состояния/работоспособности диска, то обязательно нужно поставить пакет smartmontools (SATA, SSD, NVMe) & nvme-cli (NVMe)

root@srv-proxmox:~# apt-cache search nvme-cli

nvme-cli - userspace tooling to control NVMe drives

root@srv-proxmox:~# apt-cache show smartmontools | grep Version

Version: 7.0-pve2 - обязательная самая последняя версия должна быть.

Version: 6.6-1

root@srv-proxmox:~#

root@srv-proxmox:~# apt-get install -y smartmontools zabbix-get nvme-cli

Шаг №4: Получить от системы количество используемых дисков:

root@srv-proxmox:~# smartctl --scan

/dev/sda -d scsi # /dev/sda, SCSI device

/dev/nvme0 -d nvme # /dev/nvme0, NVMe device

root@srv-proxmox:~#

root@srv-proxmox:~# nvme list

Node SN Model Namespace Usage Format FW Rev

---------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- --------

/dev/nvme0n1 B96807981DB500921193 SPCC M.2 PCIe SSD 1 512.11 GB / 512.11 GB 512 B + 0 B ECFM22.4

root@srv-proxmox:~#

Шаг №5: Смотрю какую информацию я могу извлечь по диску M.2

root@srv-proxmox:~# nvme smart-log /dev/nvme0n1
  • Smart Log for NVME device:nvme0n1 namespace-id:ffffffff
  • critical_warning : 0
  • temperature : 28 C
  • available_spare : 100%
  • available_spare_threshold : 5%
  • percentage_used : 0%
  • data_units_read : 120,753
  • data_units_written : 297,487
  • host_read_commands : 398,858
  • host_write_commands : 553,807
  • controller_busy_time : 4
  • power_cycles : 40
  • power_on_hours : 165
  • unsafe_shutdowns : 4
  • media_errors : 0
  • num_err_log_entries : 0
  • Warning Temperature Time : 0
  • Critical Composite Temperature Time : 0
  • Thermal Management T1 Trans Count : 0
  • Thermal Management T2 Trans Count : 0
  • Thermal Management T1 Total Time : 0
  • Thermal Management T2 Total Time : 0
root@srv-proxmox:~#

root@srv-proxmox:~# smartctl -x /dev/nvme0

smartctl 7.0 2018-12-30 r4883 [x86_64-linux-5.0.21-3-pve] (local build)

Copyright (C) 2002-18, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
  • Model Number: SPCC M.2 PCIe SSD
  • Serial Number: B96807981DB500921193
  • Firmware Version: ECFM22.4
  • PCI Vendor/Subsystem ID: 0x1987
  • IEEE OUI Identifier: 0x6479a7
  • Total NVM Capacity: 512,110,190,592 [512 GB]
  • Unallocated NVM Capacity: 0
  • Controller ID: 1
  • Number of Namespaces: 1
  • Namespace 1 Size/Capacity: 512,110,190,592 [512 GB]
  • Namespace 1 Formatted LBA Size: 512
  • Namespace 1 IEEE EUI-64: 6479a7 2540163933
  • Local Time is: Fri Nov 22 22:04:42 2019 MSK
  • Firmware Updates (0x12): 1 Slot, no Reset required
  • Optional Admin Commands (0x0017): Security Format Frmw_DL Self_Test
  • Optional NVM Commands (0x005d): Comp DS_Mngmt Wr_Zero Sav/Sel_Feat Timestmp
  • Maximum Data Transfer Size: 512 Pages
  • Warning Comp. Temp. Threshold: 75 Celsius - это для настройки триггера буду использовать
  • Critical Comp. Temp. Threshold: 80 Celsius - это для настройки триггера буду использовать.

Шаг №6: На мониторинг ставлю следующие параметры — это у меня:

Metrika

Назначение

Суффикс

Триггер

Частота опроса

Группа элементов данных

Model Number

Информация по модели- диска

1d

M.2

Serial Number

Информация по серийному номеру

1d

M.2

Firmware Version

Информация по прошивке контроллера диска

1d

M.2

Available Spare

Свободное место

если меньше 5% то тревога

1h

M.2

Percentage Used

Процент использования места диска

%

1h

M.2

Temperature

Температура диска

С

если >=75 <=79 — то Warning

если >= 80 то Critical

30m

M.2

Power On Hours

Количество наработанных часов

h

1d

M.2

Controller Busy Time

Время работы контроллера

1h

M.2

Шаг №7: С созданный конфигурационный файл smart.conf который привязан у меня к шаблоны TEMPLATE_SMART добавляю строки UserParameter которые применительны к моему M.2 диску.

root@srv-proxmox:~# nano /etc/zabbix/zabbix_agentd.d/smart.conf

# HDD /dev/nvme0

# Model Number

UserParameter=uHDD.nv_model_number.[*],sudo smartctl -x $1 | grep -i "Model Number" | awk -F ":" '{print $$2}'

UserParameter=uHDD.nv_serial_number.[*],sudo smartctl -x $1 | grep -i "Serial Number" | awk -F ":" '{print $$2}'

UserParameter=uHDD.nv_firmware_version.[*],sudo smartctl -x $1 | grep -i "Firmware Version" | awk -F ":" '{print $$2}'

# Available Spare, else <5% to alarm

UserParameter=uHDD.nv_available_spare.[*],sudo smartctl -A $1 | grep -I "Available Spare" | awk -F ":" '{print $$2}' | head -n1

# % - used

UserParameter=uHDD.nv_percentage_used.[*],sudo smartctl -A $1 | grep -I "Percentage Used" | awk -F ":" '{print $$2}

# 27 - Celsius transfort to 27

# Temperature Disk

UserParameter=uHDD.nv_temperature.[*],sudo smartctl -A $1 | grep -I "Temperature" | awk -F ":" '{print $$2-0}' | head -n1

UserParameter=uHDD.nv_power_on_hours.[*],sudo smartctl -A $1 | grep -I "Power On Hours" | awk -F ":" '{print $$2}'

UserParameter=uHDD.nv_controller_busy_time.[*],sudo smartctl -A $1 | grep -I "Controller Busy Time" | awk -F ":" '{print $$2}'

После не забываем сохранить внесенные изменения. Для применения изменений перезапускаем Zabbix-агент.

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

root@srv-proxmox:~# systemctl restart zabbix-agent

Шаг №8: В шаблоне Template_SMART создаю элементы данных для диска M.2:

http://IP&DNS/zabbix - user&pass - Настройка - Шаблоны -

  • группа: Все
  • Имя: SMART

нажимаю «Применить«, затем нажимаю у найденного шаблона «Элементы данных»

В шаблоне Template_SMART создаю элементы данных применительно к M.2

и создаю «Создать элемент данных«:

Элемент данных Имя Тип Ключ Тип информации Интервал обновления
HDD /dev/nvme0: Model Number Zabbix Agent uHDD.nv_model_number.[/dev/nvme0] Текст 1d
HDD /dev/nvme0: Serial Number Zabbix Agent uHDD.nv_serial_number.[/dev/nvme0] Текст 1d
HDD /dev/nvme0: Available Spare Zabbix Agent uHDD.nv_available_spare.[/dev/nvme0] Текст 1h
HDD /dev/nvme0: Controller Busy Time Zabbix Agent uHDD.nv_controller_busy_time.[/dev/nvme0] Числовой (целое положительное) 1h
HDD /dev/nvme0: Firmware Version Zabbix Agent uHDD.nv_firmware_version.[/dev/nvme0] Текст 1d
AD /dev/nvme0: Percentage Used Zabbix Agent uHDD.nv_percentage_used.[/dev/nvme0] Текст 1h
HDD /dev/nvme0: Power On Hours Zabbix Agent uHDD.nv_power_on_hours.[/dev/nvme0] Числовой (целое положительное) 1d
HDD /dev/nvme0: Temperature Zabbix Agent uHDD.nv_temperature.[/dev/nvme0] Числовой (с плавающей запятой) 30m

Шаг №9: Предопределяю триггеры.

http://IP&DNS/zabbix - user&pass - Настройка - Шаблоны - Template_SMART - триггеры - Создать триггер

  • Имя: M.2 Available Spare
  • Выражение: {Template_SMART:uHDD.nv_available_spare.[/dev/nvme0].last()}<=5
  • Важность: Высокая

и т.д. по такому же принципу

Триггеры к шаблону Template_SMART

После нужно перезапустить Zabbix-сервис:

ekzorchik@srv-zabbix:~$ sudo systemctl restart zabbix-server

Шаг №10: Нацеливаю шаблон Template_SMART на хост (srv-proxmox)

http://IP&DNS/zabbix - user&pass - Настройка - Узлы сети - Группа: Все — перехожу в узел srv-proxmox (предварительно он должен быть заведен в Zabbix), затем «Шаблоны» — «Добавить» — нахожу шаблон Template_SMART и отмечаю галочкой, нажимаю «Выбрать» — «Обновить«.

Вот так выглядит настройка когда шаблон присоединен к узлу:

Узел сети присоединен к шаблону Template_SMART

Шаг №11: Инициализирую принудительный опрос элементов данных которые относятся к M.2 диску

http://IP&DNS/zabbix - user&pass - Настройка - Узлы сети — выбираю узел srv-proxmox, перехожу в «Элементы данных«, выполняю сортировку по «Группа элементов данных» = M.2 и нажимаю «Применить»

Инициализирую принудительный опрос элементов данных которые относятся к M.2 диску

Шаг №12: Проверяю, как данные были сняты через агент с хоста применительно к группе M.2:

http://IP&DNS/zabbix - user&pass - Мониторинг - Последние данные

  • Узел сети: srv-proxmox
  • Группа элементов данных: M.2

и нажимаю «Применить«. Результат

Результат полученной информации по M.2 диску

Шаг №13: Выгружаю Template: Template_SMART_SSD_SATA_M2 и также сохраняю его в личном хранилище OwnCloud 10

Итого, я разобрался, как вручную поставить на мониторинг один диск формата M.2 в заббикс, настроил некоторые триггеры и выгрузил его к себе в личное хранилище OwnCloud 10. Теперь я могу перейти к автоматизации определения всех дисков системы, а не явного указания. На этом пока все, с уважением автор блога Олло Александр aka ekzorchik.