вторник, 22 октября 2019 г.

Zabbix в Docker Контейнере v2

Отличие от предыдущей версии:

  1. Использую postgresql:alpine
  2. Использую 4.4:latest zabbix-server и zabbix-web
  3. Для установки временной зоны использую монтирование в контейнер /etc/localtime и /etc/timezone
  4. Для размещения пользовательских alert скриптов монтирую в контейнер специальную папку.
Все вышеперечисленное избавляет от необходимости лезть внутрь контейнера как было описано здесь и здесь, и категорически облегчает обновление контейнеров.

Установка Docker

sudo apt install apt-transport-https ca-certificates curl software-properties-common gnupg2 -y
Добавляем Docker PGP key:

sudo curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
Добавляем стабильный docker репозиторий

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"
Ставим Docker CE
sudo apt update
sudo apt install docker-ce -y
Пробуем выполнить тестовый контейнер:
sudo docker run hello-world
Если все нормально увидим следующий вывод:
Удаляем контейнер, чтоб не болтался:
docker container rm $(docker ps -q -a)
Внимание, осторожно - будут убиты ВСЕ контейнеры(как минимум остановленные)!

Создаем ресурсы для проброса в контейнеры

mkdir /var/lib/zabbix/
cd /var/lib/zabbix/
ln -s /usr/share/zoneinfo/Europe/Kiev localtime
echo 'Europe/Kiev' > timezone
Понятное дело необходимо указать свою зону.

Создаем Docker сеть

Прочитал в документации docker, что связывание контейнеров через --link является устаревшим, поэтому попробуем связывать используя сеть Docker:
docker network create zabbix-net
docker network inspect zabbix-net
Сеть создана


Запускаем контейнер с Postgresql

docker run -d --name zabbix-postgres --network zabbix-net -v /var/lib/zabbix/timezone:/etc/timezone -v /var/lib/zabbix/localtime:/etc/localtime -e POSTGRES_PASSWORD=zabbix -e POSTGRES_USER=zabbix postgres:alpine
docker ps

Запускаем контейнер с Zabbix server

docker run --name zabbix-server --network zabbix-net -v /var/lib/zabbix/alertscripts:/usr/lib/zabbix/alertscripts -v /var/lib/zabbix/timezone:/etc/timezone -v /var/lib/zabbix/localtime:/etc/localtime -p 10051:10051 -e DB_SERVER_HOST="zabbix-postgres" -e POSTGRES_USER="zabbix" -e POSTGRES_PASSWORD="zabbix" -d zabbix/zabbix-server-pgsql:alpine-latest
docker ps

Запускаем Zabbix web server

docker run --name zabbix-web -p 80:80 -p 443:443 --network zabbix-net -e DB_SERVER_HOST="zabbix-postgres" -v /var/lib/zabbix/timezone:/etc/timezone -v /var/lib/zabbix/localtime:/etc/localtime -e POSTGRES_USER="zabbix" -e POSTGRES_PASSWORD="zabbix" -e ZBX_SERVER_HOST="zabbix-server" -e PHP_TZ="Europe/Kiev" -d zabbix/zabbix-web-nginx-pgsql:alpine-latest
docker ps

Первый вход

Подключаемся броузером к хост машине:
Вводим Логин: "Admin", пароль: "zabbix". Внимание: регистр имеет значение!
Дальнейшая настройка не входит в тему этой заметки интересующимся сюда.
P.S.
Настоятельно рекомендую с zabbix сервером использовать соответствующую ему версию клиента

13 комментариев:

  1. Больше спасибо! все получилось. А как добавить в автозагрузку?

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

    ОтветитьУдалить
  3. Подскажите, пожалуйста, на что реально влияет указание зоны для контейнеров, при передаче параметра PHP_TZ= веб-интерфейс отображает время вроде бы корректно.

    ОтветитьУдалить
    Ответы
    1. На время внутри контейнера, в случае Zabbix - на время событий в журнале, хост машина может быть в одном часовом поясе, а сервис использовать для другого разные варианты.

      Удалить
  4. Смотрите, что сделали не так: у меня год как работает скоро

    ОтветитьУдалить
  5. Подскажите, пожалуйста, сделал все ровно так же как описано в инструкции, заменив только timezone, все в статусе UP, но веб-интерфейс не запускается. По какому адресу должен быть доступен, по ip полученный zabbix-web в zabbix-net?

    ОтветитьУдалить
    Ответы
    1. docker ps должен показывать 3 работающие контейнера.
      Подключение происходит по ip хоста на котором запущены контейнеры по http или https протоколам

      Удалить
    2. После нескольких часов перекапывания интернета нашел в чем ошибка, при запуске zabbix web server у Вас указаны порты -p 80:80 -p 443:443, а внутри используются 8080 и 8443, соответственно при правильном пробросе -p 80:8080 -p 443:8443 все заработало

      Удалить
    3. Значит поменялись настройки контейнера - на момент написания все работало так как описано(собственно та установка до сих пор работает)

      Удалить
    4. Дай Бог тебе (Анонимно 4 июля 2020 г., 23:08) здоровья ) Поменял на -p 80:8080, заработало!

      Удалить
  6. день добрый а как при установленном zabbix в docker (я ставил через docker-compose на офиц сайте заббикса) как поменять значения в zabbix_server.conf я его найти вобще не могу

    ОтветитьУдалить