Оглавление
- Введение
- Настройка сервера для запуска Zabbix Server с веб-интерфейсом
- Установка Docker
- Установка Zabbix Agent на сервер с Docker
- Добавляем новый узел мониторинга в Zabbix Server
- Получение метрик и данных из Docker контейнера
- Триггеры и уведомления в Zabbix
- Заключение
Введение
Zabbix это система мониторинга и отслеживания статусов разнообразных сервисов компьютерной сети, серверов и сетевого оборудования. С его помощью можно быстро реагировать на внештатные ситуации, ошибки оборудования и серверов и предупреждать возможные проблемы с нагрузкой.
Docker, в свою очередь, это пожалуй самый известный инструмент для работы с контейнерами. Он позволяет упаковать приложение или сервис, со всем его окружением и зависимостями, в контейнер, который может быть развернут на любой системе, на которой запускается Docker. Контейнеры в Docker это альтернатива аппаратной виртуализации, например такой как KVM, если Вы не планируете использовать различные ОС на виртуальных машинах. Docker позволяет запускать приложения в изолированном окружении с экономичным использованием ресурсов.
В данном руководстве мы настроим мониторинг состояния контейнеров через замечательную систему мониторинга Zabbix. Для этого нам потребуется два выделенных сервера с операционной системой Ubuntu 20.04 LTS. Первый сервер будет выступать в роли сервера Zabbix Server, который будет собирать метрики, строить графики и отправлять уведомления при наступлении каких-то внештатных ситуаций на серверах и контейнерах которые он будет отслеживать. Второй сервер у нас будет в роли сервера с установленным Docker и развернутыми контейнерами на нём. На этом сервере будет запущен сервис Zabbix Agent который будет собирать метрики и отправлять их на Zabbix Server, на нём мы тоже будем использовать Ubuntu 20.04 LTS.
Настройка сервера для запуска Zabbix Server с веб-интерфейсом
Откройте терминал и подключитесь к серверу на котором будет установлен Zabbix Server. Для начала обновим список пакетов операционной системы, введя команду:
sudo apt update
Затем обновим сами пакеты до последних версий, для этого необходимо ввести команду в терминале:
sudo apt upgrade
Теперь мы имеем обновлённую ОС со всем актуальным ПО и можем смело продолжать дальше.
Для запуска Zabbix Server нам понадобится установить на сервер стек LEMP, в него входят ОС Linux, веб-сервер Nginx, БД MySQL, и скриптовый язык PHP который применяется для разработки веб-приложений.
ОС Linux у нас уже установлена в лице Ubuntu 20.04, поэтому начнём с установки Nginx, для этого требуется ввести команду:
sudo apt install nginx
После завершения установки, Nginx автоматически запустится и мы сможем проверить его работу введя в адресной строке браузера http://IP_ВАШЕГО_СЕРВЕРА. Если всё прошло как надо, то вы увидите страницу «Welcome to nginx!».
По умолчанию в Ubuntu 20.04 выключен брандмауэр (фаервол), поэтому мы опускаем его настройку в этом руководстве, но если вы активировали брандмауэр то необходимо будет разрешить подключения по протоколу http/https к серверу.
Следующим шагом мы установим систему управления базами данных MySQL. MySQL - это распространенная система управления базами данных, часто используемая с языком PHP. Для её установки введем команду:
sudo apt install mysql-server
Для подтверждения нажмем Y и установка начнётся. По завершению установки сервер MySQL будет запущен и нам потребуется запустить специальный скрипт, этот скрипт удалит некоторые небезопасные настройки по умолчанию и заблокирует неавторизованный доступ к вашей системе баз данных. Для этого необходимо ввести в терминале команду:
sudo mysql_secure_installation
Мы получим запрос на включение системы проверки паролей, которая будет проверять каждый пароль каждого пользователя MySQL на безопасность, в данном конкретном случае нам это не требуется и мы откажемся от активации этой системы, для этого необходимо ввести любой символ кроме Y.
Следующим шагом нас просят установить пароль для пользователя root, подразумевается администратор именно MySQL, а не системный суперпользователь root. Введем необходимый пароль два раза. Рекомендуется использовать хороший стойкий пароль, с разными символами, цифрами и спец знаками.
Далее скрипт спросит нас, хотим ли мы удалить пользователя anonymous. По умолчанию, в начальной установке MySQL, есть так называемый анонимный пользователь, что позволяет любому пользователю войти в MySQL без наличия учетной записи. Это предназначено только для тестирования и мы должны деактивировать это перед началом использования MySQL. Вводим Y чтобы продолжить.
Далее скрипт предлагает выключить возможность доступа пользователя root с удалённого компьютера, соответственно доступ пользователю root будет разрешен только с локального хоста, что положительно скажется на безопасности, поскольку пароль MySQL пользователя root не будет передаваться по сети. Введите Y чтобы продолжить.
Следующим шагом скрипт предлагает удалить тестовую базу данных с именем test, которая создана по умолчанию. Как правило она не используется - поэтому согласимся на её удаление. Введите Y чтобы продолжить.
И напоследок, скрипт предлагает сделать так называемый FLUSH, то есть обновить права доступа пользователей на базы данных. Мы согласны, поэтому вводим Y для продолжения.
Первичная настройка MySQL сервера завершена. Давайте теперь проверим его работу. Попробуем войти в консоль MySQL, для этого необходимо ввести в терминале команду:
sudo mysql
Чтобы вывести список существующих баз данных введем show databases; , не забудьте ввести точку с запятой после команды.
mysql> show databases;
Как вы можете видеть, в нашем сервере баз данных MySQL создано 4 базы данных на данный момент. То есть всё работает как надо и мы можем выйти из консоли MySQL. Для выхода введите exit;
mysql> exit;
Теперь ваш сервер баз данных MySQL установлен и защищен. Далее мы установим PHP, последний компонент в стеке LEMP.
LEMP подразумевает под собой отсутствие веб-сервера Apache на сервере. В качестве обработчика PHP, который будет генерировать динамическое содержимое страниц, мы будем использовать php-fpm, которому в свою очередь, веб-сервер Nginx будет передавать запросы для обработки файлов интерпретатором PHP.
Установим php-fpm и php-mysql, который обеспечит возможность работы PHP c базами данных MySQL. Для установки введем команду:
sudo apt install php-fpm php-mysql
Как и в предыдущих случаях вводим Y чтобы начать установку.
Установка Nginx, MySQL и PHP завершена. Приступаем к установке Zabbix Server. Zabbix сразу доступен в репозиториях Ubuntu, но в устаревшей версии, поэтому мы будем использовать официальный репозиторий Zabbix для установки последней стабильной версии. Скачайте и установите пакет конфигурации репозитория, введя команду:
wget https://repo.zabbix.com/zabbix/5.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_5.0-1+focal_all.deb
Теперь установим данный deb пакет для активации репозитория в нашей операционной системе:
sudo dpkg -i zabbix-release_5.0-1+focal_all.deb
После появления нового репозитория в нашей ОС необходимо обновить список пакетов, так же как мы делали это в самом начале. Вводим команду:
sudo apt update
Следующим шагом установим Zabbix сервер, веб-интерфейс и агент на этот сервер:
sudo apt install zabbix-server-mysql zabbix-frontend-php zabbix-nginx-conf zabbix-agent
Далее мы создадим базу данных в сервере MySQL, которую Zabbix сервер будет использовать для хранения данных и метрик получаемых от своих агентов. Агентами в терминологии Zabbix называются сервера или другие устройства, которые подключены к мониторингу Zabbix.
Войдем в консоль MySQL, введя команду:
sudo mysql
Затем, последовательно введем несколько команд в консоли MySQL, которыми мы создадим базу данных с именем zabbix, создадим пользователя zabbix с паролем password, а так же назначим права этому пользователю на использование данной базы данных. Для наглядности мы используем пароль password, но для безопасности необходимо использовать более стойкий пароль. После чего выйдем из консоли MySQL.
mysql> create database zabbix character set utf8 collate utf8_bin; mysql> create user zabbix@localhost identified by 'password'; mysql> grant all privileges on zabbix.* to zabbix@localhost; mysql> quit;
Теперь у нас есть база данных для Zabbix Server, но на данный момент она пустая, без начальных таблиц и данных в ней, которые необходимы для начала работы Zabbix. Импортируем начальную схему и данные в неё, для этого необходимо ввести команду
zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix
Будет необходимо ввести пароль MySQL пользователя zabbix, который мы назначили выше, во время создания базы данных. Импорт может занять определенное время, которое зависит от производительности вашего сервера.
Следующим шагом нам необходимо настроить Zabbix сервер на использование этой базы данных, чтобы он сохранял и читал данные из неё. Для этого откроем конфигурационный файл /etc/zabbix/zabbix_server.conf.
sudo nano /etc/zabbix/zabbix_server.conf
Надо найти строчку начинающеюся с # DBPassword=
Убрать решетку (символ комментария) и ввести пароль для доступа к базе данных:
DBPassword=password
Сохраните файл и выйдите из редактора. Если вы использовали nano для редактирования файла, вы можете сделать это, нажав CTRL + X, Y, затем ENTER.
Мы настроили сервер Zabbix для подключения к нашей базе данных MySQL. Теперь необходимо настроить веб-сервер Nginx для обслуживания веб-интерфейса Zabbix. Откроем файл /etc/zabbix/nginx.conf который был создан после установки пакета zabbix-nginx-conf, в нём описывается так называемый виртуал-хост веб-интерфейса Zabbix.
sudo nano /etc/zabbix/nginx.conf
Необходимо убрать символ комментария перед директивой listen и прописать имя сервера в директиву server_name. Остальные директивы в данном файле оставляем как есть, благо создатели Zabbix уже настроили там всё как требуется.
Сохраняем файл /etc/zabbix/nginx.conf. В случае с nano для сохранения и выхода из редактора надо нажать CTRL + X, Y, затем ENTER.
Теперь проверим, нет ли в нашей конфигурации Nginx ошибок, для этого в терминале введём:
sudo nginx -t
Система сообщит что ошибок нет и всё в порядке, после чего мы перезапустим веб-сервер Nginx для применения изменений которые мы внесли. Для этого необходимо ввести команду:
sudo systemctl restart nginx
После этого необходимо настроить правильный часовой пояс в конфигурации php-fpm пула для нашего Zabbix сервера. Для этого отредактируем файл /etc/zabbix/php-fpm.conf, требуется раскомментировать строку ; php_value[date.timezone] = Europe/Riga и указать свой часовой пояс. В нашем случае это Europe/Kiev.
sudo nano /etc/zabbix/php-fpm.conf
Сохраним файл и перезапустим php-fpm для применения изменений.
sudo systemctl restart php7.4-fpm
Следующим шагом нам необходимо добавить все необходимые службы в автозагрузку нашей операционной системы Ubuntu, для этого введём с терминале:
sudo systemctl enable zabbix-server zabbix-agent nginx php7.4-fpm
И теперь запустим все службы необходимые для работы Zabbix сервера:
sudo systemctl start zabbix-server zabbix-agent nginx php7.4-fpm
Сервер Zabbix настроен и подключен к базе данных MySQL. Приступаем к настройке веб-интерфейса Zabbix. Введите в стоку адреса вашего браузера http://ИМЯ_ВАШЕГО_СЕРВЕРА (то самое имя которые устанавливали в настройке Nginx в директиве server_name)
Веб-интерфейс Zabbix позволяет просматривать отчеты и добавлять узлы для мониторинга, но для его использования требуется начальная настройка. На первом экране вы увидите приветственное сообщение. Нажмите кнопку «Next step» для продолжения.
На следующей странице перечислены все необходимые условия для запуска Zabbix. Убедитесь что в последней колонке OK и можно продолжать нажав Next step.
На следующей странице необходимо ввести информацию для подключения к базе данных. Данные настройки нужны для работы веб-интерфейса Zabbix, поскольку конфигурацию Zabbix сервера мы уже провели ранее, введем пароль для доступа к базе данных MySQL и нажмем Next step.
На следующей странице предлагается ввести имя Zabbix сервера и другие настройки, которые можно оставить по умолчанию. Имя Zabbix сервера можно ввести если у вас несколько серверов Zabbix, и вы не хотите путаться в них при работе через веб-интерфейс.
И на завершающем экране предлагается проверить всё настройки, перед финальным шагом. Проверим и нажмем Next step.
Установка веб-интерфейса Zabbix завершена. Нажмите Finish и перейдите к окну входа. Имя пользователя и пароль по умолчанию Admin и zabbix.
Установка Docker
Откройте окно терминала и подключитесь ко второму серверу, на котором будут разворачиваться Docker контейнеры.
Как и со случаем сервера, где располагается Zabbix сервер, на сервере где у нас будут Docker контейнеры мы тоже для начала обновим список пакетов, а затем и сами пакеты, для этого требуется ввести две уже известные нам команды.
sudo apt update sudo apt upgrade
Docker есть в стандартных репозиториях Ubuntu 20.04 LTS Focal Fossa, но как и в случае с Zabbix сервером, в стандартных репозиториях не самые свежие версии. Установим Docker из его официальных репозиториев, где всегда доступна актуальная версия.
Для начала нам потребуется установить дополнительные необходимые пакеты, которых возможно нет в системе, для этого в терминал необходимо ввести команду:
sudo apt install apt-transport-https ca-certificates curl software-properties-common gnupg lsb-release
После чего добавим GPG ключ официального репозитория Docker в нашу систему для этого вводим в терминале команду:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
Затем добавим официальный репозиторий Docker в нашу систему. Помимо самого добавления репозитория, эта команда так же обновит список пакетов с учётом добавленного репозитория. Введём в терминале:
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
Теперь установим сам Docker. Это выполняется простой командой:
sudo apt install docker-ce
Соглашаемся на установку, введя Y на запрос в терминале.
Docker установлен. Для проверки, вводим в терминале команду sudo docker version, которая отобразит установленную версию Docker и другую системную информацию.
sudo docker version
Проверим запущена ли системная служба Docker, для этого введем в окне терминала команду:
sudo systemctl status docker
Вывод команды говорит нам о том что всё в порядке, сервис запущен и работает.
Установка Zabbix Agent на сервер с Docker
Zabbix Agent это небольшая программа которая запускается на сервере за которым необходимо осуществлять мониторинг. На данный момент существуют две версии, Zabbix Agent и Zabbix Agent 2. Мы будем рассматривать именно Zabbix Agent 2, поскольку именно в этой версии добавлена возможность мониторинга Docker и контейнеров в нём.
Для начала скачаем deb пакет который добавит официальный репозиторий в нашу систему, а затем установим этот пакет.
wget https://repo.zabbix.com/zabbix/5.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_5.0-1+focal_all.deb sudo dpkg -i zabbix-release_5.0-1+focal_all.deb
После добавления нового репозитория необходимо обновить базу пакетов, для этого введём команду sudo apt update:
sudo apt update
После чего мы можем установить сам Zabbix Agent 2.
sudo apt install zabbix-agent2
После установки агента нам необходимо внести изменения в файл конфигурации, чтобы обеспечить соединение между Zabbix Agent и Zabbix Server. Откроем для редактирования файл конфигурации агента:
sudo nano /etc/zabbix/zabbix_agent2.conf
По умолчанию Zabbix Agent настроен на работу с Zabbix Server, которые расположены на одном сервере. Но у нас Zabbix Server находится на отдельном сервере и нам надо изменить настройки Zabbix Agent, чтобы он работал с удалённым сервером Zabbix Server. Для этого в файле /etc/zabbix/zabbix_agent2.conf найдём строчку начинающеюся с Server и изменим значение с 127.0.0.1 на IP адрес или имя нашего Zabbix Server, в нашем примере это zabbix-server.dedicated.freehost.com.ua.
Обычно Zabbix Server сам подключается для сбора данных к Zabbix Agent, но в некоторым случаях и агент может подключаться к серверу, для этого необходимо ввести адрес сервера в директиву ServerActive.
Также необходимо ввести уникальное имя для агента, это имя будет отображаться в веб-интерфейсе. Для этого введите имя в директиву Hostname.
На этом редактирование файла конфигурации Zabbix Agent завершено, сохраним и выйдем из редактора.
Далее, для того чтобы Zabbix Agent мог осуществлять мониторинг Docker необходимо добавить системного пользователя zabbix в группу docker. Для этого введём команду:
sudo usermod -aG docker zabbix
Теперь мы можем запустить службу Zabbix Agent и добавить её в автозагрузку нашей ОС, а так же проверим запустилась ли служба Zabbix Agent. Для этого введём команды:
sudo systemctl start zabbix-agent2 sudo systemctl enable zabbix-agent2 sudo systemctl status zabbix-agent2
Вывод команды сообщает нам что сервис Zabbix Agent запущен и работает.
На этом установка и настройка Zabbix Agent закончена. Мы подготовили наш сервер с Docker к мониторингу через Zabbix Server. Далее нам потребуется подключить этот сервер с Docker к мониторингу, для этого мы войдем в веб-интерфейс нашего Zabbix Server, подключим сервер с Docker и активируем шаблон Docker.
Добавляем новый узел мониторинга в Zabbix Server
Каждый узел, мониторинг которого вы хотите осуществлять, должен быть добавлен через веб-интерфейс на сервере Zabbix. Также необходимо подключить к нему соответствующий шаблон. Используя шаблоны, вы можете применять элементы мониторинга, триггеры, графики и разные правила к нескольким хостам.
Войдем в веб-интерфейс Zabbix Server, используя адрес или имя, которые мы назначили ему ранее, во время его установки и настройки. В нашем случае, для примера, используется адрес http://zabbix-server.dedicated.freehost.com.ua/. Логин и пароль мы не меняли, поэтому используем установленные по умолчанию, логин Admin, пароль zabbix.
Для начала, давайте переключим веб-интерфейс Zabbix на русский язык. Для этого перейдём в раздел Administration - Users
И нажмём на пользователя Admin:
Но тут нас ожидает проблема, нет возможности выбрать любой язык кроме Английского, и сообщение об ошибке «You are not able to choose some of the languages, because locales for them are not installed on the web server». Давайте исправим это. Установим необходимые локализации на наш сервер Zabbix.
Первой командой мы посмотрим какие локали (языковые настройки) установлены на сервере.
sudo locale -a
Затем выведем список доступных локалей для русского и украинского языков.
cat /usr/share/i18n/SUPPORTED | grep ru_ cat /usr/share/i18n/SUPPORTED | grep uk_
Для установки необходимых локалей введем:
sudo locale-gen ru_RU sudo locale-gen ru_RU.UTF-8 sudo locale-gen uk_UA sudo locale-gen uk_UA.UTF-8
После чего вводим команду:
sudo dpkg-reconfigure locales
В открывшемся окне нажмём ОК
Далее, система спросит нас, какую из локалей необходимо установить в качестве системной - выберем en_US.UTF-8 и нажмем ОК.
Будут переконфигурирование локали на сервере, после чего мы сможем выбрать необходимый язык в настройках веб-интерфейса Zabbix. Перезапустим nginx и php-fpm чтобы эти демоны «увидели» новые локали.
sudo systemctl restart nginx sudo systemctl restart php7.4-fpm
После этого появится возможность выбрать необходимый язык в настройках пользователя веб-интерфейса Zabbix.
На этом установка языка в веб-интерфейсе Zabbix закончена и мы можем продолжить добавление нового узла в мониторинг.
Для добавления нового узла в мониторинг, в уже русифицированном веб-интерфейсе Zabbix, необходимо нажать «Настройка» - «Узлы сети» и выбрать в правом верхнем углу «Создать узел сети».
Ввести имя узла, добавить его в новую группу Docker Servers, и ввести DNS имя по которому Zabbix Server будет подключаться в агенту.
Далее перейдем на вкладку «Шаблоны» на этой странице, в пункте «Присоединение новых шаблонов» впишем «Template App Docker» и «Template OS Linux by Zabbix agent», таким образом мы применим к данному узлу мониторинга два шаблона, шаблон Docker и общий шаблон ОС Linux, которые будут включать в себя метрики, триггеры и графики необходимые для мониторинга Docker и системы в целом на этом выделенном сервере.
Далее нажмём кнопку «Добавить» для добавления этого узла в наш мониторинг. После добавления нового узла в Zabbix необходимо подождать несколько минут, для того чтобы Zabbix Server подключился к агенту на удалённом сервере и получил все метрики узла.
Затем, в меню слева перейдём в раздел «Мониторинг» - «Узлы сети», где мы увидим наш только что добавленный сервер с зеленой иконкой ZBX, это значит что узел добавлен успешно и Zabbix Server подключился и получает данные от агента на этом узле.
Замечательно! Теперь Zabbix Server следит за вашим сервером с Docker. На следующем этапе мы запустим тестовый контейнер и посмотрим какие метрики может собирать Zabbix с этого контейнера.
Получение метрик и данных из Docker контейнера
Поскольку мы настраивали всё «с нуля» то у нас нет ещё созданных контейнеров в Docker, и по сути нам нечего отслеживать. Далее мы запустим тестовый контейнер и посмотрим какие метрики будут доступны. В этом руководстве мы запустим тестовый контейнер с Alpine Linux в нём.
В консоли сервера с Docker введите команду:
sudo docker run --name freehost_alpine_container -it alpine ash
Данная команда скачает образ Alpine Linux из Docker Hub и моментально запустит его, присвоив ему имя freehost_alpine_container, после чего запустит нам терминал той системы, которая запущена в контейнере.
Оставим пока этот контейнер работающим и перейдём в веб-интерфейс Zabbix сервера. Буквально через несколько минут после запуска контейнера, Zabbix автоматически найдет новый контейнер на сервере и добавит соответствующие метрики для него.
Кликнем на меню слева и перейдём в раздел «Мониторинг» - «Узлы сети» и выберем Графики в строке с нашим Docker сервером.
Мы увидим, что Zabbix уже «подхватил» наш контейнер с именем freehost_alpine_container, и собирает данные из него. На скриншоте два графика - использование процессора и памяти в данном контейнере.
Если пролистать страницу ниже, то можно наблюдать огромное количество графиков и метрик. На следующем скриншоте графики использования сети для нашего контейнера с именем freehost_alpine_container.
Для того, чтобы увидеть список всех метрик получаемых Zabbix из контейнера в Docker снова перейдём в раздел «Мониторинг» - «Узлы сети» и выберем «Последние данные» в строке с нашим Docker сервером.
Перелистнем на страницу 2 данного листинга и увидим 37 метрик которые Zabbix получает о контейнере. Чтобы просмотреть историю изменений для конкретной метрики, нажмите График (для числовых значений) или История (для текстовых значений).
Итак, мы запустили тестовый контейнер в Docker и просмотрели его метрики в веб-интерфейсе Zabbix.
Триггеры и уведомления в Zabbix
Настало время протестировать неожиданное падение нашего контейнера, которое должно вызвать уведомление об этом событии в Zabbix.
Для симуляции сбоя контейнера откройте терминал Docker сервера, где запущен наш контейнер freehost_alpine_container и введите в терминале контейнера команду:
exit 1
С помощью этой команды мы завершим работу контейнера с кодом ошибки 1, который передастся в Docker и запишется в метаданные нашего контейнера.
Чтобы увидеть оповещение, нажмите «Мониторинг», а затем «Проблемы» в левой навигационной панели веб-интерфейса Zabbix. Через несколько секунд отобразится уведомление «Container has been stopped with error code»
Вы можете настроить получение уведомлений о проблемах на узлах на электронную почту или даже в Telegram.
Теперь вы можете запустить контейнер снова и уведомление в Zabbix исчезнет автоматически. Чтобы запустить контейнер повторно выполните команду на сервере c Docker:
sudo docker start freehost_alpine_container
Zabbix определит что контейнер снова в строю, и состояние триггера изменится на «Решено»
Более детально о том, как работать с Docker, что такое образы Docker, как запускать и управлять контейнерами в Docker, вы сможете прочитать в одной из статей, в скором времени на нашем сайте.
Заключение
В данной статье мы с вами настроили два сервера, один с Zabbix Server и веб-интерфейсом, и второй сервер с Docker и Zabbix Agent, для мониторинга состояния контейнеров в системе мониторинга Zabbix. Мониторинг предназначен предупреждать вас о проблемах, и вы сможете анализировать процессы и проблемы происходящие в вашем Docker контейнере. Zabbix это очень мощный инструмент, с помощью которого вы можете контролировать не только контейнеры, но и серверы в целом, базы данных, веб-приложения и многое другое.
Вероятно Вас заинтересует статья “Как мониторить сервер с помощью Zabbix”
Подписывайтесь на наш телеграмм - канал t.me/freehostua, чтобы быть в курсе новых полезных материалов. Смотрите наш Youtube канал на youtube.com/freehostua.
Дата: 21.12.2021 Автор: Евгений
|
|
Авторам статті важлива Ваша думка. Будемо раді його обговорити з Вами:
comments powered by Disqus