Сборка и установка системы мониторинга Zabbix из исходного кода (Часть 1)

Система мониторинга 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.

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


Оставить комментарий

avatar
1000

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

  Подписаться  
Уведомление о