Задача: Поставить на мониторинг сперва один диск в Zabbix Server 4.4 on Ubuntu 18.04 Server amd64 из сервера на котором у меня развернута виртуализация Proxmox 6 на Debian 10 моего самосборного железа.

Мониторинг будет вестись через заведение каждого параметра посредством UserParameter в Zabbix Agent 4.4 на хосте используя утилиту smartctl которая посредством вывода и форматирования будет предоставлять интересующую меня информацию. Да не удобно, но это же начало. Я хочу сперва ознакомиться с инструментами, а уже после по максимум автоматизировать, к примеру задействовать низкоуровневое обнаружение (LLD).

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

  • srv-zabbix (172.33.33.117)
  • srv-proxmox (172.33.33.25) — Это сервер с осью Debian 10 на котором поднята роль гипервизора базирующаяся на базе Proxmox 6. Внутри него располагается пока один SSD Disk (HDD: (KINGSTON SA400S37480G, SBFKB1C2))

Ниже набор шагов для решения задуманного:

Шаг №1: Имеется сервис мониторинга Zabbix Server 4.4 на Ubuntu 18.04 Server amd64

Шаг №2: На сервер srv-proxmox устанавливается агент и настраивается

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

PidFile=/var/run/zabbix/zabbix_agentd.pid

LogFile=/var/log/zabbix/zabbix_agentd.log

LogFileSize=0

EnableRemoteCommands=1

LogRemoteCommands=1

Server=127.0.0.1, 172.33.33.117

ServerActive=127.0.0.1,172.33.33.117

Hostname=Zabbix server

Include=/etc/zabbix/zabbix_agentd.d/*.conf

UnsafeUserParameters=1

root@srv-proxmox:~# nano /etc/sudoers

zabbix ALL=(ALL) NOPASSWD:ALL

Шаг №3: Для мониторинга за состоянием диска мне понадобиться утилита smartctl входящая в пакет smartmontools, а также zabbix-get через которую буду проверять ключи.

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

Шаг №4: Мониторить параметры диска буду через включенную опцию SMART.

root@srv-proxmox:~# smartctl -s off /dev/sda | grep 'SMART' | head -n 1

SMART Disable failed: scsi error badly formed scsi parameters

root@srv-proxmox:~# smartctl -s on /dev/sda | grep 'SMART' | head -n 1

SMART Enabled.

Шаг №5: Получить информацию по диску:

root@srv-proxmox:~# smartctl -i /dev/sda

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 Family: Phison Driven SSDs
  • Device Model: KINGSTON SA400S37480G
  • Serial Number: 50026B77824DAB3C
  • LU WWN Device Id: 5 0026b7 7824dab3c
  • Firmware Version: SBFKB1C2
  • User Capacity: 480,103,981,056 bytes [480 GB]
  • Sector Size: 512 bytes logical/physical
  • Rotation Rate: Solid State Device
  • Device is: In smartctl database [for details use: -P show]
  • ATA Version is: ACS-3 T13/2161-D revision 4
  • SATA Version is: SATA 3.2, 6.0 Gb/s (current: 6.0 Gb/s)
  • Local Time is: Fri Nov 22 09:11:04 2019 MSK
  • SMART support is: Available - device has SMART capability.
  • SMART support is: Enabled

Из этого вывода, также можно взять на строки которые посредством обработки bash можно добавить в мониторинг дабы предопределять что это за диск. К примеру:

root@srv-proxmox:~# smartctl -i /dev/sda | grep 'Device Model' | cut -c 19-40

KINGSTON SA400S37480G

root@srv-proxmox:~# smartctl -i /dev/sda | grep 'Serial Number' | cut -c 19-40

50026B77824DAB3C

root@srv-proxmox:~# smartctl -i /dev/sda | grep 'Firmware Version' | awk '{print $3}'

SBFKB1C2

root@srv-proxmox:~# smartctl -i /dev/sda | grep 'SMART support is:' | awk '{print $4}' | tail -1

Enabled

Шаг №6: Количество параметров я нахожу через запрос — это те активные параметры которые изменяются с течением времени и уже от них после отталкиваться.

root@srv-proxmox:~# smartctl -A /dev/sda | grep Always | wc -l

15

Шаг №7: Подготавливаю конфигурационный файл smart.conf для системы srv-proxmox

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

#Проверяю статус SMART

UserParameter=uHDD.health.[*],sudo smartctl -H /dev/sda |grep "test"| cut -f2 -d: |tr -d " "

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

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

Можно проверять, как на Zabbixсервере так и на текущей системе:

root@srv-proxmox:~# zabbix_get -s 127.0.0.1 -k uHDD.health.[/dev/sda]

PASSED

root@srv-proxmox:~#

На заметку: Есть нюанс (почерпнул его из одной статьи), т. к. при использовании ключа smartctl -A (smartctl --all) данные в текстовом виде, то нужно их сперва выгрузить в файл, а после считать. Из вывода интересует колонка RAW_VALUE

root@srv-proxmox:~# smartctl --all /dev/sda | grep Temp |awk '{print $10}' > /usr/lib/zabbix/temp.txt

UserParameter=uHDD.temp.[*],cat /usr/lib/zabbix/temp.txt

ekzorchik@srv-zabbix:~$ zabbix_get -s 172.33.33.25 -k uHDD.temp.[/dev/sda]

31

root@srv-proxmox:~# smartctl --all /dev/sda | grep 'Power_On_Hours' |awk '{print $10}' > /usr/lib/zabbix/hours.txt

На заметку: Нашел наработку, что можно не выгружать файл и не использовать cron, а в сортировке указания какую колонку отобразить использовать еще один символ знака доллара «$». Пример: sudo smartctl -A /dev/sda|grep 'Temperature_Celsius' | awk '{print $$10}'

Но это только в conf-файле для Zabbix-агента, при обычном запуске строки через bash нужно указывать только один символ знака доллара «$». Это важно.

Шаг №8: Проверяю извлечение информации с ключей через Zabbixсервер

ekzorchik@srv-zabbix:~$ sudo zabbix_get -s 172.33.33.25 -k uHDD.health.[/dev/sda]

PASSED

Таким образом проверяю каждый параметр.

Шаг №9: Итого мой заполненный конфигурационный файл smart.conf для Zabbixагента:

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

#HDD Общее состояние

UserParameter=uHDD.health.[*],sudo smartctl -H $1 |grep "test"| cut -f2 -d: |tr -d " "

#HDD Serial Number

UserParameter=uHDD.serial.[*],sudo smartctl -i $1 | grep -i "Serial Number" | awk '{print $3}'

#HDD Device Model

UserParameter=uHDD.model.[*],sudo smartctl -i $1 | grep -i "Device Model" | cut -f2 -d: |tr -d " "

#HDD Work Hours

UserParameter=uHDD.hours.[*],sudo smartctl -x $1 | grep -i "Power_On_Hours" | awk '{print $$8}'

UserParameter=uHDD.raw_read_error_rate.[*],sudo smartctl -A $1 | grep -i "Raw_Read_Error_Rate" | awk '{print $$10}'

UserParameter=uHDD.power_cycle_count.[*],sudo smartctl -A $1 | grep -i "Power_Cycle_Count" | awk '{print $$10}'

UserParameter=uHDD.sata_phy_error_count.[*],sudo smartctl -A $1 | grep -i "SATA_Phy_Error_Count" | awk '{print $$10}'

UserParameter=uHDD.program_fail_cnt_total.[*],sudo smartctl -A $1 | grep -i "Program_Fail_Cnt_Total" | awk '{print $$10}'

UserParameter=uHDD.unsafe_shutdown_count.[*],sudo smartctl -A $1 | grep -i "Unsafe_Shutdown_Count" | awk '{print $$10}'

UserParameter=uHDD.crc_error_count1.[*],sudo smartctl -A $1 | grep -i "CRC_Error_Count" | awk '{print $10}' | head -n1

UserParameter=uHDD.crc_error_count2.[*],sudo smartctl -A $1 | grep -i "CRC_Error_Count" | awk '{print $10}' | tail -n1

UserParameter=uHDD.reported_uncorrect.[*],sudo smartctl -A $1 | grep -i "Reported_Uncorrect" | awk '{print $$10}'

UserParameter=uHDD.temperature_celsius.[*],sudo smartctl -A $1 | grep -i "Temperature_Celsius" | awk '{print $$10}'

UserParameter=uHDD.flash_writes_gib.[*],sudo smartctl -A $1 | grep -i "Flash_Writes_GiB" | awk '{print $$10}'

UserParameter=uHDD.lifetime_writes_gib.[*],sudo smartctl -A $1 | grep -i "Lifetime_Writes_GiB" | awk '{print $$10}'

UserParameter=uHDD.lifetime_reads_gib.[*],sudo smartctl -A $1 | grep -i "Lifetime_Reads_GiB" | awk '{print $$10}'

Тут есть еще момент можно когда сортируешь указать не grep -i "Power_Cycle_Count", а $2, то есть:

#HDD Temperature disk

UserParameter=uHDD.temp.[*],sudo smartctl -x $1 | grep -i $2 | awk '{print $$8}'

ekzorchik@srv-zabbix:~$ sudo zabbix_get -s 172.33.33.25 -k uHDD.temp.[/dev/sda,Temperature_Celsius]

30

так кстати мне кажется лучше — получается единый шаблон, т. к. параметры $8 всегда на том же месте.

UserParameter=uHDD.raw_read_error_rate.[*],sudo smartctl -A $1 | grep -i $2 | awk '{print $$10}'

ekzorchik@srv-zabbix:~$ sudo zabbix_get -s 172.33.33.25 -k uHDD.raw_read_error_rate.[/dev/sda,Raw_Read_Error_Rate]

0

Шаг №10: Создаю Шаблон Template_SMART, внутри него создаю элементы данных и после нацеливаю данный шаблон на хост srv-proxmox

Именовать элементы данные буду так:

HDD DISK: ATTRIBUTE_NAME

HDD /dev/sda: Serial Number

Шаг №11: Перехожу в хост:

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

Командую опросить все "Элементы данных" через Zabbix-агент

Шаг №12: Для себя данный составленный шаблон выгрузил в XMLфайл дабы после уже не вручную все заносить, а просто его загрузить и подредактировать:

http://IP&DNS/zabbix — user&pass — Настройка — Шаблоны — сортирую Имя=SMART и нажимаю «Применить», затем выделяю шаблон и нажимаю «Экспорт»

Экспортирую шаблон - получится xml-файл

и шаблон скачиваем по умолчанию в папку «Загрузки/Download» под именем: zbx_export_templates.xml, для удобства переименовываю его, как Template_SMART.xml и сохраняю на собственном OwnCloud 10сервере где располагаются все мои наработки. tips_db_home/tips_zabbix/Template_SMART

Шаг №13: Результат опрошенных данных:

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

  • Узлы сети: srv-proxmox

и нажимаю «Применить» получаю:

Результат применения шаблона Template_SMART с хоста srv-proxmox

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

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

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

Итого я для себя проработал как настраивается мониторинг одного диска в моем сервере на котором я тестирую/прорабатываю различные вещи. Инструмент Proxmox вообще должен быть у любого уважающего себя системного администратора дабы учиться и быть востребовательным специалистом. На этом у меня пока все, заметка будет модернизировать и дописываться. С уважением автор блога Олло Александр aka ekzorchik.