Задача: На одну систему поставить Guacamole + Zabbix 4.4
Для своего удобства в частности мониторинга за инфраструктурой я решил совместить два сервиса Guacamole + Zabbix
в единый сервис дабы при выборе узла на карте через правый клик мышью иметь возможность удаленного взаимодействия с хостом. Плюс — это я пока тестирую и набираюсь опыта с разбором всех моментов и нюансов, к тому же это интересно. Это лучше чем играть в World of Warcraft
и бездумно провожать время, я за самообразование.
Системные требования:
RAM => 4Gb
CPU = 2 Ghz
HDD = 70Gb
OS = Ubuntu 18.04 Server amd64
Шаг №1:
Предварительная подготовка системы:
ekzorchik@srv-bionic:~$ hg clone --insecure https://ekzorchik@172.35.35.8/hg/dproject ekzorchik@srv-bionic:~$ sudo ./dproject/default
Шаг №2:
ekzorchik@srv-bionic:~$ sudo nano /etc/hosts 172.33.33.6 srv-zabbix.polygon.local srv-zabbix ekzorchik@srv-bionic:~$ sudo nano /etc/hostname srv-zabbix.polygon.local ekzorchik@srv-bionic:~$ sudo reboot
Шаг №3:
Устанавливаю Web
—сервис nginx:
ekzorchik@srv-zabbix:~$ sudo apt-get install -y nginx php7.2-fpm php7.2-mysql php7.2-curl php7.2-gd php7.2-intl php-pear php-imagick php7.2-imap php7.2-pspell php7.2-recode php7.2-sqlite3 php7.2-tidy php7.2-xmlrpc php7.2-xsl php7.2-mbstring php-gettext php-ldap ekzorchik@srv-zabbix:~$ sudo nano /etc/php/7.2/fpm/php.ini date.timezone = Europe/Moscow ekzorchik@srv-zabbix:~$ sudo nano /etc/php/7.2/cli/php.ini date.timezone = Europe/Moscow ekzorchik@srv-zabbix:~$ php --version PHP 7.2.24-0ubuntu0.18.04.3 (cli) (built: Feb 11 2020 15:55:52) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies with Zend OPcache v7.2.24-0ubuntu0.18.04.3, Copyright (c) 1999-2018, by Zend Technologies ekzorchik@srv-zabbix:~$ ekzorchik@srv-zabbix:~$ sudo unlink /etc/nginx/sites-available/default ekzorchik@srv-zabbix:~$ sudo unlink /etc/nginx/sites-enabled/default ekzorchik@srv-zabbix:~$ sudo rm -f /var/www/html/index.nginx-debian.html ekzorchik@srv-zabbix:~$ sudo rm -f /usr/share/nginx/html/index.html
Шаг №4:
Устанавливаю сервис базы данных, создаю базу, пользователя и пароль:
ekzorchik@srv-zabbix:~$ sudo apt-get install -y mysql-server ekzorchik@srv-zabbix:~$ sudo mysqladmin -u root password 712mbddr@ ekzorchik@srv-zabbix:~$ sudo mysql -u root -p712mbddr@ -e "create database db_zabbix character set utf8 collate utf8_bin" ekzorchik@srv-zabbix:~$ sudo mysql -u root -p712mbddr@ -e "create user 'us_zabbix'@'localhost' identified by '612mbddr@'" ekzorchik@srv-zabbix:~$ sudo mysql -u root -p712mbddr@ -e "grant all on db_zabbix.* to 'us_zabbix'@'localhost';" ekzorchik@srv-zabbix:~$
Шаг №5:
Прописываю в систему репозитарий Zabbix
для установки последнего релиза на момент написания данной заметки (07.03.2020
):
ekzorchik@srv-zabbix:~$ wget https://repo.zabbix.com/zabbix/4.4/ubuntu/pool/main/z/zabbix-release/zabbix-release_4.4-1+bionic_all.deb ekzorchik@srv-zabbix:~$ sudo dpkg -i zabbix-release_4.4-1+bionic_all.deb ekzorchik@srv-zabbix:~$ cat /etc/apt/sources.list.d/zabbix.list deb http://repo.zabbix.com/zabbix/4.4/ubuntu bionic main deb-src http://repo.zabbix.com/zabbix/4.4/ubuntu bionic main ekzorchik@srv-zabbix:~$ ekzorchik@srv-zabbix:~$ sudo apt-get update
Шаг №6:
Устанавливаю пакет Zabbix
для работы с Mysql:
ekzorchik@srv-zabbix:~$ sudo apt-get install -y zabbix-server-mysql
Шаг №7:
В комплекте установленного пакета связки mysql + Zabbix: zabbix-server-mysql
присутствует структура формирующая базу данных, ее следует импортировать в созданную «Шаг №4
» базу указав созданного пользователя и пароль от него:
ekzorchik@srv-zabbix:~$ sudo zcat /usr/share/doc/zabbix-server-mysql/create.sql.gz | mysql -u us_zabbix -p612mbddr@ db_zabbix
На заметку: Если устанавливается только Zabbix-proxy
то у него своя собственная структура под свою базу данных:
ekzorchik@srv-zabbix:~$ sudo apt-get install -y zabbix-proxy-mysql
# zcat /usr/share/doc/zabbix-proxy-mysql/schema.sql.gz
(но лучше будет сделать на этот счет практическую заметку)
Шаг №8:
Теперь настраиваю серверную часть Zabbix
на взаимодействие с базой данных:
ekzorchik@srv-zabbix:~$ sudo nano /etc/zabbix/zabbix_server.conf LogFile=/var/log/zabbix/zabbix_server.log LogFileSize=0 PidFile=/var/run/zabbix/zabbix_server.pid SocketDir=/var/run/zabbix DBHost=localhost DBName=db_zabbix DBUser=us_zabbix DBPassword=612mbddr@ DBPort=3306 SNMPTrapperFile=/var/log/snmptrap/snmptrap.log Timeout=4 AlertScriptsPath=/usr/lib/zabbix/alertscripts ExternalScripts=/usr/lib/zabbix/externalscripts FpingLocation=/usr/bin/fping Fping6Location=/usr/bin/fping6 LogSlowQueries=3000 StatsAllowedIP=127.0.0.1
После не забываем сохранить внесенные изменения.
Шаг №9:
Устанавливаю Zabbix Frontend
ekzorchik@srv-zabbix:~$ apt-cache search zabbix-frontend zabbix-frontend-php - Zabbix network monitoring solution - PHP front-end ekzorchik@srv-zabbix:~$ apt-cache search zabbix-nginx-conf zabbix-nginx-conf - Zabbix network monitoring solution - PHP front-end ekzorchik@srv-zabbix:~$ sudo apt-get install -y zabbix-frontend-php zabbix-nginx-conf
Шаг №10:
Теперь настраиваю взаимодействие nginx + zabbix:
ekzorchik@srv-zabbix:~$ sudo nano /etc/nginx/conf.d/zabbix.conf server { # listen 80; # server_name example.com; root /usr/share/zabbix; index index.php; location = /favicon.ico { log_not_found off; } location / { try_files $uri $uri/ =404; } location /assets { access_log off; expires 10d; } location ~ /\.ht { deny all; } location ~ /(api\/|conf[^\.]|include|locale) { deny all; return 404; } location ~ [^/]\.php(/|$) { fastcgi_pass unix:/var/run/php/zabbix.sock; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_index index.php; fastcgi_param DOCUMENT_ROOT /usr/share/zabbix; fastcgi_param SCRIPT_FILENAME /usr/share/zabbix$fastcgi_script_name; fastcgi_param PATH_TRANSLATED /usr/share/zabbix$fastcgi_script_name; include fastcgi_params; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_intercept_errors on; fastcgi_ignore_client_abort off; fastcgi_connect_timeout 60; fastcgi_send_timeout 180; fastcgi_read_timeout 180; fastcgi_buffer_size 128k; fastcgi_buffers 4 256k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; } } ekzorchik@srv-zabbix:~$ sudo cp /etc/nginx/conf.d/zabbix.conf /etc/nginx/sites-available/zabbix.conf ekzorchik@srv-zabbix:~$ sudo ln -s /etc/nginx/sites-available/zabbix.conf /etc/nginx/sites-enabled/zabbix.conf ekzorchik@srv-zabbix:~$ sudo unlink /etc/nginx/conf.d/zabbix.conf ekzorchik@srv-zabbix:~$ sudo nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful ekzorchik@srv-zabbix:~$ ekzorchik@srv-zabbix:~$ sudo systemctl restart nginx php7.2-fpm
Шаг №11:
Устанавливаю Zabbix
агент на Zabbix
—сервер:
ekzorchik@srv-zabbix:~$ sudo apt-get install -y zabbix-agent ekzorchik@srv-zabbix:~$ sudo systemctl enable zabbix-agent ekzorchik@srv-zabbix:~$ sudo apt-get install -y gpg curl ekzorchik@srv-zabbix:~$ sudo rm /etc/zabbix/zabbix_agentd.conf ekzorchik@srv-zabbix:~$ sudo nano /etc/zabbix/zabbix_agentd.conf PidFile=/var/run/zabbix/zabbix_agentd.pid LogFile=/var/log/zabbix/zabbix_agentd.log LogFileSize=0 EnableRemoteCommands=1 LogRemoteCommands=1 Server=127.0.0.1, 172.33.33.6 ServerActive=127.0.0.1,172.33.33.6 Hostname=Zabbix server Include=/etc/zabbix/zabbix_agentd.d/*.conf UnsafeUserParameters=1 ekzorchik@srv-zabbix:~$ sudo visudo zabbix ALL=(ALL) NOPASSWD:ALL ekzorchik@srv-zabbix:~$ sudo systemctl restart zabbix-agent
Шаг №12:
Приступаю к настройке фронтенда (Web
-интерфейс использования)
Для это запускаем браузер, т. к. я работая за Ubuntu 18.04 Desktop amd64
ноутбука Lenovo E555
, то запускаю Google Chrome
, открываю новую вкладку и обращаюсь по http://IP&DNS/zabbix
к системе на которой под гипервизором Debian 10 + Proxmox 6
я поднимаю сервис мониторинга Zabbix 4.4.
ekzorchik@srv-zabbix:~$ hostname -I 172.33.33.6 ekzorchik@srv-zabbix:~$ ekzorchik@srv-zabbix:~$ sudo systemctl restart zabbix-server nginx php7.2-fpm
После нажатия клавиши <ENTER
> в строке адреса адресная строка меняется на http://172.33.33.6/setup.php
- этап Welcome — нажимаю Next step
- этап Check of pre-requisites (все результирующие должны иметь статус OK и только тогда двигаемся дальше) — нажимаю Next step
- этап Configure DB connection — заполняю и только после нажимаю Next step
Database type: MySQL
Database host: localhost
Database port: 3306
Database name: db_zabbix
User: uz_zabbix
Password: 612mbddr@
-
- этап Zabbix server details — заполняю и только после нажимаю Next step
-
Host: localhost
Port: 10051
Name: 172.33.33.6
- этап Pre-installation summary — результирующая предопределенных настроек, если все верно то нажимаем Next step
- этап Install — если Вы видите надпись «Congratulations! You have successfully installed Zabbix frontend.
Configuration file «/usr/share/zabbix/conf/zabbix.conf.php» created.», то значит настройка Frontend для сервиса Zabbix успешно завершена. Нажимаем Finish
Шаг №13:
Авторизуемся, для справки URL
выглядит так: http://172.33.33.6/index.php
Username: Admin
Password: zabbix
Remember me for 30 days: отмечаю галочкой
и нажимаю Sign in
. Вот и сам Web
-интерфейс
Шаг №14:
Теперь перехожу к инсталляции Guacamole
на эту же систему
Устанавливаю базу данных, пользователя и пароль под сервис guacamole
:
ekzorchik@srv-zabbix:~$ sudo mysql -u root -p712mbddr@ -e "create database db_guacamole character set utf8" ekzorchik@srv-zabbix:~$ sudo mysql -u root -p712mbddr@ -e "create user 'us_guacamole'@'localhost' identified by '612mbddr@'" ekzorchik@srv-zabbix:~$ sudo mysql -u root -p712mbddr@ -e "grant all on db_guacamole.* to 'us_guacamole'@'localhost';"
Шаг №15:
Устанавливаю необходимые пакеты для работы Guacamole:
ekzorchik@srv-zabbix:~$ sudo apt-get install -y libjpeg-turbo8-dev build-essential libcairo2-dev libossp-uuid-dev libavcodec-dev libavutil-dev libswscale-dev libfreerdp-dev libpango1.0-dev libssh2-1-dev libtelnet-dev libvncserver-dev libpulse-dev libssl-dev libvorbis-dev libwebp-dev mysql-common mysql-utilities libmysql-java freerdp-x11 freerdp2-dev libwebsockets-dev tomcat8 gcc-6 -y ekzorchik@srv-zabbix:~$ java --version openjdk 11.0.6 2020-01-14 OpenJDK Runtime Environment (build 11.0.6+10-post-Ubuntu-1ubuntu118.04.1) OpenJDK 64-Bit Server VM (build 11.0.6+10-post-Ubuntu-1ubuntu118.04.1, mixed mode, sharing)
Шаг №16:
Скачиваю самую последнюю версию пакета guacamole-server
на 07.03.2020
, распаковываю и устанавливаю:
ekzorchik@srv-zabbix:~$ wget http://apache-mirror.rbc.ru/pub/apache/guacamole/1.1.0/source/guacamole-server-1.1.0.tar.gz ekzorchik@srv-zabbix:~$ tar zxf guacamole-server-1.1.0.tar.gz ekzorchik@srv-zabbix:~$ sudo mkdir -p /etc/guacamole/lib ekzorchik@srv-zabbix:~$ sudo mkdir -p /etc/guacamole/extensions ekzorchik@srv-zabbix:~$ cd guacamole-server-1.1.0/ ekzorchik@srv-zabbix:~/guacamole-server-1.1.0$ ekzorchik@srv-zabbix:~/guacamole-server-1.1.0$ sudo ./configure --with-init-dir=/etc/init.d/ ------------------------------------------------ guacamole-server version 1.1.0 ------------------------------------------------ Library status: freerdp2 ............ yes pango ............... yes libavcodec .......... yes libavutil ........... yes libssh2 ............. yes libssl .............. yes libswscale .......... yes libtelnet ........... yes libVNCServer ........ yes libvorbis ........... yes libpulse ............ yes libwebsockets ....... yes libwebp ............. yes wsock32 ............. no Protocol support: Kubernetes .... yes RDP ........... yes SSH ........... yes Telnet ........ yes VNC ........... yes Services / tools: guacd ...... yes guacenc .... yes guaclog .... yes FreeRDP plugins: /usr/lib/x86_64-linux-gnu/freerdp2 Init scripts: /etc/init.d/ Systemd units: no Type "make" to compile guacamole-server. ekzorchik@srv-zabbix:~/guacamole-server-1.1.0$ ekzorchik@srv-zabbix:~/guacamole-server-1.1.0$ sudo make -j$((`nproc`+1)) ekzorchik@srv-zabbix:~/guacamole-server-1.1.0$ sudo make install ekzorchik@srv-zabbix:~/guacamole-server-1.1.0$ sudo ldconfig ekzorchik@srv-zabbix:~/guacamole-server-1.1.0$ sudo systemctl enable guacd ekzorchik@srv-zabbix:~/guacamole-server-1.1.0$ sudo systemctl start guacd ekzorchik@srv-zabbix:~/guacamole-server-1.1.0$ cd ~
Шаг №17:
Скачиваю самую последнюю версию пакета guacamole-client
(уже откомпилированную) на 07.03.2020
, распаковываю и устанавливаю:
ekzorchik@srv-zabbix:~$ wget http://apache.mirror.iweb.ca/guacamole/1.1.0/binary/guacamole-1.1.0.war ekzorchik@srv-zabbix:~$ sudo mv guacamole-1.1.0.war /etc/guacamole/guacamole.war ekzorchik@srv-zabbix:~$ sudo ln -s /etc/guacamole/guacamole.war /var/lib/tomcat8/webapps/ ekzorchik@srv-zabbix:~$ sudo systemctl restart tomcat8 ekzorchik@srv-zabbix:~$ sudo systemctl restart guacd
Шаг №18:
Скачиваю коннектор связывающий guacamole + mysql:
ekzorchik@srv-zabbix:~$ wget http://apache.mirror.iweb.ca/guacamole/1.1.0/binary/guacamole-auth-jdbc-1.1.0.tar.gz ekzorchik@srv-zabbix:~$ tar zxf guacamole-auth-jdbc-1.1.0.tar.gz ekzorchik@srv-zabbix:~$ sudo cp guacamole-auth-jdbc-1.1.0/mysql/guacamole-auth-jdbc-mysql-1.1.0.jar /etc/guacamole/extensions/
Шаг №19:
Настраиваю Guacamole:
ekzorchik@srv-zabbix:~$ sudo bash -c "echo "GUACAMOLE_HOME=/etc/guacamole" >> /etc/default/tomcat8" ekzorchik@srv-zabbix:~$ cat /etc/default/tomcat8 | grep -v "^$\|#" TOMCAT8_USER=tomcat8 TOMCAT8_GROUP=tomcat8 JAVA_OPTS="-Djava.awt.headless=true -XX:+UseConcMarkSweepGC" GUACAMOLE_HOME=/etc/guacamole ekzorchik@srv-zabbix:~$ ekzorchik@srv-zabbix:~$ sudo nano /etc/guacamole/guacamole.properties mysql-hostname: localhost mysql-port: 3306 mysql-database: db_guacamole mysql-username: us_guacamole mysql-password: 612mbddr@ ekzorchik@srv-zabbix:~$ sudo systemctl restart tomcat8 ekzorchik@srv-zabbix:~$ cat guacamole-auth-jdbc-1.1.0/mysql/schema/*.sql | sudo mysql -u root -p712mbddr@ db_guacamole ekzorchik@srv-zabbix:~$ sudo ln -sf /usr/share/java/mysql-connector-java.jar /etc/guacamole/lib/ ekzorchik@srv-bionic:~$ sudo systemctl restart guacd
Шаг №20:
Т.к. сервис Guacamole
работает через обращение на порт 8080
, то для удобства нужно задействовать обратный прокси:
ekzorchik@srv-zabbix:~$ sudo rm /etc/nginx/sites-available/zabbix.conf ekzorchik@srv-zabbix:~$ sudo rm /etc/nginx/sites-enabled/zabbix.conf ekzorchik@srv-zabbix:~$ sudo nano /etc/nginx/sites-available/test.conf ekzorchik@srv-zabbix:~$ sudo ln -s /etc/nginx/sites-available/test.conf /etc/nginx/sites-enabled/test.conf server { listen 80; server_name 172.33.33.6; root /usr/share/zabbix; index index.php; location ~ [^/]\.php(/|$) { fastcgi_pass unix:/var/run/php/zabbix.sock; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_index index.php; fastcgi_param DOCUMENT_ROOT /usr/share/zabbix; fastcgi_param SCRIPT_FILENAME /usr/share/zabbix$fastcgi_script_name; fastcgi_param PATH_TRANSLATED /usr/share/zabbix$fastcgi_script_name; include fastcgi_params; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_intercept_errors on; fastcgi_ignore_client_abort off; fastcgi_connect_timeout 60; fastcgi_send_timeout 180; fastcgi_read_timeout 180; fastcgi_buffer_size 128k; fastcgi_buffers 4 256k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; } location /guacamole/ { proxy_buffering off; proxy_pass http://127.0.0.1:8080/guacamole/; proxy_http_version 1.1; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $http_connection; access_log off; } } ekzorchik@srv-zabbix:~$ sudo nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful ekzorchik@srv-zabbix:~$ sudo systemctl restart zabbix-server nginx php7.2-fpm tomcat8 guacds
Теперь при обращении на http://172.33.33.6/
— это Zabbix Server 4.4
, а при добавлении к строке адреса http://172.33.33.6/guacamole
с последующей авторизацией, по умолчанию дефолтные логин и пароль:
Default login: guacadmin
Default password: guacadmin
затем нажимаю «Вход
», оказываюсь в интерфейсе управления HTML5
соединениями к системам через протоколы RDP, VNC, SSH
и т.д.
На заметку: Если Вы отправите в перезагрузку Zabbix
, то сервис Guacamole
запускает не вот прям сейчас, нужно просто подождать. Хотя наверное нужно разобрать как его запуск ускорить.
Итого, я адаптировал связку двух сервисов Zabbix 4.4 Server + Guacamole
где в качестве Web
-сервиса выступает Nginx
. На этом у меня всё, с уважением автор блога Олло Александр aka ekzorchik.