Версия для печати
Суббота, 23 Апрель 2022 23:43

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

Автор
Оцените материал
(6 голосов)

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

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

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

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

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

Запускаю его на контроллере домена. Установщик просит указать 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}

03000200-0400-0500-0006-000700080009

{$VMWARE.PASSWORD}

Пароль от пользователя zabbix в ESXi

{$VMWARE.URL}

https://192.168.0.201/sdk

{$VMWARE.USERNAME}

zabbix

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

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

Спустя какое-то время, в списке узлов сами появятся виртуальные машины с 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

BTC:
bc1qzw9vam8mv6derwscxl0vrnd6m9t2rpjg273mna

ETH / BNB BSC / Polygon MATIC:
0x5cc07FF76490350ac6112fbFdA1B545Bc794602F

Tron:
TJUz8sJr9XYMjVqzmFNnCzzRWfPa57X2RV

USDT/USDC в сетях ETH/BSC/Polygon:
0x5cc07FF76490350ac6112fbFdA1B545Bc794602F

USDT в сети TRX (Tron):
TJUz8sJr9XYMjVqzmFNnCzzRWfPa57X2RV

LTC:
LRMZaFCSyCT6FUF62WEX1BokWV7v2dh2zo

Doge:
DTEnGLZRps9XaWNtAhchJWSeD4uTNDRxg7

XMR:
4A6uP1WxEc7HktToZFyiJuK6YmjdL8bSn2aY653qPwABhT4Y56iFuedgHcmpvLwWE55u8qkjGc715ZJs761FqedA8gkgznr

TON:
UQAdSPiWIDx2Q1VIeezkUV3s4sNlZM90w2ohSO6bD2-okwgY

Прочитано 4040 раз Последнее изменение Воскресенье, 15 Январь 2023 00:11
Николай