Перейти к основному содержанию

Собираем VIB пакет Zabbix Agent

internet-lab.ru

Уже давно назрела необходимость мониторить ESXi через Zabbix. Конечная цель — мониторить диски, подключенные к RAID контроллерам, но сначала просто попробуем собрать VIB пакет Zabbix Agent с метриками по умолчанию. Очень странно, что Zabbix не выпускает собственные VIB пакеты для ESXi, попробуем сделать сами.

Работать будем с ESXi 7.0.3.

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

  • Входящее на TCP 10050
  • Исходящее на TCP 10051

С портами и Firewall я недавно разобрался, написал свой отдельный VIB пакет:

ESXi 7.0 Firewall — добавляем правила для Zabbix Agent

Пакет я назвал fw-zabbix-agent. Скачать его можно в Сборке для VMware. Пакет добавляет два правила firewall, которые нужны для работы LSA. Устанавливаем и включаем правила.

Осталось подготовить VIB пакет для установки самого агента, поехали. Я работаю и в Linux и в Windows, с помощью WSL2. TAR пакет удобно в Linux собирать. А VIB пакет уже в Windows.

Дистрибутив Zabbix Agent

Скачиваем готовый бинарник.

https://www.zabbix.com/download_agents

zabbix

Я, например, качаю пакет для Linux версии 3.0 amd64 для Zabbix 5.0 LTS.

zabbix_agent-5.0.37-linux-3.0-amd64-static.tar.gz

Подготовка VIB пакета

Распакуем.

gunzip zabbix_agent-5.0.37-linux-3.0-amd64-static.tar.gz
tar -xvf zabbix_agent-5.0.37-linux-3.0-amd64-static.tar

zabbix

В архиве у нас имеется папка bin с утилитами zabbix_sender и zabbix_get, возможно, они нам потом пригодятся; папка sbin с агентом zabbix_agentd; папка conf с конфигурационными файлами.

Собираем VIB пакет

Формируем структуру папок, добавив /etc/zabbix/ в начало:

/etc/zabbix/sbin/zabbix_agentd

Все остальные файлы из архива тоже пригодятся.

zabbix

Редактируем файл конфигурации zabbix_agentd.conf. Я собираюсь один пакет раскатать потом на много серверов, не хочется для каждого хоста собирать новый пакет, поэтому конфигурационный файл должен быть универсальным.

Пришлось почитать мануал и придумать способ динамически указывать Hostname.

Zabbix Agent — динамический Hostname

### Option: Hostname
#       Unique, case sensitive hostname.
#       Required for active checks and must match hostname as configured on the server.
#       Value is acquired from HostnameItem if undefined.
#
# Mandatory: no
# Default:
# Hostname=

### Option: HostnameItem
#       Item used for generating Hostname if it is undefined. Ignored if Hostname is defined.
#       Does not support UserParameters or aliases.
#
# Mandatory: no
# Default:
# HostnameItem=system.hostname

HostnameItem=system.run["echo ESXi $HOSTNAME"]

Каждый хост теперь будет носить уникальное имя вида "ESXi host1.domain.local".

Указываем IP адрес сервера Zabbix, этот параметр у меня одинаковый для всех хостов:

Server=10.12.13.14
ServerActive=10.12.13.14

Отмечу важные параметры, которые уже установлены по умолчанию, их не меняем:

PidFile=/tmp/zabbix_agentd.pid
LogFile=/tmp/zabbix_agentd.log

Добавляю таймаут:

Timeout=30

У нас в ESXi пользователь root:

AllowRoot=1
User=root

Для проверки работы агента этого достаточно. Остальные настройки не трогаю.

Теперь настроим автозагрузку агента. Создаём путь /etc/init.d/zabbix_agentd.

cd ./etc
mkdir init.d
cd ./init.d/
touch zabbix_agentd
chmod 555 ./zabbix_agentd

zabbix

Содержимое zabbix_agentd накидал на коленке:

#! /bin/sh
### BEGIN INIT INFO
# Provides:          zabbix-agent
# Short-Description: Start zabbix-agent daemon
# Description: internet-lab.ru
### END INIT INFO

set -e

DIRA=/etc/zabbix/sbin
DIRC=/etc/zabbix/conf

NAME=zabbix_agentd
NAMEC=zabbix_agentd.conf

DAEMON=$DIRA/$NAME
DESC="Zabbix Agent"

test -x $DAEMON || exit 0

DIR=/tmp
PID=$DIR/$NAME.pid
RETRY=15

export PATH="${PATH:+$PATH:}$DIRA"

#
# Log action
#
ZBXA_log() {
   echo "${1}"
   logger Zabbix Agent: "${1}"
}

case "$1" in
  start)
    ZBXA_log "Starting $DESC" "$NAME"
    if [ -n "$(pidof -xs "${DAEMON}")" ] ; then
      ZBXA_log "Zabbix Agent is already running"
    else
      $DAEMON -c $DIRC/$NAMEC
    fi    
    ;;
  stop)
    if [ -z "$(pidof -xs "${DAEMON}")" ] ; then
      ZBXA_log "Zabbix Agent is already stopped"
    else
      pkill $NAME
    fi
    ZBXA_log "Stopping Zabbix Agent"
    sleep 1 
    [ -z "$(pidof -xs "${DAEMON}")" ]
    ;;
  status)
    if [ -n "$(pidof -xs "${DAEMON}")" ] ; then
      echo "Zabbix Agent is running"
      exit 0
    else
      echo "Zabbix Agent is not running"
      exit 3
    fi
   ;;
  restart|force-reload)
    $0 stop
    while [ -n "$(pidof -xs "${DAEMON}")" ] ; do
      sleep 1
    done
    $0 start
    ;;
  *)
    echo "Usage: $0 {start|stop|restart|force-reload}" >&2
    exit 1
    ;;
esac

exit 0

Дадим права. Службы в ESXi запускаются в песочнице, нужен пинок. Создаём путь /etc/vmware/secpolicy/tardisks/zabbix_agent с содержимым:

-E unlabeled superDom

zabbix

Для сборки нам понадобится пакет:

ESXi Community Packaging Tools 2.4

Создаём TGZ файл. Переходим в корневую папку проекта и собираем TGZ архив:

tar cvzf ../IL-zabbix-agent.tgz *

zabbix

Создаём VIB файл с помощью tgz2vib5.cmd. Переходим к ESXi Community Packaging Tools 2.4. Чтобы создать файл VIB из нашего файла TGZ, запускаем tgz2vib5.cmd.

zabbix

Указываем необходимые поля. Хочется отметить, то уровня community недостаточно. Устанавливаем Acceptance Level: accepted. Run!

zabbix

Собран VIB файл il-zabbix-agent-1.0-0.x86_64.vib.

zabbix

Создаём ZIP файл Offline Bundle с помощью tgz2vib5.cmd. В принципе, достаточно и VIB файла. Но я собираюсь сохранить пакет в архиве, ZIP для этого предпочтительнее. Чтобы создать Offline Bundle из нашего файла VIB, запускаем vib2zip.cmd:

zabbix

Указываем директорий с файлом VIB, рабочую директорию. Заполняем поля, устанавливаем максимальный уровень совместимости. Run!

zabbix

Offline Bundle IL-zabbix-agent-1.0-0-offline_bundle.zip собрался.

zabbix

Установка Offline Bundle

Для тестирования перевожу хост в Maintenance Mode.

Как установить VIB пакет

Копируем ZIP пакет на хост в папку /tmp.

zabbix

Запускаем службу SSH на хосте, коннектимся. Проверяем содержимое папки tmp.

zabbix

ZIP файл присутствует.

Устанавливаем пакет (--nosig-check нужен, поскольку мы устанавливали уровень Acceptance Level: accepted):

esxcli software vib install -d /tmp/IL-zabbix-agent-1.0-0-offline_bundle.zip --no-sig-check

zabbix

Перезагружаем хост.

Проверим установку пакетов:

esxcli software vib list | grep zabbix
/etc/init.d/zabbix_agentd status

zabbix

Все нужные пакеты установлены. Агент запущен.

esxcli network ip connection list | grep :10050

zabbix

Пока писал статью, пришлось переделать пакет несколько раз, так что версия на картинках может "гулять". Пакет не выкладываю, ибо нужно делать сборку пот персональные адреса сервера Zabbix, вам придётся собрать свой VIB пакет.

Мониторинг ESXi

Давайте что-нибудь помониторим. На основе шаблона для Linux сделал небольшой шаблон для ESXi 7, для мониторинга стандартных элементов данных, которые заработали "из коробки".

zbx5_ESXi7.xml

zabbix

Работает. Дальше только модифицировать пакет для мониторинга необходимых данных.

Билди с нами, билди как мы, билди лучше нас...

 

Похожие материалы