Установка из исходного кода

Вы можете получить самую последнюю версию Zabbix, скомпилировав её из исходного кода. См. также Получение исходного кода Zabbix.

Здесь представлено пошаговое руководство по установке Zabbix из исходного кода.

Установка демонов Zabbix

1 Загрузите архив с исходным кодом

Перейдите на страницу загрузки Zabbix и загрузите архив с исходным кодом. После загрузки распакуйте исходные файлы, выполнив:

tar -zxvf zabbix-8.0.0.tar.gz

Укажите в команде правильную версию Zabbix. Она должна соответствовать имени загруженного архива.

2 Создание учетной записи пользователя

Все процессы демонов Zabbix запускаются от имени непривилегированных системных пользователей. Если демон Zabbix запущен из-под непривилегированной учетной записи пользователя, он продолжит работу от имени этого пользователя.

В конфигурации по умолчанию, если демон запускается от имени root, он переключается на учетную запись пользователя zabbix, которая должна существовать. Чтобы создать системного пользователя и группу zabbix, выполните команды, приведенные ниже.

Система на базе RedHat:

groupadd --system zabbix
useradd --system -g zabbix -d /usr/lib/zabbix -s /sbin/nologin -c "Zabbix Monitoring System" zabbix

Система на базе Debian:

addgroup --system --quiet zabbix
adduser --quiet --system --disabled-login --ingroup zabbix --home /var/lib/zabbix --no-create-home zabbix

Нет необходимости создавать отдельную учетную запись пользователя для веб-интерфейса Zabbix.

Рекомендация по безопасности

Если Zabbix сервер и агент работают на одной и той же машине, рекомендуется запускать их от имени разных учетных записей пользователей. Запуск обоих от имени одного и того же пользователя позволяет агенту получить доступ к файлу конфигурации сервера, что может привести к раскрытию конфиденциальной информации, например пароля к базе данных, любому пользователю с уровнем Admin в Zabbix.

Запуск Zabbix от имени root, bin или любой другой учетной записи с особыми правами представляет угрозу безопасности.

Домашний каталог (необязательно)

Процессам Zabbix не требуется домашний каталог, поэтому его создание обычно не рекомендуется. Однако, если вам нужна функциональность, требующая домашнего каталога (например, хранение учетных данных MySQL в $HOME/.my.cnf), вы можете создать его с помощью команд, приведенных ниже.

В системах на базе RedHat выполните:

mkdir -m u=rwx,g=rwx,o= -p /usr/lib/zabbix
chown zabbix:zabbix /usr/lib/zabbix

В системах на базе Debian выполните:

mkdir -m u=rwx,g=rwx,o= -p /var/lib/zabbix
chown zabbix:zabbix /var/lib/zabbix
3 Создание базы данных Zabbix

Для демонов Zabbix сервера и прокси, а также веб-интерфейса Zabbix требуется база данных. Она не нужна для запуска Zabbix агента.

SQL скрипты предоставляются для создания схемы базы данных и вставки набора данных. Базе данных Zabbix прокси требуется только схема, тогда как базе данных Zabbix сервера помимо схемы также требуется набор данных.

После создания базы данных Zabbix переходите к следующим шагам компиляции Zabbix.

4 Настройка исходного кода

Для сборки сервера Zabbix, прокси Zabbix или агента Zabbix требуется C99 с расширениями GNU. Эту версию можно явно указать, задав CFLAGS="-std=gnu99":

export CFLAGS="-std=gnu99"

При установке из репозитория Git Zabbix сначала необходимо выполнить:

./bootstrap.sh

При настройке исходного кода для сервера Zabbix или прокси необходимо указать тип используемой базы данных. Одновременно с процессом сервера или прокси можно скомпилировать только один тип базы данных.

Чтобы просмотреть все поддерживаемые параметры настройки, выполните следующую команду в распакованном каталоге с исходным кодом Zabbix:

./configure --help

Для настройки исходного кода сервера Zabbix и агента можно выполнить команду, подобную следующей:

./configure --enable-server --enable-agent --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with-libxml2 --with-openipmi --with-ares

Для настройки исходного кода сервера Zabbix (с PostgreSQL и т. д.) можно выполнить:

./configure --enable-server --with-postgresql --with-net-snmp

Для настройки исходного кода прокси Zabbix (с SQLite и т. д.) можно выполнить:

./configure --prefix=/usr --enable-proxy --with-net-snmp --with-sqlite3 --with-ssh2

Для настройки исходного кода агента Zabbix можно выполнить:

./configure --enable-agent

или для агента Zabbix 2:

./configure --enable-agent2

Для сборки агента Zabbix 2 необходимо установить поддерживаемую версию Go.

Примечания к параметрам компиляции:

  • --enable-agent - компилирует агент Zabbix, а также утилиты командной строки Zabbix get и Zabbix sender.
  • --with-libcurl - требуется для мониторинга виртуальных машин, аутентификации SMTP, элементов данных web.page.* агента Zabbix и элементов данных запроса телеметрии. См. также: Требования (libcurl).
  • --with-libxml2 - требуется для мониторинга виртуальных машин.
  • --with-libpcre2[=DIR] - Zabbix всегда компилируется с библиотекой PCRE2; этот параметр позволяет только указать пользовательский путь установки PCRE2.
  • --with-mysql=/path/to/mysql_config - указывает путь к конфигурации определенной клиентской библиотеки MySQL. Полезно, если установлено несколько версий MySQL или MariaDB.
  • --enable-static - статически связывает библиотеки (не поддерживается в Solaris). Используйте этот параметр, если планируете распространять скомпилированные двоичные файлы в системах без необходимых библиотек. Не рекомендуется при сборке сервера Zabbix. Для статической сборки сервера требуется статическая версия каждой внешней библиотеки. Скрипт configure автоматически это не проверяет.
  • --with-stacksize=<value> - задает размер стека каждого потока в килобайтах (например, --with-stacksize=512). Это значение можно увеличить, если Zabbix аварийно завершает работу или зависает из-за переполнения стека (например, во время предобработки в системах с низкими ограничениями размера стека потоков по умолчанию).
  • --with-apm (используйте только с --enable-proxy) - требуется для мониторинга производительности приложений (APM) на прокси Zabbix. См. также: Требования (g++, gRPC, protobuf, Abseil).

Если ./configure завершается с ошибкой из-за отсутствующих библиотек или других проблем, проверьте файл config.log для получения подробной информации об ошибке.

Например, если отсутствует libssl, непосредственное сообщение об ошибке может вводить в заблуждение:

checking for main in -lmysqlclient... no
configure: error: Not found mysqlclient library

В этом случае в config.log указана фактическая причина:

/usr/bin/ld: cannot find -lssl
/usr/bin/ld: cannot find -lcrypto

См. также:

5 Сборка и установка всего необходимого

Если установка выполняется из репозитория Zabbix Git, сначала необходимо выполнить:

$ make dbschema

make install

Этот шаг следует выполнять от имени пользователя с достаточными правами (обычно root или с использованием sudo).

При выполнении make install по умолчанию будут установлены двоичные файлы демона (zabbix_server, zabbix_agentd, zabbix_proxy) в /usr/local/sbin, а клиентские двоичные файлы (zabbix_get, zabbix_sender) — в /usr/local/bin.

Чтобы указать другое расположение вместо /usr/local, используйте ключ --prefix на предыдущем шаге настройки исходных кодов, например --prefix=/home/zabbix. В этом случае двоичные файлы демона будут установлены в <prefix>/sbin, а утилиты — в <prefix>/bin. Страницы man будут установлены в <prefix>/share.

6 Просмотр и редактирование файлов конфигурации

Необходимо настроить этот файл для каждого узла сети, на котором установлен zabbix_agentd.

В файле необходимо указать IP-адрес сервера Zabbix. Подключения с других узлов сети будут отклоняться.

Необходимо указать имя базы данных, имя пользователя и пароль (если они используются).

Остальные параметры можно оставить со значениями по умолчанию, если у вас небольшая установка (до десяти отслеживаемых узлов сети). Однако следует изменить параметры по умолчанию, если вы хотите максимально повысить производительность сервера Zabbix (или прокси).

Необходимо указать IP-адрес сервера и имя узла сети прокси (оно должно быть известно серверу), а также имя базы данных, имя пользователя и пароль (если они используются).

При использовании SQLite необходимо указать полный путь к файлу базы данных; имя пользователя и пароль базы данных не требуются.

7 Запуск демонов

Запустите zabbix_server на стороне сервера.

zabbix_server

Убедитесь, что ваша система позволяет выделить 36 МБ (или немного больше) разделяемой памяти, в противном случае сервер может не запуститься, и вы увидите "Cannot allocate shared memory for <type of cache>." в файле журнала сервера. Это может произойти в FreeBSD, Solaris 8.

Запустите zabbix_agentd на всех контролируемых машинах.

zabbix_agentd

Убедитесь, что ваша система позволяет выделить 2 МБ разделяемой памяти, в противном случае агент может не запуститься, и вы увидите "Cannot allocate shared memory for collector." в файле журнала агента. Это может произойти в Solaris 8.

Если вы установили Zabbix прокси, запустите zabbix_proxy.

zabbix_proxy

Установка веб-интерфейса Zabbix

Копирование файлов PHP

Веб-интерфейс Zabbix написан на PHP, поэтому для его запуска требуется веб-сервер с поддержкой PHP. Установка выполняется простым копированием файлов PHP из каталога ui в каталог HTML-документов веб-сервера.

К распространенным расположениям каталогов HTML-документов для веб-серверов Apache относятся:

  • /usr/local/apache2/htdocs (каталог по умолчанию при установке Apache из исходного кода)
  • /srv/www/htdocs (OpenSUSE, SLES)
  • /var/www/html (Debian, Ubuntu, Fedora, RHEL)

Рекомендуется использовать подкаталог вместо корня HTML. Чтобы создать подкаталог и скопировать в него файлы веб-интерфейса Zabbix, выполните следующие команды, заменив <htdocs> на фактический каталог:

mkdir <htdocs>/zabbix
cd ui
cp -a . <htdocs>/zabbix

Если вы планируете использовать любой язык, кроме английского, см. Установка дополнительных языков веб-интерфейса для получения инструкций.

Установка веб-интерфейса

Пожалуйста, смотрите страницу Установка веб-интерфейса для получения информации о мастере установки веб-интерфейса Zabbix.

Установка загружаемых плагинов Zabbix agent 2

Установка загружаемых плагинов Zabbix agent 2 требуется только в том случае, если вы хотите отслеживать цели, не поддерживаемые встроенными плагинами (например, серверы или кластеры MongoDB, PostgreSQL и его форки и т. д.). См. полный список загружаемых плагинов и встроенных плагинов.

Перед установкой плагина, пожалуйста, ознакомьтесь с файлом README. Он может содержать особые требования и инструкции по установке.

Чтобы установить из исходных кодов, сначала скачайте и распакуйте архив исходных кодов загружаемого плагина.

Чтобы скомпилировать плагин, перейдите в каталог распакованного плагина и выполните make:

make

Для сборки загружаемых плагинов Zabbix agent 2 должна быть установлена поддерживаемая версия Go.

Исполняемый файл плагина может находиться в любом месте, если он доступен для загрузки Zabbix agent 2. Укажите путь к двоичному файлу плагина в файле конфигурации плагина, например, в postgresql.conf для плагина PostgreSQL:

Plugins.PostgreSQL.System.Path=/path/to/executable/zabbix-agent2-plugin-postgresql

Путь к файлу конфигурации плагина должен быть указан в параметре Include файла конфигурации Zabbix agent 2:

Include=/path/to/plugin/configuration/file/postgresql.conf

Перейдите к настройке для получения дополнительных сведений о настройке плагинов.

Загружаемые плагины, предоставляемые Zabbix, используют простые makefile со следующими целями сборки:

  • make - собрать плагин
  • make clean - удалить все файлы, созданные при сборке плагина
  • make check - выполнить самотестирование (требуется реальная цель мониторинга, например база данных PostgreSQL)
  • make style - проверить стиль кода Go с помощью golangci-lint
  • make format - форматировать код Go с помощью go fmt
  • make dist - создать архив исходных кодов, включая все зависимости

Установка Java gateway

Устанавливать Java gateway требуется только в том случае, если вы хотите отслеживать приложения JMX. Java gateway является легковесным и не требует базы данных.

Чтобы установить из исходных кодов, сначала скачайте и распакуйте архив с исходным кодом.

Чтобы скомпилировать Java gateway, выполните скрипт ./configure с параметром --enable-java. Рекомендуется указать параметр --prefix, чтобы задать путь установки, отличный от значения по умолчанию /usr/local, поскольку при установке Java gateway будет создано целое дерево каталогов, а не только один исполняемый файл.

./configure --enable-java --prefix=$PREFIX

Чтобы скомпилировать и упаковать Java gateway в файл JAR, выполните make. Обратите внимание, что для этого шага вам понадобятся исполняемые файлы javac и jar в вашем пути.

make

Теперь у вас есть файл zabbix-java-gateway-$VERSION.jar в src/zabbix_java/bin. Если вам удобно запускать Java gateway из src/zabbix_java в каталоге дистрибутива, тогда вы можете перейти к инструкциям по настройке и запуску Java gateway. В противном случае убедитесь, что у вас достаточно прав, и выполните make install.

make install

Перейдите к настройке для получения более подробной информации о настройке и запуске Java gateway.

Установка веб-сервиса Zabbix

Установка веб-сервиса Zabbix требуется только в том случае, если вы хотите использовать запланированные отчеты.

Чтобы установить из исходных кодов, сначала скачайте и распакуйте архив с исходным кодом.

Чтобы скомпилировать веб-сервис Zabbix, выполните скрипт ./configure с опцией --enable-webservice.

Для сборки веб-сервиса Zabbix должна быть установлена поддерживаемая версия Go.

Запустите zabbix_web_service на машине, где установлен веб-сервис:

zabbix_web_service

Перейдите к настройке для получения дополнительных сведений о настройке генерации запланированных отчетов.

Установка MCP-сервера Zabbix

Для установки из исходного кода сначала скачайте и распакуйте архив с исходным кодом.

Чтобы скомпилировать MCP-сервер Zabbix, выполните следующую команду в каталоге с исходным кодом MCP-сервера:

make build

Для сборки MCP-сервера Zabbix необходимо установить поддерживаемую версию Go.

Чтобы указать определенную версию в выводе команды zabbix_mcp_server -V и в заголовке User-Agent запросов к API Zabbix, задайте переменную VERSION, например: make build VERSION=8.0.0.

Чтобы установить двоичный файл в /usr/local/sbin, а пример файла конфигурации - в /etc/zabbix, выполните:

sudo make install

Отредактируйте файл конфигурации /etc/zabbix/zabbix_mcp_server.conf и задайте как минимум следующие параметры:

  • FrontendURL - URL API Zabbix, заканчивающийся на api_jsonrpc.php;
  • AllowedIP - адреса клиентов MCP, которым разрешено подключаться.

Чтобы шифровать подключения от клиентов MCP, задайте TLSAccept=cert и укажите TLSCertFile и TLSKeyFile либо запустите MCP-сервер за доверенным обратным прокси, который обрабатывает TLS.

Если пользователь zabbix не существует (например, если на компьютере установлен только MCP-сервер), создайте его, как описано в разделе Создание учетной записи пользователя.

Проверьте файл конфигурации и запустите zabbix_mcp_server:

zabbix_mcp_server -c /etc/zabbix/zabbix_mcp_server.conf -T
zabbix_mcp_server -c /etc/zabbix/zabbix_mcp_server.conf

Перейдите к разделу MCP-сервер, чтобы получить дополнительную информацию о настройке сервера и подключении клиентов MCP.

Получение исходного кода Zabbix

Существует несколько способов получить исходный код Zabbix:

  • Вы можете скачать выпущенные стабильные версии с официального сайта Zabbix
  • Вы можете скачать nightly-сборки со страницы разработчиков на официальном сайте Zabbix
  • Вы можете получить последнюю разрабатываемую версию из Git-репозитория исходного кода:

Для клонирования репозитория должен быть установлен Git-клиент. Официальный пакет клиента Git для командной строки в дистрибутивах обычно называется git. Чтобы установить его, например, в Debian/Ubuntu, выполните:

sudo apt-get update
sudo apt-get install git

Чтобы получить весь исходный код Zabbix, перейдите в каталог, в котором вы хотите разместить код, и выполните:

git clone https://git.zabbix.com/scm/zbx/zabbix.git

Проблемы компиляции

Ниже перечислены известные проблемы, связанные с компиляцией Zabbix из исходных кодов. Во всех остальных случаях смотрите страницу Известные проблемы.

Библиотека в нестандартном расположении

Zabbix позволяет указать библиотеку, расположенную в нестандартном месте. В примере ниже Zabbix запустит curl-config из указанного нестандартного расположения и использует его вывод, чтобы определить, какую libcurl следует использовать.

$ ./configure --enable-server --with-mysql --with-libcurl=/usr/local/bin/curl-config

Это будет работать, если в системе установлена только одна libcurl, но может не сработать, если другая libcurl установлена в стандартном расположении (например, менеджером пакетов). Такая ситуация возникает, когда для Zabbix требуется более новая версия библиотеки, а более старая — для других приложений.

Поэтому указание компонента в нестандартном расположении не всегда будет работать, если тот же компонент также существует в стандартном расположении.

Например, если вы используете более новую libcurl, установленную в /usr/local, при этом пакет libcurl по-прежнему установлен, Zabbix может выбрать неправильную библиотеку, и компиляция завершится ошибкой:

usr/bin/ld: ../../src/libs/zbxhttp/libzbxhttp.a(http.o): in function 'zbx_http_convert_to_utf8':
/tmp/zabbix-master/src/libs/zbxhttp/http.c:957: undefined reference to 'curl_easy_header'
collect2: error: ld returned 1 exit status

Здесь функция curl_easy_header() недоступна в более старой /usr/lib/x86_64-linux-gnu/libcurl.so, но доступна в более новой /usr/local/lib/libcurl.so.

Проблема связана с порядком флагов компоновщика, и одним из решений является указание полного пути к библиотеке в переменной LDFLAGS:

$ LDFLAGS="-Wl,--no-as-needed /usr/local/lib/libcurl.so" ./configure --enable-server --with-mysql --with-libcurl=/usr/local/bin/curl-config

Обратите внимание на параметр -Wl,--no-as-needed, который может потребоваться в некоторых системах (см. также: параметры компоновки по умолчанию в системах на базе Debian-based).

Слишком маленький размер стека на некоторых системах

Если Zabbix аварийно завершается или зависает из-за переполнения стека, вы можете увеличить размер стека для каждого потока, используя параметр --with-stacksize при настройке исходных кодов. Эта проблема может возникать в системах с низкими значениями ограничения размера стека потоков по умолчанию, особенно во время предобработки, когда создается несколько потоков.

В следующем примере размер стека для каждого потока устанавливается в 512 КБ:

./configure --enable-server --with-mysql --with-stacksize=512

Вы можете проверить ограничения размера стека потоков в системе во время выполнения с помощью команды ulimit -s в системах на базе Linux.