Введение
Ранее я написал подробную статью по установке и настройке Zabbix 5, где в том числе рассказал своими словами обо всех основных нововведениях. Настоятельно рекомендую с ними ознакомиться, прежде чем обновляться. Обязательно сначала прочитайте всю статью, только потом начинайте обновление. По ходу дела будут важные замечания.
Второй момент. В этой версии очень много изменений, как в настройках, так и в интерфейсе. Обновлять без подготовки не рекомендую. Если у вас несколько серверов, начните с самого простого. Если же только один, то настоятельно рекомендую сделать его копию и проверить обновление на ней.
Еще один момент, который я упускал, когда обновлялся со старых версий Zabbix. В новых версиях часто обновляются стандартные шаблоны, но вы их не увидите при обновлении. У вас останутся работать старые версии. Новые нужно вручную переносить из свежих установок и подключать к хостам.
С одной стороны это плюс, так как шаблоны зачастую меняются очень сильно. Нужен ручной контроль. А с другой стороны неудобно вручную обновлять все шаблоны, которые еще и зависимости свои имеют. Рассмотрю все эти моменты по ходу дела. Приступаем к обновлению сервера мониторинг Zabbix версии 4.4 до 5.0.
Важный нюанс. Минимальные системные требования к версии php для Zabbix 5 — 7.2 Так что прежде чем обновлять сам сервер мониторинга, убедитесь, что у вас стоит подходящая версия php.
Ребут и агента нет
Бывают случаи, когда агент был успешно установлен и настроен на хосте, мониторинг работает как надо. НО! При очередном запланированном перезапуске сервера (хоста) Zabbix-агент не смог запуститься.
Причин тому может быть несколько:
- Агент запускается от доменной учетной записи, но на момент старта сервера связи с доменом не оказалось.
- В момент запуска агент пытался запуститься, когда еще не “поднялся” доступ к сети.
При этом в файле лога агента может не быть какой-либо полезной информации, но она есть в системных журналах ОС. Чаще всего это поведение встречал в ОС Windows.
Решение достаточно простое: нужно установить для службы Windows режим запуска “Автоматически (отложенный запуск)”. В большинстве случаев проблема будет решена.
Быстро и просто!
Особые проблемы со счетчиками
Особой проблемой, которая встречается не очень часто, бывают проблемы со счетчиками производительности Windows. После настройки мониторинга на сервере можно увидеть для хоста элементы данных со статусом “Не поддерживается”. При этом все они получаются через показатели производительности Windows. Обратившись к логам агента Zabbix можно увидеть следующее.
При этом для хоста у элементов данных будет такая ошибка.
Проблема в некорректном списке доступных счетчиков производительности Windows на хосте с агентом, то есть на машине, которую мы собираемся мониторить. Можно проверить наличие нужного счетчика через “Монитор производительности” (perfmon.exe) или через ветку реестра:
Если нужного счетчика нет, то можно попытаться перестроить все счетчики ОС командой:
В большинстве случаев это помогает. Если остаются проблемы со счетчиками производительности сторонних приложений, то нужно изучить документацию по этим счетчикам. Например, для Microsoft SQL Server можно отдельно восстановить счетчики из поставляемых настроек. Подробнее можно узнать здесь.
Счетчики производительности для мониторинга Windows — отличный инструмент. И его, конечно же, нужно использовать.
Настройка повторяющегося оповещения
После того, как убедились, что тестовый триггер работает, настроим для него повторяющееся уведомление. Для этого идем в раздел Настройка -> Действия и нажимаем Создать действие.
Во вкладке Действие указываете имя и добавляете тестовый триггер.
Дальше переходим в раздел Операции и указываем длительность шага равное 1 минуте. Добавляем шаг с параметром 1 — 0 и указываем необходимое действие. В примере я просто буду отправлять всем администраторам оповещение на почту.
Сохраняйте настроенное действие и ждите срабатывания триггера. Вы должны получать оповещение на почту каждую минуту до тех пор, пока триггер не будет отключен
Обращаю внимание, что вы получите оповещение и от стандартного правила, которое шлет один раз и от нового, которое повторяющееся. Чтобы все было красиво и удобно, необходимо отключать стандартное оповещение и создавать свои с определенными правилами в зависимости от типа триггера
Подготовка тестового триггера
Я в своих статьях по настройке заббикса часто использую в качестве примера триггер, который срабатывает, когда залогиненных пользователей в системе становится больше 2-х. Он основывается на стандартном итеме шаблона Template OS Linux — Number of logged in users.
Триггер срабатывает, когда каждое из двух последних значения залогиненных в систему пользователей больше двух (count(#2,1,»gt»)}=2), выключается, когда последнее значение залогиненных пользователей меньше двух (last(#1)}<2). То есть, когда мы заходим двумя пользователями на сервер, через 2 минуты срабатывает триггер. Когда остается только один пользователь или вообще ни одного, через минуту триггер выключается.
Прежде чем двигаться дальше, рекомендую проверить работу триггера и оповещений и убедиться в том, что все работает правильно. Далее я настрою оповещения, которые будут повторяться каждую минуту до тех пор, пока залогиненных юзеров не станет меньше двух.
Проверка отложенных уведомлений
Для проверки отложенного уведомления, достаточно дождаться срабатывания какого-нибудь триггера. Вот мои примеры, когда оповещение не было отправлено вовсе, так как триггер работал менее 5 минут. И рядом же пример отправки уведомления только через 5 минут после срабатывания триггера.
Последнее событие длилось 1 минуту. Во время бэкапа сайта сработал триггер на нехватку места. После завершения бэкапа, скрипт подчистил за собой следы и места стало достаточно. Все случилось в течении 1 минуты, так что оповещения я вообще не получил.
Второе событие длилось 6 минут. Оповещение было отправлено только через 5 минут после срабатывания триггера.
Установка обновления zabbix 4.4 до 5.0
Centos 8
Устанавливаем само обновление zabbix на сервер Centos следующей командой:
Это список пакетов заббикса для общего случая. Если у вас установлено что-то еще, лучше обновить все сразу. Посмотреть список установленных пакетов zabbix можно командой:
В приведенном примере есть еще пакеты zabbix-get и zabbix-sender. Обновляем все сразу:
Centos 7
В Centos 7 обновить Zabbix с 4-й вертки на 5-ю может оказать не такой простой задачей. Связано это с тем, что необходима версия php 7.2, в ее в базовых репозиториях Centos 7 нет. Необходимо подключать репозиторий centos-release-scl и ставить пакеты из него. Но просто так взять и поставить не получится, будет конфликт с текущими версиями пакетов. Так что нужно аккуратно что-то удалить, а что-то добавить. Действуем аккуратно и внимательно.
Удаляем старые пакеты, которые будут заменены при обновлении:
# yum remove zabbix-web-*
Подключаем репозиторий centos-release-scl:
# yum install centos-release-scl
Редактируем файл /etc/yum.repos.d/zabbix.repo, разрешая обновляться пакетам из zabbix-frontend. Не забудьте проверить, что у вас подключился репозиторий от 5-й версии.
name=Zabbix Official Repository frontend - $basearchbaseurl=http://repo.zabbix.com/zabbix/5.0/rhel/7/$basearch/frontendenabled=1gpgcheck=1gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591
Устанавливаем новые пакеты:
# yum install zabbix-web-mysql-scl zabbix-apache-conf-scl
Обновляем существующие:
# yum update zabbix-*
Теперь убедитесь, что у вас активирован новый конфиг zabbix для apache. У вас должен быть файл /etc/httpd/conf.d/zabbix.conf, а в нем следующая строка:
SetHandler "proxy:unix:/var/opt/rh/rh-php72/run/php-fpm/zabbix.sock|fcgi://localhost"
Она отвечает за использования новой версии php 7.2 из пакета php-fpm. Перезапускаем все службы:
# systemctl restart zabbix-server httpd# systemctl enable --now rh-php72-php-fpm
После этого у вас должно корректно пройти обновление zabbix на 5-ю версию в Centos 7.
Debian / Ubuntu
Устанавливаем само обновление zabbix на сервер с Debian или Ubuntu следующей командой:
Дальше инструкция общая для всех систем. После завершения обновления, запускаем сервер:
В момент запуска произойдет обновление базы данных. Для маленькой базы (1-2 гб) это не займет много времени. Вы можете даже не заметить процесса. Если база больше, то надо подождать, пока не закончится обновление. Следить за ним можно с помощью просмотра лог файла zabbix сервера.
После завершения обновления базы, сервер запустится. После этого можно запустить и агент.
В логах агента и сервера можно посмотреть версию запущенных сервисов.
Теперь можно идти в веб интерфейс и смотреть на обновленную версию zabbix server. Перед этим почистите кэш браузера и удалите куки от страницы заббикса. Если этого не сделать, то могут быть проблемы и ошибки, с чем я не раз сталкивался. Если у вас в качестве веб сервера используется nginx, не забудьте поменять владельца директории /etc/zabbix/web на nginx, в том случае, если веб сервер работает от него. После обновления он будет принадлежать apache, а web интерфейс не заработает.
Можете лицезреть обновленную версию web интерфейса.
Сначала провел обновление на небольшом сервере. У меня весь процесс прошел без ошибок и накладок. Новый интерфейс сразу заработал.
Немного опечатались
Иногда бывает так, что порты и все доступы настроены, агент установлен, ошибок в логах нет, но метрики не приходят или приходят не полностью. В самом Zabbix хост “горит зеленым” и непонятно, что вообще происходит.
Можно потратить много времени на разбор ситуации, а причина окажется очень проста — ошибка в файле конфигурации из-за “копипасты”. То есть конфигурацию скопировали, но в файле не поменяли параметр “Hostname”. В итоге сервер Zabbix говорит, что агент доступен, но сам агент присылает данные для другого хоста. Вот так выглядит список дисков для проблемной машины. Нет никакой информации о дисках, но при этом общие показатели агент все же передал.
Как только мы исправим в файле конфигурации параметр “Hostname” на нужный (в нашем случае это “SRV-SQL-01-VM”), то картина сразу же изменится. В списке появятся все диски сервера.
Данные могут появиться не сразу, т.к. правила обнаружения выполняются не так часто, как получение обычных метрик, но Вы можете запустить их вручную в настройках хоста.
Копипаст — зло! Будьте осторожны!
Практические задачи
Задача 1
Заменить вычисляемый элемент данных предобработкой.
Условие: получаем с датчика температуру в градусах по Фаренгейту для хранения в градусах по Цельсию.
Раньше мы создали бы элемент данных, который собирает температуру в градусах по Фаренгейту. После этого — еще один элемент данных (вычисляемый), который по формуле преобразовывал бы градусы по Фаренгейту в градусы по Цельсию.
Проблемы:
- Необходимо дублировать элементы данных и хранить все значения в базе.
- Необходимо согласовать интервалы для «родительского» элемента данных, который вычисляется и используется в формуле, и для вычисляемого элемента данных. В противном случае вычисляемый элемент данных может перейти в неподдерживаемое состояние или посчитать предыдущее значение, что скажется на надежности результатов мониторинга.
Одним из решений был отказ от гибких интервалов проверок в пользу фиксированных интервалов, чтобы гарантированно вычислять вычисляемый элемент данных после элемента данных, получающего данные (в нашем случае — температура в градусах по Фаренгейту).
Но если, например, шаблон мы используем для проверки большого количества устройств, и проверка выполняется раз в 30 секунд, 29 секунд Zabbix «халтурит», а в последнюю секунду начинает проверки и вычисления. Это приводит к созданию очереди и влияет на производительность. Поэтому рекомендуется использовать фиксированные интервалы, только если это действительно необходимо.
В данной задаче оптимальное решение — предобработка из одной строки на JavaScript, которая конвертирует градусы по Фаренгейту в градусы по Цельсию:
Это быстро и просто, не нужно создавать лишних элементов данных и хранить по ним историю, а также можно использовать для проверок гибкие интервалы.
Но, если в гипотетической ситуации необходимо полученный элемент данных сложить, например, с какой-либо константой, определенной в макросе, необходимо учитывать, что параметр value раскрывается в строку. При операции сложения строк, две строки просто объединяются в одну.
Для получения результата математического действия, необходимо привести типы полученных значений в числовой формат. Для этого можно использовать функцию parseInt(), которая выдает целое число, функцию parseFloat(), которая выдает десятичную дробь, или функцию number, которая выдает целое число или десятичную дробь.
Задача 2
Получить время в секундах до окончания сертификата.
Условие: некий сервис выдает дату окончания сертификата в формате «Feb 12 12:33:56 2022 GMT».
В ECMAScript5 Date.parse() принимает дату в формате ISO 8601 (YYYY-MM-DDTHH:mm:ss.sssZ). Необходимо привести к нему строку в формате MMM DD YYYY HH:mm:ss ZZ
Проблема: значение месяца выражено текстом, а не числом. Данные в таком формате не принимаются Duktape.
Пример решения:
-
В первую очередь объявляется переменная, которая принимает значение (весь скрипт — объявление переменных, которые перечислены через запятую).
-
В первой строке мы получаем дату в параметре value и разделяем ее пробелами методом split. Таким образом, мы получаем массив, где каждому элементу массива, начиная с индекса 0, соответствует один элемент даты до и после пробела. split(0) — месяц, split(1) — число, split(2) — строка с временем и т. д. После этого к каждому элементу даты можно обращаться по индексу в массиве.
Данные в полученном формате — количество секунд с 1970 года до какого-то момента в будущем. Использовать данные в полученном формате в триггерах практически невозможно, потому что Zabbix позволяет оперировать только макросами {Date} и {Time}, которые возвращают дату и время в понятном для пользователя формате.
В триггере можно указать выражение ‘last<‘ и набор цифр, который соответствует количеству секунд в периоде, на которое необходимо отреагировать, например, в неделях. Таким образом, триггер будет оповещать о том, что срок действия сертификата заканчивается через неделю.
ПРИМЕЧАНИЕ
Обратите внимание на использование parseInt() в функции return, чтобы сконвертировать дробное число, полученное в результате деления миллисекунд, в целое число. Также можно использовать parseFloat() и хранить дробные данные
ZABBIX – Создание способа оповещения.
Как видите не всегда для настройки используется сочетание “Настройка” – > “Узлы сети”, сегодняшний случай – исключение :). Давайте двигаться дальше. На появившейся странице в правом верхнем углу нажимаем на кнопку “Создать способ оповещения”, после чего попадаем на страницу создания.
Как всегда пробежимся по предлагаемым полям:
- Имя – видимо имя способа оповещения
- Тип – способ доставки оповещения
- SMTP сервер – почтовый сервер, который необходим для отправки оповещения.
- SMTP email – адресат, от которого заббикс будет высылать оповещение.
Остальное можно оставить без изменений. (Но опять же зависит от ваших задач, не забываем, что мы в статьях стараемся как можно быстрее развернуть мониторинг). Нажимаем кнопку “Добавить”, после чего попадаем на страницу способов оповещений, где уже имеется наш способ, который мы только что добавили.