Уже давно назрела необходимость мониторить 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
Я, например, качаю пакет для 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
В архиве у нас имеется папка bin с утилитами zabbix_sender и zabbix_get, возможно, они нам потом пригодятся; папка sbin с агентом zabbix_agentd; папка conf с конфигурационными файлами.
Собираем VIB пакет
Формируем структуру папок, добавив /etc/zabbix/ в начало:
/etc/zabbix/sbin/zabbix_agentd
Все остальные файлы из архива тоже пригодятся.
Редактируем файл конфигурации 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_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
Для сборки нам понадобится пакет:
ESXi Community Packaging Tools 2.4
Создаём TGZ файл. Переходим в корневую папку проекта и собираем TGZ архив:
tar cvzf ../IL-zabbix-agent.tgz *
Создаём VIB файл с помощью tgz2vib5.cmd. Переходим к ESXi Community Packaging Tools 2.4. Чтобы создать файл VIB из нашего файла TGZ, запускаем tgz2vib5.cmd.
Указываем необходимые поля. Хочется отметить, то уровня community недостаточно. Устанавливаем Acceptance Level: accepted. Run!
Собран VIB файл il-zabbix-agent-1.0-0.x86_64.vib.
Создаём ZIP файл Offline Bundle с помощью tgz2vib5.cmd. В принципе, достаточно и VIB файла. Но я собираюсь сохранить пакет в архиве, ZIP для этого предпочтительнее. Чтобы создать Offline Bundle из нашего файла VIB, запускаем vib2zip.cmd:
Указываем директорий с файлом VIB, рабочую директорию. Заполняем поля, устанавливаем максимальный уровень совместимости. Run!
Offline Bundle IL-zabbix-agent-1.0-0-offline_bundle.zip собрался.
Установка Offline Bundle
Для тестирования перевожу хост в Maintenance Mode.
Копируем ZIP пакет на хост в папку /tmp.
Запускаем службу SSH на хосте, коннектимся. Проверяем содержимое папки tmp.
ZIP файл присутствует.
Устанавливаем пакет (--nosig-check нужен, поскольку мы устанавливали уровень Acceptance Level: accepted):
esxcli software vib install -d /tmp/IL-zabbix-agent-1.0-0-offline_bundle.zip --no-sig-check
Перезагружаем хост.
Проверим установку пакетов:
esxcli software vib list | grep zabbix
/etc/init.d/zabbix_agentd status
Все нужные пакеты установлены. Агент запущен.
esxcli network ip connection list | grep :10050
Пока писал статью, пришлось переделать пакет несколько раз, так что версия на картинках может "гулять". Пакет не выкладываю, ибо нужно делать сборку пот персональные адреса сервера Zabbix, вам придётся собрать свой VIB пакет.
Мониторинг ESXi
Давайте что-нибудь помониторим. На основе шаблона для Linux сделал небольшой шаблон для ESXi 7, для мониторинга стандартных элементов данных, которые заработали "из коробки".
Работает. Дальше только модифицировать пакет для мониторинга необходимых данных.
Билди с нами, билди как мы, билди лучше нас...