Найти тему
Типичный Админ

Установка и базовая настройка Zabbix

В этой статье рассмотрю простую настройку 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:

https://www.zabbix.com/ru/download?zabbix=6.0&os_distribution=ubuntu&os_version=20.04_focal&db=mysql&ws=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/

Там вижу мастера установки и на первом шаге выбираю свой язык:

-2

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

-3

на следующем шаге надо указать информацию для подключения к базе данных. База данных Zabbix должна быть уже создана:

-4

Далее указываю имя сервера Zabbix и свой часовой пояс:

-5

Всё, Zabbix установлен:

-6

По умолчанию имя пользователя - 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

Также не забываю на файерволе открыть порт для подключения к агенту:

-7

и включаю Zabbix Agent в автозагрузку:

systemctl enable zabbix-agent2

Теперь пробую добавить сервер 1С в хосты мониторинга на Zabbix сервере. Перехожу в меню «Узлы сети» и там жму кнопку «Создать узел сети»:

-8

В появившемся окне задаю название узла, указываю для него шаблон (самый основной выбрал) и группу. Затем указываю, что подключение будет через агента, указываю IP (или можно FQDN) сервера 1С и жму добавить:

-9

Сервер появился в списке узлов, и через некоторое время «доступность» загорелась зелёным:

-10

Теперь попробую добавить мониторинг контроллера домена, который у меня работает на Windows srv 2019. Скачиваю установщик с официального сайта:

https://cdn.zabbix.com/zabbix/binaries/stable/6.0/6.0.3/zabbix_agent2-6.0.3-windows-amd64-openssl.msi

Запускаю его на контроллере домена. Установщик просит указать IP или FQDN сервера Zabbix, а также предупреждает, что на файерволе открыть доступ к агенту надо самостоятельно:

-11

Затем захожу в настройки фаервола и добавляю там разрешающее правило исполняемого файла Zabbix агента:

-12
-13
-14
-15

Затем пробую добавить этот хост в Zabbix, аналогично серверу 1с, но выбирая другой шаблон и группу:

-16

Хост появился и отображается как «доступен»:

-17

Следующим я добавлю в 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 с правами только чтения. Сначала создаю самого пользователя:

-18

Затем иду Host => Actions => Permissions:

-19

Там жму на Add User и выбираю созданного пользователя zabbix, присваивая ему права Read-only:

-20

Далее надо проверить, запущен ли сервис Config.HostAgent.plugins.solo.enableMob. Если нет, то надо запустить:

-21

Теперь перехожу по адресу:

https://192.168.0.201/mob/?moid=ha-host&doPath=hardware.systemInfo

и вижу табличку, в которой интересует поле uuid:

-22

Перехожу в Zabbix и добавляю новый узел. В имени узла пишу полное FQDN своего сервера ESXi (в моём случае это esxi1.local.typical-admin.ru). Шаблоны выбираю VMware и VMware Hypervisor.

-23

Затем перехожу во вкладку Макросы и там создаю следующие поля:

Макрос Значение

{$VMWARE.HV.UUID} 03000200-0400-0500-0006-000700080009

{$VMWARE.PASSWORD} Пароль от пользователя zabbix в ESXi

{$VMWARE.URL} https://192.168.0.201/sdk

{$VMWARE.USERNAME} zabbix

-24

Узел появился:

-25

Начали поступать и данные с него:

-26

Спустя какое-то время, в списке узлов сами появятся виртуальные машины с ESXi сервера:

-27

Однако, мне не нравятся эти серые надписи с «неизвестной доступностью»:

-28

Хочу, чтобы они тоже были зелёные (или красные, как в случае с сервером 1С, который я пока выключил). Попробую добавить интерфейс подключения SNMP. Для этого сначала потребуется настройка службы SNMP Server на машине с ESXi. Сначала запускаю службу для подключения по SSH:

-29

После этого подключаюсь по 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:

-30

А во вкладке Макросы прописываю дополнительную строчку {$SNMP_COMMUNITY} = typical-admin:

-31

Затем жму Добавить. Узел успешно добавился и через некоторое время засветился зелёным:

-32

Осталось добавить последний узел для мониторинга, и это у меня будет маршрутизатор Mikrotik. Он тоже мониторится по протоколу SNMP. На Микротике перехожу в меню IP -> SNMP и выполняю следующие настройки:

-33

Затем жму кнопку Communities, потом жму Add New и далее ввожу параметры своего SNMP Communities (это тип общего пароля между станцией управления SNMP и устройством, который используется для аутентификации станции управления SNMP):

-34

После этого выбираю свой SNMP Communities в основных настройках:

-35

Теперь иду в Zabbix подключать Mikrotik в узлы мониторинга. Создаю новый узел:

-36

Во вкладке Макросы прописываю {$SNMP_COMMUNITY} = typical-admin:

-37

Узел добавился, данные начали поступать:

-38

Вот такая схема инфраструктуры получилась:

-39

Заключительный этап, который хотелось бы сделать — это настройка оповещений системному администратору. У Заббикса довольно много методов оповещения. Но я хочу через Телеграм:

-40

В описании этого метода есть краткая, но ёмкая инструкция:

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

Что ж, пробую зарегистрировать бота:

-41

Бота зарегистрировал, API token получил. Теперь в Заббиксе иду Администрирование → Способы оповещений → Telegram и там в поле Token вставляю полученный API token:

-42

Далее узнаю свой чат-id:

-43

После этого снова иду в Zabbix в Администрирование → Пользователи, нажимаю на нужного пользователя, перехожу во вкладу Оповещения и жму Добавить:

-44

Там выбираю Telegram и вставляю полученный выше чат-id. Жму Добавить.

-45

И здесь жму Обновить:

-46

Затем нахожу своего бота в Телеграме и запускаю его:

-47

Теперь снова иду в Zabbix и включаю отправку сообщений при срабатывании триггеров. Это Настройка → Действия → Действия Триггеров:

-48

Там я вижу это:

-49

Жму, чтобы было активировано:

-50

Всё. Пробую выдернуть шнур из какого-нибудь сервера, жду сообщения от бота. Пришло уведомление:

-51

На этом статью можно закончить. Это была базовая настройка Zabbix для малого офиса.

Донаты принимаются на кошельки:

Yoomoney:
4100118091867315

Карта Т-Банк (бывший Тиньков):
2200 7017 2612 2077

Карта Альфа-Банк:
2200 1539 1357 2013

#zabbix #ubuntu 20.04 #centos 9 #ESXi #mikrotik #Telegram #установка #настройка