Привет, Хабр! На связи Александр Воронцов, технический специалист компании Cloud4Y. Сегодня я расскажу, как можно настроить получение в Zabbix метрик СУБД PostgreSQL, используемой в VMware Cloud Director и vCenter Server Appliance.
Кое-что вы уже могли читать на Хабре. Я хочу структурировать информацию и более подробно описать тонкости процесса.
Процесс настройки для vCenter и Cloud Director буду описывать параллельно, потому что последовательность действий для настройки одинаковая, отличия в деталях.
Показывать буду на примере:
vCenter Server Appliance 6.7 U3 (Photon OS 1.0)
VMware Cloud Director 10.2 (Photon OS 2.0)
Zabbix 5.0 LTS
Zabbix Agent (не Zabbix Agent 2)
Официальный шаблон мониторинга PostgreSQL
Дистрибутив Zabbix Agent для PhotonOS
Zabbix Agent для PhotonOS можно собрать самостоятельно из исходников, но мы возьмём уже собранный "дистрибутив" (вопрос безопасности использования чужих бинарников с гитхаба обойду стороной. Как я уже сказал, всегда можно собрать из исходников самому).
Установка Zabbix Agent
Нам понадобятся:
zabbix_agentd
zabbix_get
zabbix_sender
zabbix_agentd.conf
Создаём каталоги:
/etc/zabbix
/etc/zabbix/zabbix_agent.d.d
/var/log/zabbix
С помощью, например, WinSCP, копируем бинарные файлы в /usr/bin, файл конфигурации в /etc/zabbix. Файл конфигурации заполняем "классическим способом".
Примечание: vCenter и Cloud Director будут удалять каталог /var/run/zabbix при каждой перезагрузке, потому PID файл нужно расположить в другом месте, например /tmp/zabbix.pid
Создаём System.d Unit для работы Zabbix Agent в качестве системного сервиса:
Unit разместим по пути /usr/lib/systemd/system/zabbix-agent.service, со следующим содержимым:
#/usr/lib/systemd/system/zabbix-agent.service
[Unit]
Description=Zabbix Agent
Documentation=man:zabbix_agentd
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/zabbix_agentd -f -c /etc/zabbix/zabbix_agentd.conf
Restart=always
RestartSec=5s
[Install]
WantedBy=multi-user.target
Для запуска Zabbix Agent выполняем:
systemctl daemon-reload
systemctl enable zabbix-agent
systemctl restart zabbix-agent
Настройка Firewall
Для Cloud Director
Открываем /etc/systemd/scripts/ip4save-vmw
Добавляем в начало файла
-A INPUT -p tcp -m state --state NEW -m tcp --dport 10050 -j ACCEPT
Для vCenter Server Appliance
Открываем /etc/vmware/appliance/services.conf
В конце файла добавляем вставку по аналогии с другими, не ломая исходное форматирование:
"zabbix-agent": {
"firewall": {
"enable": true,
"rules": [
{
"direction": "inbound",
"protocol": "tcp",
"porttype": "dst",
"port": "10050",
"portoffset": 0
}
]
}
}
Пример на скриншоте
Как разрешить доступ Zabbix к PostgreSQL
Будем следовать официальному мануалу для Zabbix Agent (не Zabbix Agent 2). Переписывать мануал я не буду, но прокомментирую неочевидные моменты:
На шаге 1: vCenter использует версию PostgreSQL 9.6.20, Cloud Director — версию 10.12. Для них нужно выполнять разные команды для создания пользователя zbx_monitor.
На шаге 4: Нужно отредактировать pg_hba.conf для доступа Zabbix Agent к PostgreSQL, добавив строку host all zbx_monitor 127.0.0.1/32 trust
вверху списка правил IPv4 local connections:
Для Cloud Director
Нужно вносить изменения в /opt/vmware/appliance/etc/base_pg_hba.conf.
Для vCenter Server Appliance
Нужно вносить изменения в /storage/db/vpostgres/pg_hba.conf.
На шаге 6: Ничего делать не нужно в случае размещения Zabbix Agent и PostgreSQL на одном хосте (как в нашем примере).
После завершения настройки по мануалу, выполняем перезагрузку VMware Cloud Director и vCenter Server Appliance и проверяем доступность Zabbix Agent из Zabbix.
Результат
После проведения всех манипуляций по настройке получим нечто подобное:
Дебаг
Если у вас что-то не работает, то вот несколько вариантов решения проблемы:
Не запускается Zabbix Agent:
Выполните systemctl status zabbix-agent
. Если агент не стартует, попробуйте запустить его из консоли командой /usr/bin/zabbix_agentd -f -c /etc/zabbix/zabbix_agentd.conf
, посмотрите ошибку в выводе на экран.
Zabbix Agent недоступен по сети:
Проверьте, слушает ли агент порт 10050/tcp : netstat -tulpn | grep zabbix
Проверьте, что порт 10050/tcp открыт на Firewall: iptables -L
Проверьте, что разрешающее правило находится в цепочке INPUT
Спасибо за внимание!