Установка и настройка Zabbix LTS сервера
Zabbix - это свободная система мониторинга и отслеживания статусов компьютерной сети, облачных ресурсов, сервисов, приложений, серверов и сетевого оборудования в реальном времени. Zabbix — полноценное решение для мониторинга крупных компьютерных сетей, был разработан Алексеем Владишевым при активной поддержке Zabbix SIA. Zabbix умеет находить все типы сетевых устройств используя различные методы, проверять состояние оборудования и приложений, отправлять заданные сообщения о тревоге и визуализировать сложные взаимосвязи. Он основан на модели клиент-сервер и способен отслеживать миллионы показателей, таких как загрузка ЦП, использование сети и потребление дискового пространства десятками тысяч серверов.
Компания Zabbix регулярно проводит бесплатные вебинары о решениях мониторинга, так же вы можете пройти платные курсы сертификации.
Возможности Zabbix
Более подробно вы можете изучить возможности на официальном сайте Zabbix LTS. Я хочу отметить важные для меня возможности:
- Zabbix можно развернуть локально или в облаке
- Реализована одна и та же политика источника для iframe, что означает, что Zabbix веб-интерфейс нельзя поместить во фреймы на другом домене
- Переписан Zabbix Agent с поддержкой плагинов и сохранением состояния
- Обнаружение счетчиков JMX (Java расширений управления)
- Обнаружение счетчиков производительности Windows
- Встроенная интеграция с системами ITSM. Zabbix представляет набор готовых интеграций со стандартными облачными и локальными системами ITSM: Jira, OTRS, Redmine, Zendesk, Zammad, Servicenow.
- Встроенные интеграции с системами оповещений: XMPP (Jabber), Telegram, Slack, Mattermost, Msteams, Victorops, PagerDuty, OpsGenie.
- Добавлены новые шаблоны и плагины для мониторинга различных сервисов, приложений и устройств. Большинство шаблонов теперь используют дополнительные возможности для автоматического обнаружения различных ресурсов. Из коробки существуют шаблоны Zabbix для ClickHouse, Mysql, Nginx, Redis, Postgresql, Haproxy, Memcached, Elasticsearch.
- Возможность сброса SNMP кэша, изменений контекста SNMPv3
Шаблоны Zabbix стали более сложными с кучей макросов и автообнаружений.
Системные требования Zabbix 6.0 LTS и выше
Фактические параметры конфигурации, сервера для Zabbix, зависят от количества активных элементов данных и частоты обновления этих элементов. До 100 устройств вам вполне хватит недорого VPS. В конфигурации Zabbix для мониторинга до 500 устройств рекомендуется CPU 2 ядра ОЗУ 2 ГБ. По ссылке я тестировал виртуальные сервера ТОП Хостингов VPS/VDS для Zabbix - рекомендую.
Минимально поддерживаемая версия PHP теперь 7.2.5, лучше PHP 8.1.
Шаг 1 - Предварительные требования
Должны быть выполнены предварительные требования по настройке вашего Linux дистрибутива, в моем случае Ubuntu 22.04.2 LTS.
- Установите поддержку нужных языков для Zabbix, запустив команду:
dpkg-reconfigure locales
Как видно ниже, у меня установлены английский и русский (системным установлен английский):
locale -a ... en_US.utf8 ru_RU.utf8
Очень важно иметь точную дату и время системы на сервере с запущенным Zabbix. ntpd один из наиболее популярных демонов синхронизации времени хоста с временем на остальных серверах. Настоятельно рекомендуется поддерживать синхронизированное время на всех системах, где работают Zabbix компоненты.
Зададим нужный часовой пояс:
timedatectl set-timezone Europe/Kiev
Шаг 2 — Подключение официального репозитория Zabbix и исправление ошибок:)
В этом руководстве я буду объяснить, как установить сервер Zabbix в ОС Ubuntu.
Zabbix доступен в репозиториях пакетов Ubuntu, но я рекомендую использовать официальный репозиторий Zabbix и только LTS релизы!!! Для подключения официальных репозиториев вам нужно перейти на страницу загрузки Zabbix и выбрать вашу конфигурацию. Пример конфигурации на скриншоте:
После выбора конфигурации - ниже появятся команды для подключения репозитория, в моем случае такие:
# wget https://repo.zabbix.com/zabbix/6.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.0-4+ubuntu22.04_all.deb # dpkg -i zabbix-release_6.0-4+ubuntu22.04_all.deb # apt update
Для Ubuntu 20 и ниже возможна ошибка: ( Получаем ошибку: N: Skipping acquire of configured file 'main/binary-i386/Packages' as repository 'http://repo.zabbix.com/zabbix/ /ubuntu InRelease' doesn't support architecture 'i386'
Самое интересное изучил штук 7 руководств по установке Zabbix на Ubuntu и нигде такой ошибки нет! Вопрос, а кто в интернете пишет эти руководства, на том же digitalocean и других гуру администрирования, это копипаст какой-то?!! Ладно как всегда иду на новозеландские англоязычные форумы и нахожу ответ не по Заббиксу, но решение проблемы понятно. Кому интересно это связано с мультиархитектурностью ядра Linux и поддержкой одновременно приложений i386 и amd64. Ниже команды для анализа вашего сервера по поддержке 32 и 64:
root@zab:/# dpkg --print-foreign-architectures i386 root@zab:/# dpkg --print-architecture amd64
Вот команда для удаления мульти-архитектуры (только если у вас нет 32-битных приложений), но запускать ее не надо. Я ее указал просто для полного раскрытие этой ошибки.
sudo dpkg --remove-architecture i386
РЕШЕНИЕ: Правим файл /etc/apt/sources.list.d/zabbix.list и добавляем опцию [arch=amd64]. Мой измененный файл:
deb [arch=amd64] https://repo.zabbix.com/zabbix/6.0/ubuntu focal main deb-src [arch=amd64] https://repo.zabbix.com/zabbix/6.0/ubuntu focal main
И снова запускаем
# apt update
Всё, ошибки нет!
Шаг 3 — Установка LAMP
Ранее, в этом руководстве, я самостоятельно устанавливал LAMP, пока не столкнулся с ошибкой, что установленная версия MariaDB не поддерживается Zabbix (и это на Ubuntu 20 LTS). Эта ошибка, лишний раз говорит, что Заббикс должен быть установлен на выделенном сервере и этот сервер должен выполнять задачи только мониторинга.
Для Ubuntu 20 LTS, установить MySQL 8 версии, в принципе эта версия является в Ubuntu 20 LTS базой данных по умолчанию.
apt install default-mysql-server или можете запустить так apt install mysql-server-8.0
Переходим к следующему шагу.
Шаг 4 — Установка Zabbix сервер, веб-интерфейс и агент
После добавления репозитория Apt установим пакеты сервера Zabbix, где пакет zabbix-server-mysql включает Zabbix сервер с поддержкой MySQL, пакет zabbix-frontend-php предоставляет веб-интерфейс для Zabbix сервера.
apt install zabbix-server-mysql zabbix-frontend-php zabbix-nginx-conf zabbix-sql-scripts zabbix-agent
Шаг 5 — Настройка базы данных MySQL для Zabbix
Импортируем схему базы данных для Zabbix сервера. Логинемся на сервер MySQL с учетной записью root и создаем базу данных MySQL и пользователя с помощью следующих команд.
# mysql -uroot mysql> create database zabbix character set utf8mb4 collate utf8mb4_bin; mysql> create user zabbix@localhost identified by 'password'; mysql> grant all privileges on zabbix.* to zabbix@localhost; mysql> set global log_bin_trust_function_creators = 1; mysql> quit;
Импорт начальной схему и данных Заббикс производим от пользователя MySQL созданного выше.
zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix Enter password:
Выключите опцию log_bin_trust_function_creators после импорта схемы базы данных.
# mysql -uroot mysql> set global log_bin_trust_function_creators = 0; mysql> quit;
Ошибка импорта
Были случаи когда импорт происходит с ошибкой, в этом случае проще всего удалить таблицы и импортировать от пользователя root. Удаляем все таблицы zabbix (сама база и пользователь остаются):
mysql -Nse 'show tables' zabbix | while read table; do mysql -e "drop table $table" zabbix; done
Далее импортируем от пользователя root:
zcat /usr/share/doc/zabbix-sql-scripts/mysql/server.sql.gz | mysql -uroot -p zabbix
Настроим подключение Заббикса к базе данных, для это следует отредактировать файл /etc/zabbix/zabbix_server.conf и задать пароль для подключения к MySQL. Остальные 3 параметра уже настроены, если вы конечно не извращались с именем пользователя и базы данных.
DBPassword=password DBHost=localhost DBName=zabbix DBUser=zabbix
Шаг 6 — Автозапуск Zabbix и Nginx
Настройте PHP для веб-интерфейса Отредактируйте файл /etc/zabbix/nginx.conf раскомментируйте и настройте директивы 'listen' и 'server_name'.
listen 80;
server_name your_domain;
Добавляем в автозагрузку и запускаем процессы Zabbix сервера, агента и веб-сервера Nginx.
# systemctl restart zabbix-server zabbix-agent nginx php8.1-fpm # systemctl enable zabbix-server zabbix-agent nginx php8.1-fpm
Система установлена, дальнейшая настройка через веб-установщик Zabbix, по адресу:
http://your_domain/
Шаг 7 — Настройка PHP под требования Zabbix
Почти во всех руководствах по настройке PHP идет глупый копипаст. Кроме часового пояса - ничего НЕ трогайте в php.ini, без понимания зачем вам это нужно.
date.timezone = 'Europe/Kiev'
Шаг 8 — Настройка брандмауэра для Zabbix
В этом случае я использую UFW, вы должны были на первом шаге его настроить первоначальная настройка сетевого фильтра. Далее нам нужно разрешить порты протокола HTTP, HTTPS и зарезервированные порты для работы с Zabbix агентами.
Проверяем есть ли строки в файле services, если нет дописываем
# cat /etc/services | grep Zabbix zabbix-agent 10050/tcp # Zabbix Agent zabbix-agent 10050/udp # Zabbix Agent zabbix-trapper 10051/tcp # Zabbix Trapper zabbix-trapper 10051/udp # Zabbix Trapper
Команды для UFW
$ sudo ufw allow 'Apache Full' $ sudo ufw allow 10050 $ sudo ufw allow 10051
В итоге должна получится такая настройка фаервола:
$ sudo ufw status verbose Status: active Logging: on (low) Default: deny (incoming), allow (outgoing), disabled (routed) New profiles: skip To Action From -- ------ ---- 22/tcp (OpenSSH) ALLOW IN Anywhere 80,443/tcp (Apache Full) ALLOW IN Anywhere 10050 ALLOW IN Anywhere 10051 ALLOW IN Anywhere 22/tcp (OpenSSH (v6)) ALLOW IN Anywhere (v6) 80,443/tcp (Apache Full (v6)) ALLOW IN Anywhere (v6) 10050 (v6) ALLOW IN Anywhere (v6) 10051 (v6) ALLOW IN Anywhere (v6)
Пример открытия zabbix агента на чистом iptables (замените ip сервера на свой):
iptables -A INPUT -s 10.10.0.5/32 -p tcp -m tcp --dport 10050 -j ACCEPT iptables -A INPUT -p tcp -m tcp --dport 10050 -j DROP
Пример открытия zabbix агента для UFW
Вариант с указанием ip сервера Zabbix для IPv4 sudo ufw allow from 10.10.0.5 proto tcp to any port 10050 Вариант с указанием ip сервера Zabbix для IPv6 sudo ufw allow from 2a09:7c53::2a8 proto tcp to any port 10050
Шаг 9 — SSL сертификат (опционально)
Есть хорошие правила, которые позволяют настраивать безопасно и не попадать на деньги:
- Первое правило: НЕ существует 32 битных операционных систем, а только 64.
- Второе правило: НЕ существует протокола HTTP, а только HTTPS.
Моя настоятельная рекомендация установить SSL сертификат на Веб интерфейс управления Заббикс, воспользуйтесь этой инструкцией.
apt install certbot python3-certbot-nginx certbot --nginx
Шаг 10 — Запуск веб-установщика Zabbix
Откройте
http://your_domain/
(в моем случае будет конечно https), чтобы начать первоначальную настройку Zabbix. Жмем Next - проверяем зависимости PHP, если все колонки OK - жмем Next. На странице Configure DB connection вводим пароль MySQL пользователя zabbix, который был создан на Шаг 5.
На странице Zabbix server details введите имя хоста или IP-адрес хоста и номер порта сервера Zabbix, а также имя установки (необязательно). Мои настройки на скриншоте для Zabbix 5.2, для 6 -ой версии Заббикса всё ещё проще.
На вкладке GUI settings должен был подтянуться ваш часовой пояс, который прописывали на Шаг 7.
Жмем Next - проверяем суммарную информаци. Жмем Next - полeчаем сообщение о создании конфигурационного файла "/usr/share/zabbix/conf/zabbix.conf.php". Жмем Finish и переходим на страницу авторизации.
Учетные данные для доступа к веб- интерфейсу Zabbix по умолчанию
Username: Admin Password: zabbix
Сразу меняйте пароль, переходите на страницу Administration > Users > Admin жмем Change Password.
Поздравляю, Вы установили Zabbix!
Шаг 11 — Установка, настройка агентов Zabbix в разных ОС
Шаг 12 — Настройка сервера Zabbix
- Скрипт для бэкапа базы данных Zabbix - https://github.com/npotorino/zabbix-backup. Позволяет выбрать, какие таблицы бэкапить со всеми данными, а для каких только структуру. Это востребовано, когда нужно перенести конфигурацию мониторинга Zabbix на другой сервер, но при этом не нужны исторические данные. Скрипт позволяет сделать полный бэкап таблиц с настройками, при этом таблицы events, history, trends перенести пустыми.
- Zabbix Notifier add-on for Chrome
Шаг 12.1 — Отправка уведомлений и графиков из Zabbix в telegram
Первичная настройка отправки уведомлений в Телеграм описана в этой статье Подключаем оповещение Telegram к Zabbix. Также можно выслать графики из Zabbix в Telegram.
Кратко пошаговая инструкция для отправки сообщений в Телеграм:
Чтобы узнать id вашего аккаунта или группы, добавьте бота @my_id_bot и напишите ему /start. Альтернативный бот для определения Chat ID Echo (@chatid_echo_bot).
- Создаем бота, через которого будем слать оповещения из Заббикса. Для этого добавляем себе в контакты @BotFather и пишем ему сначала /start, потом /newbot. Получаем для бота token. Проверим, как работает отправка уведомлений через созданного бота. Для этого в консоли сервера, при помощи curl выполним команду:
curl --header 'Content-Type: application/json' --request 'POST' --data '{"chat_id":"138912473","text":"Проверяю отправку оповещений ботом"}' "https://api.telegram.org/bot5318351761:AAG7wOFD6BTsfr7HA8Z7v9ejznulXxYj18/sendMessage"
Где 138912473 id моего аккаунта. Чтобы его узнать, добавьте бота @my_id_bot и напишите ему /start. Проверяю работу бота - это nекст сообщения. bot5318351761:AA07wOFD6BTsfr7HA8Z7v9ejznulXxYj18 cлово bot и дальше token бота (пишется все в одно слово).
- Проверяем отправку сообщений из Zabbix: В ранних версиях (Администрирование → Способы оповещений), сейчас Alerts → Media types и выбираем Telegram. Нужно указать только токен бота внутри шаблона.
- Если нужно отправить оповещение в группу, то сначала создайте ее, а потом добавьте туда бота. Обязательно укажите минус в id группы.
- Если у вас ранее не работали никакие уведомления, то не забудьте активировать действия через Alerts → Trigger actions (в более старых версиях Configuration→ Actions → Trigger actions). Или создайте новый.
- В настройках пользователя добавляем ему способ оповещений через Telegram.
- Все работает!
Читайте также: Как Использовать Telegram API с Bash: Отправка Сообщений, Файлов, Фотографий
Шаг 12.2 — Мониторинг истечения срока SSL сертификатов
- Мониторинг срока действия ssl сертификата в zabbix при помощи bash скриптов и утилиты openssl
openssl s_client -connect wiki.dieg.info:443 -servername wiki.dieg.info -tlsextdebug
- Мониторинг сроков действия SSL-сертификатов, разделенных по группам, подходит для мониторинга сотен веб-сайтов. Поддержка порта для каждого домена.
Шаг 12.3 — Повторяющиеся уведомления в Zabbix (Эскалации)
Система мониторинга Zabbix в стандартной установке предлагает один тип оповещений на события - одноразовое уведомление при срабатывании триггера. Часто полезны повторяющиеся напоминания о том, что проблема еще не исправлена. В разделе официальной документации Эскалации рассказано, как управлять оповещениями, в том числе делать их повторными.
Для теста удобно использовать шаблон Linux by Zabbix agent, в нем присутствует system.users.num, нужно создать триггер Number of logged in users, который срабатывает, когда залогиненных пользователей в системе становится больше двух:
Problem: last(/dieg.info/system.users.num)>=2 Recovery: last(/dieg.info/system.users.num)<2
Если вы используете sudo -i для получения прав root, то Zabbix вас будет считать как 2 разных пользователя и триггер будет срабатывать.
Далее идем в меню Настройка → Действия → Действия триггеров. Создаем новое действие:
- Имя: Number of logged in users repeat
- Для привязки к конкретному триггеру, в параметре Условия: Имя триггера содержит Number of logged in users
На вкладке Операции зададим такой алгоритм: повторять сообщения от 1 раз до бесконечности с интервалом 1 минута для группы Zabbix Admin. Для этого заполним:
- Длительность шага операции по умолчанию: 1m
- Операции: Шаг 1-0
- Отправка группам пользователей: Zabbix Admin
Всё! Теперь вы получите 2 оповещения от стандартного правила, которое шлет один раз и от нового, которое создали. Чтобы убрать дублирование необходимо отключать стандартное оповещение и создавать свои с определенными правилами в зависимости от типа триггера.
Zabbix Комплексные экраны
На комплексных экранах в Zabbix можно группировать информацию с различных источников для быстрого обзора данных на одном экране. По сути комплексный экран это таблица. Нужно выбрать как много в таблице будет ячеек и какие элементы будут отображаться в этих ячейках.
Zabbix и оборудование
- Проверки по SSH - проверки используются для безагентного мониторинга. Обратите внимание, что Zabbix агент не требуется для проверок по SSH.
Zabbix и PostgreSql
Zabbix мониторинг сервера баз данных Использование и настройка PostgreSQL версии 8.4.9.
- Template Postgres. Указываем согласно руководству вместо тестовой БД "neiron" собственную. И создадим суперпользователя zabbix
sudo -u postgres createuser zabbix Shall the new role be a superuser? (y/n) y
Мониторинг срока регистрации (освобождения) домена в Zabbix
- В конфигурационном файле zabbix-server.conf задаем путь к каталогу для внешних скриптов
ExternalScripts=/etc/zabbix/externalscripts
- Создайте в этом каталоге файл whois.sh. Доработанный скрипт, изначальная ревизия файла не понимала такой домен как kharkov.ua
#!/bin/bash DOMAIN="$1" exdate=`whois $DOMAIN | grep -E 'paid|Expire|Expiry|expires' | grep -o -E '[0-9]{4}.[0-9]{2}.[0-9]{2}|[0-9]{2}/[0-9]{2}/[0-9]{4}'` #echo $exdate expire=$((`date -d "$exdate" '+%s'`)) today=$((`date '+%s'`)) leftsec=$(($expire - $today)) leftdays=$(($leftsec/86400)) echo $leftdays
chmod +x whois.sh
Проверьте, что скрипт работает корректно. Укажите в качестве параметра имя домена, для которого вы хотите получить количество дней, оставшихся до окончания делегирования.
./whois.sh dieg.info 215
- Теперь с помощью параметра UserParameter нужно разрешить запуск этого пользовательского скрипта агентом Zabbix. Добавьте строку в файл /etc/zabbix/zabbix_agentd.conf
UserParameter=domainexpire[*],/etc/zabbix/externalscripts/whois.sh $1
Такой параметр позволит выполнить определенный внешний скрипт через агента Zabbix. Для вызова этого скрипта из Zabbix нужно использовать параметр domainexpire. Перезапускаем агента:
systemctl restart zabbix-agent.service
Проверьте, что агент zabbix может получить данные через новый параметр. Для тестирования агента используется утилита zabbix-get:
apt install zabbix-get zabbix_get -s 127.0.0.1 -p 10050 -k domainexpire[dieg.info]
Если вы все настроили правильно, команда должна вернуть количество дней до окончания срока регистрации домена.
- Теперь добавьте новый шаблон CheckDomainExpiration для мониторинга сроков делегирования доменов в Zabbix.
На вкладке items создаем новый итем с параметрами
Имя: Cрок регистрации домена {$DOMAINNAME} Type: Zabbix Agent Key: domainexpire[{$DOMAINNAME}] Type of information: Numeric (unsigned) Update Interval: 1d History: 90d Trenfd: 365d
- Добавим новый триггер
Name: Срок регистрации домена {$DOMAINNAME} заканчивается Expression: last(/CheckDomainExpiration/domainexpire[{$DOMAINNAME}])<39 Severity: High
- Теперь добавьте в Zabbix новый хост для вашего доменного имени с типом интерфейса Agent. На вкладке Macros нужно указать имя домена, срок регистрации которого вы хотите отслеживать:
Macro: {$DOMAINNAME} Value: dieg.info
Назначьте хосту ранее созданный шаблон CheckDomainExpiration. В созданном шаблоне срок регистрации домена проверяется раз в сутки. Чтобы получить данные из whois немедленно, найдите ваш параметр (item) на вкладке хоста и нажмите Execute Now.
Теперь проверьте Latest Data. Zabbix покажет через сколько дней заканчивается срок регистрации вашего домена.
По аналогии добавьте через Hosts все домены, срок регистрации которых нужно отслеживать.
Читайте также
📌 Для тестирования скриптов, установщиков VPN, Python ботов рекомендуем использовать надежные VPS на короткий срок. Если вам нужна помощь с более сложными задачами, вы можете найти фрилансера, который поможет с настройкой. Узнайте больше о быстрой аренде VPS для экспериментов и о фриланс-бирже для настройки VPS, WordPress. 📌
💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!7 Самых Популярных Статей
- Как запустить скрипты и веб-приложения на Python
- Что такое страны TIER 1,2,3
- 7 способов сравнения файлов по содержимому в Windows или Linux
- Установка и тестирование веб-панели HestiaCP
- Китайский VPN Shadowsocks простая установка и настройка
- top, htop, atop определение загрузки ОС (Load average, LA)
- Использование rsync в примерах