Zabbix Server 6 в Docker

Zabbix это бесплатный и надежный инструмент корпоративного уровня с открытым исходным кодом, используемый для мониторинга и анализа производительности компонентов. Zabbix предлагает мониторинг сетей в режиме реального времени, выявляет неисправности, как только они возникают, и отправляет оповещения команде реагирования. Это помогает обеспечить непрерывность бизнеса. Zabbix имеет ядро, основанное на языке C с фронтендом Java и PHP.

Архитектура Zabbix состоит из Zabbix сервера и клиентов. Сервер обычно взаимодействует с нативными клиентами, известными как Zabbix агенты. Агентом может быть система Linux, Windows или NIX. Zabbix агент — это клиентское программное обеспечение, установленное на клиентской машине для сбора журналов мониторинга и отправки их на сервер.

Ниже приведена иллюстрация архитектуры Zabbix.

Последний релиз, Zabbix 6.0 LTS, имеет множество удивительных функций, которые включают в себя:

  • Машинное обучение для мониторинга базовых показателей с расширенным обнаружением аномалий.
  • Добавлены улучшения безопасности с политикой сложности паролей для пользовательского интерфейса Zabbix и журналом аудита для всех операций пользователей и API.
  • Высокая производительность, доступность и масштабируемость – Zabbix 6.0 LTS имеет прокси для обеспечения автоматической балансировки нагрузки и HA, нативную настройку HA для Zabbix Server, улучшения производительности API и масштабируемое хранилище истории.
  • Корреляция событий и корпоративная консоль аварийной сигнализации — она имеет возможность выполнять фильтрацию, дедупликацию и агрегацию событий с помощью правил предварительной обработки событий, возможность вручную скрывать и приостанавливать проблемы на определенный период времени, а также представление проблем, оптимизированное для более быстрого решения проблем и совместной работы.
  • Мониторинг бизнес-сервисов (BSM) с поддержкой оповещений об изменениях статуса сервиса, мультитенантность для сервисов, анализ влияния, импорт/экспорт для дерева сервисов, возможность масштабирования до 100 КБ бизнес-сервисов и т. д.
  • Расширенная визуализация – включает в себя многоуровневые графики, аннотации графиков, расширенные виджеты состояния узлов сети, виджеты событий с течением времени, географические карты и т.д.

Теперь давайте углубимся в суть и посмотрим, как мы можем запустить Zabbix Server 6.0 LTS в Docker Containers.

Шаг 1 – Установите Docker Runtime в систему

Для этого руководства нам нужно установить Docker Engine. Если он у вас уже установлен, то вы можете пропустить этот шаг. В противном случае установите Docker Engine с помощью приведенных ниже команд, которые лучше всего подходят для вашей системы.

Самый быстрый способ установить docker — использовать следующие команды:

curl -fsSL get.docker.com -o get-docker.sh
sudo sh get-docker.sh

В качестве альтернативы можно использовать следующие методы:

В Debian:

sudo apt-get remove docker docker-engine docker.io containerd runc
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

В Ubuntu:

sudo apt-get remove docker docker-engine docker.io containerd runc
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

На RHEL/CentOS 8/Rocky Linux 8/Alma Linux 8:

sudo dnf install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo dnf -y install docker-ce docker-ce-cli containerd.io

После установки Docker необходимо проверить установку с помощью команды:

$ docker --version
Docker version 24.0.7, build afdd53b

Запустите и включите службу Docker.

sudo systemctl enable --now docker

Добавьте системного пользователя в группу docker.

sudo usermod -aG docker $USER
newgrp docker

В macOS:

brew cask install docker

Шаг 2 – Создайте постоянные тома данных Zabbix

Для того, чтобы данные Zabbix сохранялись, нам нужно создать тома для данных. Для Zabbix нам понадобятся следующие тома:

sudo mkdir /zabbix-data
sudo mkdir /zabbix-data/alertscripts
sudo mkdir /zabbix-data/externalscripts
sudo mkdir /zabbix-data/export
sudo mkdir /zabbix-data/modules
sudo mkdir /zabbix-data/enc
sudo mkdir /zabbix-data/ssh_keys
sudo mkdir /zabbix-data/mibs
sudo mkdir /zabbix-data/snmptraps
sudo mkdir -p /zabbix-nginx/nginx
sudo mkdir /zabbix-nginx/modules
sudo mkdir /zabbix-mysql

Установите правильные разрешения:

sudo chmod 777 -R /zabbix-data/
sudo chmod 777 -R /zabbix-nginx/
sudo chmod 777 /zabbix-mysql/

В системах на базе Hel отключите SELinux или установите его в разрешительный режим, как показано ниже:

sudo setenforce 0
sudo sed -i 's/^SELINUX=.*/SELINUX=permissive/g' /etc/selinux/config

Шаг 3 – Запустите Zabbix Server 6.0 LTS в контейнерах Docker

В этом руководстве мы будем запускать Zabbix с базой данных MySQL, хотя можно запустить и PostgreSQL.

У нас будут следующие контейнеры:

  • Сервер MySQL
  • Zabbix сервер – с поддержкой баз данных MySQL
  • Веб-интерфейс Zabbix – основан на веб-сервере Nginx с поддержкой базы данных MySQL
  • Zabbix прокси – с поддержкой базы данных MySQL
  • Zabbix Java Gateway

Используя docker, вы можете просто запустить контейнеры, как показано ниже:

Начните с создания выделенной сети для всех компонентов Zabbix:

docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 zabbix-net

Подтвердить, что создание прошло успешно

$ docker network list
NETWORK ID     NAME         DRIVER    SCOPE
652e3aadefbc   bridge       bridge    local
6854c55d5ecb   host         host      local
7460cfbf8c6c   none         null      local
0f1961d58b8e   zabbix-net   bridge    local
  • Контейнер сервера MYSQL

Теперь создадим контейнер базы данных MySQL для Zabbix:

docker run --name mysql-server -t \
      -e MYSQL_DATABASE="zabbixdb" \
      -e MYSQL_USER="zabbix" \
      -e MYSQL_PASSWORD="Passw0rd" \
      -e MYSQL_ROOT_PASSWORD="StrongPassword" \
      --network=zabbix-net \
      -d mysql:8.0 \
      --character-set-server=utf8 --collation-server=utf8_bin \
      --default-authentication-plugin=mysql_native_password
  • Zabbix Java шлюз

Следующим контейнером, который будет развернут, будет Zabbix Java gateway.

docker run --name zabbix-java-gateway -t \
      --network=zabbix-net \
      --restart unless-stopped \
      -d zabbix/zabbix-java-gateway:alpine-6.0-latest
  • Zabbix сервер

Разверните Zabbix сервер с поддержкой базы данных MySQL и свяжите его с созданным экземпляром MySQL. Не забудьте подставить правильные данные:

docker run --name zabbix-server-mysql -t \
      -e DB_SERVER_HOST="mysql-server" \
      -e MYSQL_DATABASE="zabbixdb" \
      -e MYSQL_USER="zabbix" \
      -e MYSQL_PASSWORD="Passw0rd" \
      -e MYSQL_ROOT_PASSWORD="StrongPassword" \
      -e ZBX_JAVAGATEWAY="zabbix-java-gateway" \
      --network=zabbix-net \
      -p 10051:10051 \
      --restart unless-stopped \
      -d zabbix/zabbix-server-mysql:alpine-6.0-latest
  • Веб-интерфейс Zabbix

Создайте веб-интерфейс Zabbix и свяжите его с созданным Zabbix сервером и MySQL.

docker run --name zabbix-web-nginx-mysql -t \
      -e ZBX_SERVER_HOST="zabbix-server-mysql" \
      -e DB_SERVER_HOST="mysql-server" \
      -e MYSQL_DATABASE="zabbixdb" \
      -e MYSQL_USER="zabbix" \
      -e MYSQL_PASSWORD="Passw0rd" \
      -e MYSQL_ROOT_PASSWORD="StrongPassword" \
      --network=zabbix-net \
      -p 80:8080 \
      --restart unless-stopped \
      -d zabbix/zabbix-web-nginx-mysql:alpine-6.0-latest

Проверьте, запущены ли контейнеры:

$ docker ps
CONTAINER ID   IMAGE                                             COMMAND                  CREATED          STATUS              PORTS                                             NAMES
81ce9d2dc99a   mysql:8.0                                        "docker-entrypoint.s…"   18 seconds ago   Up 17 seconds       3306/tcp                                          mysql-server
070f11ee0d29   zabbix/zabbix-web-nginx-mysql:alpine-6.0-latest   "docker-entrypoint.sh"   7 minutes ago    Up 7 minutes        8443/tcp, 0.0.0.0:80->8080/tcp, :::80->8080/tcp   zabbix-web-nginx-mysql
fb53558cb096   zabbix/zabbix-server-mysql:alpine-6.0-latest      "/sbin/tini -- /usr/…"   7 minutes ago    Up About a minute   0.0.0.0:10051->10051/tcp, :::10051->10051/tcp     zabbix-server-mysql
ba2f317cb29a   zabbix/zabbix-java-gateway:alpine-6.0-latest      "docker-entrypoint.s…"   7 minutes ago    Up 7 minutes        10052/tcp                                         zabbix-java-gateway

Эта служба будет доступна на хост-машине через порт 80/TCP. Теперь вы можете получить доступ к веб-интерфейсу Zabbix через порт 80.

Запустите Zabbix Server 6.0 LTS с помощью Docker Compose.

Установите Docker compose в своей системе с помощью команды:

### CentOS / RHEL ###
sudo yum -y install curl wget

### Debian / Ubuntu ###
sudo apt update
sudo apt install -y curl wget

### Fedora ###
sudo dnf -y install curl wget

Скачайте Docker Compose в Linux.

curl -s https://api.github.com/repos/docker/compose/releases/latest | grep browser_download_url  | grep docker-compose-linux-x86_64 | cut -d '"' -f 4 | wget -qi -

Сделайте двоичный файл исполняемым.

chmod +x docker-compose-linux-x86_64

Переместите файл в папку PATH.

sudo mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose

Проверьте установку.

$ docker-compose version||docker compose version
Docker Compose version v2.21.0

Создайте файл docker-compose для контейнеров:

vim docker-compose.yml

Файл будет содержать следующие строки:

version: '3.5'
services:
 mysql-server:
  image: mysql:8.0
  networks:
   - zbx_net
  command:
   - mysqld
   - --character-set-server=utf8
   - --collation-server=utf8_bin
   - --default-authentication-plugin=mysql_native_password
  environment:
   - MYSQL_USER=zabbix
   - MYSQL_DATABASE=zabbixdb
   - MYSQL_PASSWORD=PasswOrd
   - MYSQL_ROOT_PASSWORD=StrongPassword
   - ZBX_JAVAGATEWAY=zabbix-java-gateway
  volumes:
   - /zabbix-mysql:/var/lib/mysql:rw
 zabbix-server-mysql:
  image: zabbix/zabbix-server-mysql:alpine-latest
  networks:
   - zbx_net
  ports:
   - 10051:10051
  volumes:
   - /etc/localtime:/etc/localtime:ro
   - /etc/timezone:/etc/timezone:ro 
   - /zabbix-data/alertscripts:/usr/lib/zabbix/alertscripts:ro
   - /zabbix-data/externalscripts:/usr/lib/zabbix/externalscripts:ro
   - /zabbix-data/export:/var/lib/zabbix/export:rw
   - /zabbix-data/modules:/var/lib/zabbix/modules:ro
   - /zabbix-data/enc:/var/lib/zabbix/enc:ro
   - /zabbix-data/ssh_keys:/var/lib/zabbix/ssh_keys:ro
   - /zabbix-data/mibs:/var/lib/zabbix/mibs:ro
   - /zabbix-data/snmptraps:/var/lib/zabbix/snmptraps:rw
  environment:
   - DB_SERVER_HOST=mysql-server
   - MYSQL_DATABASE=zabbixdb
   - MYSQL_USER=zabbix
   - MYSQL_PASSWORD=PasswOrd
   - MYSQL_ROOT_PASSWORD=StrongPassword
   - ZBX_JAVAGATEWAY=zabbix-java-gateway

depends_on:

  • mysql-server

zabbix-web-nginx-mysql:
image: zabbix/zabbix-web-nginx-mysql:alpine-6.0-latest
networks:

  • zbx_net
    ports:
  • 80:8080
  • 443:8443
    volumes:
  • /etc/localtime:/etc/localtime:ro
  • /etc/timezone:/etc/timezone:ro
  • /zabbix-nginx/nginx:/etc/ssl/nginx:ro
  • /zabbix-nginx/modules/:/usr/share/zabbix/modules/:ro
    environment:
  • ZBX_SERVER_HOST=zabbix-server-mysql
  • DB_SERVER_HOST=mysql-server
  • MYSQL_DATABASE=zabbixdb
  • MYSQL_USER=zabbix
  • MYSQL_PASSWORD=PasswOrd
  • MYSQL_ROOT_PASSWORD=StrongPassword
    depends_on:
  • mysql-server
  • zabbix-server-mysql
    zabbix-java-gateway:
    image: zabbix/zabbix-java-gateway:alpine-6.0-latest
    networks:
  • zbx_net
    ports:
  • 10052:10052
    networks:
    zbx_net:
    driver: bridge

Удалите текущие контейнеры:

for i in mysql-server zabbix-java-gateway zabbix-server-mysql zabbix-web-nginx-mysql; do
  docker rm -f $i
done

Запустите контейнеры:

docker-compose up -d

Пример выходных данных выполнения:

[+] Running 1/1
 ⠿ zabbix-server-mysql Pulled                                                                                                                                                                    1.3s
[+] Running 5/5
 ⠿ Network rocky_zbx_net                     Created                                                                                                                                             0.1s
 ⠿ Container rocky-zabbix-java-gateway-1     Started                                                                                                                                             0.6s
 ⠿ Container rocky-mysql-server-1            Started                                                                                                                                             0.5s
 ⠿ Container rocky-zabbix-server-mysql-1     Started                                                                                                                                             1.1s
 ⠿ Container rocky-zabbix-web-nginx-mysql-1  Started                                                                                                                                             1.4s

Проверьте, запущены ли контейнеры:

$ docker-compose ps
NAME                             COMMAND                  SERVICE                  STATUS              PORTS
rocky-mysql-server-1             "docker-entrypoint.s…"   mysql-server             running             33060/tcp
rocky-zabbix-java-gateway-1      "docker-entrypoint.s…"   zabbix-java-gateway      running             0.0.0.0:10052->10052/tcp, :::10052->10052/tcp
rocky-zabbix-server-mysql-1      "/sbin/tini -- /usr/…"   zabbix-server-mysql      running             0.0.0.0:10051->10051/tcp, :::10051->10051/tcp
rocky-zabbix-web-nginx-mysql-1   "docker-entrypoint.sh"   zabbix-web-nginx-mysql   running             0.0.0.0:80->8080/tcp, 0.0.0.0:443->8443/tcp, :::80->8080/tcp, :::443->8443/tcp

Вам необходимо разрешить сервисы через брандмауэр:

##For firewalld
sudo firewall-cmd --permanent --add-port=10051/tcp
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --reload

##For UFW
sudo ufw allow 80/tcp
sudo ufw allow 10051/tcp

Шаг 4 – Доступ к веб-интерфейсу Zabbix 6.0 LTS

Веб-интерфейс Zabbix 6.0 теперь доступен на порту 80 и может быть доступен с помощью URL http://IP_address или http://domain_name

Войдите в систему, используя учетные данные по умолчанию:

Username: Admin
Password: zabbix

После успешного входа в систему вы должны увидеть панель управления ниже:

Измените пароль администратора в разделе Администрирование > Пользователи > Пароль администратора > > Изменить пароль.

После установки предпочтительного пароля нажмите кнопку «Обновить»

Шаг 5 – Настройте целевой узел сети Zabbix мониторинга.

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

##On Rhel/CentOS/Rocky Linux/Alma Linux
sudo rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/8/x86_64/zabbix-release-6.0-1.el8.noarch.rpm
sudo yum install zabbix-agent zabbix-sender -y

#Ubuntu
wget https://repo.zabbix.com/zabbix/6.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.0-1+ubuntu20.04_all.deb
sudo dpkg -i zabbix-release_6.0-1+ubuntu20.04_all.deb
sudo apt update
sudo apt install zabbix-agent zabbix-sender

#On Debian
wget https://repo.zabbix.com/zabbix/6.0/debian/pool/main/z/zabbix-release/zabbix-release_6.0-1+debian11_all.deb
sudo dpkg -i zabbix-release_6.0-1+debian11_all.deb
sudo apt update
sudo apt install zabbix-agent zabbix-sender

После установки выполните приведенную ниже настройку.

sudo vim /etc/zabbix/zabbix_agentd.conf

Отредактируйте файл, как показано ниже:

# On line 117 - Specify Zabbix server IP Address
Server=192.168.205.11

On line 158 - Specify Zabbix server ( For active checks)

ServerActive=192.168.205.11

On line 169 - Set hostname of the Zabbix agent

Hostname=agent1.example.com

Запустите и включите услугу:

sudo systemctl start zabbix-agent
sudo systemctl enable zabbix-agent

Также необходимо разрешить порт через брандмауэр:

sudo firewall-cmd --permanent --add-port=10050/tcp
sudo firewall-cmd --reload

Добавление Zabbix агента на Zabbix сервер

Zabbix агент теперь можно добавить на сервер, перейдя в Конфигурация > Узлы сети > Создать узел сети.

Вам необходимо предоставить:

  • Имя хоста Zabbix агента для мониторинга должно совпадать с именем, введенным в конфигурационный файл агента.
  • Видимое имя Zabbix агента.
  • Выберите группу или добавьте новую группу в поле «Группы».
  • IP адрес Zabbix агента
  • Порт сервиса Zabbix агента, порт по умолчанию 10050

Заполните данные, как показано ниже:

Не забудьте добавить шаблоны мониторинга в зависимости от того, что вы хотите отслеживать на агенте: Затем нажмите кнопку «Добавить», чтобы добавить агента. После добавления агент будет доступен, как показано ниже:

После добавления перейдите в раздел Мониторинг узлов > и выберите нужный узел сети для мониторинга. Затем выберите графики для просмотра данных.

На этом мы заканчиваем это руководство о том, как запустить Zabbix Server 6.0 LTS в Docker Containers. Мы также рассмотрели, как Zabbix агенты могут быть добавлены на сервер. Я надеюсь, что это существенно.