Задача: На одну систему поставить 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@

Параметры подключения mysql к Zabbix 4.4

    • этап 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-интерфейс

Zabbix 4.4 успешно установлен на Ubuntu 18.04 Server

Шаг №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.