Задача: Поставить на мониторинг сперва один диск в 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
и выделив все даю команду «Проверить сейчас
» тем самым все параметры опросятся:
Шаг №12: Для себя данный составленный шаблон выгрузил в XML
—файл дабы после уже не вручную все заносить, а просто его загрузить и подредактировать:
http://IP&DNS/zabbix — user&pass — Настройка — Шаблоны
— сортирую Имя=SMART
и нажимаю «Применить
», затем выделяю шаблон и нажимаю «Экспорт
»
и шаблон скачиваем по умолчанию в папку «Загрузки/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
и нажимаю «Применить
» получаю:
Важно убедиться что все показания правильно снимаются, может потребоваться перезапуск агент на системе которую ставим на мониторинг по диску и перезапуск сервера дабы изменения в Web-интерфейсе актуализировались.
root@srv-proxmox:~# systemctl restart zabbix-agent ekzorchik@srv-zabbix:~$ sudo systemctl restart zabbix-server
Итого я для себя проработал как настраивается мониторинг одного диска в моем сервере на котором я тестирую/прорабатываю различные вещи. Инструмент Proxmox
вообще должен быть у любого уважающего себя системного администратора дабы учиться и быть востребовательным специалистом. На этом у меня пока все, заметка будет модернизировать и дописываться. С уважением автор блога Олло Александр aka ekzorchik.