Установка Zabbix сервера, агента и прокси
Мамкин АдминНа днях разворачивал с нуля новую копию Zabbix сервера, т.к. мой старый сервер, который отработал верой и правдой несколько лет и пережил кучу экспериментов, покрылся кучей ошибок и в итоге после очередного обновления благополучно сдох.
Это послужило стимулом все начать сначала.
Приведу выжимку из команд с минимальными комментариями по установке самого сервера, клиентов и разворачиванию активного прокси сервера Zabbix.
Установку всех компонентов буду выполнять на Debian 11 "bullseye".
1.Установка и настройка Zabbix сервера
Установка Mariadb
- apt update -y
- apt install wget curl apt-transport-https mc
- wget https://downloads.mariadb.com/MariaDB/mariadb_repo_setup
- echo "d4e4635eeb79b0e96483bd70703209c63da55a236eadd7397f769ee434d92ca8 mariadb_repo_setup" | sha256sum -c -
- chmod +x mariadb_repo_setup
- ./mariadb_repo_setup
- apt update -y
- apt install mariadb-server mariadb-client
- systemctl start mariadb
- systemctl enable mariadb
- mysql_secure_installation
mysql_secure_installation
Enter current password for root (enter for none): OK, successfully used password, moving on... Switch to unix_socket authentication [Y/n] y Enabled successfully! Reloading privilege tables.. ... Success! Change the root password? [Y/n] n ... skipping. Remove anonymous users? [Y/n] y ... Success! Disallow root login remotely? [Y/n] y ... Success! Remove test database and access to it? [Y/n] y - Dropping test database... ... Success! - Removing privileges on test database... ... Success! Reload privilege tables now? [Y/n] y ... Success! Cleaning up... All done! If you've completed all of the above steps, your MariaDB installation should now be secure.
Установка Zabbix
- wget https://repo.zabbix.com/zabbix/6.2/debian/pool/main/z/zabbix-release/zabbix-release_6.2-1+debian11_all.deb
- dpkg -i zabbix-release_6.2-1+debian11_all.deb
- apt update -y
- apt install zabbix-server-mysql zabbix-frontend-php zabbix-nginx-conf zabbix-sql-scripts zabbix-agent
Настройка БД
- mysql -uroot -p
- create database zabbix character set utf8mb4 collate utf8mb4_bin;
- create user zabbix@localhost identified by 'password';
- grant all privileges on zabbix.* to zabbix@localhost;
- SET GLOBAL log_bin_trust_function_creators = 1;
- quit;
- zcat /usr/share/doc/zabbix-sql-scripts/mysql/server.sql.gz | mysql -uzabbix -p zabbix
- mysql -uroot -p
- SET GLOBAL log_bin_trust_function_creators = 0;
- quit;
Минимальная настройка Конфигов
- mcedit /etc/zabbix/zabbix_server.conf
- DBPassword=password
- mcedit /etc/zabbix/nginx.conf
- listen 8080;
- #server_name server.example.com;
Раскомментировать, если сервер смотрит наружу напрямую.
Я использую перед ним прокси сервер Nginx, который смотрит в мир и управляет доменами. Порт и домен выбираете на свой вкус.
Также строку с доменом можно оставить закомментированной, если планируется использование сервера только в локальной сети.
Финишные штрихи
- systemctl stop apache2
- systemctl disable apache2
- systemctl restart zabbix-server zabbix-agent nginx
- systemctl enable zabbix-server zabbix-agent
Доступ к веб интерфейсу
Дальше нужно несколько раз нажать далее-далее-далее в WEB интерфейсе, чтобы завершить настройку.
http://LAN_IP:8080/setup.php Admin zabbix
2.Установка и настройка Zabbix-proxy
Zabbix-proxy очень полезная штука.
Как известно, Zabbix сервер может соединяться с агентами в двух режимах - активном и пассивном (стандартном).
Различие этих режимов в том, что в стандартном режиме сервер подключается к агенту, запрашивает данные, и агент отправляет результат обратно серверу.
В активном режиме сначала агент должен запросить с сервера список элементов данных для независимой обработки, т.е. подключение идет в обратную сторону, от агента к серверу.
Пассивная проверка:
- Сервер открывает TCP соединение
- Сервер отправляет agent.ping\n
- Агент получает запрос и отвечает <HEADER><DATALEN>1
- Серверные процессы обрабатывают данные полученного значения, в нашем случае "1".
- TCP соединение закрывается
Активная проверка:
- Агент открывает TCP соединение
- Агент запрашивает список элементов данных
- Сервер отвечает списком элементов данных (ключ элемента, задержка)
- Агент обрабатывает ответ
- TCP соединение закрывается
- Агент начинает периодический сбор данных
...далее:
- Агент открывает TCP соединение
- Агент отправляет список значений
- Сервер обрабатывает полученные данные и отправляет обратно результат обработки
- TCP соединение закрывается
Отсюда можно сделать вывод, что для пассивного подключения у сервера должен быть доступ к агенту, это не составляет никаких неудобств, если например, и сервер и агенты находятся в одной локальной сети.
Но если агенты находятся по разные стороны интернета, тогда придется на каждого агента пробрасывать свой порт, прописывать агенты вручную на сервер, а в настройках агентов в веб интерфейсе сервера указывать внешний статический адрес, за которым они находятся, и каждому свой порт для подключения - неудобно.
Для этого и существует второй способ - активный, когда только сервер должен иметь статику и один проброшенный на сервер порт (по-умолчанию 10051).
В таком случае все агенты смогут спокойно подключаться к серверу из-за ната через интернет.
Так в чем проблема?
В шаблонах, большинство шаблонов написаны для использования с пассивным (стандартным) агентом, а также в отслеживании состояния самого агента, пассивный агент отслеживается методом опроса самого агента, активный же по косвенным признакам.
Решение есть - Zabbix-proxy.
Zabbix-proxy можно установить непосредственной в сети, где работают агенты, и тогда уже он будет подключаться к серверу в активном режиме, а также к агентам в сети в обычном режиме, что позволит к ним применять все шаблоны для пассиных агентов, а также отслеживать их состояние, опрашивая сам агент.
Также преимущество Zabbix-proxy в том, что можно через инетрнет с помощью него проводить не только опросы агентов, но и опросы любого оборудования, которое находится за натом в удаленной частной локальной сети, к которому доступа извне нет.
Например, это могут быть различные коммутаторы и маршрутизаторы, железные серверы видеонаблюдения, да хоть принтеры, которые поддерживают SNMP.
Список поддерживаемых проверок в таком режиме большой, вплоть до отслеживания отдельных процессов и автоматизации с подключением к устройству для автоматического выполнения действий при возникновении проблем.
Установка Zabbix-proxy
- apt update -y
- apt install wget curl apt-transport-https mc
- wget https://downloads.mariadb.com/MariaDB/mariadb_repo_setup
- echo "d4e4635eeb79b0e96483bd70703209c63da55a236eadd7397f769ee434d92ca8 mariadb_repo_setup" | sha256sum -c -
- chmod +x mariadb_repo_setup
- ./mariadb_repo_setup
- apt update -y
- apt install mariadb-server mariadb-client
- systemctl start mariadb
- systemctl enable mariadb
- mysql_secure_installation
- wget https://repo.zabbix.com/zabbix/6.2/debian/pool/main/z/zabbix-release/zabbix-release_6.2-1+debian11_all.deb
- dpkg -i zabbix-release_6.2-1+debian11_all.deb
- apt update -y
- apt install zabbix-proxy-mysql zabbix-sql-scripts
- mysql -uroot -p
- create database zabbix_proxy character set utf8mb4 collate utf8mb4_bin;
- create user zabbix@localhost identified by 'password';
- grant all privileges on zabbix_proxy.* to zabbix@localhost;
- SET GLOBAL log_bin_trust_function_creators = 1;
- quit;
- cat /usr/share/doc/zabbix-sql-scripts/mysql/proxy.sql | mysql -uroot zabbix_proxy
- mysql -uroot -p
- SET GLOBAL log_bin_trust_function_creators = 0;
- quit;
- systemctl start zabbix-proxy
- systemctl enable zabbix-proxy
Настройка Zabbix-proxy
- mcedit /etc/zabbix/zabbix_proxy.conf
- ProxyMode=0
- Server=server.example.com:51051 # если порт не указывать, прокси будет пытаться подключиться на 10051, этот порт отличается от порта WEB интерфейса сервера и должен быть проброшен на сервер отдельно
- Hostname=Proxy1
- DBPassword=password
- AllowRoot=1 # ставлю от рута, поэтому надо разрешить проксе работать также от рута
- TLSConnect=psk
- TLSPSKIdentity=Proxy_psk_identity # это значение укажем при настройке прокси на сервере Zabbix
- TLSPSKFile=/etc/zabbix/key2.psk
- echo "passphrase2" > /etc/zabbix/key2.psk
passphrase2 - результат вывода команды: openssl rand -hex 256
чтобы включить шифрование для передачи данных через интернет,
это значение также укажем при настройке прокси на сервере Zabbix
- systemctl restart zabbix-proxy
- systemctl enable zabbix-proxy
Настройка Прокси на сервере Zabbix
В веб интерфейсе сервера переходим в:
Администрирование --> Прокси --> Создать прокси.
Выбираем "Активный", имя прокси вводим такое же, как указали в конфиге "Proxy1", в шифровании оставляем только галочку "PSK" и вводим значения:
"Proxy_psk_identity" --> "Идентификатор PSK" и "passphrase2" --> "PSK".
3.Установка и настройка Zabbix-agent2
Существует две версии агентов, Zabbix-agent и Zabbix-agent2.
Если вкратце, то Zabbix-agent2 новее, продвинутее и имеет больше возможностей.
Но бывали случаи, когда на старые версии Windows ставился только Zabbix-agent.
Ставится он уже привычным нам способом:
Установка Zabbix-agent2 на Debian
- apt update -y
- wget https://repo.zabbix.com/zabbix/6.2/debian/pool/main/z/zabbix-release/zabbix-release_6.2-1+debian11_all.deb
- dpkg -i zabbix-release_6.2-1+debian11_all.deb
- apt update -y
- apt install zabbix-agent2 mc
- echo "passphrase" > /etc/zabbix/key.psk
passphrase - результат вывода команды: openssl rand -hex 256
чтобы включить шифрование для передачи данных через интернет, а также иметь возможность авторегистрации агентов (мы же не собираемся все 100500 агентов вбивать руками на сервере) даже подключенных через Zabbix-proxy.
Это значение отличается от passphrase2.
Установка Zabbix-agent2 на Windows
Качаем агента по ссылке.
Запускаем .msi файл, вбиваем настройки нашего сервера или прокси, ставим галочку PSK и указываем данные ключа passphrase и данные идентификации ключа, например Agent_psk_identity.
Настройка Zabbix-agent2
Настройка в общем виде сводится к изменению конфига, и одинакова что для Windows, что для Linux, за исключением пути к key.psk
Опишу настройку в Linux
- mcedit /etc/zabbix/zabbix_agent2.conf
- Server=server.example.com,LAN_IP_PROXY # можно указать несколько адресов серверов или прокси, с которых агент будет принимать соединения в пассивном режиме
- ServerActive=server.example.com:51051,LAN_IP_PROXY
- Hostname=PC # Так наш агент будет отображаться на Zabbix сервере
- TLSConnect=psk
- TLSAccept=psk
- TLSPSKIdentity=Agent_psk_identity
- TLSPSKFile=/etc/zabbix/key.psk
для Windows пути будут:
TLSPSKFile=C:\Program Files\Zabbix Agent 2\key.psk
или
TLSPSKFile=C:\Program Files\Zabbix Agent\key.psk - systemctl restart zabbix-agent2
- systemctl enable zabbix-agent2
Авторегистрация активных агентов или агентов, подключенных через прокси
В веб интерфейсе сервера переходим в:
Администрирование --> Общие --> Авторегистрация
Оставляем только галочку "PSK" и вводим значения:
"Agent_psk_identity" --> "Идентификатор PSK" и "passphrase" --> "PSK".
Далее переходим в:
Настройка --> Действия --> Действия авторегистрации
На вкладке "Дейстия" даем любое имя, на вкладке "Операции" выбираем "Добавить" и из списка выбираем "Добавить узел сети".
Теперь наши агенты будут автоматически регистрироваться на сервере под теми именами, которые мы укажем в конфиге агентов в строчке "Hostname=PC".
Агенты будут попадать в группу узлов "Discovered hosts", им нужно будет присоединить в настройках необходимые шаблоны и дождаться обновления данных.
В действиях авторегистрации можно полностью автоматизировать, в какую группу будут помещаться новые агенты, какие шаблоны им будут автоматически назначены и т.д.
В том числе это можно автоматизировать с помощью настроек метаданных "HostMetadata" в конфигах агентов, а также указанием, из каких прокси пришли агенты и т.д.
Возможно, когда-нибудь я напишу о более тонкой настройке Zabbix сервера и возможностях автоматизации с помощью него.
Если вы захотите прокомментировать написанное, будем рады увидеть вас в нашем Telegram канале.