Zabbix на страже: как я свои VPS под прицел поставил

Timur Gilmanov

linuxvps

1741 Words Ты потратишь: 7 Minutes, 54 Seconds

2025-11-24 04:21 +0000


Зачем вообще Zabbix?
Zabbix — это система мониторинга с открытым кодом, которая с ума сходит от цифр и фактов. Он следит за состоянием серверов, нагрузкой на процессор, памятью, дисковым пространством, сетевыми сервисами и ещё кучей всего. Можно настроить умные тревоги и получать пуши, если сервер вдруг решит устроить забастовку. Ну или если ваш сайт начнёт падать и тормозить.
Кроме того, у Zabbix есть мощнейший инструмент — API Zabbix, который позволяет программно управлять всей системой мониторинга. Через этот API можно запускать команды, изменять настройки, перезапускать службы, добавлять и удалять хосты, а также автоматизировать массу задач — всё это из одного окна и без лишних кликов мышью. Но об этом в другой раз.

У меня теперь появилось несколько VPS, на которых крутятся разные сервисы. Сейчас я смотрю, как на дашборде моего хостинга всё работает, но понимаю, что в будущем могу пользоваться разными хостингами и хотелось бы мониторить всё централизованно. Плюс, Zabbix — это не просто про сервера, он умеет следить за отдельными сервисами, а не только за железом.

Так что решил поднять Zabbix на новом VPS, чтобы испытать всю эту мощь мониторинга своими руками. Характеристики моей боевой машины: Ubuntu 22.04, одно ядро, 1 Гиг оперативы и 10 Гб SSD. Для сайта, Telegram-ботов и VPN-сервера хватит за глаза — чисто чтобы побаловаться и поучиться. Для серьезных дел, конечно, лучше выбрать железо помощнее.

Содержание:

Установка бесплатного SSL-сертификата (Let’s Encrypt) на Nginx для вашдомен.рф

На данном этапе я устанавливаю бесплатный SSL-сертификат от Let’s Encrypt, прежде всего для собственной безопасности и спокойствия. Мне гораздо комфортнее использовать HTTPS, даже если мой Zabbix будет торчать наружу. При этом я уверен, что при правильной настройке сложных логинов и паролей можно обеспечить достаточную защиту доступа, имхо, когда ломанут — тогда и поставлю доступ только с рабочего места и из дома)). Certbot позволяет быстро и автоматически получить и настроить сертификат, добавляя дополнительный уровень безопасности без лишних сложностей.

1. Установите Certbot и модуль Nginx для SSL:

sudo apt install certbot python3-certbot-nginx

2. Получите и установите сертификат для вашего домена:

sudo certbot --nginx -d вашдомен.рф
  • Следуйте инструкциям: укажите email, согласитесь с условиями, разрешите редирект с http на https.
  • Сертификат автоматически установится, конфиг Nginx будет изменён.

3. Проверьте работу:

  • Зайдите на https://вашдомен.рф — должна открыться стандартная страница Nginx, по протоколу https.
  • Лайфхак для параноиков

    Есть удобный лайфхак: если по каким-то причинам у тебя порт 80 обычно закрыт (например, правилами файрвола), можно добавить в кронтаб задачу, которая в определённое время (например, раз в неделю ночью) временно открывает порт 80, обновляет сертификат и сразу закрывает порт обратно. Так твой сервер большую часть времени защищён, а Let’s Encrypt всегда сможет продлить сертификат.​

    • Открой crontab для редактирования:
      sudo crontab -e
      
    • Добавь строку:
      0 3 * * 0 ufw allow 80 && certbot renew --quiet && ufw deny 80
      
    • Такой способ действительно помогает, если беспокоишься о лишних открытых портах, но хочешь автоматизировать продление сертификатов. В этом случае можно закрыть порт 80 в ufw, так как cron выполняет задания от имени root и в нужное время откроет порт, обновит сертификат и затем закроет порт обратно. Это удобный и безопасный метод для обеспечения автоматического обновления сертификатов без постоянного открытия порта 80.

Усиление безопасности VPS

Изменение порта SSH

Далее я изменяю стандартный порт SSH с 22 на другой нестандартный. Это простая, но эффективная мера для повышения безопасности сервера, так как большинство автоматических атак пытаются использовать стандартный порт. Таким образом уменьшается риск взлома через перебор паролей.

  1. Откройте конфиг SSH:
sudo nano /etc/ssh/sshd_config
  • Найдите и измените строку:
    Port 22
    
    на
    Port 22222
    
    (или любой другой свободный порт, например, 12345).
  1. Сохраните файл, перезапустите SSH:
sudo systemctl restart ssh

!Не закрывайте существующее соеденение, пока не протестируете подключение по новому порту, иначе можно заблокировать себя.

Настройка файервола UFW

Затем настраиваем файервол UFW, чтобы ограничить доступ к серверу. Я разрешаю трафик для 443 порта (https), новый порт SSH (указанный ранее), а также порт 10050 для получения данных от Zabbix агента. Благодаря этим настройкам сервер становится более защищённым, пропуская только необходимый трафик.

  1. Включите UFW, если еще не включен:
sudo ufw enable
  1. Разрешите новый SSH-порт:
sudo ufw allow 22222/tcp

(или другой порт, который вы указали в sshd_config).

  1. Откройте порт 443 (доступ HTTPS):
sudo ufw allow 443/tcp
  1. Откройте стандарнтый порт 10050 или любой свободный для Zabbix Agent:
sudo ufw allow 10050/tcp
  1. Проверьте правила UFW (итоговый набор правил):
sudo ufw status

Пример вывода:

22222/tcp              ALLOW       Anywhere
433/tcp	               ALLOW       Anywhere
10050/tcp              ALLOW       Anywhere

Надо учесть, что по умолчанию все входящие соединения блокируются, кроме явно разрешённых в правилах UFW. Поэтому, если вы не откроете порт 80, обновление сертификата через Let’s Encrypt не пройдёт. В таком случае можно либо открыть порт 80 на постоянно - sudo ufw allow 80/tcp, либо воспользоваться лайфхаком из пункта 3.

Установка и настройка Zabbix Server

После подготовки VPS я приступаю к установке и настройке сервера мониторинга Zabbix. Это позволяет мне наблюдать за состоянием и производительностью моих серверов. На этом этапе я устанавливаю необходимые компоненты Zabbix, настраиваю базу данных и запускаю службы, чтобы иметь доступ к веб-интерфейсу и начать мониторинг.

1. Обновите систему

sudo apt update
sudo apt upgrade -y

2. Установите нужные пакеты (MariaDB, PHP и дополнения)

sudo apt install mariadb-server php php-mbstring php-gd php-xml php-bcmath php-ldap php-mysql php-zip -y

3. Создайте базу данных и пользователя для Zabbix

sudo mysql

В консоли MySQL выполните:

CREATE DATABASE zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
CREATE USER 'zabbix'@'localhost' IDENTIFIED BY 'Ваш пароль';
GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'localhost';
FLUSH PRIVILEGES;
EXIT;

4. Скачайте и установите официальный репозиторий Zabbix 6.0-4

Никто не запрещает ставить 6.0-6, или свежее, если уже есть. Я предпочел обкатаную версию.

wget https://repo.zabbix.com/zabbix/6.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.0-4+ubuntu22.04_all.deb
sudo dpkg -i zabbix-release_6.0-4+ubuntu22.04_all.deb
sudo apt update

5. Установите сервер и агента Zabbix

sudo apt install zabbix-server-mysql zabbix-frontend-php zabbix-apache-conf zabbix-sql-scripts zabbix-agent -y

6. Добавьте начальные данные в базу

zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql -uzabbix -p zabbix

Вас попросят ввести пароль от пользователя zabbix (тот, что на шаге 3 зовется “Ваш пароль”).

7. Настройте Zabbix Server

Откройте файл /etc/zabbix/zabbix_server.conf:

sudo nano /etc/zabbix/zabbix_server.conf

Найдите строку DBPassword= и пропишите ваш пароль:

DBPassword=Ваш пароль

Сохраните файл (Ctrl+O, Enter, Ctrl+X).

8. Запустите и проверьте сервисы

sudo systemctl restart zabbix-server zabbix-agent apache2
sudo systemctl enable zabbix-server zabbix-agent apache2
sudo systemctl status zabbix-server.service

9. Проверьте веб-интерфейс

Откройте в браузере:
https://вашдомен.рф
Если открывается веб-интерфейс zabbix, то все получилось! Следуйте инструкциям мастера — там понадобятся параметры базы данных из шага 3.

Примечание:
1.Стандартный логин и пароль для входа в веб-интерфейс zabbix Admin/zabbix
2.Zabbix устанавливается с учётом локалей, доступных на веб-сервере; если установлена только английская локаль, интерфейс будет на английском — при необходимости можно добавить русскую системную локаль на сервер и перезапустить веб-сервер (nginx или apache) для появления русского языка в списке выбора.

Теперь сервер полностью готов к приёму данных от других машин: мы установили Zabbix, получили SSL-сертификат, открыли нужные порты и настроили безопасность — следующим шагом переходим к установке Zabbix agents на наши VPS для централизированного мониторинга.

Установка и настройка zabbix agents на наши vps.

1. Добавьте официальный репозиторий Zabbix

wget https://repo.zabbix.com/zabbix/6.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.0-4+ubuntu22.04_all.deb
sudo dpkg -i zabbix-release_6.0-4+ubuntu22.04_all.deb
sudo apt update

2. Установите Zabbix-agent

sudo apt install zabbix-agent -y

3. Настройте Zabbix-agent

Откройте конфиг /etc/zabbix/zabbix_agentd.conf:

sudo nano /etc/zabbix/zabbix_agentd.conf
  • Укажите IP вашей Zabbix-системы:
    Server=<IP_ZABBIX_SERVER>
    ServerActive=<IP_ZABBIX_SERVER>
    
  • Задайте уникальное имя хоста (как он будет отображаться в zabbix-server):
    Hostname=<UNIQUE_HOSTNAME>
    
  • Стандартный порт 10050, или укажите другой если ставили нестандартный в настройках ufw на zabbix сервере:
    ListenPort=10050
    

4. Откройте нужные порты на vps

sudo ufw allow 10050/tcp

Если используете другой порт — откройте его.

5. Запустите и проверьте статус агента

sudo systemctl restart zabbix-agent
sudo systemctl enable zabbix-agent
sudo systemctl status zabbix-agent

6. Добавление хоста на Zabbix Server

Чтобы начать мониторинг, откройте веб-интерфейс Zabbix, перейдите в раздел Configuration → Hosts → Create host. Укажите имя хоста (точно как в настройках агента), IP-адрес, выберите группу и добавьте стандартный шаблон (например, Template OS Linux). После сохранения хост начнёт отправлять метрики в течение минуты — проверить это можно в разделе Monitoring → Latest data.

Согласование сервисов с Zabbix Server и мониторинг приложений

Теперь, когда Zabbix agents установлены на ваших VPS и корректно связаны с сервером мониторинга, агенты уже автоматически передают все стандартные системные метрики: загрузку CPU, память, дисковое пространство, сетевой трафик и многие другие параметры. Эти показания можно сразу видеть в интерфейсе Zabbix спустя несколько минут после регистрации хоста на сервере.

Однако для мониторинга конкретных пользовательских сервисов и приложений (например, бота, сайта или веб-сервера) одной только установки агента недостаточно. Чтобы получать события, логи и индивидуальные показатели от каждого сервиса, необходимо:

  • На сервере Zabbix создать отдельные items (элементы данных) для каждого интересующего файла лога или метрики. Например, можно добавить item для отслеживания ошибок в логе Telegram-бота.

  • Но необходимо убедиться, что сервисы ведут логирование не только в системный журнал (journalctl/systemd), а также в отдельный файл (например, /var/log/telegram-bot/bot.log.)

  • Для примера возьму своего Perplexity Api + TGBot, там я настраивал базовое логирование в системый журнал logging.basicConfig(level=logging.INFO). Перенаправляем логи в /var/log/telegram-bot/bot.log:

    logging.basicConfig(
    	filename='/var/log/telegram-bot/bot.log',
    	level=logging.INFO,
    	format='%(asctime)s %(levelname)s %(name)s %(message)s'
    
  • Теперь можно перейти на сервер Zabbix и добавить этот лог в items: создайте новый элемент данных с типом “Zabbix agent (active)”, укажите ключ вида log[/var/log/telegram-bot/bot.log] и тип информации “Log”. После сохранения агент начнёт передавать новые строки лога на сервер, где вы сможете анализировать их через триггеры и шаблоны для быстрого реагирования на ошибки или важные события.

Этот пример был для Telegram-бота, но с остальными сервисами принцип похожий, хотя настройка немного отличается. Например, сайт на Hugo — это статичный генератор, и он не создаёт логов в обычном смысле. Однако можно отслеживать доступность и время отклика главной страницы с помощью веб-сценария Zabbix: добавляете URL сайта, указываете шаги проверки, и система будет показывать график отклика на дашборде. Это удобно для контроля, что сайт работает нормально. Также можно добавить мини-окно с сайтом по URL, но моя тема почему-то не подтягивается — зато сразу видно, если сайт недоступен.

Для панели S-UI настройка тоже другая: в интерфейсе панели можно выбрать путь к файлу логов, куда будут записываться события. Остаётся только создать в Zabbix элемент данных с ключом log[указанный_путь] и добавить его на дашборд.

Таким образом, на дашборде Zabbix я собрал всё что мне было нужно: URL сайта (тема не подгружается, но доступность видна), состояние серверов, код ответа и время отклика главной страницы, метрики железа (нагрузка на CPU, память, пинг агентов), сетевой трафик, логи VPN-сервера и Telegram-бота. Теперь статус всех сервисов доступен в одном окне, и я могу следить за ними в любое время из любой точки мира.
Пример дэшборда То есть самое главное — собрать все логи нужного сервиса в одном месте, а на сервере Zabbix создать items для соответствующего хоста. Когда файл с логами начнёт читаться сервером, настроить визуализацию графиков и отчётов будет значительно проще, чем кажется на первый взгляд.