Zabbix Мониторинг динамических бэкапов
Думаю, многие сталкивались с проблемой, когда в одну папку делается много копий бэкапов. При этом имя бэкапа не постоянное, в котором например, есть дата и время или порядковый номер.
Встает вопрос как мониторить актуальное состояние?
Предлагаю свое решение по реализации данной задачи с использованием Zabbix и небольшого скрипта на Python.
Опишу полный цикл своих бэкапов.
1. MSSQL ежедневно делает бэкап базы с перезаписью в одно и тоже место с одним и тем же именем:
Данный файл мониторится просто.
в Zabbix создаем Элемент данных
И на основе него создается тригер который проверяет не прошли ли сутки(86400сек.) с момента последнего бэкапа.
2. Далее Cobian сжимает и переносит данный бэкап в несколько мест. В хранилище на том же сервере, плюс кладет в сетевое хранилище, где циклично обновляет 14 копий.
В которых лежат файлы:
Соответственно имена файлов в каждой из директорий получаются однотипные, но динамические.
Казалось бы можно мониторить дату изменения директории с помощью того же элемента данных что и выше. Но не все так просто. У меня это не заработало. точнее заработало, но не правильно и плохо, дата изменения папки не обновлялась пока в нее не войдешь в ручную, хотя файл бэкапа был с правильной датой. Возможно были где то глюки винды. К тому же это совсем не захотело работать с сетевым путем (\\NAS\backup\ )
По этому собственно и родился данный скрипт:
Передавая путь к директории с бэкапами данному скрипту он ищет самый новый файл в папке, оценивает размер его и как он давно был создан.
В данной примере бэкап должен быть больше 2MB и он не должен быть старше суток.
Если все ок скрипт передаст в заббикс 0 если что то не так то вернется 1.
В качестве аргумента скрипту передать можно как локальный путь так и сетевой. все прекрасно работает. Главное что бы был доступ.
Как это выглядит в заббиксе.
В первую очередь создаем юзер параметр.
Идем в zabbix_agent.conf и добавляем строку:
Собственно здесь указывается путь к компилятору Python, далее путь до скрипта и параметр который будет взят из ключа check_backup[*]
В заббиксе Создаем элемент данных
на основании данного элемента создаем тригер который проверяет что именно передал нам скрипт. если это не 0 значит это проблема.
UPD: Добавил в качестве параметров уникальный размер для каждого бэкапа
В конфиге заббикса соответственно вызывается вот так
в элементах данных соответственно через запятую указывается размер в байтах.
Вот собственно и все. Спасибо за внимание.
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.
Мониторинг размера бэкапа в Zabbix
Ранее я уже рассказывал, как мониторить бэкапы с помощью zabbix. Захотелось собирать информацию о размере бэкапа, чтобы смотреть тренды по его увеличению или уменьшению. Немного пораскинул мозгами и придумал решение задачи по мониторингу размера бэкапов с помощью уже привычного инструмента UserParameter.
Введение
Я уже много раз использовал внешние скрипты и UserParameter для мониторинга в zabbix. Не буду подробно на этом останавливаться. Приведу список своих материалов по этой теме:
Использовать будем такой же подход. У нас будет 2 скрипта. Первый будет собирать информацию о размерах папок с файлами, второй будет передавать сформированные данные в заббикс. Делать все будем раз в сутки, чаще нет смысла, так как у меня бэкапы выполняются с суточным интервалом. Сами бэкапы представляют из себя не отдельные файлы-архивы, а папки. Настроено все примерно так же, как в статье про настройку backup с помощью rsync.
Если у вас еще нет своего сервера для мониторинга, то рекомендую материалы на эту тему. Для тех, кто предпочитает систему CentOS:
То же самое на Debian 10, если предпочитаете его:
Скрипты по сбору информации о размере бэкапов
Первый скрипт будет проверять размер каталогов и записывать результат в текстовый файл. Сначала я собирал размер в байтах, потом решил скриптом преобразовывать в гигабайты, но через некоторое время нашел способ в заббиксе преобразовывать размер из байтов в гигабайты и снова стал в заббикс передавать только байты. Так оказалось удобнее всего. Создаем папку для скриптов и кладем туда сам скрипт:
Если у вас несколько папок с бэкапами, добавляете их все в скрипт. Можно автоматизировать этот процесс, задать переменные с названиями папок с бэкапами и в цикле их перебирать, но у меня это не получилось, так как пути сильно разные. Пришлось все в ручную добавлять. Я привожу пример с одной папкой. Остальные по аналогии добавляете, не забывая изменять имена переменных, в которые передается размер директории.
Результатом работы скрипта будет файл следующего содержания:
Необходимо добавить этот скрипт в крон и выполнять раз в сутки. Находите конфиг крона в вашей системе и добавляете туда:
Время выбираете на свое усмотрение. В данном случае у меня отдельный сервер для бэкапов, его можно днем напрячь, когда он простаивает.
Дальше рисуем скрипт, который будет передавать данные в заббикс:
Проверяем его работу следующим образом:
На выходе просто цифра с размером, которая уходит на сервер заббикса. То, что нужно. Важно не забыть один момент, иначе ничего не зааработает. Скрипту нужно назначить владельца zabbix, чтобы агент мог его запускать:
Если этого не сделать, получите ошибку в логе агента:
Настраиваем zabbix агент
Делаем все как обычно. Идем в папку /etc/zabbix/zabbix_agentd.conf.d и создаем файл с пользовательскими параметрами:
Сохраняем файл. Перезапускаем агента и проверяем в консоли, что улетит на сервер:
Все в порядке, агент настроили. Осталось добавить новый итем на сервер.
Добавляем новый итем на сервер мониторинга zabbix
Кратко расскажу, что делать на сервере. Раньше я уже неоднократно рассматривал этот момент, поэтому не буду на нем подробно останавливаться. Больше информации можете получить в предыдущих статьях, которые я привел в самом начале. Идем в веб интерфейс. Выбираем хост, на котором мы только что настраивали агент, заходим в список итемов и добавляем новый:
Name | Произвольное имя итема. |
Key | Название ключа, должно быть точно таким же, как в UserParameter в агенте. |
Update interval | Время обновления, в данном случае раз в минуту для отладки, потом рекомендую ставить раз в сутки. |
Units | Единица измерения, в данном случае байты. |
Use custom multiplier | Пользовательский множитель для корректного перевода в гигабайты |
Сохраняем новый итем и ждем поступления данных. В случае указания большого интервала обновления, к примеру, раз в сутки, я не знаю, когда заббикс первый раз проведет опрос. Будет здорово, если кто-нибудь подскажет. Меня всегда интересовал этот момент. Во время отладки я ставлю маленький интервал обновления, например минуту или две. После того, как убеждаюсь, что все работает корректно, изменяют интервал на необходимый.
Смотреть результат следует, как обычно, в Latest data. Там же можно и график посмотреть, когда накопятся данные для него. Для более наглядных и красивых графиков, необходимо будет их вручную создать в конструкторе графиков конкретного хоста. Лично мне достатчно информации из последних данных.
Заключение
С помощью внешних скриптов настроили еще один тип мониторинга для бэкапов. Если у кого-то есть мысли на тему того, что нужно мониторить у резервных копий, высказывайте пожелания, попробую реализовать. Я очень внимательно отношусь к бэкапам и помимо автоматических проверок стараюсь время от времени заходить и глазами проверять все ли в порядке, на месте ли данные и можно ли их восстановить.
На своем опыте убедился в необходимости таких проверок. Приходилось сталкиваться с отказами различных систем, в том числе и коммерческих. Сервис может тупо зависнуть или выключиться, а ты надеешься на оповещения об ошибках, а раз не получаешь их, думаешь, что все в порядке, а на самом деле у тебя нет резервных копий. Еще вариант, с которым приходилось сталкиваться, это когда вроде все в порядке, никаких ошибок нет, а во время восстановления получаешь ошибку чтения данных.
Было бы неплохо автоматизировать восстановление данных и сравнение их с оригиналом для стопроцентной уверенности в том, что у тебя живые копии. Но для этого нужны дополнительные ресурсы.
Мониторинг дискового пространства активным Zabbix-агентом. OLD.
Замечание!
Это немного устаревшая статья. Описанный в ней способ сейчас мною не используется. Использую более простой способ, который описан тут: Мониторинг дискового пространства активным Zabbix-агентом
Лирическое отступление.
В Zabbix, как многие помнят, агент, устанавливаемый на подопечный компьютер, может работать в двух режимах: активном и пассивном.
При работе в активном режиме агент сам собирает какие-то данные с компьютера и затем с заданной периодичностью отсылает их на сервер. В пассивном режиме агент выдает минимальный набор данных самостоятельно, а все остальные данные исключительно по запросу с сервера.
При использовании агента в пассивном режиме прямо “из коробки” доступно много “вкусных плюшек”: слежение за нагрузкой сетевых адаптеров, наблюдение за дисковой подсистемой, слежение за свободным местом на всех дисках, слежение за системными журналами и прочее…
А что делать, если агент находится за NAT? Понятно, что без проброса портов сервер не может отправить команду агенту напрямую, и работа агента в этом случае возможна только в активном режиме… Но при этом очень хочется иметь данные, например, о количестве свободного места на дисках!
Всё? Приплыли? Ничуть!
Лирическое наступление.
Итак, ставим задачу: следить за системным диском (%systemdrive%) подопечного компьютера, а именно за количеством свободного места на нём.
Следить можно за всеми дисками, но наиболее важно, по-моему, иметь данные о количестве свободного места как раз на системном диске. Если на каком-то другом диске закончится свободное место, пользователь сам это заметит и сообщит о такой неприятности, при этом система продолжит нормальную работу. Если же на системном диске закончится свободное пространство, стабильную работу системы гарантировать сложно.
Усложним себе задачу. 🙂
Пробрасывать порты не будем. Новомодные инструменты типа Windows PowerShell использовать не будем потому, что PowerShell на некоторых системах просто нет.
Будем использовать командную строку, встроенный планировщик заданий и немного VBS-скриптов.
Ну… Это всё была преамбула, теперь наступил черёд “амбулы”.
“Амбула”.
1. Устанавливаем на подопечный компьютер Zabbix-агента:
- Путь установки программы: C:\zabbix
- Папку с самописными скриптами располагаем тут: C:\zabbix\scripts
- Файл с настройками тут: C:\zabbix\zabbix_agentd.win.conf
Т.к. этот агент будет располагаться за NAT и не будет иметь возможности получать команды от сервера, то одержимое файла с настройками будет примерно таким:
LogFile=c:\zabbix\zabbix_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:\Windows\System32\cscript.exe C:\zabbix\scripts\WinDriveInfo.vbs %SystemDrive% PercentFreeSpace
# Проверить
# C:\zabbix\zabbix_agentd.exe -c c:\zabbix\zabbix_agentd.win.conf -t Win_SysDrv_PercentFreeSpace
### Общий размер системного диска ###
UserParameter=Win_SysDrv_TotalSize, C:\Windows\System32\cscript.exe C:\zabbix\scripts\WinDriveInfo.vbs %SystemDrive% TotalSize
# Проверить
# C:\zabbix\zabbix_agentd.exe -c c:\zabbix\zabbix_agentd.win.conf -t Win_SysDrv_TotalSize
### Размер свободного пространства на системном диске ###
UserParameter=Win_SysDrv_FreeSpace, C:\Windows\System32\cscript.exe C:\zabbix\scripts\WinDriveInfo.vbs %SystemDrive% FreeSpace
# Проверить
# C:\zabbix\zabbix_agentd.exe -c c:\zabbix\zabbix_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:\zabbix\scripts простенький VBS-скрипт,
Он, собственно, и будет собирать нужные нам данные. Назвал я его так: c:\zabbix\scripts\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:\zabbix\zabbix_agentd.exe -c c:\zabbix\zabbix_agentd.win.conf -t Win_SysDrv_PercentFreeSpace
- C:\zabbix\zabbix_agentd.exe -c c:\zabbix\zabbix_agentd.win.conf -t Win_SysDrv_TotalSize
- C:\zabbix\zabbix_agentd.exe -c c:\zabbix\zabbix_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:\Windows\System32\cscript.exe C:\zabbix\scripts\WinDriveInfo.vbs %SystemDrive% FreeSpace TRAP
Задача Win_SysDrv_TotalSize должна выполнять команду
C:\Windows\System32\cscript.exe C:\zabbix\scripts\WinDriveInfo.vbs %systemdrive% TotalSize TRAP
Задача Win_SysDrv_PercentFreeSpace должна выполнять команду
C:\Windows\System32\cscript.exe C:\zabbix\scripts\WinDriveInfo.vbs %SystemDrive% PercentFreeSpace TRAP
Смысл каждой команды следующий: мы просим интерпретатор cscript запустить на выполнение скрипт WinDriveInfo.vbs с нужными нам параметрами.
ВАЖНО.
Если вы в качестве “Программы или сценария” укажете не интерпретатор cscript, а выберете непосредственно сам скрипт, то ваша задача стартует, но НЕ ЗАВЕРШИТСЯ!!
Причина очень проста: по умолчанию в Windows используется интерпретатор wscript. а он команду .Echo выводит не в консоль, как нам нужно, а выбрасывает MsgBox c кнопкой, которую, конечно же, будет некому нажать…
ТОЖЕ ВАЖНО.
Обязательно используйте 3 (третий) параметр скрипта TRAP. Именно благодаря этому параметру скрипт будет понимать, что полученные данные нужно не передавать Zabbix-агенту, а отправлять их сразу непосредственно на ваш Zabbix-сервер.
8. Окончательная проверка.
Идём в Мониторинг, заходим в последние данные, выбираем нужный нам подопечный компьютер и видим, что данные потекли…
Я взял данные с реального компьютера клиента:
Видно, что на системном диске мало места… И, да. На панели тут же отобразилось предупреждение.
Пы.Сы.
Я описал реальный работающий способ в виде “как есть”.
В нём есть некоторые недочёты, которые потом будут исправляться, но этот пример может кому-то помочь решать свои задачи.
УДАЧИ.
Аренда серверов.
Надёжные сервера с Pro-бегом
У ВАС В ОФИСЕ!
1С:Предприятие “в облаке”.
Безопасный доступ к своей 1С из офиса, командировки и т.п.!
IP-телефония в офис.
IP-телефония давно перестала быть роскошью в офисах.
Хотите себе в офис цифровую АТС — обращайтесь. !