Всем привет! Мы делаем проекты по Zabbix, накопили большую экспертизу и решили сделать переводы нескольких статей, которые нам показались интересными и полезными. Наверняка, будут полезны и вам. Также своим опытом делимся в телеграм-канале zabbix_ru, где вы можете найти полезные материалы и записи наших вебинаров, опубликованных на нашем ютуб-канале (прим. переводчика). Ниже ссылки на предыдущие статьи из цикла.
Миграция с MySQL на PostgreSQL
SELinux: интеграция с Zabbix и другими инструментами
Защита от ложных срабатываний триггеров в Zabbix с использованием функций min/max/avg
Zabbix – автоматизация управления пользователями (JIT)
Двухфакторная аутентификация (2FA) в Zabbix 7.0
Как настроить прием SNMP-трапов в Zabbix
Установка и базовое использование Item Browser в Zabbix
В этой статье показано как легко активировать глобальные скрипты интерфейса в Zabbix и демонстрируются три примера.
Выбор операционной системы
Статья содержит инструкции для платформ RHEL версии 9, где вам нужно только при необходимости настроить репозитории.
Включение глобальных скриптов
Начиная с версии Zabbix 7.0, глобальные скрипты внешнего интерфейса по умолчанию отключены из соображений безопасности. Это ограничение введено в целях повышения безопасности сервера Zabbix. Однако глобальные скрипты могут значительно упростить управление, поэтому, если вы хотите воспользоваться их преимуществами, необходимо включить их явным образом.
По умолчанию в конфигурации сервера Zabbix установлено значение EnableGlobalScripts=0, что означает, что эта функция отключена. При попытке запустить скрипт без этой функции возникнет следующая ошибка:
«Global script execution on Zabbix server is disabled by server configuration».
Вы также можете проверить, включены ли глобальные скрипты, непосредственно в графическом интерфейсе в разделе «Reports → System information», в поле «Global scripts on Zabbix server» . Если эта настройка уже включена, соответствующая строка не появится в выводе.

Чтобы включить глобальные скрипты, выполните следующие действия:
Отредактируйте файл конфигурации сервера Zabbix с помощью следующей команды:
nano /etc/zabbix/zabbix_server.confВ файле найдите строку со значением EnableGlobalScripts=0и измените ее на:
EnableGlobalScripts=1Это изменение позволяет выполнять глобальные скрипты.
Перезапустите службу сервера Zabbix:
systemctl restart zabbix-serverПосле этого шага вы можете начать использовать глобальные скрипты в Zabbix.
Включение предопределенных скриптов интерфейса (nmap и traceroute)
Zabbix по умолчанию включает несколько полезных скриптов для внешнего интерфейса. Однако они часто не работают сразу из-за отсутствия системных пакетов или недостаточных прав. Мы покажем вам, как включить два из этих предустановленных скриптов nmap и traceroute.
Установка необходимых пакетов
На Zabbix сервере или прокси установите необходимые пакеты:
dnf install nmap tracerouteНастройка правил sudo
Чтобы разрешить Zabbix выполнять команды с повышенными привилегиями (в данном случае для инструмента nmap ), создайте специальный файл sudoers, например /etc/sudoers.d/zabbix_scripts, и добавьте в него следующее содержимое:
nano /etc/sudoers.d/zabbix_scriptsИ вставьте следующее содержимое:
zabbix ALL=(ALL) NOPASSWD: /usr/bin/nmapЭто правило позволяет zabbix пользователю выполнять команду nmap без запроса пароля, обеспечивая корректную работу скрипта в интерфейсе frontend.
Правила в файле sudoers определяют, какие команды пользователи могут выполнять с правами root без аутентификации. Дополнительные команды можно добавлять в отдельных строках аналогичным образом.
Сохраните файл и проверьте синтаксис с помощью следующей команд��:
visudo -cf /etc/sudoers.d/zabbix_scripts
Если проверка завершится без ошибок, вы сможете использовать скрипты интерфейса nmap и traceroute непосредственно из интерфейса Zabbix.
Пример 1 — отображение файла конфигурации агента Zabbix
Теперь мы покажем, как создать пользовательский скрипт в графическом интерфейсе Zabbix, который извлекает конфигурацию агента Zabbix, различая его версии. Для начала необходимо включить выполнение скрипта на стороне агента Zabbix.
Включение скриптов в конфигурации агента Zabbix (агент и агент 2)
На удаленном хосте измените конфигурацию агента Zabbix, используя соответствующую команду в зависимости от типа агента:
Для классического агента Zabbix:
nano /etc/zabbix/zabbix_agentd.confДля Zabbix агента 2:
nano /etc/zabbix/zabbix_agent2.confВключение DenyKey
Если эта опция еще не включена, вам необходимо сначала ее активировать.
В файле конфигурации найдите и раскомментируйте строку DenyKey:
DenyKey=system.run[*]Перед правилом DenyKey вставьте правило AllowKey, которое разрешает выполнение только определенного скрипта (никогда не используйте общее правило с *, так как это может представлять угрозу безопасности):
AllowKey=system.run[pgrep -a 'zabbix_agent2' >/dev/null && { echo "==== Zabbix Agent 2 Configuration ===="; grep -Ev '^#|^#x27; /etc/zabbix/zabbix_agent2.conf; } ; pgrep -a 'zabbix_agentd' >/dev/null && { echo "==== Zabbix Agent (Classic) Configuration ===="; grep -Ev '^#|^#x27; /etc/zabbix/zabbix_agentd.conf; }]
Затем перезапустите службу агента в зависимости от типа агента:
Для классического агента Zabbix:
systemctl restart zabbix-agentДля Zabbix агента 2:
systemctl restart zabbix-agent2Создание скрипта во внешнем интерфейсе
Выполните следующие шаги:
Перейдите в раздел Alerts → Scripts.
Нажмите кнопку Create script.
Заполните поля:
Name: например, «Zabbix Agent Config».
Scope: выберите «Manual host action».
Type: выберите «Script» .
Execute on: выберите «Zabbix agent» .
Commands: вставьте следующую команду:
pgrep -a 'zabbix_agent2' >/dev/null && { echo "==== Zabbix Agent 2 Configuration ===="; grep -Ev '^#|^#x27; /etc/zabbix/zabbix_agent2.conf; } ; pgrep -a 'zabbix_agentd' >/dev/null && { echo "==== Zabbix Agent (Classic) Configuration ===="; grep -Ev '^#|^#x27; /etc/zabbix/zabbix_agentd.conf; }
Вы также можете (по желанию) заполнить следующие параметры:
Description – описание цели сценария.
Host group — ограничение использования определенными группами хостов.
User group — ограничение использования определенными группами пользователей.
Параметры Required Host Permissions:
Read — пользователи с правами «Read» на хосте могут выполнить скрипт.
Write – скрипт могут выполнить только пользователи, имеющие разрешения «Write» на хосте.
Нажмите «Add» .
Пример 2 — отображение последних 10 строк лога агента Zabbix
Если вы хотите просмотреть последние 10 строк лога агента Zabbix непосредственно через веб-интерфейс, вы можете создать следующий скрипт:
На удаленном хосте измените конфигурацию агента Zabbix, используя соответствующую команду в зависимости от типа агента:
Для классического агента Zabbix:
nano /etc/zabbix/zabbix_agentd.confДля Zabbix агента 2:
nano /etc/zabbix/zabbix_agent2.confВключение DenyKey
Если эта опция еще не включена, вам необходимо сначала ее активировать.
В файле конфигурации найдите и раскомментируйте строку DenyKey:
DenyKey=system.run[*]Перед правилом DenyKey вставьте правило AllowKey, которое разрешает выполнение только определенного скрипта (никогда не используйте общее правило с *, так как это может представлять угрозу безопасности):
AllowKey=system.run[echo 'Last 10 lines from Zabbix agent log on server *:'; tail -n 10 /var/log/zabbix/zabbix_agent*.log]
Затем перезапустите службу агента в зависимости от типа агента:
Для классического агента Zabbix:
systemctl restart zabbix-agentДля Zabbix агента 2:
systemctl restart zabbix-agent2Во внешнем интерфейсе создайте скрипт со следующими настройками:
Name: например, «Zabbix Agent Config».
Scope: выберите «Manual host action».
Type: выберите «Script» .
Execute on: выберите «Zabbix agent» .
Commands: вставьте следующую команду:
echo 'Last 10 lines from Zabbix agent log on server {HOST.HOST}:'; tail -n 10 /var/log/zabbix/zabbix_agent*.logПри необходимости задайте Description, Host group или User group.
Наконец, нажмите кнопку Add.

Пример 3 – включение перезапуска приложения через Zabbix Agent
Настройка правил sudo
Чтобы разрешить Zabbix выполнять команды с повышенными привилегиями (в данном случае перезапуск служб crond и rsyslog), создайте специальный файл sudoers, например /etc/sudoers.d/zabbix_scripts, и вставьте в него следующее содержимое:
nano /etc/sudoers.d/zabbix_scriptsИ вставьте следующее содержимое:
zabbix ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart rsyslog
zabbix ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart crond
Эти правила позволяют пользователю zabbix выполнять команды перезапуска без запроса пароля. Сохраните файл и проверьте синтаксис с помощью следующей команды:
visudo -cf /etc/sudoers.d/zabbix_scriptsНа удаленном хосте измените конфигурацию агента Zabbix, используя соответствующую команду в зависимости от типа агента:
Для классического агента Zabbix:
nano /etc/zabbix/zabbix_agentd.confДля Zabbix агента 2:
nano /etc/zabbix/zabbix_agent2.confВключение DenyKey
Если эта опция еще не включена, вам необходимо сначала ее активировать.
В файле конфигурации найдите и раскомментируйте строку DenyKey:
DenyKey=system.run[*]Перед правилом DenyKey вставьте правило AllowKey, которое разрешает выполнение только определенного скрипта (никогда не используйте общее правило с *, так как это может представлять угрозу безопасности):
AllowKey=system.run[sudo systemctl restart rsyslog && echo "Service * restarted successfully." || echo "Restart of service * failed."]
AllowKey=system.run[sudo systemctl restart crond && echo "Service * restarted successfully." || echo "Restart of service * failed."]
Затем перезапустите службу агента в зависимости от типа агента:
Для классического агента Zabbix:
systemctl restart zabbix-agentДля Zabbix агента 2:
systemctl restart zabbix-agent2Создание скрипта для перезапуска службы с выпадающим списком вариантов выбора
Новая функциональность Zabbix 7.0 позволяет использовать пользовательский ввод с выпадающим меню. Это позволяет пользователям выбирать, какую службу они хотят перезапустить (например, rsyslog или crond).
Шаги по созданию сценария:
Перейдите в раздел Alerts → Scripts.
Нажмите кнопку Create script.
Заполните следующие поля:
Name: «Restart service».
Scope: «Manual host action».
Тип: «Script».
Execute on: «Zabbix agent».
Commands: вставьте следующую команду:
sudo systemctl restart {MANUALINPUT} && echo "Service {MANUALINPUT} restarted successfully." || echo "Restart of service {MANUALINPUT} failed."Добавление раскрывающегося меню
Нажмите «Advanced configuration».
Установите флажок Enable user input.
В поле «Input» введите: Service name.
В поле Input type выберите: Dropdown.
В раскрывающемся списке параметров введите:
Enable user input: выберите эту опцию.
Input prompt: «Service name» .
Input type: выберите Dropdown.
Dropdown options: введите rsyslog, crond .
Нажмите кнопку «Add», и теперь вы можете использовать новый скрипт непосредственно из графического интерфейса.
rsyslog,crond
Сохраните изменения.
Пример выполнения скрипта
После создания сценариев (Alerts → Scripts) и настройки их в качестве Manual host action они появятся в контекстном меню при щелчке левой кнопкой мыши по хосту в разделе Monitoring → Hosts (см. изображения). Там вы можете выбрать нужный сценарий (например, Restart service или Show agent log).
Аналогичным образом, эти скрипты можно запускать с раздела Maps — при нажатии на значок хоста открывается меню с доступными действиями.



Обработка тайм-аутов в скриптах frontend
До версии 7.0: тайм-аут контролировался параметром Timeout= в конфигурационных файлах сервера Zabbix (
zabbix_server.conf) и агента Zabbix (zabbix_agentd.confилиzabbix_agent2.conf). Допустимый диапазон составлял 1–30 секунд и применялся только к пассивным проверкам.Начиная с версии 7.0: настраивается непосредственно во внешнем интерфейсе и применяется как к пассивным, так и к активным проверкам. Значение по умолчанию — 60 секунд с регулируемым диапазоном от 1 до 300 секунд.Для активных проверок также необходимо учитывать интервал обновления, который определяет, как часто агент загружает новую конфигурацию и, следовательно, частоту запросов на новые значения. Интервал обновления по умолчанию составляет 5 секунд, что может повлиять на поведение времени ожидания.Важно: если время ожидания короче интервала обновления, запрос на проверку может никогда не быть выполнен. Поэтому важно устанавливать значения в соответствии с этим параметром.
Как изменить тайм-аут во фронтенде:
Перейдите в Administration → General → Timeouts.
Найдите опцию Script execution.
При необходимости измените значение (диапазон 1–300 секунд).
Нажмите Update.

Wait против Nowait в system.run в операциях действий
Zabbix позволяет определить, должна ли команда, выполняемая через system.run в скриптах действий, работать в режиме Wait (по умолчанию) или Nowait .
Разница межд�� Wait и Nowait
Ожидание (поведение по умолчанию) — скрипт запускается, и Zabbix ждет его завершения, прежде чем приступить к следующим шагам действия.
Nowait – Скрипт запускается, но Zabbix не дожидается его завершения и сразу продолжает работу.
Где можно использовать Nowait ?
Nowait можно использовать только в скриптах действий (например, в разделе «Операции действий» в Zabbix).
Его нельзя использовать в обычных скриптах интерфейса, где Zabbix всегда ждет результата.
Как правильно настроить AllowKey для Nowait?
Если в AllowKey разрешена определенная команда, например:
AllowKey=system.run[myscript.sh]…то вариант nowait работать не будет (system.run[myscript.sh,nowait]).
Правильное решение:
Чтобы использовать nowait, необходимо разрешить подстановочные знаки:
AllowKey=system.run[myscript.sh,*]Предупреждение: Если nowait не разрешен в конфигурации, Zabbix может отклонить выполнение скрипта с этой опцией.
Когда следует использовать Wait, а когда Nowait?
Ожидание (синхронное выполнение) — подходит для коротких скриптов, где необходимо знать результат команды перед выполнением дальнейших операций.
Nowait (асинхронное выполнение) — идеально подходит для длительных задач, когда ожидание результата не требуется (например, перезапуск службы, выполнение фонового скрипта).
Краткие советы
Безопасность и разрешения.Убедитесь, что группы пользователей и хостов, которым разрешено выполнять скрипты, правильно настроены. Слишком широкие разрешения могут представлять угрозу безопасности.
SELinux / брандмауэрЕсли включен SELinux или брандмауэр, могут потребоваться дополнительные шаги (например, разрешение требуемых портов или изменение правил SELinux), чтобы гарантировать запуск скриптов без ограничений.
Резервное копирование и ведение логов.Перед внесением изменений в файлы конфигурации Zabbix создайте резервную копию. При возникновении ошибок проверьте журналы сервера или агента Zabbix (обычно в
/var/log/zabbix/), чтобы быстро диагностировать потенциальные проблемы.Тестирование функциональностиПосле внесения изменений и перезапусков службы всегда выполняйте тестовый запуск скриптов, чтобы убедиться, что все изменения применены правильно и скрипты выполняются без ошибок.
Время ожидания выполнения скрипта.Если скрипт не выполняется или истекает время ожидания, проверьте настройки времени ожидания . Его можно изменить в разделе «Administration → General → Timeouts» (параметр «Script execution»). Значение по умолчанию — 60 секунд, но для более длительных скриптов может потребоваться увеличить это значение.
На этом все! Спасибо за внимание! Если статья была интересна, подпишитесь на телеграм-канал zabbix_ru, где будет еще больше полезной информации.
