Замечание!
Это немного устаревшая статья. Описанный в ней способ сейчас мною не используется. Использую более простой способ, который описан тут: Мониторинг дискового пространства активным Zabbix-агентом
Лирическое отступление.
В Zabbix, как многие помнят, агент, устанавливаемый на подопечный компьютер, может работать в двух режимах: активном и пассивном.
При работе в активном режиме агент сам собирает какие-то данные с компьютера и затем с заданной периодичностью отсылает их на сервер. В пассивном режиме агент выдает минимальный набор данных самостоятельно, а все остальные данные исключительно по запросу с сервера.
При использовании агента в пассивном режиме прямо “из коробки” доступно много “вкусных плюшек”: слежение за нагрузкой сетевых адаптеров, наблюдение за дисковой подсистемой, слежение за свободным местом на всех дисках, слежение за системными журналами и прочее…
А что делать, если агент находится за NAT? Понятно, что без проброса портов сервер не может отправить команду агенту напрямую, и работа агента в этом случае возможна только в активном режиме… Но при этом очень хочется иметь данные, например, о количестве свободного места на дисках!
Всё? Приплыли? Ничуть!
Лирическое наступление.
Итак, ставим задачу: следить за системным диском (%systemdrive%) подопечного компьютера, а именно за количеством свободного места на нём.
Следить можно за всеми дисками, но наиболее важно, по-моему, иметь данные о количестве свободного места как раз на системном диске. Если на каком-то другом диске закончится свободное место, пользователь сам это заметит и сообщит о такой неприятности, при этом система продолжит нормальную работу. Если же на системном диске закончится свободное пространство, стабильную работу системы гарантировать сложно.
Усложним себе задачу. 🙂
Пробрасывать порты не будем. Новомодные инструменты типа Windows PowerShell использовать не будем потому, что PowerShell на некоторых системах просто нет.
Будем использовать командную строку, встроенный планировщик заданий и немного VBS-скриптов.
Ну… Это всё была преамбула, теперь наступил черёд “амбулы”.
“Амбула”.
1. Устанавливаем на подопечный компьютер Zabbix-агента:
- Путь установки программы: C:zabbix
- Папку с самописными скриптами располагаем тут: C:zabbixscripts
- Файл с настройками тут: C:zabbixzabbix_agentd.win.conf
Т.к. этот агент будет располагаться за NAT и не будет иметь возможности получать команды от сервера, то одержимое файла с настройками будет примерно таким:
LogFile=c:zabbixzabbix_agentd.log
Server=xx.yy.zz.yy
ServerActive=xx.yy.zz.yy
Hostname=hostname.mihanik.net
StartAgents=0
RefreshActiveChecks=120
EnableRemoteCommands=1####### USER-DEFINED MONITORED PARAMETERS #######
####### Слежение за свойствами диска #######
# Для Windows### Процент свободного места на системном диске ###
UserParameter=Win_SysDrv_PercentFreeSpace, C:WindowsSystem32cscript.exe C:zabbixscriptsWinDriveInfo.vbs %SystemDrive% PercentFreeSpace
# Проверить
# C:zabbixzabbix_agentd.exe -c c:zabbixzabbix_agentd.win.conf -t Win_SysDrv_PercentFreeSpace### Общий размер системного диска ###
UserParameter=Win_SysDrv_TotalSize, C:WindowsSystem32cscript.exe C:zabbixscriptsWinDriveInfo.vbs %SystemDrive% TotalSize
# Проверить
# C:zabbixzabbix_agentd.exe -c c:zabbixzabbix_agentd.win.conf -t Win_SysDrv_TotalSize### Размер свободного пространства на системном диске ###
UserParameter=Win_SysDrv_FreeSpace, C:WindowsSystem32cscript.exe C:zabbixscriptsWinDriveInfo.vbs %SystemDrive% FreeSpace
# Проверить
# C:zabbixzabbix_agentd.exe -c c:zabbixzabbix_agentd.win.conf -t Win_SysDrv_FreeSpace
В самом конце я описал 3 (три) пользовательских параметра, которые мне хотелось бы отсылать на сервер:
- UserParameter=Win_SysDrv_PercentFreeSpace
- UserParameter=Win_SysDrv_TotalSize
- UserParameter=Win_SysDrv_FreeSpace
%SystemDrive% – это, как вы догадались, имя системного диска Windows. 🙂
Чтобы автоматизировать процесс установки использую простенький скриптик: Zabbix_Install.bat
2. Размещаем в папке C:zabbixscripts простенький VBS-скрипт,
Он, собственно, и будет собирать нужные нам данные. Назвал я его так: c:zabbixscriptsWinDriveInfo.vbs
Вот небольшая инструкция по использованию скриптика:
Запуск скрипта:
WinDriveInfo.vbs <Имя диска> <Свойство диска> [<Режим работы скрипта>]<Имя диска> – имя диска, свойства которого нужно получить
<свойство диска> – свойство, которое нужно получить
VolumeName — Название тома(не C:, именно название)
TotalSize — Полный размер диска В БАЙТАХ
FreeSpace — Свободное место на диске В БАЙТАХ
SerialNumber — c серийный номер жёсткого диска
DriveLetter — буква, назначенная диску (без всяких : и![]()
DriveType — тип диска(съёмный, не съёмный, сетевой, CD-ROM или RAM-диск)
FileSystem — файловая система диска(FAT32, NTFS и т.д.)
RootFolder — путь к корневой папке(для диска С — C:)
Path — то же, что и RootFolder, но вернёт он C: , без
IsReady — доступность диска в данный момент(True или False)
PercentFreeSpace – процент свободного места на диске с точностью до сотых<режим работы скрипта> – (может отсутствовать)
trap – использовать zabbix_sender для отправки данных на zabbix-сервер,
notrap (по умолчанию) – не использовать zabbix_sender для отправки данных.
Важно!!! Т.к. скрипт я писал для себя, то в нём нет защиты от дурака и особо нет контроля передаваемых скрипту параметров. Кому нужно, можете сами дописать. 🙂
3. Перезапускаем службу zabbix-агента и проверяем, что наши пользовательские параметры работают правильно.
Т.е. последовательно выполняем 3 команды:
- C:zabbixzabbix_agentd.exe -c c:zabbixzabbix_agentd.win.conf -t Win_SysDrv_PercentFreeSpace
- C:zabbixzabbix_agentd.exe -c c:zabbixzabbix_agentd.win.conf -t Win_SysDrv_TotalSize
- C:zabbixzabbix_agentd.exe -c c:zabbixzabbix_agentd.win.conf -t Win_SysDrv_FreeSpace
Вот пример корректной работы первой команды:
Видно, что у меня на диске 75,12% свободного места. 🙂
Если ошибок нет, продолжаем дальше…
4. Теперь идём в web-интерфейс вашего Zabbix-сервера и создаём новый шаблон с именем Win_SysDrv_Monitoring.
Важно!!!
При создании элементов данных указываем, что получать мы их будем при помощи Zabbix траппера.
Приведу скриншоты уже настроенного шаблона.
Особо ленивые могут скачать готовый шаблон тут: Win_SysDrv_Monitoring.xml
5. Назначаем подопечному компьютеру созданный нами шаблон и нажимаем кнопку “обновить”.
6. Проверяем работу на текущем этапе.
Идём в Мониторинг, заходим в последние данные, выбираем нужный нам подопечный компьютер и видим… Ничего мы не видим. Данные не попадают на сервер.
Почему?
Потому, что пользовательские параметры, описанные нами в конце конфигурационного файла, Zabbix-агент отправляет на сервер только по прямому запросу с этого самого сервера. А агент-то находится за NAT, т.е. сервер отдать команду агенту не может, ведь порт с сервера на агента мы тоже не пробросили…
Получается, что агент про параметры знает, но отправлять их на сервер не будет: “Команды не было!”. 🙂
Получается, что нам нужно как-то самим отправлять данные на сервер по расписанию.
7. Настраиваем отправку данных по расписанию.
Идём в управление подопечным компьютером и в планировщике заданий создаём новую папку с именем Zabbix.
В этой папке создаём три простых задачи, которые будут работать от имени пользователя “система”, и по нужному вам расписанию выполнять сбор данных, а потом эти данные будут отправлять на сервер
Задача Win_SysDrv_FreeSpace должна выполнять команду
C:WindowsSystem32cscript.exe C:zabbixscriptsWinDriveInfo.vbs %SystemDrive% FreeSpace TRAP
Задача Win_SysDrv_TotalSize должна выполнять команду
C:WindowsSystem32cscript.exe C:zabbixscriptsWinDriveInfo.vbs %systemdrive% TotalSize TRAP
Задача Win_SysDrv_PercentFreeSpace должна выполнять команду
C:WindowsSystem32cscript.exe C:zabbixscriptsWinDriveInfo.vbs %SystemDrive% PercentFreeSpace TRAP
Кому лень создавать задачи самостоятельно, могут импортировать их из этих файлов: Win_SysDrv_TotalSize.xml, Win_SysDrv_PercentFreeSpace.xml, Win_SysDrv_FreeSpace.xml
Смысл каждой команды следующий: мы просим интерпретатор cscript запустить на выполнение скрипт WinDriveInfo.vbs с нужными нам параметрами.
ВАЖНО!!!
Если вы в качестве “Программы или сценария” укажете не интерпретатор cscript, а выберете непосредственно сам скрипт, то ваша задача стартует, но НЕ ЗАВЕРШИТСЯ!!
Причина очень проста: по умолчанию в Windows используется интерпретатор wscript. а он команду .Echo выводит не в консоль, как нам нужно, а выбрасывает MsgBox c кнопкой, которую, конечно же, будет некому нажать…
ТОЖЕ ВАЖНО!!!
Обязательно используйте 3 (третий) параметр скрипта TRAP. Именно благодаря этому параметру скрипт будет понимать, что полученные данные нужно не передавать Zabbix-агенту, а отправлять их сразу непосредственно на ваш Zabbix-сервер.
8. Окончательная проверка.
Идём в Мониторинг, заходим в последние данные, выбираем нужный нам подопечный компьютер и видим, что данные потекли…
Я взял данные с реального компьютера клиента:
Видно, что на системном диске мало места… И, да!!! На панели тут же отобразилось предупреждение!!!
УРА!!!
Всё работает!!!
Пы.Сы.
Я описал реальный работающий способ в виде “как есть”.
В нём есть некоторые недочёты, которые потом будут исправляться, но этот пример может кому-то помочь решать свои задачи.
🙂
УДАЧИ!!!
Как в Zabbix 2.0 сделать мониторинг свободного места на дисках?
По сути ничего сложного нет, но поиск по интернету ничего хорошего не нашел (может быть я плохо искал), и так, как это сделал я?!
Как добавлять триггеры и шаблоны можно посмотреть в постах ранее, по этому сразу к делу.
Мне нужно было мониторить 5 дисков (кол-во не важно, но для наглядности).
1. Создаем шаблон (к примеру Windows Disk)
2. Создаем группу данных (к примеру DiskSize)
3. Далее создаем элемент данных, вот тут то самая и суть (вот так должен выглядеть «элемент данных»)
— первое это ключ (vfs.fs.size[C:,free]) по которую забикс будет проверять место на диске.
C: — это имя диска, free — это свободное место (по умолчанию забикс это будет отдавать в килобайтах), это не удобно, по этому делаем пользовательский множитель 0.000000000931322574615478515625 — почему именно такой? (на сколько я понял, раз множитель, значит надо умножить и кроме как число в строчку вставить нельзя, а чтобы из КБ перевести в ГБ, надо несколько раз разделить на 1024 или умножить на вот это самое число).
В итоге получаем элемент данных в ГБ (что намного удобнее).
Далее делаем триггер который будет срабатывать когда на диске остается меньше 20 ГБ.
Сам триггер выглядит вот так (см.ниже).
В нем добавляем выражение «{Windows Disk:vfs.fs.size[C:,free].last(0)}<20» — тут все предельно ясно, смотрим последнее значение и если оно меньше 20 (ГБ), то начинаем кричать. Удачи.
Загрузка…
This article omits the installation of zabbix server. For the installation of zabbix server, you can check the article I published earlier. Currently, zabbix4.0server is used as an example to monitor the usage of c disk separately. This article does not involve disk writing, just disk space. The usage rate is theoretically universal for all versions.
1. Download zabbix-agent
The current use of Windows2012 system as an example, theories are common to all systems, other systems please self-test!
Https://www.zabbix.com/cn/download_agents#tab:40LTS
Zabbix-agent provides windows (msi) package from 4.0, and it is more convenient to install directly with one button.
Https://assets.zabbix.com/downloads/4.0.13/zabbix_agent-4.0.13-win-amd64-openssl.msi
2, install zabbix-agent
Run the zabbix_agent-4.0.*-win-amd64-openssl.msi installer on a Windows2012 server
After the default installation is complete, zabbix-agent will be automatically added to the Windows system service and automatically started. Please note that there is a firewall to open the port 10050 , otherwise zabbix-server can not get the data.
So simple zabbix-agent installation is complete, the rest of the steps are all in zabbix-server!
3, zabbix_get verification
Verify that the data can be obtained by zabbix_get command on zabbix-server
1 | zabbix_get – s agent端的IP地址 – k “vfs.fs.size[c:,total]” |
If the value can be returned normally, it means that the agent has no problem.
4, create a template in the zabbix-server console
Log in to the zabbix-server console, configure → template → create template
5, parameter description
The vfs.fs.size[fs,<mode>] key value is required to monitor disk usage.
Fs: file system
Mode: mode
Total default all, free idle, used, pfree free percentage, used percentage
6, create a monitoring item in the zabbix-server console
Click on the created template to add monitoring items.
Name: total amount of c disk
Key value: vfs.fs.size[c:,total]
Other parameters change according to usage. If you are configuring for the first time, then I suggest you not to change it.
Next continue to create free, used, create methods and total the same as total
12 | 名称: c盘剩余量 键值vfs . fs . size [ c : , free ] 名称: c盘使用量 键值vfs . fs . size [ c : , used ] |
Add pfree, pused, note that these two information types need to choose floating point number, unit %
12 | 名称: c盘剩余百分比 键值: vfs . fs . size [ c : , pfree ] 名称: c盘使用百分比 键值: vfs . fs . size [ c : , pused ] |
7, create a trigger in zabbix-server (optional)
Problem representation: {windows:vfs.fs.size[c:,pfree].last()}<=5
Restore expression: {windows:vfs.fs.size[c:,pfree].last()}>5
8, create a graphic in zabbix-server
9, template associated host
In Configuration → Host → Create Host
Click on the template, link the template you just created, and click Add.
Wait patiently for a while, you can see the use of Windows 2012 c drive, note: This value is different from what you see in Windows, because of the conversion method, not too tangled!
The same method applies to d disk, e disk, etc.
Если постоянно не контролировать свободное пространство на дисках сервера, то рано или поздно диски переполнятся. В результате перестанут работать сервисы, и даже может получиться так, что вы не сможете подключиться к консоли сервера через SSH.
Конечно, стандартные шаблоны мониторинга Zabbix для операционных систем содержат триггеры, которые сработают при опасном уменьшении свободного пространства на диске.
Однако на серверах лучше ограничивать использование файловой системы для пользователей с помощью дисковых квот. Это предотвратит переполнение всего диска, если один из пользователей запишет на диск слишком много файлов. Такая ситуация бывает, например, на серверах хостинга интернет-магазинов, импортирующих крупные каталоги товаров.
В этой статье мы расскажем про настройку квот файловой системы Linux, а также про то, как организован мониторинг квот на хостинговых серверах SAAS-сервиса интернет-магазинов.
Настройка квот файловой системы на сервере
Проще всего настроить использование квот, если на сервере установлена какая-нибудь панель управления, например ISPmanager или Hestia Control Panel. Если же никакая панель не используется, можно настроить квоты вручную.
Настройка через панель управления ISPmanager
Если на вашем сервере установлена панель управления ISPmanager, то для включение дисковых квот достаточно установить флажок Дисковые квоты на странице Конфигурация ПО, доступную в меню Настройки (рис. 1).
Возможно, вам будет полезна документация разработчика панели по настройке квот.
Настройка через панель управления Hestia Control Panel
В бесплатной панели управления Hestia Control Panel для включения квот нужно использовать плагин File System Disk Quota. Чтобы его включить, щелкните значок шестеренки справа вверху, затем щелкните кнопку Configure и раскройте блок Plugins (рис. 2).
Убедитесь, что в меню File System Disk Quota выбрана строка Yes.
Чтобы задавать различные квоты для разных пользователей, нужно создать необходимое количество пакетов (Package), указав в них нужные значения квот.
Для добавления пакета откройте список пользователей при помощи кнопки USERS, щелкните кнопку Packages, а затем — кнопку Add Package.
При добавлении пакета укажите нужное значение квоты в поле Quota (рис. 3).
Далее щелкните кнопку Save для сохранения изменений.
Настройка вручную для Debian
Прежде всего, обновите пакеты и установите пакет quota:
# apt update
# apt install quota
Проверьте версию установленного пакета:
# quota --version
Quota utilities version 4.06.
…
Далее отредактируйте файл /etc/fstab при помощи любого текстового редактора, например vim:
# vim /etc/fstab
Найдите в этом файле строку раздела /, для которого нужно добавить квоты:
# <file system> <mount point> <type> <options> <dump> <pass>
/dev/vda3 / ext4 errors=remount-ro 0 1
/dev/vda2 /boot ext2 defaults 0 2
Затем добавьте «,usrquota,grpquota» без пробела, как это показано ниже:
/dev/vda3 / ext4 errors=remount-ro,usrquota,grpquota 0 1
/dev/vda2 /boot ext2 defaults 0 2
Сохраните файл /etc/fstab
и перемонтируйте файловую систему:
# mount -o remount /
Убедитесь, что при монтировании файловой системы добавились нужные нам опции:
~# cat /proc/mounts | grep ' / '
/dev/vda3 / ext4 rw,relatime,quota,usrquota,grpquota,errors=remount-ro 0 0
Далее запустите команду quotacheck
, которая создаст файлы /aquota.user
и /aquota.group
, предназначенные для хранения информации об ограничениях и использовании файловой системы:
# quotacheck -ugm /
Проверьте, что файлы создались:
# ls -lh / | grep aquota
-rw------- 1 root root 6.0K Aug 4 15:12 aquota.group
-rw------- 1 root root 6.0K Aug 4 15:12 aquota.user
Если все хорошо, включите квоты:
# quotaon -v /
/dev/vda3 [/]: group quotas turned on
/dev/vda3 [/]: user quotas turned on
Чтобы установить квоты, например, для пользователя quotausr, введите такую команду:
# setquota -u quotausr 100M 120M 0 0 /
Эта команда установит для пользователя quotausr квоту 100 Мбайт и лимит 120 Мбайт.
Проверьте, что квота и лимит были установлены:
# quota -vs quotausr
Disk quotas for user quotausr (uid 1000):
Filesystem space quota limit grace files quota limit grace
/dev/vda3 16K 100M 120M 4 0 0
Более подробное руководство по настройке квот вы найдете здесь.
Настройка журналируемых квот
При включении квот командой quotaon на консоли может появиться следующее сообщение:
quotaon: Your kernel probably supports ext4 quota feature but you are using external quota files. Please switch your filesystem to use ext4 quota feature as external quota files on ext4 are deprecated.
Оно говорит, что вам нужно настроить так называемые журналируемые квоты. Они хороши тем, что после аварийного завершения работы ОС не нужно запускать проверку квот вручную.
Для настройки журналируемых квот добавьте в файл /etc/fstab
строку (без пробелов) «,usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0»:
/dev/vda3 / ext4 errors=remount-ro,usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0 0 1
/dev/vda2 /boot ext2 defaults 0 2
Если ранее были созданы файлы /aquota.user
и /aquota.group
, удалите их:
# rm /aquota.user
# rm /aquota.group
Перемонтируйте корневой раздел и запустите проверку квот::
# mount -o remount /
# quotacheck -avugm
При первом запуске вы получите предупреждающие сообщения, которые можно игнорировать:
quotacheck: Your kernel probably supports ext4 quota feature but you are using external quota files. Please switch your filesystem to use ext4 quota feature as external quota files on ext4 are deprecated.
quotacheck: Scanning /dev/vda3 [/] done
quotacheck: Cannot stat old user quota file //aquota.user: No such file or directory. Usage will not be subtracted.
quotacheck: Cannot stat old group quota file //aquota.group: No such file or directory. Usage will not be subtracted.
quotacheck: Cannot stat old user quota file //aquota.user: No such file or directory. Usage will not be subtracted.
quotacheck: Cannot stat old group quota file //aquota.group: No such file or directory. Usage will not be subtracted.
quotacheck: Checked 5029 directories and 42224 files
quotacheck: Old file not found.
quotacheck: Old file not found.
Далее включите квоты:
# quotaon -avug
quotaon: Your kernel probably supports ext4 quota feature but you are using external quota files. Please switch your filesystem to use ext4 quota feature as external quota files on ext4 are deprecated.
Опять игнорируйте предупреждающие сообщения, но убедитесь, что квоты включены:
/dev/vda3 [/]: group quotas turned on
/dev/vda3 [/]: user quotas turned on
Далее, как и при работе с обычными квотами, установите квоты для пользователя и проверьте, что они успешно установились:
# setquota -u quotausr 100M 120M 0 0 /
# quota -vs quotausr
Disk quotas for user quotausr (uid 1000):
Filesystem space quota limit grace files quota limit grace
/dev/vda3 16K 100M 120M 4 0 0
Вы можете также обратиться к следующей инструкции.
Однако не создавайте вручную файлы /aquota.user
и /aquota.group
, как там рекомендуется. Эти файлы будут созданы автоматически командой quotacheck
.
Ручная проверка использования квот
Чтобы проверить использование квот вручную, используйте команду repquota
:
# repquota -s /
*** Report for user quotas on device /dev/vda3
Block grace time: 7days; Inode grace time: 7days
Space limits File limits
User used soft hard grace used soft hard grace
----------------------------------------------------------------------
root -- 1496M 0K 0K 44653 0 0
man -- 1688K 0K 0K 160 0 0
_apt -- 12K 0K 0K 3 0 0
ntp -- 12K 0K 0K 3 0 0
zabbix -- 72K 0K 0K 8 0 0
quotausr -- 16K 100M 120M 4 0 0
Параметр -s указывает программе включить в отчет использованное дисковое пространство, а также количество индексных узлов inode. Второй параметр указывает файловую систему, для которой нужно проверить использование квот.
Обратите внимание, что здесь выводятся значения для так называемой мягкой (soft) и жесткой (hard) квот.
Если будет превышено значение мягкой квоты, пользователь получит предупреждающе сообщение. Что же касается жесткой квоты, то ее значение пользователь превысить не сможет — сработает ограничение.
Команда repquota
с параметрами -v и -g показывают все квоты, в том числе для групп, даже если квоты не используются:
# repquota -v -g /
*** Report for group quotas on device /dev/vda3
Block grace time: 7days; Inode grace time: 7days
Block limits File limits
Group used soft hard grace used soft hard grace
----------------------------------------------------------------------
root -- 1493712 0 0 44605 0 0
adm -- 2600 0 0 26 0 0
tty -- 76 0 0 3 0 0
mail -- 28 0 0 2 0 0
man -- 1688 0 0 160 0 0
shadow -- 168 0 0 7 0 0
utmp -- 1828 0 0 4 0 0
staff -- 8 0 0 2 0 0
systemd-journal -- 32780 0 0 3 0 0
crontab -- 48 0 0 2 0 0
messagebus -- 52 0 0 1 0 0
ssh -- 348 0 0 1 0 0
ntp -- 12 0 0 3 0 0
zabbix -- 72 0 0 8 0 0
quotausr -- 16 0 0 4 0 0
Statistics:
Total blocks: 7
Data blocks: 1
Entries: 15
Used average: 15.000000
Если добавить параметр -p, то команда repquota
будет показывать период времени grace, в течение которого система будет предупреждать пользователя о переполнении квоты, но не ограничивать его:
# repquota -c -v -p -g /
*** Report for group quotas on device /dev/vda3
Block grace time: 7days; Inode grace time: 7days
Block limits File limits
Group used soft hard grace used soft hard grace
----------------------------------------------------------------------
root -- 1493712 0 0 0 44605 0 0 0
adm -- 2608 0 0 0 26 0 0 0
tty -- 76 0 0 0 3 0 0 0
mail -- 28 0 0 0 2 0 0 0
man -- 1688 0 0 0 160 0 0 0
shadow -- 168 0 0 0 7 0 0 0
utmp -- 1832 0 0 0 4 0 0 0
staff -- 8 0 0 0 2 0 0 0
systemd-journal -- 32780 0 0 0 3 0 0 0
crontab -- 48 0 0 0 2 0 0 0
messagebus -- 52 0 0 0 1 0 0 0
ssh -- 348 0 0 0 1 0 0 0
ntp -- 12 0 0 0 3 0 0 0
zabbix -- 72 0 0 0 8 0 0 0
quotausr -- 16 0 0 0 4 0 0 0
Statistics:
Total blocks: 7
Data blocks: 1
Entries: 15
Used average: 15.000000
Параметр -c включит кэширование. Более подробное описание параметров программы repquota можно найти здесь.
Программа для мониторинга квот check_quota.pl с помощью Zabbix
Чтобы автоматически контролировать использование дисковых квот с помощью Zabbix, мы подготовили программу check_quota.pl.
Эта программа не пытается отслеживать квоты для каждого пользователя. Вместо этого она получает общий список квот и определяет максимальное использование квоты в процентах по всей файловой системе.
Предполагается, что если какой-либо пользователь приблизился к переполнению жесткой квоты, то системный администратор получает сообщение об этом от Zabbix. Далее он вручную с помощью панели ISPmanager проверяет «провинившегося» пользователя и увеличивает ему квоту, чтобы сайт продолжил свою работу.
Если оказалось, что какой-либо сайт интернет-магазина стал занимать слишком много места на диске сервера, то нужно решить, повышать ли ему тариф за использование дискового пространства или попросить клиента удалить ненужную информацию. Возможно, придется перенести сайт на другой сервер.
Практика показала, что этот способ вполне себя оправдывает. Автоматическая обработка переполнения квоты едва ли возможна, так как необходимо обсуждение возникшей ситуации с клиентом.
Инициализация программы check_quota.pl
В процессе инициализации программа check_quota.pl
получает параметры командной строки, определяет версию ОС (Linux или FreeBSD), пути для запуска утилит zabbix_sender
и repquota
, а также задает параметры запуска для repquota
:
my $zabbix_server_ip = $ARGV[0];
my $hostname = $ARGV[1];
if($ARGV[2] eq 'debug') { $debug = 1; } else { $debug = 0; }
if($^O eq 'linux')
{
$zabbix_sender = '/usr/bin/zabbix_sender';
$bin_repquota = '/usr/sbin/repquota';
$cmd = "$bin_repquota -c -v -p -g /";
}
elsif($^O eq 'freebsd')
{
$zabbix_sender = '/usr/local/bin/zabbix_sender';
$bin_repquota = '/usr/sbin/repquota';
$cmd = "$bin_repquota -v -g /";
}
else
{
print "nUnsupported OS: $^O";
}
Получение информации об использовании квот
Для получения информации об использовании квот программа запускает утилиту repquota
:
my @rqout = ();
@rqout = split /n/, `$cmd`;
Результаты обрабатываются в цикле:
my $max_quota_use=0;
foreach my $line (@rqout)
{
my @dat = split /s+/, $line;
next if (($#dat < 9) or ($dat[4] !~ /^d+/));
my ($quotaname, $quota_status, $quota_inuse, $quota_softlimit, $quota_hardlimit,$quota_grace) = ( $dat[0], $dat[1], $dat[2], $dat[3], $dat[4], $dat[5] );
if ($quotaname =~ /#/)
{
$quotaname =~ s/#//g;
$quotaname = "${quotaname}";
}
my $quotaname_perfdata = $quotaname; $quotaname_perfdata =~ s/^uid /uid/g;
my $percent;
if ($quota_hardlimit != 0)
{
$percent = int(($quota_inuse * 100) / $quota_hardlimit);
}
else
{
$percent=0;
}
if($percent != 0)
{
if($max_quota_use < $percent) { $max_quota_use = $percent; }
}
}
Максимальное значение использованной квоты, выраженной в процентах, сохраняется в переменной max_quota_use
.
Отправка результатов на серверы Zabbix
Чтобы отправить результат, а именно максимальное значение использованной квоты на серверы Zabbix, программа запускает в цикле утилиту zabbix_sender
:
my $zabbix_item_key = 'quota.key';
my @zabbix_server_ip_array = split(',', $zabbix_server_ip);
foreach my $server_ip (@zabbix_server_ip_array)
{
my $trap_cmd = $zabbix_sender.' -vv -z '.$server_ip.' -s "'.$hostname.'" -k '.$zabbix_item_key.' -o '.$max_quota_use;
my @trapout = ();
@trapout = split /n/, `$trap_cmd`;
}
Отправка выполняется на серверы, адреса IP которых были заданы в командной строке при запуске программы.
Задание crontab для запуска программы check_quota.pl
Программу check_quota.pl нужно запускать периодически как задание crontab с правами пользователя root:
*/11 * * * * /usr/bin/perl /home/frolov/zabbix_quota/check_quota.pl [Zabbix_IP_1], [Zabbix_IP_2] [Hostname
Здесь программа запускается каждые 11 минут. Вы, конечно, можете задать другой график запуска программы в зависимости от ваших потребностей.
В качестве параметров программе передается список адресов IP серверов Zabbix, разделенных запятой, а также имя хоста, как оно определено на серверах Zabbix.
Шаблон для Zabbix
Для программы check_quota.pl мы подготовили шаблон, который можно загрузить по этому адресу.
В шаблоне определен один ключ quota.key (рис. 4).
Также в этом шаблоне определены два триггера (рис. 5).
Первый из этих триггеров срабатывает, когда максимальное использование квоты достигло 90% или более. Этот триггер отмечен как серьезный (High), так как переполнение квоты требует срочного вмешательства системного администратора.
Второй триггер срабатывает, если данные о текущем использовании квот не поступают полтора часа или дольше. Как правило, такое бывает при неправильной настройке задания crontab или при наличии других ошибок в настройке сервера. Здесь важность не так велика (Warning), и системный администратор может действовать в плановом, а не срочном порядке.
Автор: Александр Фролов.
НЛО прилетело и оставило здесь промокод для читателей нашего блога:
— 15% на все тарифы VDS (кроме тарифа Прогрев) — HABRFIRSTVDS.
A few years ago we moved from Nagios to Zabbix for our server monitoring needs. I wasn’t a big fan of Nagios, finding it a pain to manage with its myriad configuration files. It’s probably gotten better since I last toyed with it but since we moved to Zabbix I haven’t had much reason to look at Nagios again.
I also try to use SNMP monitoring for everything. SNMP is widely supported – all sorts of hardware has SNMP support, and with the net-snmp package you can pretty easily create your own SNMP-monitorable stuff on Linux. Since almost all of our stuff runs on Linux this has worked out pretty well, but our Exchange server is probably going to be running on Windows for the foreseeable future. Windows has SNMP support, it’s just not on by default. However, even when it’s enabled it doesn’t have the simple “dskPercent” monitoring I’ve come to know and love with net-snmp on Linux, which simply tells you how full a given disk is as a percent. This makes it easy to set alerts when a disk reaches 80% full.
On Windows I found these objects that can be used to get something similar:
[evan@monitoring02 14:41:24 ~]$ snmpwalk -v 2c -c community 192.168.1.20 | grep -i storage HOST-RESOURCES-MIB::hrStorageIndex.1 = INTEGER: 1 HOST-RESOURCES-MIB::hrStorageIndex.2 = INTEGER: 2 HOST-RESOURCES-MIB::hrStorageIndex.3 = INTEGER: 3 HOST-RESOURCES-MIB::hrStorageIndex.4 = INTEGER: 4 HOST-RESOURCES-MIB::hrStorageIndex.5 = INTEGER: 5 HOST-RESOURCES-MIB::hrStorageIndex.6 = INTEGER: 6 HOST-RESOURCES-MIB::hrStorageType.1 = OID: HOST-RESOURCES-TYPES::hrStorageRemovableDisk HOST-RESOURCES-MIB::hrStorageType.2 = OID: HOST-RESOURCES-TYPES::hrStorageFixedDisk HOST-RESOURCES-MIB::hrStorageType.3 = OID: HOST-RESOURCES-TYPES::hrStorageCompactDisc HOST-RESOURCES-MIB::hrStorageType.4 = OID: HOST-RESOURCES-TYPES::hrStorageFixedDisk HOST-RESOURCES-MIB::hrStorageType.5 = OID: HOST-RESOURCES-TYPES::hrStorageVirtualMemory HOST-RESOURCES-MIB::hrStorageType.6 = OID: HOST-RESOURCES-TYPES::hrStorageRam HOST-RESOURCES-MIB::hrStorageDescr.1 = STRING: A: HOST-RESOURCES-MIB::hrStorageDescr.2 = STRING: C: Label: Serial Number b78d19 HOST-RESOURCES-MIB::hrStorageDescr.3 = STRING: D: Label:EXCH201064 Serial Number xxxxxxxx HOST-RESOURCES-MIB::hrStorageDescr.4 = STRING: E: Label:Exchange2010 Serial Number xxxxxxxx HOST-RESOURCES-MIB::hrStorageDescr.5 = STRING: Virtual Memory HOST-RESOURCES-MIB::hrStorageDescr.6 = STRING: Physical Memory HOST-RESOURCES-MIB::hrStorageAllocationUnits.1 = INTEGER: 0 Bytes HOST-RESOURCES-MIB::hrStorageAllocationUnits.2 = INTEGER: 4096 Bytes HOST-RESOURCES-MIB::hrStorageAllocationUnits.3 = INTEGER: 2048 Bytes HOST-RESOURCES-MIB::hrStorageAllocationUnits.4 = INTEGER: 4096 Bytes HOST-RESOURCES-MIB::hrStorageAllocationUnits.5 = INTEGER: 65536 Bytes HOST-RESOURCES-MIB::hrStorageAllocationUnits.6 = INTEGER: 65536 Bytes HOST-RESOURCES-MIB::hrStorageSize.1 = INTEGER: 0 HOST-RESOURCES-MIB::hrStorageSize.2 = INTEGER: 10459647 HOST-RESOURCES-MIB::hrStorageSize.3 = INTEGER: 546570 HOST-RESOURCES-MIB::hrStorageSize.4 = INTEGER: 104824319 HOST-RESOURCES-MIB::hrStorageSize.5 = INTEGER: 393172 HOST-RESOURCES-MIB::hrStorageSize.6 = INTEGER: 196600 HOST-RESOURCES-MIB::hrStorageUsed.1 = INTEGER: 0 HOST-RESOURCES-MIB::hrStorageUsed.2 = INTEGER: 5885720 HOST-RESOURCES-MIB::hrStorageUsed.3 = INTEGER: 546570 HOST-RESOURCES-MIB::hrStorageUsed.4 = INTEGER: 44650892 HOST-RESOURCES-MIB::hrStorageUsed.5 = INTEGER: 166057 HOST-RESOURCES-MIB::hrStorageUsed.6 = INTEGER: 152902
I thought initially that the hrStorageUsed and hrStorageSize values were being reported in bytes, but according to this MSDN article, the units are reported in “allocation units,” which I assume are being reported under hrStorageAllocationUnits, so you just need to multiply the values by the allocation units.
In Zabbix, I check hrStorageUsed every 15 minutes as “disk_1_used”. I check hrStorageSize every 2 hours (since the actual size of the disk/partition isn’t likely to change that often) as “disk_1_size”. To calculate the percentage, I created a “Calculated” item with this formula:
100*(last("disk_1_used") / last("disk_1_size"))
The values for disk_1_used and disk_1_size are in Storage Allocation Units, but since this is a percentage that doesn’t matter. However, I do also like to get an idea of the actual disk space being consumed; luckily this is also relatively easy to obtain in Zabbix using Calculated items. I monitor hrStorageAllocationUnits as “disk_1_allocunit” (every 7200 seconds since this too is unlikely to change much) and then the formula for the calculated used disk space is simply:
last("disk_1_used") * last("disk_1_allocunit")
Once all the work is done, here’s what the result looks like:
When I log in to the actual machine (my vCenter VM in this case) and check disk usage, the numbers match what Zabbix’s calculated values show, though Zabbix seems to be reporting values in “mebibytes” rather than “megabytes”:
I created a template in Zabbix which monitors these data for disks 1-5 and then applied it to all Windows servers; now I just need to apply some alert triggers and mission accomplished.
Срабатывает тригер в Zabbix:
Решение: Если у вас старые диски, то вполне возможно, что это у них данное значение может считаться нормальным, поэтому его можно увеличить путем изменения макроса для конкретного диска:
{$VFS.DEV.READ.AWAIT.WARN:«sdс»} и {$VFS.DEV.WRITE.AWAIT.WARN:«sdс»} |
Но что бы убедиться, что триггер появляется не случайно можно запустить команду указанную ниже и посмотреть параметр tps:
Изменение настройки оповещений о нехватке свободного места на диске при мониторинге Windows.
Проблема: Есть VPS сервер, у которого диск забит уже давненько больше 80% и пока этого хватает, но заббикс, со стандартным шаблоном, присылает уведомление когда видит, что свободного места осталось 20%.
Решение:
Макросы которые отвечают за данное оповещение:
{$VFS.FS.PUSED.MAX.WARN} {$VFS.FS.PUSED.MAX.CRIT} |
Но это изменит значение для всех текущих и последующих триггеров. Для того, что бы изменить значение срабатывания только для конкретного диска нужно добавить макросы:
{$VFS.FS.PUSED.MAX.CRIT:«C:»} и {$VFS.FS.PUSED.MAX.WARN:«C:»} |
Содержание
- ZABBIX – Мониторинг Windows Filesystem через FSNAME и FSTYPE
- Как настроить мониторинг Windows FileSystem через FSNAME в ZABBIX?
- Мониторинг дискового пространства активным Zabbix-агентом. OLD.
- Замечание!
- Лирическое отступление.
- Лирическое наступление.
- “Амбула”.
- 1. Устанавливаем на подопечный компьютер Zabbix-агента:
- 2. Размещаем в папке C:zabbixscripts простенький VBS-скрипт,
- 3. Перезапускаем службу zabbix-агента и проверяем, что наши пользовательские параметры работают правильно.
- 4. Теперь идём в web-интерфейс вашего Zabbix-сервера и создаём новый шаблон с именем Win_SysDrv_Monitoring.
- 5. Назначаем подопечному компьютеру созданный нами шаблон и нажимаем кнопку “обновить”.
- 6. Проверяем работу на текущем этапе.
- 7. Настраиваем отправку данных по расписанию.
- 8. Окончательная проверка.
- Аренда серверов.
- 1С:Предприятие “в облаке”.
- IP-телефония в офис.
- Zabbix + Iostat: мониторинг дисковой подсистемы
- Мониторинг производительности дисковой подсистемы при помощи zabbix и block stat
- Небольшое отступление
- Мониторинг дисков в zabbix
- Утилизация дисковой подсистемы
- Время обработки запроса
- Пропускная способность
- Количество операций ввода-вывода в секунду
- Заключение
- Zabbix: LLD-мониторинг дисков без UserParameter и скриптов на агентах
- Настройка агента
- Smartmontools
- Скрипт
- Шаблон
- Видео
ZABBIX – Мониторинг Windows Filesystem через FSNAME и FSTYPE
Долгое время мы не публиковали статей по Zabbix-у и не делали ничего по мониторингу через FSNAME и FSTYPE. Связано это с тем, что у нас было много еще задумок, которые мы смогли реализовать. Но теперь у нас есть время, и мы готовы подарить вам целый гайд на тему – Как мониторить Windows FileSystem через FSNAME.
Как настроить мониторинг Windows FileSystem через FSNAME в ZABBIX?
Для начала небольшой обзор: этот тип мониторинга относится к низкоуровневому обнаружению. Оно позволяет автоматически создавать элементы данных, триггеры и графики для различных объектов. Например необходимо мониторить Windows FileSystem и свободное место на дисках. Чтобы использовать #FSNAME нам необходимо проделать ряд действий. Давайте начнем.
На данной странице нажимаем кнопку: Создать правило обнаружения
На появившейся странице заполняем поля по стандарту. Особое внимание необходимо уделить полю “Ключ”. В него обязательно нужно вписать vfs.fs.discovery. Так мы указываем, что ключу необходимо опрашивать файловые системы узла сети.
Переходим на вкладку “Фильтры”, и здесь уже находим то, что нам необходимо. Нам необходим макрос <#FSNAME>. В первую строчку пишем следующие значения(фигурные скобки тоже копируем, кому необходимо):
<#FSNAME>совпадает/matshec ^C|^D|^E
Данный способ позволяет нам мониторить диски C;D;E; и сразу же к ним обращаться, если точнее, то значения описанные в поле напротив макроса это регулярные выражения. Подробнее о них вы можете узнать из гугла.
Фильтрация возможна по типам файловой системы через макрос <#FSTYPE>например, “^ext|^reiserfs”. Помимо этого есть специально разработанный под Windows макрос, позволяющий фильтровать тип самого диска <#FSDRIVETYPE>например, “fixed”.
Нажимаем кнопку Добавит. Далее нас переносит обратно на страницу настройки правил обнаружения. Как только правило будет создано, нам необходимо создать прототип элемента данных этого правила со следующими параметрами:
В моем случае определились абсолютно все файловые системы, которые были найдены на сервере gsasql29v. Таким образом мы можем подключать автообнаружение файловых систем к большому количеству серверов, что сократит развертывание мониторинга.
Источник
Мониторинг дискового пространства активным Zabbix-агентом. OLD.
Замечание!
Это немного устаревшая статья. Описанный в ней способ сейчас мною не используется. Использую более простой способ, который описан тут: Мониторинг дискового пространства активным Zabbix-агентом
Лирическое отступление.
В Zabbix, как многие помнят, агент, устанавливаемый на подопечный компьютер, может работать в двух режимах: активном и пассивном.
При работе в активном режиме агент сам собирает какие-то данные с компьютера и затем с заданной периодичностью отсылает их на сервер. В пассивном режиме агент выдает минимальный набор данных самостоятельно, а все остальные данные исключительно по запросу с сервера.
При использовании агента в пассивном режиме прямо “из коробки” доступно много “вкусных плюшек”: слежение за нагрузкой сетевых адаптеров, наблюдение за дисковой подсистемой, слежение за свободным местом на всех дисках, слежение за системными журналами и прочее…
А что делать, если агент находится за NAT? Понятно, что без проброса портов сервер не может отправить команду агенту напрямую, и работа агента в этом случае возможна только в активном режиме… Но при этом очень хочется иметь данные, например, о количестве свободного места на дисках!
Всё? Приплыли? Ничуть!
Лирическое наступление.
Итак, ставим задачу: следить за системным диском (%systemdrive%) подопечного компьютера, а именно за количеством свободного места на нём.
Следить можно за всеми дисками, но наиболее важно, по-моему, иметь данные о количестве свободного места как раз на системном диске. Если на каком-то другом диске закончится свободное место, пользователь сам это заметит и сообщит о такой неприятности, при этом система продолжит нормальную работу. Если же на системном диске закончится свободное пространство, стабильную работу системы гарантировать сложно.
Усложним себе задачу. 🙂
Пробрасывать порты не будем. Новомодные инструменты типа Windows PowerShell использовать не будем потому, что PowerShell на некоторых системах просто нет.
Будем использовать командную строку, встроенный планировщик заданий и немного VBS-скриптов.
Ну… Это всё была преамбула, теперь наступил черёд “амбулы”.
“Амбула”.
1. Устанавливаем на подопечный компьютер Zabbix-агента:
Т.к. этот агент будет располагаться за NAT и не будет иметь возможности получать команды от сервера, то одержимое файла с настройками будет примерно таким:
LogFile=c:zabbixzabbix_agentd.log
Server=xx.yy.zz.yy
ServerActive=xx.yy.zz.yy
Hostname=hostname.mihanik.net
StartAgents=0
RefreshActiveChecks=120
EnableRemoteCommands=1
####### USER-DEFINED MONITORED PARAMETERS #######
####### Слежение за свойствами диска #######
# Для Windows
В самом конце я описал 3 (три) пользовательских параметра, которые мне хотелось бы отсылать на сервер:
%SystemDrive% – это, как вы догадались, имя системного диска Windows. 🙂
Чтобы автоматизировать процесс установки использую простенький скриптик: Zabbix_Install.bat
2. Размещаем в папке C:zabbixscripts простенький VBS-скрипт,
Он, собственно, и будет собирать нужные нам данные. Назвал я его так: c:zabbixscriptsWinDriveInfo.vbs
Вот небольшая инструкция по использованию скриптика:
– имя диска, свойства которого нужно получить
– свойство, которое нужно получить
trap – использовать zabbix_sender для отправки данных на zabbix-сервер,
notrap (по умолчанию) – не использовать zabbix_sender для отправки данных.
Важно. Т.к. скрипт я писал для себя, то в нём нет защиты от дурака и особо нет контроля передаваемых скрипту параметров. Кому нужно, можете сами дописать. 🙂
3. Перезапускаем службу zabbix-агента и проверяем, что наши пользовательские параметры работают правильно.
Т.е. последовательно выполняем 3 команды:
Вот пример корректной работы первой команды:
Видно, что у меня на диске 75,12% свободного места. 🙂
Если ошибок нет, продолжаем дальше…
4. Теперь идём в web-интерфейс вашего Zabbix-сервера и создаём новый шаблон с именем Win_SysDrv_Monitoring.
При создании элементов данных указываем, что получать мы их будем при помощи Zabbix траппера.
Приведу скриншоты уже настроенного шаблона.
Особо ленивые могут скачать готовый шаблон тут: Win_SysDrv_Monitoring.xml
5. Назначаем подопечному компьютеру созданный нами шаблон и нажимаем кнопку “обновить”.
6. Проверяем работу на текущем этапе.
Идём в Мониторинг, заходим в последние данные, выбираем нужный нам подопечный компьютер и видим… Ничего мы не видим. Данные не попадают на сервер.
Потому, что пользовательские параметры, описанные нами в конце конфигурационного файла, Zabbix-агент отправляет на сервер только по прямому запросу с этого самого сервера. А агент-то находится за NAT, т.е. сервер отдать команду агенту не может, ведь порт с сервера на агента мы тоже не пробросили…
Получается, что агент про параметры знает, но отправлять их на сервер не будет: “Команды не было!”. 🙂
Получается, что нам нужно как-то самим отправлять данные на сервер по расписанию.
7. Настраиваем отправку данных по расписанию.
Идём в управление подопечным компьютером и в планировщике заданий создаём новую папку с именем Zabbix.
В этой папке создаём три простых задачи, которые будут работать от имени пользователя “система”, и по нужному вам расписанию выполнять сбор данных, а потом эти данные будут отправлять на сервер
Задача Win_SysDrv_FreeSpace должна выполнять команду
C:WindowsSystem32cscript.exe C:zabbixscriptsWinDriveInfo.vbs %SystemDrive% FreeSpace TRAP
Задача Win_SysDrv_TotalSize должна выполнять команду
C:WindowsSystem32cscript.exe C:zabbixscriptsWinDriveInfo.vbs %systemdrive% TotalSize TRAP
Задача Win_SysDrv_PercentFreeSpace должна выполнять команду
C:WindowsSystem32cscript.exe C:zabbixscriptsWinDriveInfo.vbs %SystemDrive% PercentFreeSpace TRAP
Смысл каждой команды следующий: мы просим интерпретатор cscript запустить на выполнение скрипт WinDriveInfo.vbs с нужными нам параметрами.
ВАЖНО.
Если вы в качестве “Программы или сценария” укажете не интерпретатор cscript, а выберете непосредственно сам скрипт, то ваша задача стартует, но НЕ ЗАВЕРШИТСЯ!!
ТОЖЕ ВАЖНО.
Обязательно используйте 3 (третий) параметр скрипта TRAP. Именно благодаря этому параметру скрипт будет понимать, что полученные данные нужно не передавать Zabbix-агенту, а отправлять их сразу непосредственно на ваш Zabbix-сервер.
8. Окончательная проверка.
Идём в Мониторинг, заходим в последние данные, выбираем нужный нам подопечный компьютер и видим, что данные потекли…
Я взял данные с реального компьютера клиента:
Видно, что на системном диске мало места… И, да. На панели тут же отобразилось предупреждение.
Пы.Сы.
Я описал реальный работающий способ в виде “как есть”.
В нём есть некоторые недочёты, которые потом будут исправляться, но этот пример может кому-то помочь решать свои задачи.
УДАЧИ.
Аренда серверов.
Надёжные сервера с Pro-бегом
У ВАС В ОФИСЕ!
1С:Предприятие “в облаке”.
Безопасный доступ к своей 1С из офиса, командировки и т.п.!
IP-телефония в офис.
Источник
Zabbix + Iostat: мониторинг дисковой подсистемы
Zabbix + Iostat: мониторинг дисковой подсистемы.
Зачем?
Дисковая подсистема одна из важных подсистем сервера и от уровня нагрузки на дисковую подсистему зачастую зависит очень многое, например скорость отдачи контента или то как быстро будет отвечать база данных. Это в большей степени относится к почтовым или файловым серверам, серверам БД. Вобщем, показатели дисковой производительности отслеживать нужно. На основании графиков производительности дисковой подсистемы мы можем принять решение о необходимости наращивания мощностей задолго до того как петух клюнет. Да и вобще полезно поглядывать от релиза к релизу как работа разработчиков сказывается на уровне нагрузки.
Под катом, о мониторинге и о том как настроить.
Зависимости:
Мониторинг реализован через zabbix агента и две утилиты: awk и iostat (пакет sysstat). Если awk идет в дистрибутивах по умолчанию, то iostat требуется установить с пакетом sysstat (тут отдельное спасибо Sebastien Godard и сотоварищи).
Известные ограничения:
Для мониторинга нужен sysstat начиная с версии 9.1.2, т.к. там есть очень важное изменение: «Added r_await and w_await fields to iostat’s extended statistics». Так что следует быть внимательным, в некоторых дистрибутивах, например в CentOS немного «стабильная» и менее фичастая версия sysstat.
Если же отталкиваться от версии zabbix (2.0 или 2.2) то тут вопрос не принципиален, работает на обоих версиях. На 1.8 не заработает т.к. используется Low level discovery.
Где взять:
Итак, мониторинг состоит из файла конфигурации для агента, двух скриптов для сбора/получения данных и шаблон для веб-интерфейса. Все это доступно в репозитории на Github, поэтому любым доступным способом (git clone, wget, curl, etc. ) скачиваем их на машины которые хотим замониторить и переходим к следующему пункту.
Таким образом, проверяем с сервера мониторинга что iostat.conf подгрузился и отдает информацию, заодно смотрим что LLD работает. В качестве ответа вернется JSON с именами обнаруженных устройств. Если ответа не пришло, значит что-то сделали не так.
Также есть такой момент, что zabbix server не дожидается выполнения некоторых item’ов со стороны агентов (iostat.collect). Для этого следует увеличить значения Timeout.
Как настроить в web интейрфейс:
Теперь остался шаблон iostat-disk-utilization-template.xml. Через веб интерфейс импортируем его в раздел шаблонов и назначем на наш хост. Тут все просто. Теперь остается ждать примерно один час, такое время установлено в LLD правиле (тоже настраивается). Или можно поглядывать в Latest Data наблюдаемого хоста, в раздел Iostat. Как только там появились значения, можно перейти в раздел графиков и понаблюдать за первыми данными.
И напоследок тройка скринов графиков c локалхоста))):
Непосредственно данные в Latest Data:
Графики отзывчивости (Latency):
График утилизации и IOPS:
Вот и собственно и все, спасибо за внимание.
Ну и по традиции, пользуясь случаем передаю привет Федорову Сергею (Алексеевичу) 🙂
Источник
Мониторинг производительности дисковой подсистемы при помощи zabbix и block stat
Вряд ли кто-то будет спорить, что наблюдение за производительностью дисковой подсистемы — чуть ли не важнейшая задача для всех высоконагруженных систем хранения и баз данных. Я изначально столкнулся с этим давным-давно, еще когда приходилось наблюдать за PostgreSQL. В последнее время вернулся к этому вопросу в связи с необходимостью тестирования различных хранилищ.
Сегодня хочу поделиться с сообществом своим текущим опытом на реальном примере zabbix и его связке с block stat.
Небольшое отступление
Я являюсь архитектором баз данных и систем хранения очень высокой производительности и больших объемов. Поэтому часто сталкиваюсь с задачами оценки, как те или иные параметры настройки системы влияют на работу СХД, какие железные конфигурации СХД лучше.
Да есть куча утилит, которая позволит протестировать диски, например тот же fio. Но ничто не сравнится с тестированием реальной нагрузкой.
Когда то давным-давно для этих целей использовал iostat, лютый парсер к нему и gnuplot, и даже написал статейку habr.com/post/165855. Скажу я вам – это жутко неудобно.
Куда как удобнее натравить на систему zabbix и мониторить. А к zabbix можно прикрутить модную Grafana и мониторить красиво. Сразу скажу – выбор zabbix скорее исторический: «потому что он уже был».
Мониторинг дисков в zabbix
Справедливости ради скажу, что в zabbix уже есть встроенные ключи vfs.dev.*, но увы очень мало: скорость чтения и записи, объем.
Практика показывает что ключевые метрики по которым можно оценивать дисковую подсистему это:
Все эти метрики есть в iostat. Но как их положить в zabbix?
Легкое гугление приводит нас к различным парсерам iostat, в том числе и здесь.
Но мне по душе другой вариант, а именно парсинг вывода /sys/class/block/*/stat
Данные в zabbix мы будем собирать при помощи zabbix-agent, создав пользовательские ключи. Для этого в /etc/zabbix/zabbix_agentd.d нужно создать файлик userparameter_custom.vfs.conf примерно со следующим содержимым:
В этом файлике статистики всего 11 колонок, посмотреть их описание можно вот тут.
Колонка №10 это io_tics — количество миллисекунд затраченным устройством на ввод вывод. Как почти все параметры — эта цифра является аккумулятором и постоянно возрастает. Как же получить из них привычные метрики.
Утилизация дисковой подсистемы
Чтобы получить эту цифру — надо взять значение 10 колонки файла статистики и запомнить его в zabbix как скорость изменения в секунду, не забыв умножить на 0.1 так как значение в статистике в миллисекундах, а нам нужны проценты.
Аналогичным образом можно посчитать нагрузку записью/чтением (колонки write_ticks / read_ticks).
Время обработки запроса
Эта метрика аналогична r_svctime и w_svctime для записи и чтения соответственно. По сути это усредненное время обработки запросов за интервал между опросами.
Данная метрика чуть посложнее. Рассмотрим на примере запросов на запись.
Для этого нам понадобится создать три ключа:
Пропускная способность
Метрика показывающая с какой скоростью данные были записаны или прочитаны
Для этой метрики используются колонки №3 read sectors и №5 write sectors. Значение сколько было прочитано или записано «секторов». Точно так же в zabbix сохраняем как изменение за секунду.
Количество операций ввода-вывода в секунду
Эта метрика — те самые пресловутые IOPS
Самая простая метрика — мы ее уже записывали для подсчета svc time это значение колонок №5 write I/Os и №1 read I/Os также сохраненные как скорость в секунду.
Заключение
Этих метрик мне как правило достаточно для того чтобы я мог делать обоснованные выводы. Конечно это не все цифры которые можно получить из файла статистики. Например там есть и число текущих обрабатываемых запросов, и количество запросов которые были объеденены. Но полагаю при необходимости вам не составит труда добавить их по аналогии с описанным.
И да не претендую на авторство — сам метод был когда-то давно загуглен, но за давностью лет ссылки конечно затерялись.
Увы NDA заставляет кое-что подчистить из них, но надеюсь на работоспособность шаблона это не повлияет.
А в шапке скриншот из Grafana прикрученной поверх zabbix — демонстрирующий реальные цифры с одной из тестовых инсталляций.
Источник
Zabbix: LLD-мониторинг дисков без UserParameter и скриптов на агентах
В предыдущей статье я описал низкоуровневый мониторинг дисков для Windows-машин. Считаю, что статья получилась достаточно успешная. Поэтому пришло время ее фактически уничтожить. Ниже будет описан универсальный прием для Windows- и Linux-машин, для которых вообще не нужны скрипты и UserParameter’ы.
Идея простая: все необходимое от smartmontools Zabbix-сервер будет получать через внешнюю обработку и zabbix_get, парсить и передавать далее в зависимые элементы (появились в Zabbix 3.4). Такие образом не только сокращается количество обращений к наблюдаемому серверу, но и не расходуются его ресурсы, так как парсинг происходит на стороне Zabbix-сервера.
Одно ограничение на данный момент: мониторинг дисков только формата /dev/sd*. Формат /dev/csmi*,* (Intel Matrix RAID) не поддерживается ввиду того, что zabbix_get считает запятую вторым аргументом. Поправьте меня, если я ошибаюсь.
Что понадобится для реализации:
Настройка агента
Единственное, что заслуживает здесь внимания, это необходимость раскомментировать строку EnableRemoteCommands = 1, иначе агент не сможет принимать команды.
Smartmontools
Установка тривиальна и рассматриваться не будет, однако для Linux есть одна необходимость: для того, чтобы запуск проходил без sudo, необходимо установить бит SUID на файл smartctl. Для Ubuntu это — sudo chmod u+s /usr/sbin/smartctl.
Скрипт
В зависимости от вашего файла конфигурации zabbix_server.conf этот скрипт нужно положить в соответствующую директорию на Zabbix-сервер. По умолчанию для Ubuntu это — /usr/lib/zabbix/externalscripts. Не забывайте дать на файл права на выполнение — sudo chmod 775 /usr/lib/zabbix/externalscripts/smartctl.sh.
Шаблон
Ниже я постараюсь подробно описать что же происходит на каждом этапе.
Первый этап: обнаружение доступных дисков sd* с помощью внешней проверки smartctl.sh с ключами и discovery. В ответ сервер получает JSON с дисками, на которых активирована функция SMART. Диски без SMART’а или не sd* не выводятся.
Третий этап: Info и Attr разбираются на зависимые элементы с помощью предобработки регулярными выражениями. Это самая простая часть. Собственно, вам только останется подогнать под себя «регулярку».
Вот и все. Не нужно держать в голове что и куда положить, отключить ли политику выполнения скриптов PS, отслеживать ту же версию PS. А в случае необходимости все изменения производятся на самом Zabbix’е в веб-интерфейсе.
В итоге хотелось бы просто сказать спасибо Алексею alexvl и его команде за качественный продукт, который не перестает радовать новым функционалом. Особенно за предобработку. Жизнь с ней администратору станет гораздо легче.
Источник
Видео
ZABBIX — Мониторинг Windows FileSystem через FSNAME и FSTYPE
️Мониторинг Windows в Zabbix.
Zabbix — оповещения через сторонний SMTP
Zabbix — мониторинг: установка, настройка и первое использование
BASH-скрипт мониторинга свободного места на диске
7. Как мониторить VMware Esxi c Zabbix-Server ? / VMware ESXI / Zabbix / Monitoring
6. Как мониторить Windows в Zabbix 6.0 ? / Windows Server / Zabbix 6
Установка zabbix Agent на Windows Server
Zabbix — настройка мониторинга сервера
Создании шаблонов для мониторинг SNMP устройств
zabbix-disk-performance
Zabbix template for collecting IO statistics
With this template you can collect different disk statistics.
Installation
To install, copy userparameter_diskstats.conf
to /etc/zabbix/zabbix_agentd.d/userparameter_diskstats.conf
and lld-disks.py
to /usr/local/bin/lld-disks.py
.
Do not forget to mark it executable.
# diskstats user parameters config sudo mkdir -p /etc/zabbix/zabbix_agentd.d/ sudo wget https://raw.githubusercontent.com/grundic/zabbix-disk-performance/master/userparameter_diskstats.conf -O /etc/zabbix/zabbix_agentd.d/userparameter_diskstats.conf # low level discovery script sudo wget https://raw.githubusercontent.com/grundic/zabbix-disk-performance/master/lld-disks.py -O /usr/local/bin/lld-disks.py sudo chmod +x /usr/local/bin/lld-disks.py
userparameter_diskstats.conf
is user parameters for Zabbix.
lld-disks.py
is low level discovery script for enumerating disks of your system.
After that restart zabbix-agent
sudo service zabbix-agent restart
Go to Zabbix’s web interface, Configuration->Templates and import Template Disk Performance.xml
.
After that you should be able to monitor disk activity for all your disks.
Please note, that items and graphs are created for each disk/partition individually using discovery script, so do not expect to
find them under usual configuration — they would be in Discovery rules
section:
Low level discovery will list your RAID devices, and LVM volumes, but LVM
volumes will be mapped with their device-mapper ID, not the pretty names.
Using without User Parameters
Zabbix have standard parameters for monitoring disk io: vfs.dev.read
and vfs.dev.write
with several types:
- sectors
- operations
- sps
- ops
Template have this values configured, but disabled by default.
Testing
To test that everything work use zabbix_get
(from some time this is in it’s own package, so do apt-get/yum install zabbix-get
):
# view result of low level discovery zabbix_get -s 127.0.0.1 -k "custom.vfs.discover_disks" # view statistics for 'sda' disk zabbix_get -s 127.0.0.1 -k "custom.vfs.dev.write.sectors[sda]"