Мониторинг удалённых серверов с помощью Zabbix в Ubuntu 18.04

Zabbix – это открытое программное обеспечение для мониторинга сетей и приложений. Zabbix может в реальном времени отслеживать тысячи метрик, собранных с серверов, виртуальных машин или любого другого сетевого устройства. Это позволяет вам здраво оценить состояние машины и своевременно обнаружить проблемы. Zabbix сохраняет полезные данные в базу, что позволяет вам анализировать данные в течение долгого времени и улучшить качество предоставляемых услуг или усовершенствовать оборудование.

Zabbix использует несколько функций для сбора метрик, включая безагентный мониторинг сервисов пользователя и архитектуру «клиент-сервер». На отслеживаемую машину устанавливается агент, который собирает данные и передаёт их серверу Zabbix. Zabbix поддерживает шифрованные соединения между сервером и клиентами, что обеспечивает надёжную защиту данных.

Сервер Zabbix хранит данные в реляционной БД MySQLPostgreSQL или Oracle. Исторические данные можно хранить в базах nosql, таких как Elasticsearch и TimescaleDB. Также Zabbix предоставляет веб-интерфейс, с помощью которого можно просматривать данные и настраивать программу.

Данный мануал поможет установить и настроить Zabbix на двух машинах, одна из которых будет использоваться как сервер, а вторая – как отслеживаемый клиент. В этом мануале используется СУБД MySQL (для хранения данных) и веб-сервер Apache (для обслуживания веб-интерфейса).

Требования

  • Два настроенных сервера Ubuntu 18.04 (мануал по начальной настройке можно найти по этой ссылке). На один из этих серверов вы установите Zabbix, после чего он сможет мониторить второй сервер.
  • Пользователь с доступом к sudo на каждом сервере.
  • Предварительно установленные Apache, MySQL и PHP на первом сервере. Установить этот стек можно с помощью этого мануала.

Поскольку Zabbix сервер используется для доступа к важной информации о вашей инфраструктуре, к которой не должно быть доступа у неавторизованных пользователей, важно заранее установить сертификат TLS/SSL. Это необязательно, но мы настоятельно рекомендуем сделать это. Чтобы получить бесплатный доверенный сертификат TLS/SSL, следуйте мануалу Создание сертификата Let’s Encrypt для Apache в Ubuntu 18.04.

1: Установка сервера Zabbix

Войдите на первый сервер, на который вы ранее установили MySQL, Apache и PHP.

ssh 8host@zabbix_server_ip_address

По умолчанию пакеты Zabbix доступны в репозитории Ubuntu, но они устаревшие. Чтобы установить последнюю стабильную версию Zabbix, добавьте официальный репозиторий проекта. Установите конфигурационный пакет репозитория:

wget https://repo.zabbix.com/zabbix/4.2/ubuntu/pool/main/z/zabbix-release/zabbix-release_4.2-1+bionic_all.deb
sudo dpkg -i zabbix-release_4.2-1+bionic_all.deb

Вы получите такой вывод:

Selecting previously unselected package zabbix-release.
(Reading database ... 61483 files and directories currently installed.)
Preparing to unpack zabbix-release_4.2-1+bionic_all.deb ...
Unpacking zabbix-release (4.2-1+bionicc) ...
Setting up zabbix-release (4.2-1+bionicc) ...

Обновите индекс пакетов:

sudo apt update

Установите сервер Zabbix и фронтенд с поддержкой MySQL.

sudo apt install zabbix-server-mysql zabbix-frontend-php

Теперь нужно установить агент Zabbix, который будет собирать данные о состоянии самого сервера Zabbix:

sudo apt install zabbix-agent

2: Настройка базы данных MySQL для Zabbix

Создайте новую БД MySQL и добавьте в неё основные данные. Также нужно создать специального пользователя для Zabbix (root-пользователя MySQL для этого использовать нельзя).

Откройте MySQL как пользователь root. По запросу введите MySQL root-пароль.

mysql -uroot -p

Создайте БД Zabbix с поддержкой символов UTF-8:

create database zabbix character set utf8 collate utf8_bin;

Затем создайте пользователя, с помощью которого Zabbix сможет взаимодействовать с БД, и выберите пароль для него:

grant all privileges on zabbix.* to zabbix@localhost identified by 'your_zabbix_mysql_password';

Сбросьте привилегии:

flush privileges;

Закройте MySQL:

quit;

Импортируйте базовую схему БД Zabbix, которая поставляется вместе с программой с помощью команды zcat (данные в файле сжаты):

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

Введите пароль пользователя zabbix.

После выполнения команды вы можете получить ошибку:

ERROR 1045 (28000): Access denied for userzabbix@'localhost' (using password: YES)

Она возникает при введении неправильного пароля; возможно, вместо пароля пользователя zabbix вы ввели пароль root.

Чтобы сервер Zabbix мог взаимодействовать с БД, нужно добавить пароль пользователя БД в конфигурационный файл Zabbix. Откройте этот файл:

sudo nano /etc/zabbix/zabbix_server.conf

Найдите следующий раздел:

### Option: DBPassword
#       Database password. Ignored for SQLite.
#       Comment this line if no password is used.
#
# Mandatory: no
# Default:
# DBPassword=

Эти закомментированные параметры настраивают подключение к БД. В параметре DBPassword нужно указать пароль пользователя базы данных.

...
DBPassword=your_zabbix_mysql_password

Сохраните и закройте файл zabbix_server.conf.

Теперь нужно настроить PHP для поддержки веб-интерфейса Zabbix.

3: Настройка PHP для поддержки Zabbix

Веб-интерфейс Zabbix написан на PHP, потому PHP требует дополнительной настройки для его поддержки. Во время установки Zabbix создаёт конфигурационный файл Apache, в котором и хранятся все необходимые параметры. Этот файл находится в /etc/zabbix и автоматически загружается Apache. Откройте файл:

sudo nano /etc/zabbix/apache.conf

В файле находятся параметры PHP для поддержки веб-интерфейса Zabbix. Укажите правильный часовой пояс (по умолчанию этот параметр закомментирован).

...
<IfModule mod_php7.c>
php_value max_execution_time 300
php_value memory_limit 128M
php_value post_max_size 16M
php_value upload_max_filesize 2M
php_value max_input_time 300
php_value always_populate_raw_post_data -1
# php_value date.timezone Europe/Riga
</IfModule>

Раскомментируйте выделенную красным строку и укажите в ней свой часовой пояс.

Примечание: Список часовых поясов можно найти здесь.

Сохраните и закройте файл.

Перезапустите Apache:

sudo systemctl restart apache2

Запустите сервер Zabbix:

sudo systemctl start zabbix-server

Убедитесь, что сервер Zabbix запущен успешно:

sudo systemctl status zabbix-server

Команда должна вернуть:

zabbix-server.service - Zabbix Server
Loaded: loaded (/lib/systemd/system/zabbix-server.service; disabled; vendor preset: enabled)
Active: active (running) since Fri 2019-04-05 08:50:54 UTC; 3s ago
Process: 16497 ExecStart=/usr/sbin/zabbix_server -c $CONFFILE (code=exited, status=0/SUCCESS)
...

Теперь включите автозапуск Zabbix:

sudo systemctl enable zabbix-server

Итак, сервер запущен и подключен к БД.

Примечание: Как говорилось в требованиях, мы рекомендуем включить на сервере поддержку SSL/TLS. Сейчас вы можете выполнить этот мануал, чтобы получить бесплатный SSL-сертификат для Apache в Ubuntu 18.04.

4: Настройка параметров веб-интерфейса Zabbix

Веб-интерфейс Zabbix позволяет просматривать отчёты и добавлять новые хосты, которые нужно мониторить. Он нуждается в начальной настройке. Для этого запустите браузер и откройте ссылку:

http://zabbix_server_name/zabbix/

На экране появится приветственная страница. Нажмите Next step.

На следующем экране вы увидите таблицу, в которой перечислены все требования и зависимости, необходимые для запуска Zabbix.

Все строки в этом списке должны быть отмечены зелёным OK в последнем столбце. Если это так, то среда полностью готова к работе Zabbix. Просмотрите весь список и в случае необходимости установите недостающие компоненты. Затем нажмите Next step.

На следующей странице нужно указать данные для подключения к БД.

Веб-интерфейс Zabbix требует доступа к БД, чтобы иметь возможность управлять хостами и читать данные для отображения. Введите учётные данные БД MySQL и нажмите Next step, чтобы продолжить.

На следующем экране вы можете оставить значения по умолчанию. Поле Name заполняется опционально. С его помощью интерфейс отличает один сервер от другого (если серверов Zabbix несколько). Поскольку в этом мануале используется только один сервер, можно просто нажать Next step.

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

Установка веб-интерфейса завершена. Во время установки будет создан конфигурационный файл /usr/share/zabbix/conf/zabbix.conf.php, который можно скопировать и использовать в дальнейшей работе. Нажмите Finish, чтобы получить доступ к форме аутентификации. Имя пользователя и пароль по умолчанию: Admin и zabbix соответственно.

Но прежде чем открыть интерфейс, нужно подготовить клиентский сервер Zabbix.

5: Установка и настройка агента Zabbix

Перейдите на второй сервер Ubuntu:

ssh 8host@second_ubuntu_server_ip_address

Как и на первом сервере, запустите следующие команды, чтобы установить официальный репозиторий Zabbix:

wget https://repo.zabbix.com/zabbix/4.2/ubuntu/pool/main/z/zabbix-release/zabbix-release_4.2-1+bionic_all.deb
sudo dpkg -i zabbix-release_4.2-1+bionic_all.deb

Обновите индекс пакетов:

sudo apt-get update

Установите агент Zabbix:

sudo apt-get install zabbix-agent

Zabbix поддерживает шифрование на основе сертификатов. Настройка центра сертификации выходит за рамки данного руководства, но вы можете использовать предварительно согласованный ключ (PSK), чтобы обеспечить соединение между сервером и агентом.

Сгенерируйте PSK:

sudo sh -c "openssl rand -hex 32 > /etc/zabbix/zabbix_agentd.psk"

Скопируйте ключ, он понадобится при настройке хоста:

cat /etc/zabbix/zabbix_agentd.psk

Ключ имеет примерно такой вид:

12eb854dea38ac9ee7d1ded2d74cee6262b0a56710f6946f7913d674ab82cdd4

Откорректируйте настройки агента Zabbix, чтобы обеспечить безопасное соединение с сервером Zabbix. Откройте конфигурационный файл:

sudo nano /etc/zabbix/zabbix_agentd.conf

Файл хранит множество параметров, каждый из которых сопровождается описательным комментарий.

Укажите IP-адрес сервера Zabbix:

...
### Option: Server
#       List of comma delimited IP addresses (or hostnames) of Zabbix servers.
#       Incoming connections will be accepted only from the hosts listed here.
#       If IPv6 support is enabled then '127.0.0.1', '::127.0.0.1', '::ffff:127.0.0.1' are treated equally.
#
# Mandatory: no
# Default:
# Server=
Server=127.0.0.1
...

Замените стандартное значение строки Server= IP-адресом сервера Zabbix.

...
Server=zabbix_server_ip_address
...

Затем найдите параметры для настройки безопасного соединения (раздел TSLConnect) и включите поддержку PSK. Найдите этот раздел:

...
### Option: TLSConnect
#       How the agent should connect to server or proxy. Used for active checks.
#       Only one value can be specified:
#               unencrypted - connect without encryption
#               psk         - connect using TLS and a pre-shared key
#               cert        - connect using TLS and a certificate
#
# Mandatory: yes, if TLS certificate or PSK parameters are defined (even for 'unencrypted' connection)
# Default:
# TLSConnect=unencrypted
...

Измените значение строки TLSConnect:

...
TLSConnect=psk
...

Затем найдите раздел TLSAccept:

...
### Option: TLSAccept
#       What incoming connections to accept.
#       Multiple values can be specified, separated by comma:
#               unencrypted - accept connections without encryption
#               psk         - accept connections secured with TLS and a pre-shared key
#               cert        - accept connections secured with TLS and a certificate
#
# Mandatory: yes, if TLS certificate or PSK parameters are defined (even for 'unencrypted' connection)
# Default:
# TLSAccept=unencrypted
...

Настройте входящие соединения для поддержки psk:

...
TLSAccept=psk
...

Найдите раздел TLSPSKIdentity:

...
### Option: TLSPSKIdentity
#       Unique, case sensitive string used to identify the pre-shared key.
#
# Mandatory: no
# Default:
# TLSPSKIdentity=
...

Выберите уникальное имя для ключа PSK:

...
TLSPSKIdentity=PSK 001
...

Теперь этот уникальный идентификатор ключа можно использовать при добавлении новых хостов через веб-интерфейс.

Затем укажите, в каком файле хранится ключ. Найдите опцию TLSPSKFile:

...
### Option: TLSPSKFile
#       Full pathname of a file containing the pre-shared key.
#
# Mandatory: no
# Default:
# TLSPSKFile=
...

Чтобы указать агенту Zabbix место хранения ключа, добавьте строку:

...
TLSPSKFile=/etc/zabbix/zabbix_agentd.psk
...

Сохраните и закройте файл.

Запустите агент Zabbix и добавьте его в автозапуск:

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

На всякий случай проверьте статус и убедитесь, что агент Zabbix успешно запущен:

sudo systemctl status zabbix-agent

Команда должна вернуть:

zabbix-agent.service - Zabbix Agent
Loaded: loaded (/lib/systemd/system/zabbix-agent.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2019-04-05 09:03:04 UTC; 1s ago
...

Агент прослушивает соединения с сервером по порту 10050. Разблокируйте этот порт в брандмауэре UFW.

sudo ufw allow 10050/tcp

Читайте также: Настройка брандмауэра UFW на сервере Ubuntu 18.04

Теперь агент может передавать данные на сервер Zabbix. Чтобы начать работу, нужно подключиться к агенту через веб-консоль сервера.

6: Добавление хоста на сервер Zabbix

Чтобы сервер Zabbix начал отслеживать установленный агент, нужно добавить его в список хостов через веб-интерфейс.

Откройте интерфейс Zabbix:

http://zabbix_server_name/zabbix/

В верхней панели нажмите Configuration → Hosts. Затем нажмите кнопку Create host в правом верхнем углу.

На экране появится страница настройки хоста. В полях Host name и IP address укажите имя и IP-адрес клиента. Затем выберите группу хоста; вы можете выбрать одну из существующих групп или создать свою. Один хост может входить сразу в несколько групп. Группа Linux Servers выбрана по умолчанию и подходит в большинстве случаев. Введите имя существующей или новой группы в поле Groups и выберите нужное значение из предложенного списка.

Добавив группу, откройте вкладку Templates.

Введите в поле поиска Template OS Linux и нажмите Add, чтобы добавить этот шаблон.

Откройте вкладку Encryption. Выберите PSK в Connections to host и Connections from host. В PSK identity укажите имя ключа, установленное в параметре TLSPSKIdentity на агенте Zabbix (в данном случае PSK 001).

В поле PSK укажите ключ, который хранится в /etc/zabbix/zabbix_agentd.psk на агенте.

Нажмите Add, чтобы добавить хост.

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

Чтобы добавить новые клиенты Zabbix, установите программное обеспечение агента Zabbix, создайте PSK, настройте агент и добавьте его в список веб-консоли.

Сервер Zabbix теперь отслеживает ваш второй сервер Ubuntu. Теперь настройте уведомления по электронной почте, чтобы получать уведомления о проблемах.

7: Настройка уведомлений

Zabbix автоматически поддерживает несколько типов уведомлений: среди них электронная почта, Jabber, SMS и т.д. Вы также можете использовать альтернативные методы уведомлений, такие как Telegram или Slack. Полный список интеграций можно найти здесь.

Самым простым способом получения уведомлений является электронная почта, и в этом мануале мы настроим именно это средство коммуникации.

Нажмите Administration, а затем Media types в верхней панели. Вы увидите список всех доступных типов коммуникации. Кликните на Email.

Отредактируйте параметры SMTP в соответствии с настройками, предоставленными вашей электронной почтой. В этом мануале для настройки почтовых уведомлений используется SMTP Gmail.

Читайте также: Использование SMTP-сервера Google

Примечание: Если вы используете двухэтапную аутентификацию в Gmail, вам нужно сгенерировать пароль приложения для Zabbix. Его не нужно запоминать, достаточно ввести этот пароль один раз во время установки. Инструкции по созданию такого пароля вы найдете в Google Help Center.

Вы также можете выбрать формат сообщения – HTML или обычный текст. Нажмите кнопку Update в конце формы, чтобы обновить параметры электронной почты.

Теперь создайте нового пользователя. Нажмите в верхней панели Administration, а затем Users. Вы увидите список пользователей. Затем нажмите кнопку Create user в правом верхнем углу экрана. Откроется страница конфигурации пользователя.

Введите новое имя в поле Alias ​​и установите новый пароль. Затем добавьте пользователя в группу администратора. Введите Zabbix administrators  в поле Groups и выберите его из предложенного списка.

После добавления группы перейдите во вкладку Media и нажмите на подчеркнутую ссылку Add. Появится всплывающее окно.

Введите свой адрес электронной почты в поле Send to. Остальные параметры можно оставить со значениями по умолчанию. Нажмите внизу кнопку Add, чтобы принять новые настройки.

Теперь перейдите во вкладку Permissions. Выберите Zabbix Super Admin в выпадающем меню User type.

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

Теперь вам нужно включить уведомления. Перейдите во вкладку Configuration, а затем выберите Actions в верхней панели управления. Вы увидите предварительно настроенное действие, которое отвечает за отправку уведомлений всем администраторам Zabbix. Вы можете просмотреть и изменить настройки, кликнув на его название. В этом мануале мы используем параметры по умолчанию. Чтобы включить действие, кликните на красную ссылку Disabled в столбце Status.

Теперь вы будете получать оповещения. Чтобы протестировать настройки, давайте попробуем сгенерировать уведомление.

8: Проверка настройки уведомлений

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

Создайте временный файл, достаточно большой, чтобы вызвать предупреждение об использовании файловой системы Zabbix. Для этого войдите на второй сервер Ubuntu.

ssh 8host@second_ubuntu_server_ip_address

Затем определите, сколько на сервере свободного места. Для этого можно вызвать df.

df -h

Команда df сообщит об использовании дискового пространства вашей файловой системы, а флаг -h вернет эти данные в удобочитаемом формате. Вы увидите примерно такой вывод:

Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        25G  1.2G   23G   5% /

В этом случае свободное пространство составляет 23 ГБ (ваш результат может отличаться).

Используйте команду fallocate, что позволяет управлять выделением пространства, чтобы создать файл, который занимает более 80% доступного дискового пространства. Этого будет достаточно, чтобы вызвать предупреждение:

fallocate -l 20G /tmp/temp.img

Примерно через час Zabbix пришлет оповещение об использовании свободного дискового пространства и запустит настроенное вами действие, отправив уведомление. Вы можете проверить входящие сообщения и найти там сообщение от сервера Zabbix. Оно выглядит примерно так:

Problem started at 10:37:54 on 2019.04.05
Problem name: Free disk space is less than 20% on volume /
Host: Second Ubuntu server
Severity: Warning
Original problem ID: 34

Вы также можете перейти во вкладку Monitoring и Dashboard, чтобы просмотреть уведомление и его детали.

Теперь, когда вы знаете, что оповещения приходят вам на почту, удалите созданный вами временный файл, чтобы освободить место на диске:

rm -f /tmp/temp.img

Через минуту Zabbix отправит сообщение о восстановлении пространства, и предупреждение исчезнет с главной панели.

Заключение

Больше полезной информации о мониторинге инфраструктуры вы найдете в наших мануалах:

Tags: , , , , ,