Система мониторинга Zabbix очень популярна не только в России, но и во всем мире. Установка Zabbix достаточно подробно описана во многих статьях в рунете и скорее всего не вызывает вопросов, а вот сборка компонентов Zabbix под свои задачи не так широко описана. В данной статье я расскажу зачем и как собирать Zabbix из исходного кода.
Исходные данные: Сервер с Debian 9.11 + MySQL (MariaDB 10.4)
Задача (Часть 1): Собрать систему мониторинга Zabbix v4.4 из исходного кода и запустить основные компоненты (zabbix-server, zabbix-proxy, zabbix-agent).
Задача (Часть 2): Настроить работу Web-frontend системы мониторинга Zabbix v4.4 из исходного кода.
Для начала хотелось бы рассказать для чего может потребоваться сборка Zabbix из исходного кода, ведь обычному администратору (пользователю) достаточно выбрать нужную версию Zabbix, указать желаемую ОС на официальной странице загрузки и будет предложено подключить репозитарий Zabbix и выдана инструкция как установить готовые сборки, но, если:
1. Вы хотите собрать некоторые компоненты Zabbix под ОС для которой нет готовых пакетов, например под какой-то узко специализированный дистрибутив Linux или под такие ОС как AIX/HP-UX/Solaris;
2. Вы хотите изменить некоторые жестко установленные настройки Zabbix, которые определяются в исходном коде, например увеличить HK_MAX_DELETE_PERIODS — чтобы хаускипер в zabbix работал более активно или увеличить ZBX_MAX_HRECORDS с 1000 до 5000 чтобы zabbix-proxy выбирал из базы больше записей для отправки за 1 проход;
3. Вы хотите собрать компоненты Zabbix с поддержкой таких баз данных как Oracle;
4. Вы хотите исправить баг или что-то доработать в Zabbix самостоятельно;
то Вам пригодиться инструкция ниже как отправная точка.
Сборка Zabbix v4.4 из исходного кода достаточно подробно описана в официальной документации. Там даны только общие рекомендации и описаны основные моменты сборки, но как мы знаем — дьявол кроется в деталях и о них ниже.
ВАЖНО! Предполагается, что у Вас на сервере уже установлена MariaDB, в данной статье я не буду описывать процесс подключения репозитария MariaDB, установки и ее настройки. Если MariaDB у Вас не установлена, то Вы можете воспользоваться моей статьей. Если база данных будет (уже есть) у Вас на отдельном сервере, то на машине где Вы будите производить сборку Zabbix Вам все равно необходимо подключить репозитарий MariaDB и поставить пакет mariadb-client.
1. Подготовка сервера и установка дополнительных пакетов.
Мы будем собирать Zabbix с максимально возможным набором возможностей (функционала или features, это SNMP monitoring, IPMI monitoring, Web monitoring, VMware monitoring, SMTP authentication, ODBC, SSH2 support, IPv6 support, TLS support), для этого нам нужно установить массу дополнительных пакетов включающих компилятор gcc, утилиты для генерации сборочных сценариев, различные библиотеки разработчика и заголовочные файлы к ним.
apt-get update apt-get install -y wget unzip apt-get install -y autoconf automake gcc make pkg-config apt-get install -y libxml2-dev libssl-dev libcurl4-openssl-dev libsnmp-dev snmp-mibs-downloader libevent-dev libsqlite3-dev libpcre3-dev libssh2-1-dev libopenipmi-dev unixodbc-dev libldap2-dev apt-get install -y libmariadb-dev libmariadb-dev-compat
Я специально разбил установку пакетов на 4 строки, чтобы было более понятно что мы устанавливаем.
2. Скачивание архива с исходным кодом и распаковка.
Текущую актуальную версию Zabbix, доступную для скачивания всегда можно посмотреть на официальной странице.
На текущий момент это 4.4.10, скачиваем архив этой версии:
cd ~ wget https://cdn.zabbix.com/zabbix/sources/oldstable/4.4/zabbix-4.4.10.tar.gz -O zabbix-4.4.10.tar.gz tar -zxf zabbix-4.4.10.tar.gz cd zabbix-4.4.10
3. Сконфигурируем наш исходный код Zabbix с максимально возможным набором возможностей.
./configure --with-libevent --with-libpthread --with-zlib --with-libpcre --with-libcurl --with-libxml2 --with-net-snmp --with-openssl --enable-ipv6 --with-ssh2 --with-openipmi --with-unixodbc --with-ldap --with-mysql --enable-server --enable-proxy --enable-agent --sysconfdir=/etc/zabbix
По окончании конфигурирования нам выведут итоговую информацию с какими опциями и возможностями будет собран Zabbix, а так же подсказку вида:
*********************************************************** * Now run 'make install' * * * * Thank you for using Zabbix! * * <http://www.zabbix.com> * ***********************************************************
Это означает успешное завершение этапа конфигурирования и возможному переходу к этапу компиляции (сборки) Zabbix.
4. Сборка Zabbix
Здесь все просто, запускаем make (для ускорения в 4 потока):
make -j4
По окончании сборки не должно возникнуть ошибок и в конце будет выведена строка:
make[1]: Leaving directory '/root/zabbix-4.4.10'
Теперь проверим наличие собранных бинарных файлов Zabbix с помощью утилиты file:
# file src/zabbix_agent/zabbix_agentd src/zabbix_agent/zabbix_agentd: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=7f09fe17930a98369ea580601d6e45569c4048df, not stripped # file src/zabbix_sender/zabbix_sender src/zabbix_sender/zabbix_sender: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=c6c9ef58ca7e6d0d28a48195940654efb5e21e46, not stripped # file src/zabbix_get/zabbix_get src/zabbix_get/zabbix_get: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=22b95e82e56a0230ec7cee6e8d1b704f36ac2435, not stripped # file src/zabbix_server/zabbix_server src/zabbix_server/zabbix_server: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=a7a47ea2d877726cfd8fada9b2f6057d3c95f67e, not stripped # file src/zabbix_proxy/zabbix_proxy src/zabbix_proxy/zabbix_proxy: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=2bb8e3365f18b37f2686a1fc34676b6bc91e4ed8, not stripped
Все файлы на месте, для удобства скопируем их в папку bin:
cp src/zabbix_{agent,sender,get,server,proxy}/zabbix_{agentd,sender,get,server,proxy} bin/ 2>/dev/null
Проверим:
# ls -l bin/ total 22148 drwxr-xr-x 3 1001 1001 4096 Aug 26 19:28 win32 drwxr-xr-x 3 1001 1001 4096 Aug 26 19:28 win64 -rwxr-xr-x 1 root root 1991128 Sep 4 01:21 zabbix_agentd -rwxr-xr-x 1 root root 623648 Sep 4 01:21 zabbix_get -rwxr-xr-x 1 root root 8818464 Sep 4 01:21 zabbix_proxy -rwxr-xr-x 1 root root 962232 Sep 4 01:21 zabbix_sender -rwxr-xr-x 1 root root 10267704 Sep 4 01:21 zabbix_server
5. Создание пользователя, рабочих каталогов, копирование бинарных файлов, копирование (доп. настройка) стандартных файлов конфигурации, копирование init-скриптов.
Создание пользователя и группы:
addgroup --system --quiet zabbix adduser --quiet --system --disabled-login --ingroup zabbix --home /var/lib/zabbix --no-create-home zabbix
Проверим:
# id zabbix uid=108(zabbix) gid=112(zabbix) groups=112(zabbix)
# getent passwd zabbix zabbix:x:108:112::/var/lib/zabbix:/bin/false
У Вас uid и gid будут другими — это нормально.
Создадим домашний каталог для пользователя zabbix (для работы процессов zabbix он не нужен, но он может Вам пригодиться в дальнейшем для хранения доп. файлов настроек, например для $HOME/.my.cnf):
mkdir -m u=rwx,g=rwx,o= -p /var/lib/zabbix chown zabbix:zabbix /var/lib/zabbix
Создадим каталоги для лог-файлов:
mkdir /var/log/zabbix chown zabbix:zabbix /var/log/zabbix
Создадим каталог для PID файлов:
mkdir /run/zabbix chown zabbix:zabbix /run/zabbix
Создадим файлы с правилами для автоматического создания каталога /var/run/zabbix при загрузке сервера:
echo "d /var/run/zabbix 0755 zabbix zabbix - -" > /usr/lib/tmpfiles.d/zabbix-agent.conf echo "d /var/run/zabbix 0755 zabbix zabbix - -" > /usr/lib/tmpfiles.d/zabbix-server.conf echo "d /var/run/zabbix 0755 zabbix zabbix - -" > /usr/lib/tmpfiles.d/zabbix-proxy.conf
Скопируем собранные бинарники Zabbix:
cp bin/zabbix_agentd /usr/sbin cp bin/zabbix_server /usr/sbin cp bin/zabbix_proxy /usr/sbin cp bin/zabbix_sender /usr/bin cp bin/zabbix_get /usr/bin
Создадим каталог для файлов конфигурации и скопируем туда стандартные конфиги:
mkdir /etc/zabbix mkdir /etc/zabbix/zabbix_agentd.d cp conf/zabbix_{agentd,server,proxy}.conf /etc/zabbix cp conf/zabbix_agentd/userparameter_mysql.conf /etc/zabbix/zabbix_agentd.d
К сожалению, стандартные файлы конфигурации не идеальны и нуждаются в дополнительной настройке.
Исправим файл конфигурации для zabbix_agentd (путь до лог файла и pid-файла):
sed -i 's/LogFile=\/tmp\/zabbix_agentd.log/LogFile=\/var\/log\/zabbix\/zabbix_agentd.log/g' /etc/zabbix/zabbix_agentd.conf sed -i 's/# PidFile=\/tmp\/zabbix_agentd.pid/PidFile=\/run\/zabbix\/zabbix_agentd.pid/g' /etc/zabbix/zabbix_agentd.conf
Исправим файл конфигурации для zabbix_server (путь до лог файла):
sed -i 's/LogFile=\/tmp\/zabbix_server.log/LogFile=\/var\/log\/zabbix\/zabbix_server.log/g' /etc/zabbix/zabbix_server.conf sed -i 's/# PidFile=\/tmp\/zabbix_server.pid/PidFile=\/run\/zabbix\/zabbix_server.pid/g' /etc/zabbix/zabbix_server.conf
Исправим файл конфигурации для zabbix_proxy (путь до лог и pid файла и порт для входящих соединений):
sed -i 's/LogFile=\/tmp\/zabbix_proxy.log/LogFile=\/var\/log\/zabbix\/zabbix_proxy.log/g' /etc/zabbix/zabbix_proxy.conf sed -i 's/# PidFile=\/tmp\/zabbix_proxy.pid/PidFile=\/run\/zabbix\/zabbix_proxy.pid/g' /etc/zabbix/zabbix_proxy.conf sed -i 's/# ListenPort=10051/ListenPort=10052/g' /etc/zabbix/zabbix_proxy.conf
К сожалению в комплекте с исходным кодом идут только init-скрипты для системы инициализации sysv, а как мы знаем в Debian 9 по умолчанию идет система инициализации systemd. Поэтому я выложил на gist.github.com стандартные unit-файлы для systemd, мы их скачаем и скорректируем.
Скачиваем:
wget https://gist.githubusercontent.com/CHERTS/84dc9b7eaa36fcc6822c274a399ac35a/raw/zabbix-agent.service -O /lib/systemd/system/zabbix-agent.service wget https://gist.githubusercontent.com/CHERTS/53948decb8d57d5ad4dd2c9741cdbac9/raw/zabbix-server.service -O /lib/systemd/system/zabbix-server.service wget https://gist.githubusercontent.com/CHERTS/b67c5addaa7a9785e400788cea3cdde6/raw/zabbix-proxy.service -O /lib/systemd/system/zabbix-proxy.service
Добавим запуск процессов zabbix при старте сервера:
systemctl daemon-reload systemctl enable zabbix-agent systemctl enable zabbix-proxy systemctl enable zabbix-server
6. Создание базы данных для zabbix-server и zabbix-proxy.
ВАЖНО! Если у Вас zabbix-server и zabbix-proxy работают на одном сервере и подключаются к одному и тому же серверу баз данных, то у них должны быть разные базы!
Создание БД, пользователя и выдача прав ничем не отличаются от описанного в официальной документации.
Подключаемся к MariaDB и создаем БД для zabbix-server и zabbix-proxy, так же создаем пользователей и выдаем им права:
mysql -u root -p или mysql
Создаем базы и пользователей:
БД для zabbix-server: zabbix_server
Пользователь для zabbix-server: zabbix_server_user
Пароль пользователя для zabbix-server: very_big_passwd_server
БД для zabbix-proxy: zabbix_proxy
Пользователь для zabbix-proxy: zabbix_proxy_user
Пароль пользователя для zabbix-proxy: very_big_passwd_proxy
create database zabbix_server character set utf8 collate utf8_bin; grant all privileges on zabbix_server.* to zabbix_server_user@localhost identified by 'very_big_passwd_server'; create database zabbix_proxy character set utf8 collate utf8_bin; grant all privileges on zabbix_proxy.* to zabbix_proxy_user@localhost identified by 'very_big_passwd_proxy'; flush privileges;
Теперь нам необходимо импортировать данные в соответствующие БД. Для zabbix-server нам нужно импортировать 3 файла (schema.sql, images.sql и data.sql), для zabbix-proxy только один (schema.sql).
Все нужные нам файлы находятся в каталоге database/mysql/
Напомню, что начиная с самого начала статьи мы не покидали корневой каталог с исходным кодом zabbix v4.4.10, поэтому все манипуляции мы выполняем находясь в нем.
Импортируем файлы в БД:
mysql -u zabbix_server_user -pvery_big_passwd_server zabbix_server < database/mysql/schema.sql mysql -u zabbix_server_user -pvery_big_passwd_server zabbix_server < database/mysql/images.sql mysql -u zabbix_server_user -pvery_big_passwd_server zabbix_server < database/mysql/data.sql mysql -u zabbix_proxy_user -pvery_big_passwd_proxy zabbix_proxy < database/mysql/schema.sql
В процессе импорта не должно возникнуть никаких ошибок. Чтобы проверить корректность импорта можно сделать простые запросы к каждой базе, например посмотреть список таблиц или список стандартных пользователей в базе zabbix-server, попробуем вывести список пользователе в базе zabbix_server:
# mysql -u zabbix_server_user -pvery_big_passwd_server zabbix_server -e "select userid,alias from users;" +--------+-------+ | userid | alias | +--------+-------+ | 1 | Admin | | 2 | guest | +--------+-------+
Попробуем вывести список таблиц в базе zabbix_proxy (сокращенный вывод):
# mysql -u zabbix_proxy_user -pvery_big_passwd_proxy zabbix_proxy -e "show tables;" +----------------------------+ | Tables_in_zabbix_proxy | +----------------------------+ | acknowledges | | actions | | alerts | ..... | widget_field | +----------------------------+
Мы видим, что структура баз для zabbix-server и zabbix-proxy создана и в базе zabbix-server есть первоначальные данные.
Теперь нам нужно внести в файлы конфигурации zabbix-server и zabbix-proxy данные для подключения к БД.
Меняем стандартные настройки подключения к БД для zabbix-server:
sed -i 's/DBName=zabbix/DBName=zabbix_server/g' /etc/zabbix/zabbix_server.conf sed -i 's/DBUser=zabbix/DBUser=zabbix_server_user/g' /etc/zabbix/zabbix_server.conf sed -i 's/# DBPassword=/DBPassword=very_big_passwd_server/g' /etc/zabbix/zabbix_server.conf
Меняем стандартные настройки подключения к БД для zabbix-proxy:
sed -i 's/DBUser=zabbix/DBUser=zabbix_proxy_user/g' /etc/zabbix/zabbix_proxy.conf sed -i 's/# DBPassword=/DBPassword=very_big_passwd_proxy/g' /etc/zabbix/zabbix_proxy.conf
Давайте посмотрим итоговые файлы конфигурации, я исключу из вывода комментарии и оставлю только установленные нами настройки:
# cat /etc/zabbix/zabbix_agentd.conf | egrep -Ev "^\s*(;|#|$)" PidFile=/run/zabbix/zabbix_agentd.pid LogFile=/var/log/zabbix/zabbix_agentd.log Server=127.0.0.1 ServerActive=127.0.0.1 Hostname=Zabbix server
# cat /etc/zabbix/zabbix_server.conf | egrep -Ev "^\s*(;|#|$)" LogFile=/var/log/zabbix/zabbix_server.log PidFile=/run/zabbix/zabbix_server.pid DBName=zabbix_server DBUser=zabbix_server_user DBPassword=very_big_passwd_server Timeout=4 LogSlowQueries=3000 StatsAllowedIP=127.0.0.1
# cat /etc/zabbix/zabbix_proxy.conf | egrep -Ev "^\s*(;|#|$)" Server=127.0.0.1 Hostname=Zabbix proxy ListenPort=10052 LogFile=/var/log/zabbix/zabbix_proxy.log PidFile=/run/zabbix/zabbix_proxy.pid DBName=zabbix_proxy DBUser=zabbix_proxy_user DBPassword=very_big_passwd_proxy Timeout=4 LogSlowQueries=3000 StatsAllowedIP=127.0.0.1
После того как мы указали настройки подключения к БД мы можем запустить zabbix-server, zabbix-proxy и zabbix-agent.
7. Запуск zabbix-server, zabbix-proxy, zabbix-agent и проверка лог-файлов.
Перед тем как запустить zabbix-server в первый раз мы должны запустить утилиту download-mibs (однократно), которая распакует, скомпилирует и разложит по нужным папкам MIB-файлы. Это необходимо для корректной работы SNMP мониторинга. Об этом я писал отдельную статью.
Запускаем download-mibs:
/usr/bin/download-mibs
Теперь запускаем zabbix-server:
systemctl start zabbix-server
Проверим наличие запущенных процессов:
ps -ef | grep [z]abbix_server
Результат:
zabbix 1702 1 0 00:25 ? 00:00:00 /usr/local/sbin/zabbix_server zabbix 1705 1702 0 00:25 ? 00:00:00 /usr/local/sbin/zabbix_server: configuration syncer [waiting 60 sec for processes] zabbix 1706 1702 0 00:25 ? 00:00:00 /usr/local/sbin/zabbix_server: housekeeper [startup idle for 30 minutes] zabbix 1707 1702 0 00:25 ? 00:00:00 /usr/local/sbin/zabbix_server: timer #1 [updated 0 hosts, suppressed 0 events in 0.003476 sec, idle 59 sec] zabbix 1708 1702 0 00:25 ? 00:00:00 /usr/local/sbin/zabbix_server: http poller #1 [got 0 values in 0.000512 sec, idle 5 sec] zabbix 1709 1702 0 00:25 ? 00:00:00 /usr/local/sbin/zabbix_server: discoverer #1 [processed 0 rules in 0.000501 sec, idle 60 sec] zabbix 1710 1702 0 00:25 ? 00:00:00 /usr/local/sbin/zabbix_server: history syncer #1 [processed 1 values, 1 triggers in 0.043512 sec, idle 1 sec] zabbix 1711 1702 0 00:25 ? 00:00:00 /usr/local/sbin/zabbix_server: history syncer #2 [processed 0 values, 0 triggers in 0.000022 sec, idle 1 sec] zabbix 1712 1702 0 00:25 ? 00:00:00 /usr/local/sbin/zabbix_server: history syncer #3 [processed 0 values, 0 triggers in 0.000023 sec, idle 1 sec] zabbix 1713 1702 0 00:25 ? 00:00:00 /usr/local/sbin/zabbix_server: history syncer #4 [processed 0 values, 0 triggers in 0.000022 sec, idle 1 sec] zabbix 1714 1702 0 00:25 ? 00:00:00 /usr/local/sbin/zabbix_server: escalator #1 [processed 0 escalations in 0.000724 sec, idle 3 sec] zabbix 1715 1702 0 00:25 ? 00:00:00 /usr/local/sbin/zabbix_server: proxy poller #1 [exchanged data with 0 proxies in 0.000019 sec, idle 5 sec] zabbix 1716 1702 0 00:25 ? 00:00:00 /usr/local/sbin/zabbix_server: self-monitoring [processed data in 0.000017 sec, idle 1 sec] zabbix 1717 1702 0 00:25 ? 00:00:00 /usr/local/sbin/zabbix_server: task manager [processed 0 task(s) in 0.000072 sec, idle 5 sec] zabbix 1718 1702 0 00:25 ? 00:00:00 /usr/local/sbin/zabbix_server: poller #1 [got 0 values in 0.000027 sec, idle 1 sec] zabbix 1719 1702 0 00:25 ? 00:00:00 /usr/local/sbin/zabbix_server: poller #2 [got 0 values in 0.000014 sec, idle 1 sec] zabbix 1720 1702 0 00:25 ? 00:00:00 /usr/local/sbin/zabbix_server: poller #3 [got 1 values in 0.000063 sec, idle 1 sec] zabbix 1721 1702 0 00:25 ? 00:00:00 /usr/local/sbin/zabbix_server: poller #4 [got 0 values in 0.000008 sec, idle 1 sec] zabbix 1722 1702 0 00:25 ? 00:00:00 /usr/local/sbin/zabbix_server: poller #5 [got 0 values in 0.000009 sec, idle 1 sec] zabbix 1723 1702 0 00:25 ? 00:00:00 /usr/local/sbin/zabbix_server: unreachable poller #1 [got 0 values in 0.000021 sec, idle 5 sec] zabbix 1724 1702 0 00:25 ? 00:00:00 /usr/local/sbin/zabbix_server: trapper #1 [processed data in 0.000000 sec, waiting for connection] zabbix 1725 1702 0 00:25 ? 00:00:00 /usr/local/sbin/zabbix_server: trapper #2 [processed data in 0.000000 sec, waiting for connection] zabbix 1726 1702 0 00:25 ? 00:00:00 /usr/local/sbin/zabbix_server: trapper #3 [processed data in 0.000000 sec, waiting for connection] zabbix 1727 1702 0 00:25 ? 00:00:00 /usr/local/sbin/zabbix_server: trapper #4 [processed data in 0.000000 sec, waiting for connection] zabbix 1728 1702 0 00:25 ? 00:00:00 /usr/local/sbin/zabbix_server: trapper #5 [processed data in 0.000000 sec, waiting for connection] zabbix 1731 1702 0 00:25 ? 00:00:00 /usr/local/sbin/zabbix_server: icmp pinger #1 [got 0 values in 0.000103 sec, idle 5 sec] zabbix 1732 1702 0 00:25 ? 00:00:00 /usr/local/sbin/zabbix_server: alert manager #1 [sent 0, failed 0 alerts, idle 5.007666 sec during 5.007731 sec] zabbix 1733 1702 0 00:25 ? 00:00:00 /usr/local/sbin/zabbix_server: alerter #1 started zabbix 1734 1702 0 00:25 ? 00:00:00 /usr/local/sbin/zabbix_server: alerter #2 started zabbix 1735 1702 0 00:25 ? 00:00:00 /usr/local/sbin/zabbix_server: alerter #3 started zabbix 1736 1702 0 00:25 ? 00:00:00 /usr/local/sbin/zabbix_server: preprocessing manager #1 [queued 0, processed 0 values, idle 5.001677 sec during 5.001699 sec] zabbix 1737 1702 0 00:25 ? 00:00:00 /usr/local/sbin/zabbix_server: preprocessing worker #1 started zabbix 1738 1702 0 00:25 ? 00:00:00 /usr/local/sbin/zabbix_server: preprocessing worker #2 started zabbix 1739 1702 0 00:25 ? 00:00:00 /usr/local/sbin/zabbix_server: preprocessing worker #3 started zabbix 1740 1702 0 00:25 ? 00:00:00 /usr/local/sbin/zabbix_server: lld manager #1 [processed 0 LLD rules during 5.003868 sec] zabbix 1741 1702 0 00:25 ? 00:00:00 /usr/local/sbin/zabbix_server: lld worker #1 started zabbix 1742 1702 0 00:25 ? 00:00:00 /usr/local/sbin/zabbix_server: lld worker #2 started
Мы видим, что основной процесс и множество вспомогательных процессов запустились.
Проверим вывод лог-файла /var/log/zabbix/zabbix_server.log:
cat /var/log/zabbix/zabbix_server.log
Результат:
1702:20190905:002508.816 Starting Zabbix Server. Zabbix 4.4.10 (revision XXXXXXX). 1702:20190905:002508.816 ****** Enabled features ****** 1702:20190905:002508.816 SNMP monitoring: YES 1702:20190905:002508.816 IPMI monitoring: YES 1702:20190905:002508.816 Web monitoring: YES 1702:20190905:002508.816 VMware monitoring: YES 1702:20190905:002508.816 SMTP authentication: YES 1702:20190905:002508.816 ODBC: YES 1702:20190905:002508.816 SSH2 support: YES 1702:20190905:002508.816 IPv6 support: YES 1702:20190905:002508.816 TLS support: YES 1702:20190905:002508.816 ****************************** 1702:20190905:002508.816 using configuration file: /etc/zabbix/zabbix_server.conf 1702:20190905:002508.840 current database version (mandatory/optional): 04040000/04040001 1702:20190905:002508.840 required mandatory version: 04020000 1702:20190905:002508.907 server #0 started [main process] 1718:20190905:002508.913 server #14 started [poller #1] 1719:20190905:002508.914 server #15 started [poller #2] 1710:20190905:002508.914 server #6 started [history syncer #1] 1711:20190905:002508.914 server #7 started [history syncer #2] 1712:20190905:002508.915 server #8 started [history syncer #3] 1713:20190905:002508.915 server #9 started [history syncer #4] 1709:20190905:002508.915 server #5 started [discoverer #1] 1720:20190905:002508.915 server #16 started [poller #3] 1721:20190905:002508.916 server #17 started [poller #4] 1722:20190905:002508.916 server #18 started [poller #5] 1723:20190905:002508.917 server #19 started [unreachable poller #1] 1705:20190905:002508.917 server #1 started [configuration syncer #1] 1734:20190905:002508.922 server #28 started [alerter #2] 1733:20190905:002508.922 server #27 started [alerter #1] 1735:20190905:002508.922 server #29 started [alerter #3] 1732:20190905:002508.922 server #26 started [alert manager #1] 1731:20190905:002508.930 server #25 started [icmp pinger #1] 1707:20190905:002508.982 server #3 started [timer #1] 1728:20190905:002508.982 server #24 started [trapper #5] 1727:20190905:002508.983 server #23 started [trapper #4] 1726:20190905:002508.983 server #22 started [trapper #3] 1725:20190905:002508.984 server #21 started [trapper #2] 1724:20190905:002508.984 server #20 started [trapper #1] 1708:20190905:002508.985 server #4 started [http poller #1] 1714:20190905:002508.985 server #10 started [escalator #1] 1716:20190905:002508.986 server #12 started [self-monitoring #1] 1715:20190905:002508.986 server #11 started [proxy poller #1] 1717:20190905:002508.986 server #13 started [task manager #1] 1706:20190905:002508.987 server #2 started [housekeeper #1] 1736:20190905:002508.987 server #30 started [preprocessing manager #1] 1737:20190905:002508.988 server #31 started [preprocessing worker #1] 1738:20190905:002508.988 server #32 started [preprocessing worker #2] 1739:20190905:002508.989 server #33 started [preprocessing worker #3] 1741:20190905:002508.989 server #35 started [lld worker #1] 1740:20190905:002508.989 server #34 started [lld manager #1] 1742:20190905:002508.990 server #36 started [lld worker #2]
Лог-файл так же подтверждает запуск всех основных процессов zabbix-server.
Проверим открытые порты:
netstat -ltupn | grep zabbix_server
Результат:
tcp 0 0 0.0.0.0:10051 0.0.0.0:* LISTEN 1702/zabbix_server tcp6 0 0 :::10051 :::* LISTEN 1702/zabbix_server
Мы видим, что zabbix_server открыл входящий порт 10051 для приема соединений.
Теперь запустим zabbix-proxy:
systemctl start zabbix-proxy
Проверим наличие запущенных процессов:
ps -ef | grep [z]abbix_proxy
Результат:
zabbix 7048 1 0 00:42 ? 00:00:00 /usr/local/sbin/zabbix_proxy zabbix 7051 7048 0 00:42 ? 00:00:00 /usr/local/sbin/zabbix_proxy: configuration syncer [synced config 0 bytes in 0.003421 sec, idle 3600 sec] zabbix 7052 7048 0 00:42 ? 00:00:00 /usr/local/sbin/zabbix_proxy: heartbeat sender [sending heartbeat message failed in 0.029347 sec, idle 60 sec] zabbix 7053 7048 0 00:42 ? 00:00:00 /usr/local/sbin/zabbix_proxy: data sender [sent 0 values in 0.000451 sec, idle 1 sec] zabbix 7054 7048 0 00:42 ? 00:00:00 /usr/local/sbin/zabbix_proxy: housekeeper [startup idle for 30 minutes] zabbix 7055 7048 0 00:42 ? 00:00:00 /usr/local/sbin/zabbix_proxy: http poller #1 [got 0 values in 0.000474 sec, idle 5 sec] zabbix 7056 7048 0 00:42 ? 00:00:00 /usr/local/sbin/zabbix_proxy: discoverer #1 [processed 0 rules in 0.004028 sec, idle 60 sec] zabbix 7057 7048 0 00:42 ? 00:00:00 /usr/local/sbin/zabbix_proxy: history syncer #1 [processed 0 values in 0.000011 sec, idle 1 sec] zabbix 7058 7048 0 00:42 ? 00:00:00 /usr/local/sbin/zabbix_proxy: history syncer #2 [processed 0 values in 0.000020 sec, idle 1 sec] zabbix 7059 7048 0 00:42 ? 00:00:00 /usr/local/sbin/zabbix_proxy: history syncer #3 [processed 0 values in 0.000010 sec, idle 1 sec] zabbix 7060 7048 0 00:42 ? 00:00:00 /usr/local/sbin/zabbix_proxy: history syncer #4 [processed 0 values in 0.000020 sec, idle 1 sec] zabbix 7061 7048 0 00:42 ? 00:00:00 /usr/local/sbin/zabbix_proxy: self-monitoring [processed data in 0.000022 sec, idle 1 sec] zabbix 7062 7048 0 00:42 ? 00:00:00 /usr/local/sbin/zabbix_proxy: task manager [processed 0 task(s) in 0.000119 sec, idle 5 sec] zabbix 7063 7048 0 00:42 ? 00:00:00 /usr/local/sbin/zabbix_proxy: poller #1 [got 0 values in 0.000010 sec, idle 5 sec] zabbix 7064 7048 0 00:42 ? 00:00:00 /usr/local/sbin/zabbix_proxy: poller #2 [got 0 values in 0.000007 sec, idle 5 sec] zabbix 7065 7048 0 00:42 ? 00:00:00 /usr/local/sbin/zabbix_proxy: poller #3 [got 0 values in 0.000024 sec, idle 5 sec] zabbix 7070 7048 0 00:42 ? 00:00:00 /usr/local/sbin/zabbix_proxy: poller #4 [got 0 values in 0.000007 sec, idle 5 sec] zabbix 7071 7048 0 00:42 ? 00:00:00 /usr/local/sbin/zabbix_proxy: poller #5 [got 0 values in 0.000007 sec, idle 5 sec] zabbix 7072 7048 0 00:42 ? 00:00:00 /usr/local/sbin/zabbix_proxy: unreachable poller #1 [got 0 values in 0.000007 sec, idle 5 sec] zabbix 7073 7048 0 00:42 ? 00:00:00 /usr/local/sbin/zabbix_proxy: trapper #1 [processed data in 0.000000 sec, waiting for connection] zabbix 7074 7048 0 00:42 ? 00:00:00 /usr/local/sbin/zabbix_proxy: trapper #2 [processed data in 0.000000 sec, waiting for connection] zabbix 7075 7048 0 00:42 ? 00:00:00 /usr/local/sbin/zabbix_proxy: trapper #3 [processed data in 0.000000 sec, waiting for connection] zabbix 7076 7048 0 00:42 ? 00:00:00 /usr/local/sbin/zabbix_proxy: trapper #4 [processed data in 0.000000 sec, waiting for connection] zabbix 7077 7048 0 00:42 ? 00:00:00 /usr/local/sbin/zabbix_proxy: trapper #5 [processed data in 0.000000 sec, waiting for connection] zabbix 7078 7048 0 00:42 ? 00:00:00 /usr/local/sbin/zabbix_proxy: icmp pinger #1 [got 0 values in 0.000017 sec, idle 5 sec] zabbix 7079 7048 0 00:42 ? 00:00:00 /usr/local/sbin/zabbix_proxy: preprocessing manager #1 [queued 0, processed 0 values, idle 5.006199 sec during 5.006265 sec] zabbix 7080 7048 0 00:42 ? 00:00:00 /usr/local/sbin/zabbix_proxy: preprocessing worker #1 started zabbix 7081 7048 0 00:42 ? 00:00:00 /usr/local/sbin/zabbix_proxy: preprocessing worker #2 started zabbix 7082 7048 0 00:42 ? 00:00:00 /usr/local/sbin/zabbix_proxy: preprocessing worker #3 started
Мы так же видим, что основной процесс и множество вспомогательных процессов zabbix-proxy успешно запустились.
Проверим открытые порты:
netstat -ltupn | grep zabbix_proxy
Результат:
tcp 0 0 0.0.0.0:10052 0.0.0.0:* LISTEN 7048/zabbix_proxy tcp6 0 0 :::10052 :::* LISTEN 7048/zabbix_proxy
Мы видим, что zabbix_proxy открыл входящий порт 10052 для приема соединений.
Проверим вывод лог-файла /var/log/zabbix/zabbix_proxy.log:
cat /var/log/zabbix/zabbix_proxy.log
Результат:
7048:20190905:004207.716 Starting Zabbix Proxy (active) [Zabbix proxy]. Zabbix 4.4.10 (revision XXXXXXXXX). 7048:20190905:004207.716 **** Enabled features **** 7048:20190905:004207.716 SNMP monitoring: YES 7048:20190905:004207.716 IPMI monitoring: YES 7048:20190905:004207.716 Web monitoring: YES 7048:20190905:004207.716 VMware monitoring: YES 7048:20190905:004207.716 ODBC: YES 7048:20190905:004207.716 SSH2 support: YES 7048:20190905:004207.716 IPv6 support: YES 7048:20190905:004207.716 TLS support: YES 7048:20190905:004207.716 ************************** 7048:20190905:004207.716 using configuration file: /etc/zabbix/zabbix_proxy.conf 7048:20190905:004207.775 current database version (mandatory/optional): 04040000/04040001 7048:20190905:004207.775 required mandatory version: 04020000 7048:20190905:004207.945 proxy #0 started [main process] 7064:20190905:004207.949 proxy #14 started [poller #2] 7065:20190905:004207.953 proxy #15 started [poller #3] 7056:20190905:004207.956 proxy #6 started [discoverer #1] 7057:20190905:004207.957 proxy #7 started [history syncer #1] 7061:20190905:004207.958 proxy #11 started [self-monitoring #1] 7058:20190905:004207.958 proxy #8 started [history syncer #2] 7059:20190905:004207.958 proxy #9 started [history syncer #3] 7060:20190905:004207.959 proxy #10 started [history syncer #4] 7062:20190905:004207.959 proxy #12 started [task manager #1] 7063:20190905:004207.960 proxy #13 started [poller #1] 7055:20190905:004207.962 proxy #5 started [http poller #1] 7054:20190905:004207.966 proxy #4 started [housekeeper #1] 7053:20190905:004207.966 proxy #3 started [data sender #1] 7052:20190905:004207.968 proxy #2 started [heartbeat sender #1] 7070:20190905:004207.970 proxy #16 started [poller #4] 7071:20190905:004207.973 proxy #17 started [poller #5] 7072:20190905:004207.977 proxy #18 started [unreachable poller #1] 7073:20190905:004207.982 proxy #19 started [trapper #1] 7051:20190905:004207.983 proxy #1 started [configuration syncer #1] 7074:20190905:004207.984 proxy #20 started [trapper #2] 7075:20190905:004207.989 proxy #21 started [trapper #3] 7076:20190905:004207.991 proxy #22 started [trapper #4] 7077:20190905:004207.993 proxy #23 started [trapper #5] 7078:20190905:004207.995 proxy #24 started [icmp pinger #1] 7052:20190905:004207.998 cannot send heartbeat message to server at "127.0.0.1": proxy "Zabbix proxy" not found 7051:20190905:004207.998 cannot obtain configuration data from server at "127.0.0.1": empty string received 7079:20190905:004207.998 proxy #25 started [preprocessing manager #1] 7080:20190905:004207.999 proxy #26 started [preprocessing worker #1] 7081:20190905:004208.000 proxy #27 started [preprocessing worker #2] 7082:20190905:004208.001 proxy #28 started [preprocessing worker #3] 7053:20190905:004208.057 cannot send proxy data to server at "127.0.0.1": proxy "Zabbix proxy" not found 7053:20190905:004209.057 cannot send proxy data to server at "127.0.0.1": proxy "Zabbix proxy" not found
По логу мы так же видим старт всех процессов, но мы так же видим некоторые ошибки вида:
7052:20190905:004207.998 cannot send heartbeat message to server at "127.0.0.1": proxy "Zabbix proxy" not found 7051:20190905:004207.998 cannot obtain configuration data from server at "127.0.0.1": empty string received
и далее в логе будут регулярно появляться сообщения вида:
7053:20190905:004208.057 cannot send proxy data to server at "127.0.0.1": proxy "Zabbix proxy" not found 7053:20190905:004209.057 cannot send proxy data to server at "127.0.0.1": proxy "Zabbix proxy" not found
Причина в этом простая — наш zabbix-server совершенно ничего не знает о zabbix-proxy, который хочет к нему подключиться и именно поэтому процесс zabbix-proxy, да собственно и zabbix-server начали писать в свои логи, что они не знакомы друг с другом. Это досадное недоразумение мы исправим чуть позже, когда установим zabbix web-frontend и зарегистрируем через него наш zabbix-proxy, а пока мы остановим zabbix-proxy чтобы он не мусорил нам в лог-файлы.
Выполним остановку zabbix-proxy:
systemctl stop zabbix-proxy
Теперь настала очередь запустить zabbix-agent:
systemctl start zabbix-agent
Проверим наличие запущенных процессов:
ps -ef | grep [z]abbix_agent
Результат:
zabbix 7120 1 0 00:53 ? 00:00:00 /usr/local/sbin/zabbix_agentd zabbix 7121 7120 0 00:53 ? 00:00:00 /usr/local/sbin/zabbix_agentd: collector [idle 1 sec] zabbix 7122 7120 0 00:53 ? 00:00:00 /usr/local/sbin/zabbix_agentd: listener #1 [waiting for connection] zabbix 7123 7120 0 00:53 ? 00:00:00 /usr/local/sbin/zabbix_agentd: listener #2 [waiting for connection] zabbix 7124 7120 0 00:53 ? 00:00:00 /usr/local/sbin/zabbix_agentd: listener #3 [waiting for connection] zabbix 7125 7120 0 00:53 ? 00:00:00 /usr/local/sbin/zabbix_agentd: active checks #1 [idle 1 sec]
Проверим вывод лог-файла /var/log/zabbix/zabbix_agentd.log:
cat /var/log/zabbix/zabbix_agentd.log
Результат:
7120:20190905:005319.587 Starting Zabbix Agent [Zabbix server]. Zabbix 4.4.10 (revision XXXXXXXXX). 7120:20190905:005319.587 **** Enabled features **** 7120:20190905:005319.587 IPv6 support: YES 7120:20190905:005319.587 TLS support: YES 7120:20190905:005319.587 ************************** 7120:20190905:005319.587 using configuration file: /etc/zabbix/zabbix_agentd.conf 7120:20190905:005319.587 agent #0 started [main process] 7125:20190905:005319.588 agent #5 started [active checks #1] 7124:20190905:005319.589 agent #4 started [listener #3] 7123:20190905:005319.592 agent #3 started [listener #2] 7122:20190905:005319.593 agent #2 started [listener #1] 7121:20190905:005319.598 agent #1 started [collector]
По логу мы так же видим старт всех процессов zabbix-agentd.
Если мы заглянем сейчас в лог нашего zabbix-server:
tail -n 4 /var/log/zabbix/zabbix_server.log
То можем увидеть такие строки:
7026:20190905:005114.557 cannot parse proxy data from active proxy at "127.0.0.1": proxy "Zabbix proxy" not found 7026:20190905:005115.559 cannot parse proxy data from active proxy at "127.0.0.1": proxy "Zabbix proxy" not found 7026:20190905:005116.559 cannot parse proxy data from active proxy at "127.0.0.1": proxy "Zabbix proxy" not found 7025:20190905:005407.217 enabling Zabbix agent checks on host "Zabbix server": host became available
Для нас будет интересна последняя строка, в которой говориться, что zabbix-server подключился к нашему zabbix-agent и начал сбор данных.
На этом первая часть статьи завершена, в следующей второй части мы рассмотрим процесс установки и запуска Web-frontend (web-интерфейса) системы мониторинга Zabbix.
На этом все, до скорых встреч. Если у Вас возникли вопросы или Вы хотите чтобы я помог Вам, то Вы всегда можете связаться со мной разными доступными способами.
Профессионально занимаюсь системным администрированием Linux -серверов и баз данных (MySQL, POstgreSQL) на протяжении последних 24 лет.