В этой статье рассмотрю простую настройку Zabbix сервера для мониторинга небольшого офиса с базовой IT-инфраструктурой и оповещения администратора в случае обнаружения проблем. Попробую этот сервер сделать на Ubuntu 20.04 LTS.
Установку самой ОС Ubuntu я уже пошагово расписывал в другой своей статье про настройку Зимбры:
https://typical-admin.ru/item/86-zimbra-9-0-0
Правда, там была Ubuntu 18.04. Но установка Ubuntu 20.04 абсолютно идентична. Поэтому шаг с установкой ОС я пропущу. Начну с того, у меня уже имеется голая установленная Ubuntu 20.04 LTS. Сразу ставлю последние обновления на ОС, а также ставлю привычные для себя инструменты:
apt update
apt upgrade
apt install mc nano
Затем пропишу своему серверу статический IP-адрес. Нахожу файл /etc/netplan/00-installer-config.yaml и привожу его содержимое к такому виду:
network: ethernets: enp0s3: addresses: - 192.168.0.80/24 gateway4: 192.168.0.1 nameservers: addresses: [192.168.0.200, 8.8.8.8] # dhcp4: true version: 2
Даю команду:
netplan apply
для применения изменений.
Ну и далее иду на официальный сайт Zabbix, там есть подробная инструкция по установке, причём, в разных вариантах. Я буду устанавливать Zabbix+MySQL+Nginx:
Устанавливаю репозиторий Zabbix:
wget https://repo.zabbix.com/zabbix/6.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.0-1+ubuntu20.04_all.deb
dpkg -i zabbix-release_6.0-1+ubuntu20.04_all.deb
apt update
Потом устанавливаю Zabbix сервер, веб-интерфейс и агента:
apt install zabbix-server-mysql zabbix-frontend-php zabbix-nginx-conf zabbix-sql-scripts zabbix-agent
Ставлю MySQL-сервер:
apt install mysql-server
Ставлю его в автозагрузку:
systemctl enable mysql
Устанавливаю пароль на root для MySQL:
mysql -u root -p
жму enter при запросе пароля
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'new_password';
quit
где вместо new_password пишу свой пароль.
Теперь создаю базу данных для Zabbix:
mysql -u root -p
ввожу пароль из предыдущего шага
create database zabbix character set utf8mb4 collate utf8mb4_bin;
create user zabbix@localhost identified by 'password';
grant all privileges on zabbix.* to zabbix@localhost;
quit;
где password — пароль пользователя zabbix в MySQL.
Теперь импортирую начальную схему и данные. Будет предложено ввести пароль созданный шагом выше:
zcat /usr/share/doc/zabbix-sql-scripts/mysql/server.sql.gz | mysql -uzabbix -p zabbix
Выполнение команды может занять некоторое время.
Следующим шагом надо отредактировать файл /etc/zabbix/zabbix_server.conf. В нём надо найти параметр DBPassword= и прописать в него пароль базы данных Zabbix:
DBPassword=пароль
Далее надо отредактировать файл /etc/zabbix/nginx.conf. Там требуется раскомментировать и настроить директивы 'listen' и 'server_name'. У меня они выглядят так:
listen 80;
server_name zabbix.local.typical-admin.ru;
Причём хост zabbix.local.typical-admin.ru у меня заранее прописан в Active Directory:
Теперь запускаю процессы Zabbix сервера и агента и настраиваю их запуск при загрузке ОС:
systemctl restart zabbix-server zabbix-agent nginx php7.4-fpm
systemctl enable zabbix-server zabbix-agent nginx php7.4-fpm
Дальнейшая установка и настройка проходит в вэб-интерфейсе. Перехожу в него:
http://zabbix.local.typical-admin.ru/
Там вижу мастера установки и на первом шаге выбираю свой язык:
На следующем шаге установщик проверяет соблюдены ли все предварительные требования программного обеспечения. У меня везде порядок, жму далее:
на следующем шаге надо указать информацию для подключения к базе данных. База данных Zabbix должна быть уже создана:
Далее указываю имя сервера Zabbix и свой часовой пояс:
Всё, Zabbix установлен:
По умолчанию имя пользователя - Admin, пароль — zabbix.
Попробую подключить к Zabbix один из серверов, а именно сервер 1С на CentOS 9, настройку которого я рассматривал здесь:
https://typical-admin.ru/item/91-1c-8-3-centos9
Надо на него установить Zabbix Agent. Вот только на официальном сайте Zabbix нет пакетов для CentOS 9 (на момент написания статьи). Зато есть пакет zabbix-6.0.3-1.el8.src.rpm, из которого я и попробую пересобрать пакеты для CentOS 9. Скачиваю данный пакет:
wget https://repo.zabbix.com/zabbix/6.0/rhel/8/SRPMS/zabbix-6.0.3-1.el8.src.rpm
Затем ставлю пакеты, которых у меня не хватает для сборки:
dnf install OpenIPMI-devel curl-devel gnutls-devel java-devel libevent-devel libssh-devel mariadb-connector-c-devel net-snmp-devel policycoreutils-devel sqlite-devel unixODBC-devel libpq-devel
Скорее всего, это не все пакеты, нужные для сборки. Если каких-то пакетов будет не хватать, то при выполнении команды:
rpmbuild --rebuild zabbix-6.0.3-1.el8.src.rpm
будет выведен список отсутствующих пакетов для сборки. Если же все нужные пакеты присутствуют, то сборка начнётся. И у меня сборка началась, но прервалась вот с такой ошибкой:
configure: error: Unable to find "go" executable in path
Оказывается, для сборки ещё нужен пакет golang, который не указан в зависимостях. Ставлю его:
dnf install golang
После этого снова пробую запустить сборку:
rpmbuild --rebuild zabbix-6.0.3-1.el8.src.rpm
На этот раз всё успешно. В каталоге /root/rpmbuild/RPMS/noarch получаю следующие пакеты:
zabbix-apache-conf-6.0.3-1.el9.noarch.rpm
zabbix-nginx-conf-6.0.3-1.el9.noarch.rpm
zabbix-sql-scripts-6.0.3-1.el9.noarch.rpm
zabbix-web-6.0.3-1.el9.noarch.rpm
zabbix-web-deps-6.0.3-1.el9.noarch.rpm
zabbix-web-japanese-6.0.3-1.el9.noarch.rpm
zabbix-web-mysql-6.0.3-1.el9.noarch.rpm
zabbix-web-pgsql-6.0.3-1.el9.noarch.rpm
А в каталоге /root/rpmbuild/RPMS/x86_64 получаю пакеты вот такие:
zabbix-agent2-6.0.3-1.el9.x86_64.rpm
zabbix-agent-6.0.3-1.el9.x86_64.rpm
zabbix-get-6.0.3-1.el9.x86_64.rpm
zabbix-java-gateway-6.0.3-1.el9.x86_64.rpm
zabbix-js-6.0.3-1.el9.x86_64.rpm
zabbix-proxy-mysql-6.0.3-1.el9.x86_64.rpm
zabbix-proxy-pgsql-6.0.3-1.el9.x86_64.rpm
zabbix-proxy-sqlite3-6.0.3-1.el9.x86_64.rpm
zabbix-selinux-policy-6.0.3-1.el9.x86_64.rpm
zabbix-sender-6.0.3-1.el9.x86_64.rpm
zabbix-server-mysql-6.0.3-1.el9.x86_64.rpm
zabbix-server-pgsql-6.0.3-1.el9.x86_64.rpm
zabbix-web-service-6.0.3-1.el9.x86_64.rpm
Копирую пакеты из обоих каталогов куда-нибудь в отдельное место. Из всех этих пакетов мне нужен всего один — это zabbix-agent2. Ставлю его:
rpm -ivh zabbix-agent2-6.0.3-1.el9.x86_64.rpm
Но возможно кому-нибудь понадобятся все пакеты, чтобы развернуть Zabbix сервер на CentOS 9. Поэтому выложу их здесь, может кому пригодятся:
https://disk.yandex.ru/d/LojQUeluwDnqlQ
Теперь надо сконфигурировать агента. Нахожу файл /etc/zabbix/zabbix_agent2.conf. По умолчанию, в нём достаточно прописать IP-адрес или FQDN сервера мониторинга:
Server=192.168.0.80
Ещё, желательно, указать имя хоста, на котором будет работать агент:
Hostname=1c-serv.local.typical-admin.ru
И также я решил уделить внимание параметру LogFileSize. Он отвечает за ротацию лог-файла. По умолчанию параметр стоит 0, что означает неограниченный размер лога, который, теоретически, может заполнить всё свободное место на диске. Поставлю ротацию лога при достижении размера в 100мб:
LogFileSize=100
Также не забываю на файерволе открыть порт для подключения к агенту:
и включаю Zabbix Agent в автозагрузку:
systemctl enable zabbix-agent2
Теперь пробую добавить сервер 1С в хосты мониторинга на Zabbix сервере. Перехожу в меню «Узлы сети» и там жму кнопку «Создать узел сети»:
В появившемся окне задаю название узла, указываю для него шаблон (самый основной выбрал) и группу. Затем указываю, что подключение будет через агента, указываю IP (или можно FQDN) сервера 1С и жму добавить:
Сервер появился в списке узлов, и через некоторое время «доступность» загорелась зелёным:
Теперь попробую добавить мониторинг контроллера домена, который у меня работает на Windows srv 2019. Скачиваю установщик с официального сайта:
Запускаю его на контроллере домена. Установщик просит указать IP или FQDN сервера Zabbix, а также предупреждает, что на файерволе открыть доступ к агенту надо самостоятельно:
Затем захожу в настройки фаервола и добавляю там разрешающее правило исполняемого файла Zabbix агента:
Затем пробую добавить этот хост в Zabbix, аналогично серверу 1с, но выбирая другой шаблон и группу:
Хост появился и отображается как «доступен»:
Следующим я добавлю в Zabbix хост ESXi с парой виртуальных машин. Для активации мониторинга ESXi, надо подправить конфиг /etc/zabbix/zabbix_server.conf. В нём есть несколько вещей, относящихся к VMware ESXi:
StartVMwareCollectors — количество предварительно запущенных экземпляров сборщика VMware. Это значение зависит от количества служб VMware, которые будут отслеживаться. Для большинства случаев это значение должно быть:
servicenum < StartVMwareCollectors < (servicenum * 2)
где servicenum - количество служб VMware. Например, если 1 служба VMware для мониторинга, то StartVMwareCollectors будет равным 2. Если 3 службы VMware, значение будет 5. В большинстве случаев это значение не должно быть меньше 2 и не должно быть в 2 раза больше, чем количество отслеживаемых служб VMware.
VMwareCacheSize — Размер кеша VMware в байтах. Размер общей памяти для хранения данных VMware. Используется, только если запущены сборщики VMware. (Default: 8M Range: 256K-2G)
VMwareFrequency — Как часто Zabbix будет подключаться к серверу VMware для получения новых данных. (Стандартное значение: 60 секунд. Диапазон: 10-86400)
VMwarePerfFrequency — Как часто Zabbix будет подключаться к сервису VMware для получения данных о производительности. (Default: 60. Range: 10-86400)
VMwareTimeout — сколько секунд сборщик ожидает ответа от службы VMware. (Default: 10 Range: 1-300)
Я лишь отредактировал параметр:
StartVMwareCollectors=2
Значения остальных параметров меня устраивают по умолчанию. Перезапускаю демона Zabbix:
service zabbix-server restart
И проверяю, что там в логе /var/log/zabbix/zabbix_server.log. Наблюдаю записи:
server #26 started [vmware collector #2]
server #25 started [vmware collector #1]
Хорошо, сборщики запущены.
Далее создаю отдельного пользователя на сервере ESXi с правами только чтения. Сначала создаю самого пользователя:
Затем иду Host => Actions => Permissions:
Там жму на Add User и выбираю созданного пользователя zabbix, присваивая ему права Read-only:
Далее надо проверить, запущен ли сервис Config.HostAgent.plugins.solo.enableMob. Если нет, то надо запустить:
Теперь перехожу по адресу:
https://192.168.0.201/mob/?moid=ha-host&doPath=hardware.systemInfo
и вижу табличку, в которой интересует поле uuid:
Перехожу в Zabbix и добавляю новый узел. В имени узла пишу полное FQDN своего сервера ESXi (в моём случае это esxi1.local.typical-admin.ru). Шаблоны выбираю VMware и VMware Hypervisor.
Затем перехожу во вкладку Макросы и там создаю следующие поля:
Макрос |
Значение |
{$VMWARE.HV.UUID} |
|
{$VMWARE.PASSWORD} |
|
{$VMWARE.URL} |
|
{$VMWARE.USERNAME} |
Узел появился:
Начали поступать и данные с него:
Спустя какое-то время, в списке узлов сами появятся виртуальные машины с ESXi сервера:
Однако, мне не нравятся эти серые надписи с «неизвестной доступностью»:
Хочу, чтобы они тоже были зелёные (или красные, как в случае с сервером 1С, который я пока выключил). Попробую добавить интерфейс подключения SNMP. Для этого сначала потребуется настройка службы SNMP Server на машине с ESXi. Сначала запускаю службу для подключения по SSH:
После этого подключаюсь по SSH к серверу ESXi и выполняю следующие команды:
1. Устанавливаю имя сообщества ("public" - это имя сообщества, установленное по умолчанию). Я укажу имя сообщества – "typical-admin".
esxcli system snmp set --communities typical-admin
2. Устанавливаю таргет SNMP. Таргет SNMP - это сервер, на котором установлено программное обеспечение мониторинга и сбора информации. У меня это сервер Zabbix с адресом 192.168.0.80. UDP 161 - это порт по умолчанию, используемый для SNMP, и этот порт определен в моей конфигурации SNMP ESXi:
esxcli system snmp set --targets=192.168.0.80@161/typical-admin
3. Указываю местоположение (например, географическое местоположение, адрес, центр обработки данных или помещение), в котором находится сервер:
esxcli system snmp set --syslocation "EKB"
4. Указываю контактную информацию. Для этого параметра можно задать адрес электронной почты системного администратора:
esxcli system snmp set --syscontact me@domain.me
5. Команда включения SNMP:
esxcli system snmp set --enable true
6. Проверяю состояние SNMP на хосте ESXi:
esxcli system snmp get
И получаю вывод:
Authentication:
Communities: typical-admin
Enable: true
Engineid: 00000063000000a100000000
Hwsrc: indications
Largestorage: true
Loglevel: warning
Notraps:
Port: 161
Privacy:
Remoteusers:
Syscontact: me@domain.me
Syslocation: EKB
Targets: 192.168.0.80@161 typical-admin
Users:
V3targets:
Что ж, пробую изменить подключение в Заббиксе. Удаляю ранее созданный узел ESXi и добавляю его заново. В этот раз подставлю один дополнительный шаблон и соединение указываю SNMP:
А во вкладке Макросы прописываю дополнительную строчку {$SNMP_COMMUNITY} = typical-admin:
Затем жму Добавить. Узел успешно добавился и через некоторое время засветился зелёным:
Осталось добавить последний узел для мониторинга, и это у меня будет маршрутизатор Mikrotik. Он тоже мониторится по протоколу SNMP. На Микротике перехожу в меню IP -> SNMP и выполняю следующие настройки:
Затем жму кнопку Communities, потом жму Add New и далее ввожу параметры своего SNMP Communities (это тип общего пароля между станцией управления SNMP и устройством, который используется для аутентификации станции управления SNMP):
После этого выбираю свой SNMP Communities в основных настройках:
Теперь иду в Zabbix подключать Mikrotik в узлы мониторинга. Создаю новый узел:
Во вкладке Макросы прописываю {$SNMP_COMMUNITY} = typical-admin:
Узел добавился, данные начали поступать:
Вот такая схема инфраструктуры получилась:
Заключительный этап, который хотелось бы сделать — это настройка оповещений системному администратору. У Заббикса довольно много методов оповещения. Но я хочу через Телеграм:
В описании этого метода есть краткая, но ёмкая инструкция:
1. Зарегистрируйте бота: отправьте "/newbot" на @BotFather и следуйте инструкциям.
2. Скопируйте и вставьте полученный токен в поле "Token" выше (в настройках оповещения).
3. Если вы хотите отправлять персональные уведомления, вам необходимо получить чат-id пользователя, которому вы хотите отправлять сообщения:
3.1. Отправьте "/getid" на "@myidbot" в мессенджере Telegram.
3.2. Скопируйте полученный идентификатор чата и сохраните его в медиа "Telegram Webhook" для пользователя.
3.3. Попросите пользователя отправить "/start" вашему боту (без этого Telegram-бот ничего не отправит пользователю).
4. Если вы хотите отправлять групповые уведомления, вам нужно получить id группы, которой вы хотите отправлять сообщения:
4.1. Добавьте "@myidbot" в свою группу.
4.2. Отправьте "/getgroupid@myidbot" в вашей группе.
4.3. Скопируйте полученный идентификатор группы и сохраните его в медиа "Telegram Webhook" для пользователя, которого вы создали для групповых уведомлений.
4.4. Отправьте "/start@имя_вашего_бота_здесь" в вашей группе (без этого Telegram бот не будет ничего отправлять в группу).
Эта же англоязычная инструкция, но с картинками есть по ссылке:
https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/media/telegram
Что ж, пробую зарегистрировать бота:
Бота зарегистрировал, API token получил. Теперь в Заббиксе иду Администрирование → Способы оповещений → Telegram и там в поле Token вставляю полученный API token:
Далее узнаю свой чат-id:
После этого снова иду в Zabbix в Администрирование → Пользователи, нажимаю на нужного пользователя, перехожу во вкладу Оповещения и жму Добавить:
Там выбираю Telegram и вставляю полученный выше чат-id. Жму Добавить.
И здесь жму Обновить:
Затем нахожу своего бота в Телеграме и запускаю его:
Теперь снова иду в Zabbix и включаю отправку сообщений при срабатывании триггеров. Это Настройка → Действия → Действия Триггеров:
Там я вижу это:
Жму, чтобы было активировано:
Всё. Пробую выдернуть шнур из какого-нибудь сервера, жду сообщения от бота. Пришло уведомление:
На этом статью можно закончить. Это была базовая настройка Zabbix для малого офиса.
Донаты принимаются на кошельки:
Yoomoney:
4100118091867315
Карта Т-Банк (бывший Тиньков):
2200 7017 2612 2077
Карта Альфа-Банк:
2200 1539 1357 2013