Всем привет! Мы делаем проекты по Zabbix, накопили большую экспертизу и решили сделать переводы нескольких статей, которые нам показались интересными и полезными. Наверняка, будут полезны и вам. Также своим опытом делимся в телеграм-канале zabbix_ru, где вы можете найти полезные материалы и записи наших вебинаров, опубликованных на нашем ютуб-канале (прим. переводчика). Ниже ссылки на предыдущие статьи из цикла.

Миграция с MySQL на PostgreSQL

SELinux: интеграция с Zabbix и другими инструментами

Защита от ложных срабатываний триггеров в Zabbix с использованием функций min/max/avg

Zabbix – автоматизация управления пользователями (JIT)

Двухфакторная аутентификация (2FA) в Zabbix 7.0

Как настроить прием SNMP-трапов в Zabbix

Отчетность в Zabbix 7.0

Установка и базовое использование 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, где будет еще больше полезной информации.